Onde o arquivo é usado pelo arquivo (1) e libmagic para determinar os tipos MIME?

4

De acordo com man 5 magic :

"O arquivo / usr / share / misc / magic especifica quais padrões devem ser testados, qual mensagem ou tipo MIME imprimir se um determinado padrão for encontrado e informações adicionais para extrair do arquivo."

Então eu fui procurar esse arquivo:

$ 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 ../

Portanto, parece que o arquivo especificado na man page é, na verdade, um link simbólico para um diretório vazio. Onde está esse arquivo no meu sistema Ubuntu 11.10?

A razão pela qual eu quero ver é que tanto o comando file --mime quanto o módulo mágico python estão retornando os mesmos tipos mime incorretos para alguns arquivos, e eu gostaria de ver o formato desse arquivo para que eu possa modificar as associações relevantes de forma responsável. Obrigado.

ATUALIZAÇÃO:

Obrigado ao @Caesium por me apontar para o comando strace . Pipando a saída para grep magic , recebi a seguinte saída:

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

Assim, parece que file primeiro aparece em /home/username/.magic , depois /etc/magic.mgc , depois /etc/magic e finalmente em /usr/share/misc/magic.mgc para determinar os tipos de arquivo. Isso sugere que o local adequado para adicionar regras de associação específicas do usuário está em /home/username/.magic e nas regras gerais do sistema em /etc/magic . Eu escolhi a última opção.

Para o registro, aqui estão minhas adições para /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

A página man de magic desencoraja o uso de "regex" (por razões de performance), mas eu pensei que essa seria a opção mais simples para mim. Espero que isso ajude os outros a resolverem este problema, caso eles o encontrem - os arquivos que agora são detectados como texto / x-python foram previamente identificados como text / x-java pela libmagic, o que parecia francamente ridículo.

    
por K. P. MacGregor 19.02.2012 / 18:33

1 resposta

5

Você estava quase lá; está em /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)

Como um ligeiro aparte, eu realmente encontrei isso apenas olhando em volta um pouco, mas você pode provar que está realmente usando esse arquivo via 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 é apenas outro link simbólico. Eu acho que a manpage está desatualizada.

    
por Caesium 19.02.2012 / 18:43

Tags