Você pode determinar a natureza de um executável no Unix usando o comando file
e o comando type
.
tipo
Você usa type
para determinar a localização de um executável no disco da seguinte forma:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Agora, sei que ls
está localizado aqui no meu sistema em dois locais: /usr/bin/ls
& %código%. Olhando para esses executáveis eu posso ver que eles são idênticos:
$ 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
OBSERVAÇÃO: você pode confirmar que eles são idênticos além de seus tamanhos usando /bin/ls
ou cmp
.
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
com cmp
$ cmp /usr/bin/ls /bin/ls
$
Usando o arquivo
Se eu os consultar usando o comando diff
:
$ 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
Portanto, esses seriam programas físicos reais que foram compilados do C / C ++. Se eles fossem scripts de shell, eles normalmente apresentariam assim para file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
O que é o ELF?
ELF é um formato de arquivo , é a saída de um compilador como file
, que é usado para compilar programas C / C ++, como gcc
.
In computing, the Executable and Linkable Format (ELF, formerly called Extensible Linking Format) is a common standard file format for executables, object code, shared libraries, and core dumps.
Normalmente, ela terá uma das seguintes extensões no nome do arquivo: none, .o, .so, .elf, .prx, .puff, .bin