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