arquivo (1) e magia (5): descrevendo outros formatos


8

Posso usar filee magic( http://linux.die.net/man/5/magic ) para substituir a descrição de alguns outros formatos conhecidos?

por exemplo, gostaria de descrever os seguintes formatos:

que são 'apenas' arquivo de texto

Ou

que é 'apenas' um arquivo compactado com gzip começando com o número mágico BAM\1

?

você conhece algum exemplo?

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


Respostas:


8

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

A linguagem usada no arquivo mágico é bastante poderosa, portanto, raramente é necessário reverter para a codificação C personalizada. A única vez que eu me senti inclinado a fazê-lo foi na década de 90, quando correspondentes arquivos HTML e XML foi difícil porque não havia nenhuma maneira (na época) para ter o invólucro flexível e compensar correspondência necessária para ser capaz de analisar <HTMLe < Htmle < htmlcom um padrão . Eu implementei isso em C como modificador do padrão 'string', permitindo ignorar maiúsculas e minúsculas e compactar espaços em branco (opcionais) .

Essas mudanças em C também exigiram a adaptação dos arquivos mágicos . E, a menos que o filecódigo-fonte tenha sido alterado significativamente desde então, você sempre precisará modificar (ou fornecer) regras extras nos magicarquivos que correspondem às alterações no código C. Portanto, 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.


Obrigado, o repositório do github com os exemplos foi muito útil.
Pierre

1

Para o próximo usuário $ (user_searchengine), localize isso:

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

Para obter mais informações, essas informações dos sites IBM parecem 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.


0

Você não precisa sempre usar a -mopção; como o documento em sua página de manual file(1)também lerá por padrão o ~/.magicarquivo (ou uma versão compilada dele ~/.magic.mgc:), para que você possa adicionar suas definições; não há necessidade de mexer com o sistema /usr/share/magic*ou /etc/magic.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.