Что означает «магические тесты» для команды file?

20

Я читал о fileкоманде, и я наткнулся на то, что я не совсем понимаю:

файл предназначен для определения типа запрашиваемого файла .... файл выполняет это, выполняя три набора тестов для рассматриваемого файла:

  • тесты файловой системы,
  • магические тесты,
  • языковые тесты

Какие магические тесты?

Абденнур ТУМИ
источник

Ответы:

15

Это относится к «магическим байтам», которые есть во многих форматах файлов в начале файла и которые показывают, что это за файл.

Например, если файл начинается с, #!то он считается сценарием.

Хауке Лагинг
источник
28

«магия» здесь относится к « магическим числам »: специальное значение, которое находится в известном месте в файле и идентифицирует его тип. У fileкоманды есть база данных этих номеров и их типу. Библиотека, которая идет с этой базой данных, называется libmagic , и вы можете получить к ней доступ из своих собственных программ.

Они не обязательно "числа", как мы могли бы думать о них. Например, файл изображения PNG всегда начинается с «\ x89PNG \ r \ n \ x1a \ n», класс Java начинается с четырех байтов (в шестнадцатеричном формате) CA FE BA BE, а файл HTML где-то содержит «<html» близко к началу Это просто небольшая последовательность данных, которая, как известно, находится в файле такого типа, обычно очень близко к началу.

Когда люди определяют форматы файлов, они часто включают один из них в него либо намеренно, либо просто как часть согласования формата. fileможно использовать их потом. У него также есть другие способы реального просмотра содержимого файла, чтобы угадать, что это такое («языковые тесты»).

Майкл Гомер
источник
6
Обратите внимание, что первоначально «магическими числами» были, в частности, первые два байта исполняемого файла, используемые ядром для его загрузки соответствующим образом. #!на самом деле является примером этого, потому что само ядро, увидев эти байты, должно вызывать следующую команду.
IMSoP