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

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

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

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

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

Чтомагиятесты?

решение1

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

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

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

решение2

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

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

Связанный контент