Ви можете визначити природу виконуваного файлу в Unix, використовуючи file
команду та 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 ++. Якщо вони були скриптами оболонки, вони зазвичай подавались так file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
Що ELF?
ELF - це формат файлу , це вихід такого компілятора, як gcc
, який використовується для компіляції програм C / C ++, таких як ls
.
У обчислювальній системі виконуваний та пов'язаний формат (ELF, який раніше називався "Розширюваний формат зв'язування") - це загальний стандартний формат файлів для виконуваних файлів, об'єктного коду, спільних бібліотек та основних скидів.
Зазвичай він матиме одне з наступних розширень у назві файлу: none, .o, .so, .elf, .prx, .puff, .bin