Вы можете определить природу исполняемого файла в Unix, используя file
команду и type
команду.
тип
Вы используете, type
чтобы определить местоположение исполняемого файла на диске следующим образом:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Итак, теперь я знаю, что ls
находится здесь, в моей системе в 2 местах: /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 ++. Если бы они были сценариями оболочки, они обычно представлялись бы так 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