
- •Отчёт о лабораторной работе №2
- •1. Типы файлов
- •2. Жёсткие ссылки
- •3. Команда find
- •4. Команда od
- •5. Файлы /etc/passwd, /etc/shadow и утилита /usr/bin/passwd
- •6. Изменение прав доступа и владельца
- •7. Программа-шлюз
- •8. Утилита df
- •9. Способы формирования ссылок
- •10. Утилита file
- •11. Минимальные права доступа необходимые для выполнения наиболее часто используемых операций:
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 текст, и никаких магических чисел там нет.