Как найти разницу между файлом сценария и двоичным файлом?

$ 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. Но через командную строку я не нашел различий. я не могу предсказать, является ли файл двоичным файлом или файлом сценария.

Итак, как я могу различать скрипт и двоичные файлы через командную строку?

1
задан 18 April 2014 в 23:40

2 ответа

На самом деле различия между ними не так уж велики.

В типичной системе 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 передается дескриптор открытого файла, а не имя файла; это в основном оптимизация. Если интерпретатор затем решает перейти к сегменту кода, загруженному из файла, или интерпретировать его по строкам, решает только интерпретатор и в основном основан на соглашении.

5
ответ дан 24 May 2018 в 09:30

Файловая команда замечательная, но для более профессионального инструмента анализа я бы хотел попробовать попробовать TrID-пакет, который является инструментом File Identifier.

Файл - это утилита, предназначенная для идентифицировать типы файлов из их двоичных подписей и их простоту использования.

Для получения дополнительной информации и пакета просто посетите сайт:

1
ответ дан 24 May 2018 в 09:30

Другие вопросы по тегам:

Похожие вопросы: