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.