$ ls -l /usr/bin
total 200732
-rwxr-xr-x 1 root root 156344 Oct 4 2013 adb
-rwxr-xr-x 1 root root 6123 Oct 8 2013 add-apt-repository
list goes long ---------
В приведенном выше adb - двоичный файл, а add-apt-repository - файл сценария. Я получаю эту информацию, просматривая файлы через nautilus. Но через командную строку я не нашел различий. я не могу предсказать, является ли файл двоичным файлом или файлом сценария.
Итак, как я могу различать скрипт и двоичные файлы через командную строку?
На самом деле различия между ними не так уж велики.
В типичной системе Unix или Linux существует менее пяти реальных исполняемых файлов. На Ubuntu это /lib/ld-linux.so.2 и /sbin/ldconfig.
Все остальное, которое помечено как исполняемое, запускается через интерпретатор, для которого поддерживаются два формата:
Файлы, начинающиеся с [ f3] будет иметь имя интерпретатора между этим и первым символом новой строки (это верно, нет требования, чтобы «скрипты» были текстовыми файлами). У файлов ELF есть сегмент PT_INTERP, который дает путь к интерпретатору (обычно /lib/ld-linux.so.2).Когда такой файл выполняется, ядро находит имя интерпретатора и называет его. Это может произойти рекурсивно, например, при запуске сценария оболочки:
Файлы, начинающиеся с #!, будут иметь имя интерпретатора между этим и первым символом новой строки (это верно, нет требования что «скрипты» являются текстовыми файлами). Ядро открывается /bin/sh, находит сегмент PT_INTERP, указывающий на /lib/ld-linux.so.2. Файлы ELF имеют сегмент PT_INTERP, который дает путь к интерпретатору (обычно /lib/ld-linux.so.2). ld-linux.so.2 загружает сегменты кода из /bin/sh, разрешает ссылки на разделяемую библиотеку и запускает свою основную функцию /bin/sh затем снова откроет файл сценария и начнет интерпретировать его по строкам.С точки зрения ядра, единственное различие заключается в том, что для файла ELF передается дескриптор открытого файла, а не имя файла; это в основном оптимизация. Если интерпретатор затем решает перейти к сегменту кода, загруженному из файла, или интерпретировать его по строкам, решает только интерпретатор и в основном основан на соглашении.
Файловая команда замечательная, но для более профессионального инструмента анализа я бы хотел попробовать попробовать TrID-пакет, который является инструментом File Identifier.
Файл - это утилита, предназначенная для идентифицировать типы файлов из их двоичных подписей и их простоту использования.
Для получения дополнительной информации и пакета просто посетите сайт: