file
використовує кілька видів тесту :
1: Якщо файл не існує, його неможливо прочитати, або його стан файлу не вдалося визначити, вихід повинен вказувати на те, що файл був оброблений, але його тип неможливо визначити.
Це буде як результат cannot open file: No such file or directory
.
2: Якщо файл не є звичайним файлом, слід визначити його тип файлу. Каталог типів файлів, FIFO, сокет, спеціальний блок та спеціальний символ повинні бути ідентифіковані як такі. Також можуть бути визначені інші типи файлів, визначених реалізацією. Якщо файл є символьним посиланням, за замовчуванням посилання вирішується, а файл перевіряє тип файлу, на який посилається символічне посилання. (Див. -h
Та -i
варіанти нижче.)
Це вийде як .: directory
і /dev/sda: block special
. Значна частина формату для цього та попереднього пункту частково визначена POSIX - ви можете розраховувати на те, що певні рядки знаходяться у висновку.
3: Якщо довжина файлу дорівнює нулю, його слід ідентифікувати як порожній файл.
Це foo: empty
.
4: Утиліта файлу повинна вивчити початковий сегмент файлу і вгадати при виявленні його вмісту на основі тестів, що залежать від позиції. (Відповідь гарантована невірно; див. Параметри -d, -M та -m нижче.)
5: Утиліта файлу повинна вивчити файл та здогадатися при виявленні його вмісту на основі контекстно-залежних системних тестів за замовчуванням. (Відповідь не гарантується правильною.)
Ці двоє використовують ідентифікацію магічного числа та є найцікавішою частиною команди. Магічне число це спеціальна послідовність байт , яка знаходиться у відомому місці в файл , який ідентифікує його типу. Традиційно це місце є першими двома байтами, але цей термін було розширено далі, включаючи довші рядки та інші місця. Дивіться це інше питання для більш детальної інформації про магічні числа в file
команді.
file
Команда має базу даних цих чисел і який тип вони відповідають; що база даних зазвичай є /usr/share/mime/magic
, і відображає вміст файлів на типи MIME . Вихід є (часто частина , file -i
якщо ви не отримаєте його за замовчуванням) буде визначено тип носія або розширення. "Контекстно-чутливі тести" використовують такий самий підхід, але трохи нечіткіше. Жодне з них не гарантовано є правильним, але вони мають бути гарними здогадами.
file
також є база даних, яка відображає ці типи на імена, за допомогою яких буде відомо, що файл, який він визначив, application/pdf
може бути описаний як PDF document
. Ці імена, прочитані людиною, можуть бути локалізовані і на іншій мові. Це завжди буде опис типу файлу на високому рівні таким чином, що людина зрозуміє, а не машина.
Більшість різних результатів, які ви можете отримати, будуть надходити з цих етапів. Ви можете подивитися у magic
файлі список підтримуваних типів та спосіб їх ідентифікації - моя система знає 376 різних типів. Наведені імена та типи, що підтримуються, визначаються системою упаковки та конфігурації, і тому ваша система може підтримувати більшу чи меншу кількість, ніж моя, але їх, як правило, дуже багато. libmagic
також включає в себе додаткові твердо кодовані тести.
6: Файл повинен бути ідентифікований як файл даних.
Це foo: data
коли не вдалося з'ясувати нічого про файл.
Є й інші маленькі теги, які можуть з’являтися. Виконаний ( +x
) файл буде містити " executable
" у висновку, як правило, розділений комами. Thefile
Реалізація може також знати додаткові речі про деякі форматах файли , щоб мати можливість описати додаткові пункти про них, як і в вашому « PDF document, version 1.4
».