Ви можете визначити природу виконуваного файлу в 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