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