Answers:
您可以使用和file
命令确定Unix中可执行文件的性质type
。
您可以type
像这样确定可执行文件在磁盘上的位置:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
因此,我现在知道它ls
位于系统上的两个位置:/usr/bin/ls
&/bin/ls
。查看这些可执行文件,我可以看到它们是相同的:
$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls
注意:您可以使用cmp
或确认其大小相同diff
。
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
与cmp
$ cmp /usr/bin/ls /bin/ls
$
如果我使用file
命令查询它们:
$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
因此,这些都是从C / C ++编译的实际物理程序。如果它们是shell脚本,则通常会这样显示file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
ELF是一种文件格式,它是诸如的编译器的输出,gcc
用于编译C / C ++程序(如)ls
。
在计算中,可执行和可链接格式(ELF,以前称为可扩展链接格式)是可执行文件,目标代码,共享库和核心转储的通用标准文件格式。
它通常在文件名中具有以下扩展名之一:none,.o,.so,.elf,.prx,.puff,.bin
type
在您愿意使用which
或的任何地方使用whereis
。
md5sum
或的工具sha1sum
,而不仅仅是检查文件的大小和时间。
coreutils-8.21-13.fc19.x86_64
我只是从处理Red Hat版本的20年中就知道它们是相同的。
它是一个二进制可执行文件(像大多数系统一样,被编译为机器代码)。Shell脚本更像是将各个部分结合在一起的“胶水”,以便根据现有内容快速灵活地创建解决方案。这就是* nix的力量。
您需要源代码(* nix上最常用的语言是c,有时甚至是c ++),而不仅仅是编译的可执行文件。由于它是开源的,因此您可以从在线存储库获取所有代码(核心实用程序通常来自gnu项目)。但是,如果您不知道如何使用git或其他版本跟踪系统,这将有些棘手。
这是ls.c文件(如果有帮助的话):http ://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c