Що означає "магічні тести" для команди файлів?


20

Я читав про fileкоманду і натрапив на щось, чого я не зовсім розумію:

Файл призначений для визначення типу файлу, який запитується .... файл виконує це, виконавши три набори тестів у відповідному файлі:

  • тести файлової системи,
  • магічні тести,
  • мовні тести

Що таке магічні тести?

Відповіді:


15

Це стосується "магічних байтів", які мають багато формати файлів на початку файлу, які показують, що це за файл.

Наприклад, якщо файл починається з #!цього, він вважається сценарієм.


28

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

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

Коли люди визначають формати файлів, вони часто включають один із них у нього навмисно або просто як частину приведення формату між собою. fileможе використовувати їх згодом. Також у нього є інші способи реального перегляду вмісту файлу, щоб здогадатися, що це таке ("мовні тести").


6
Зауважимо, що спочатку "магічні числа", зокрема, були першими двома байтами виконуваного файлу, використовуваного ядром для завантаження його відповідним чином. #!насправді є прикладом цього, тому що саме ядро, побачивши ці байти, повинно викликати наступну команду.
IMSoP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.