file (1) и magic (5): описание других форматов

8

Могу ли я использовать fileи magic( http://linux.die.net/man/5/magic ), чтобы переопределить описание некоторых других известных форматов?

Например, я хотел бы описать следующие форматы:

это просто текстовый файл

Или

это просто файл gzipped, начинающийся с магического номера BAM\1

?

ты знаешь какой-нибудь пример?

Можно ли предоставить собственный код C для тестирования файла вместо использования магического формата?

пьер
источник
1
Возможный дубликат Обновления списка магических файлов и / или
отправка

Ответы:

8

Вы можете использовать эту -mопцию, чтобы указать альтернативный список магических файлов, и если вы включите свой собственный файл /usr/share/file/magic.mgcв этот список до скомпилированного магического файла ( в моей системе), эти шаблоны будут проверены перед «глобальными». Вы можете создать функцию или псевдоним, чтобы всегда прозрачно использовать эту опцию, просто введя fileкоманду.

Язык, используемый в магическом файле, достаточно мощный, поэтому редко возникает необходимость вернуться к пользовательскому кодированию на Си. Единственный раз, когда я чувствовал склонность сделать это, было в 90-х годах, когда сопоставление файлов HTML и XML было трудным, потому что не было никакого способа (в то время) иметь гибкое сопоставление регистров и смещений, необходимое для возможности анализа <HTMLи < Htmlи < htmlс одним шаблоном , Я реализовал это в C как модификатор шаблона 'string', позволяющий игнорировать регистр и сжимать (необязательные) пробелы .

Эти изменения в C также потребовали адаптации магических файлов . И если с тех пор fileисходный код значительно не изменился, вам всегда нужно будет изменять (или предоставлять дополнительные) правила в magicфайлах, соответствующих этим изменениям кода C. Таким образом, вы могли бы также начать пытаться делать это с изменениями только в волшебных файлах и вернуться к изменению кода C, если это действительно не сработает.

Энтон
источник
Спасибо, репозиторий github с примерами был очень полезен.
Пьер
1

Для следующего пользователя $ (user_searchengine), который найдет это:

Простые правила, такие как BAM, выглядят так:
OFFSET TYPE [OPERAND]FLAG MESSAGE
В случае BAM:
0 string BAM\1 BAM
при поиске заголовка будет напечатана строка BAM.

Для получения дополнительной информации эта информация о сайтах IBM выглядит несколько устаревшей, но ее все же должно быть достаточно для простых случаев использования. У человека также есть куча информации о формате.

SleepProgger
источник
0

Вам не нужно всегда использовать эту -mопцию; так как documentmentend на его man-странице file(1)будет по умолчанию читать ~/.magicфайл (или его скомпилированную версию:) ~/.magic.mgc, чтобы вы могли добавить свои определения туда; не нужно связываться с общесистемной /usr/share/magic*или /etc/magic.

mosvy
источник