Você pode determinar a natureza de um executável no Unix usando o file
comando e o type
comando
tipo
Você usa type
para determinar a localização de um executável no disco da seguinte maneira:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Então agora eu sei que ls
está localizado aqui no meu sistema em 2 locais: /usr/bin/ls
& /bin/ls
. Olhando para esses executáveis, vejo que 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
NOTA: Você pode confirmar que eles são idênticos além dos tamanhos usando cmp
ou diff
.
com diff
$ 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 arquivo
Se eu consultá-los usando o file
comando:
$ 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 a partir do C / C ++. Se fossem scripts de shell, eles normalmente apresentariam assim file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
O que é ELF?
ELF é um formato de arquivo , é a saída de um compilador como gcc
, que é usado para compilar programas C / C ++ como ls
.
Na computação, o Executable and Linkable Format (ELF, anteriormente chamado Extensible Linking Format) é um formato de arquivo padrão comum para executáveis, código de objeto, bibliotecas compartilhadas e dumps principais.
Normalmente, ele possui uma das seguintes extensões no nome do arquivo: none, .o, .so, .elf, .prx, .puff, .bin