-usr-share-misc-magic
Файл визначення типів для командиfile(UNIX)
Команда file дозволяє визначити тип файлу за допомогою перевірки відповідності початкових символів файлу певному"магічному" числу(крім інших перевірок). У файлі /usr/share/misc/magic вказані "магічні" числа для перевірки, повідомлення, яке буде виведено у разі виявлення конкретного "магічного" числа, а також додаткова інформація, що витягується з файлу.
У кожному рядку файлу вказано перевірку, яку потрібно виконати. Під час перевірки виконується зіставлення даних, що починаються з певного зміщення у файлі, з 1-, 2- або 4-байтовим числовим значенням або рядком. У разі успішного виконання перевірки виводиться повідомлення. Рядок складається з наступних полів:
Число, що визначає зміщення в байтах у файлі даних, що перевіряється.
Тип даних, що перевіряється. Можливі значення:
Двобайтове значення (у більшості систем) із специфічним для машини порядком байтів.
Чотирьохбайтове значення (у більшості систем) зі специфічним для машини порядком байтів.
Чотирьохбайтове значення, що інтерпретується як дата UNIX.
Двобайтове значення (у більшості систем) із зворотним порядком байтів.
Чотирьохбайтове значення (у більшості систем) із зворотним порядком байтів.
Чотирьохбайтове значення (у більшості систем) із зворотним порядком байтів, що інтерпретується як дата UNIX.
Двобайтове значення (у більшості систем) з прямим порядком байтів.
Чотирьохбайтове значення (у більшості систем) з прямим порядком байтів.
Чотирьохбайтове значення (у більшості систем) з прямим порядком байтів, що інтерпретується як дата UNIX.
Після числових типів може бути символ & та числовезначення. Це означає, що перед зіставленням до значення слід приєднати числове значення. Значення u перед типом показує, що зіставлення порядків мають бути беззнаковими.
Значення, яке порівнюється зі значенням з файлу. Якщотипє числом, це значення вказується у форматі мови C; якщо церядок, вона визначається як рядок C з можливістю використання звичайних послідовностей, що управляють (наприклад, символ \n для позначення нового рядка).
Перед числовими значеннями може стояти символ, що визначає операцію, що виконується:
= – значення файлу має збігатися із зазначеним значенням;
– значення з файлу має бути меншим за вказане значення;
> – значення з файлу має бути більшим за вказане значення;
^ – значення файлу не повинно містити біти, встановлені у зазначеному значенні;
x – підходить будь-яке значення.
Якщо символ не вказано, автоматично підставляється = .
Числові значення встановлюються у форматі C, наприклад, 13 є десятковим числом, 013 - вісімковим, а 0x13 - шістнадцятковим.
Для рядкових значень рядок байтів із файлу повинен збігатися із зазначеним рядком байтів. До рядків можуть бути застосовані оператори = і > (але не & ). Довжина рядка для зіставлення відповідає значенню рядкового аргументу файлу /usr/share/misc/magic . Це означає, що рядок може відповідати будь-якому рядку, потім цей рядок буде виведено шляхом виконання >\0 (оскільки всі рядки більші за нульовий рядок).
Повідомлення, яке виводиться у разі успішного завершення порівняння. Якщо в рядку міститься специфікація форматуprintf(), то значення файлу (якщо виконані всі зазначені операції маскування) будевиведено з використанням значенняповідомленняяк рядок формату.
Деякі формати файлів включають додаткову інформацію, яка відображається разом із типом файлу. У рядку, який починається з символу > , визначаються додаткові перевірки та повідомлення, що виводяться. Число символів > у рядку позначає рівень перевірки. Рядок, на початку якого відсутні символи > , відноситься до рівня 0. Кожен рядок на рівніn+1підпорядковується рядку на рівніn, найбільш близький до нього у файлі визначення типів.
При успішному виконанні перевірки рядка лише на рівніnвиконуються перевірки, вказані у всіх наступних рядках лише на рівніn+1. У разі успішного виконання виводяться відповідні повідомлення. Процедура завершується наступним рядком на рівніn.
Якщо перший символ після останнього знаку > є ( , то наступний за круглою дужкою рядок інтерпретується як непряме зміщення. Це означає, що число після круглої дужки використовується як зміщення у файлі. Значення при цьому зсуві зчитується і знову використовується як зміщення у файлі. Для непрямих зсувів використовується наступний формат: ( (x[.[bsl]][+-][y]) Як зміщення у файлі використовується значенняxПри зміщенні зчитується короткий або довгий байт залежно від специфікатора типу [bsl] .До цього номера додається значенняy, а результат використовується як зміщення у файлі Якщо тип не вказаний, за замовчуванням використовується довге значення.
Використання форматів long, belong, lelong, short, beshort, leshort, date, bedate і ledate залежить від особливостей системи. Може знадобитися вказати формат у вигляді числа байтів (2B, 4B і т.д.), т.к. файли, що розпізнаються, зазвичай передаютьсяіз системи, в якій ця довжина є незмінною величиною.
В даний час дані із зазначеним порядком байтів при непрямому зміщенні не підтримуються.