/usr/share/misc/magic
Файл
определения типов для команды file (UNIX)
Имя
/usr/share/misc/magic
Описание:
Команда
file
позволяет определить тип файла посредством проверки
соответствия начальных символов файла определенному "магическому"
числу (помимо прочих
проверок). В файле /usr/share/misc/magic
указаны "магические" числа для проверки, сообщение, которое
будет выведено в случае обнаружения конкретного
"магического" числа, а также дополнительная информация,
извлекаемая из файла.
В
каждой строке файла указана проверка, которую требуется
выполнить. При проверке выполняется сопоставление данных,
начинающихся с определенного смещения в файле, с 1-, 2- или
4-байтовым числовым значением или строкой. В случае
успешного выполнения проверки выводится сообщение. Строка
состоит из следующих полей:
смещение
Число,
определяющее смещение в байтах в проверяемом файле данных.
тип
Проверяемый тип
данных. Возможные значения:
byte
Однобайтовое
значение.
short
Двухбайтовое
значение (в большинстве систем) с специфичным для машины
порядком байтов.
long
Четырехбайтовое
значение (в большинстве систем) с специфичным для машины
порядком байтов.
string
Строка байтов.
date
Четырехбайтовое
значение, интерпретируемое как дата UNIX.
beshort
Двухбайтовое
значение (в большинстве систем) с обратным порядком байтов.
belong
Четырехбайтовое
значение (в большинстве систем) с обратным порядком байтов.
bedate
Четырехбайтовое
значение (в большинстве систем) с обратным порядком байтов,
интерпретируемое как дата UNIX.
leshort
Двухбайтовое
значение (в большинстве систем) с прямым порядком байтов.
lelong
Четырехбайтовое
значение (в большинстве систем) с прямым порядком байтов.
ledate
Четырехбайтовое
значение (в большинстве систем) с прямым порядком байтов,
интерпретируемое как дата UNIX.
После
числовых типов может следовать символ & и
числовое значение. Это значит, что перед сопоставлением к
значению следует присоединить числовое значение. Значение u перед
типом указывает, что сопоставления порядков должны быть
беззнаковыми.
проверка
Значение,
сравниваемое со значением из файла. Если значение тип
является числом, это значение указывается в формате языка C;
если это строка, она
определяется как строка C с возможностью использования
обычных управляющих последовательностей (например, символ \n для
обозначения новой строки).
Перед
числовыми значениями может стоять символ, определяющий
выполняемую операцию:
-
= –
значение из файла должно совпадать с указанным
значением;
-
< –
значение из файла должно быть меньше указанного
значения;
-
> –
значение из файла должно быть больше указанного
значения;
-
& –
для значения из файла должны быть установлены все биты,
установленные в указанном значении;
-
^ –
значение из файла не должно содержать биты,
установленные в указанном значении;
-
x –
подходит любое значение.
Если символ не
указан, автоматически подставляется =.
Числовые
значения
устанавливаются
в формате C, например, 13
является десятичным числом, 013 –
восьмеричным, а 0x13 –
шестнадцатеричным.
Для
строковых значений строка байтов из файла должна совпадать с
указанной строкой байтов. К строкам могут быть применены
операторы =, < и > (но не
&).
Длина строки для сопоставления соответствует значению
строкового аргумента в файле /usr/share/misc/magic. Это
означает, что строка может соответствовать любой строке,
затем эта строка будет выведена путем выполнения >\0
(поскольку все строки больше нулевой строки).
сообщение
Сообщение,
выводимое в случае успешного завершения сравнения. Если в
строке содержится спецификация формата printf(), то
значение из файла (если выполнены все указанные операции
маскирования) будет выведено с использованием значения сообщение
в качестве строки формата.
Некоторые
форматы
файлов
включают дополнительную информацию, которая выводится вместе
с типом файла. В строке, которая начинается с символа >,
определяются дополнительные проверки и выводимые сообщения.
Число символов > в
строке обозначает уровень проверки. Строка, в начале которой
отсутствуют символы >,
относится к уровню 0. Каждая строка на уровне n+1
подчиняется строке на уровне n,
наиболее близкой к ней в файле определения типов.
При
успешном выполнении проверки строки на уровне n
выполняются проверки, указанные во всех последующих строках
на уровне n+1. При успешном выполнении выводятся
соответствующие сообщения. Процедура завершается следующей
строкой на уровне n.
Если
первым символом после последнего знака >
является (, то
следующая за круглой скобкой строка интерпретируется как
непрямое смещение. Это означает, что число после круглой
скобки используется в качестве смещения в файле. Значение
при этом смещении считывается и снова используется как
смещение в файле. Для непрямых смещений используется
следующий формат: ((x[.[bsl]][+-][y]). В
качестве смещения в файле используется значение x. При
смещении считывается короткий или длинный байт в зависимости
от спецификатора типа [bsl]. К
этому номеру добавляется значение y, а
результат используется в качестве смещения в файле. Если тип
не указан, по умолчанию используется длинное значение.
Предупреждения:
Использование
форматов long, belong, lelong, short, beshort, leshort, date, bedate и ledate
зависит от особенностей системы. Может потребоваться указать
формат в виде числа байтов (2B, 4B и т.д.), т.к.
распознаваемые файлы обычно передаются из системы, в которой
эта длина является неизменяемой величиной.
В
настоящее время данные с указанным порядком байтов при
непрямом смещении не поддерживаются.