Где файл, используемый file (1) и libmagic для определения типов пантомимы?

Согласно man 5 magic:

«Файл / usr / share / misc / magic указывает, для каких шаблонов нужно проверять, какое сообщение или тип MIME печатать, если найден конкретный шаблон, и дополнительная информация для извлечения из файла. "

Итак, я пошел искать этот файл:

$ file /usr/share/misc/magic
/usr/share/misc/magic: symbolic link to `../file/magic'

$ ll /usr/share/file/magic
total 8
drwxr-xr-x 2 root root 4096 2011-08-08 13:52 ./
drwxr-xr-x 3 root root 4096 2011-10-12 07:27 ../

Так что может показаться, что файл, указанный на странице справочника, на самом деле является символической ссылкой в каталог, который пуст. Где находится этот файл в моей системе Ubuntu 11.10?

Причина, по которой я хочу взглянуть на него, заключается в том, что и команда file --mime, и магический модуль python возвращают одинаковые неверные типы MIME для некоторых файлов, и я Хотелось бы увидеть формат этого файла, чтобы я мог ответственно изменить соответствующие ассоциации. Спасибо.

ОБНОВЛЕНИЕ:

Спасибо @Caesium за указание на команду strace. Передав выходные данные из этого в grep magic, я получил следующий вывод:

open("/usr/lib/libmagic.so.1", O_RDONLY) = 3
access("/home/phoenix/.magic", R_OK)    = -1 ENOENT (No such file or directory)
open("/etc/magic.mgc", O_RDONLY)        = -1 ENOENT (No such file or directory)
stat("/etc/magic", {st_mode=S_IFREG|0644, st_size=111, ...}) = 0
open("/etc/magic", O_RDONLY)            = 3
open("/usr/share/misc/magic.mgc", O_RDONLY) = 3

Так что может показаться, что file сначала выглядит в /home/username/.magic, затем /etc/magic.mgc, затем /etc/magic, и, наконец, в /usr/share/misc/magic.mgc для определения типов файлов. Это говорит о том, что правильное место для добавления пользовательских правил ассоциации находится в /home/username/.magic, а общесистемные правила - в /etc/magic. Я выбрал последний вариант.

Для справки, вот мои дополнения к /etc/magic:

# python: file(1) magic for python modules and scripts
0 string """ a python script text executable
!:mime text/x-python
0 regex #!\ .*\ python a python script text executable
!:mime text/x-python
# pyc file: first four bytes are magic number
# which changes with each python version.
# this is for version 2.7.2:
0 belong 0x03f30d0a python compiled
!:mime application/x-python-bytecode

Страница руководства по магии препятствует использованию «регулярных выражений» (по соображениям производительности), но я подумал, что это будет самый простой вариант для меня. Я надеюсь, что это поможет другим решить эту проблему, если они столкнутся с ней - файлы, которые теперь определяются как text / x-python, ранее были определены libmagic как text / x-java, что казалось откровенно нелепым.

4
задан 20 February 2012 в 01:26

1 ответ

Вы были почти там; это находится в /usr/share/file/magic.mgc:

$ file /usr/share/file/magic.mgc
/usr/share/file/magic.mgc: magic binary file for file(1) cmd (version 7) (little endian)

Как небольшое в стороне, я на самом деле нашел это только путем оглядывания немного, но можно доказать, что это на самом деле использует тот файл через strace:

$ strace file /
<snip lots of output>
open("/usr/share/misc/magic.mgc", O_RDONLY) = 3
<snip a bit more output>

/usr/share/misc/magic.mgc просто еще одна символьная ссылка. Я предполагаю, что страница справочника устарела.

5
ответ дан 20 February 2012 в 01:26

Другие вопросы по тегам:

Похожие вопросы: