Puede determinar la naturaleza de un ejecutable en Unix utilizando el file
comando y el type
comando.
tipo
Se usa type
para determinar la ubicación de un ejecutable en el disco de la siguiente manera:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Así que ahora sé que ls
se encuentra aquí en mi sistema en 2 ubicaciones: /usr/bin/ls
& /bin/ls
. Mirando esos ejecutables puedo ver que son 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: Puede confirmar que son idénticos más allá de sus tamaños usando cmp
o diff
.
con diff
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
con cmp
$ cmp /usr/bin/ls /bin/ls
$
Usando archivo
Si los consulto con el 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
Por lo tanto, estos serían programas físicos reales que se han compilado de C / C ++. Si fueran scripts de shell, normalmente se presentarían así a file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
¿Qué es ELF?
ELF es un formato de archivo , es la salida de un compilador como gcc
, que se utiliza para compilar programas C / C ++ como ls
.
En informática, el formato ejecutable y enlazable (ELF, anteriormente llamado formato de enlace extensible) es un formato de archivo estándar común para ejecutables, código de objeto, bibliotecas compartidas y volcados de núcleo.
Normalmente tendrá una de las siguientes extensiones en el nombre de archivo: none, .o, .so, .elf, .prx, .puff, .bin