Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО отчёт №2.docx
Скачиваний:
39
Добавлен:
16.04.2015
Размер:
60.58 Кб
Скачать

10. Утилита file

Определяет тип файла. Для этого она выполняет разные тесты, которые можно разделить на 3 группы:

  • Filesystem tests – основаны на анализе кода возврата системного вызова stat(). Программа проверяет не пустой ли файл, и не принадлежит ли он к одному из специальных типов файлов. Все известные типы файлов распознаются, если они определены в системном файле /usr/include/sys/stat.h.

  • Magic number tests – используются для проверки файлов, данные в которых записаны в определённом формате. В определённом месте в начале таких файлов записано магическое число, которое позволяет ОС определить тип файла. Все известные ОС магические числа по умолчанию хранятся в файле /usr/share/misc/magic.

  • Language tests – используются для анализа языка, на котором написан файл, если это файл в формате ASCII. Выполняется поиск стандартных строк, которые могут соответствовать определённому языку.

Первый тест, который завершится успешно, выводит тип файла. Типы файлов можно разделить на 3 основные группы:

  • Текстовые – файл содержит только ASCII символы и может быть безопасно прочитан на терминале.

  • Исполняемые – файл содержит результаты компилирования программы в форме понятной ядру ОС.

  • Данные – всё, что не подходит в первые 2 группы (обычно это бинарные или непечатаемые файлы). Исключение составляют well-known форматы, используемые для хранения бинарных данных.

Синтаксис:

file [-bcLnvz] [-f namefile] [-m magicfile] file ...

Опции:

  • -b – не выводить имя файла перед его типом;

  • -m magicfile – определяет альтернативный файл с магическими числами;

  • -с – обычно используется для дебага нового файла с магическими числами перед его использованием;

  • -f namefile – определить типы файлов, имена которых записаны в файле namefile;

  • -L – определять типы файлов, на которые ссылаются заданные символические ссылки, а не типы ссылок;

  • -n – выводить имя файла перед его типом (по умолчанию);

  • -v – вывести версию программы и выйти;

  • -z – пытаться смотреть внутри сжатых файлов.

Посмотрим, как выглядят дампы памяти файлов разных типов:

# file gateway

gateway: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

# od -t c gateway | head -n 2

0000000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0

0000000020 002 \0 003 \0 001 \0 \0 \0 \0 004 004 \b 4 \0 \0 \0

# file ../Lab1/prog1

../Lab1/prog1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

# od -t c ../Lab1/prog1 | head -n 2

0000000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0

0000000020 002 \0 003 \0 001 \0 \0 \0 130 003 004 \b 4 \0 \0 \0

# file filetypes.txt

filetypes.txt: ASCII text

# od -t c filetypes.txt

0000000000 E x i s t i n g 040 t y p e s 040 o

0000000020 f 040 f i l e s 040 o n 040 t h i s 040

0000000040 c o m p u t e r : 040 - 040 b 040 c 040

0000000060 d 040 l 040 n 040 s \n

0000000070

Если сравнить дампы памяти двух разных исполняемых файлов, то можно увидеть, что первые байты в них совпадают. Именно в них и записано магическое число. В дампе памяти обычного текстового файла содержится только ASCII текст, и никаких магических чисел там нет.