/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 для обозначения новой строки).

Перед числовыми значениями может стоять символ, определяющий выполняемую операцию:
Если символ не указан, автоматически подставляется =.

Числовые значения устанавливаются в формате 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 и т.д.), т.к. распознаваемые файлы обычно передаются из системы, в которой эта длина является неизменяемой величиной.

В настоящее время данные с указанным порядком байтов при непрямом смещении не поддерживаются.