file (1) e magic (5): descrevendo outros formatos

8

Posso usar o file e o magic ( link ) para substituir a descrição de alguns outros formatos?

por exemplo, gostaria de descrever os seguintes formatos:

que são apenas arquivos de texto

Ou

que é 'apenas' um arquivo gzip iniciado com o número mágico BAM

?

conhece algum exemplo?

É possível fornecer um código C personalizado para testar o arquivo em vez de usar o formato mágico?

    
por Pierre 05.09.2014 / 18:51

2 respostas

8

Você pode usar a opção -m para especificar uma lista alternativa de arquivos mágicos, e se você incluir os seus próprios antes do arquivo mágico compilado ( /usr/share/file/magic.mgc em meu sistema) nessa lista, esses padrões serão testados antes do "globais". Você pode criar uma função, ou um alias, para usar de forma transparente e transparente essa opção apenas emitindo o comando file .

A linguagem usada no arquivo magic é bastante poderosa, então raramente é necessário reverter para o código C customizado. A única vez que me senti inclinado a fazê-lo foi nos anos 90, quando a correspondência de arquivos HTML e XML era difícil, porque não havia maneira (na época) de ter a combinação flexível e offset necessária para poder analisar <HTML e < Html e < html com um padrão. Eu implementei isso em C como modificador para o padrão 'string', permitindo ignorar o caso e compactar (opcional ) espaços em branco .

Essas alterações em C exigiram a adaptação dos arquivos mágicos também . E, a menos que o código-fonte file tenha mudado significativamente desde então, você sempre precisará modificar (ou fornecer regras extras) em magic arquivos que correspondam a essas alterações no código C. Então, você pode começar a tentar fazer isso apenas com alterações nos arquivos mágicos, e voltar a mudar o código C, se isso realmente não der certo.

    
por 05.09.2014 / 19:25
1

Para o próximo usuário $ (user_searchengine) que encontra isto:

Regras simples como a do BAM estão assim:
OFFSET TYPE [OPERAND]FLAG MESSAGE
No caso de BAM:
0 string BAM BAM
Isso imprimiria a string BAM ao encontrar o cabeçalho.

Para obter mais informações este site da IBM informações parecem estar um pouco desatualizadas, mas ainda devem ser suficientes para casos de uso simples. O homem também tem um monte de informações sobre o formato.

    
por 11.12.2015 / 05:04