MAGIC(5)

NOME
magic - arquivo de números mágicos

DESCRIÇÃO
Esta página de manual documenta o formato do arquivo magic conforme usado pelo comando file(1) , versão 3.24. O comando file identifica o tipo de arquivo, usando entre outros testes, a verificação de o arquivo começa com um certo número mágico . O arquivo /usr/share/magic especifica quais números mágicos serão usados para quais arquivos, qual mensagem será apresentada caso um determinado número mágico seja encontrado, e as informações adicionais a extrair do arquivo.

Cada linha do arquivo especifica o teste a ser executado. Um teste compara os dados encontrados em uma localização particular do arquivo com uma cadeia de caracteres ou números de 1, 2 ou 4 bytes. Caso o teste seja bem sucedido, uma mensagem é apresentada:

deslocamento
    Um número especificando o deslocamento a partir do início do arquivo, em bytes, do arquivo que será testado.

tipo
    O tipo dos dados a serem testados. Os possíveis valores são:

    byte
        Um valor em 1 byte.

    short
        Um valor de dois bytes (na maioria dos sistemas) nos bytes de ordem nativos da máquina.

    long
        Um valor de quatro bytes (na maioria dos sistemas) nos bytes de ordem nativos da máquina.

    cadeia
        Uma cadeia de caracteres em bytes.

    data
        Um valor de quatro bytes interpretado como uma data Unix.

    beshort
        Um valor de dois bytes (na maioria dos sistemas) nos bytes de ordem tipo big-endian.

    belong
        Um valor de quatro bytes (na maioria dos sistemas) nos bytes de ordem tipo big-endian, interpretados como uma data Unix.

    leshort
        Um valor de dois bytes (na maioria dos sistemas) nos bytes de ordem tipo little-endian.

    lelong
        Um valor de quatro bytes (na maioria dos sistemas) nos bytes de ordem tipo little-endian.

    ledate
        Um valor de quatro bytes (na maioria dos sistemas) nos bytes de ordem tipo little-endian, interpretada como uma data Unix.

Os tipo numéricos podem opcionalmente serem seguidos por & e um valor numérico, para especificar que o valor deve ser concatenado com o valor numérico antes que qualquer comparação seja realizada. Um u precedendo o tipo indica que comparações ordenadas devem ser não sinalizadas.

teste
    O valor a ser comparado com o valor do arquivo. Caso o tipo seja numérico, este valor deve ser especificado no formato da linguagem C; se este é uma cadeia, ele é especificado como um cadeia do C, com os caracteres de fuga tradicionais (por exemplo \n para nova linha).

    Valores numéricos podem ser precedidos por um caracter indicando a operação a ser executada. Podem ser =, para especificar que o valor do arquivo deve ser igual ao valor especificado, <, para especificar que o valor do arquivo deve ser menor que o especificado, >, para especificar que o valor do arquivo deve ser maior que o valor especificado, &, para especificar que o valor do arquivo deve ter todos os bits ligados (preenchidos por 1) conforme o configurado no valor especificado, ^, para especificar que o valor do arquivo deve ter todos os bytes desligados (preenchidos com zeros) conforme o configurado no valor especificado, ou x, para especificar que qualquer valor servirá. Caso o caracter seja omitido, é assumidos o valor =.

    Valores numéricos são especificados no formato da linguagem C; por exemplo 13 em decimal, 013 em octal, e 0x13 em hexadecimal.

    Para valores de cadeias de caracteres, o byte do arquivo deve coincidir com o byte especificado. Os operadores =, < e > (mas não &) podem ser aplicados às cadeias de caracteres. O tamanho usado para a equivalência é o obtido no argumento cadeia de caracteres no arquivo mágico. Isso significa que uma linha pode ser igual a qualquer cadeia, e presumivelmente lista aquela mensagem, através do comando >\0 (porque todas as cadeias são maiores que o caracter nulo).

mensagem
    A mensagem a ser apresentada quando uma comparação tem um resultado positivo. Caso a cadeia de caracteres contenha um printf(3S) na especificação do formato, o valor do arquivo (com qualquer máscara de apresentação informada) é listada usando a mensagem como cadeia de formato.

Alguns formatos de arquivos contém informações adicionais as quais são listadas junto com o tipo do arquivo. Uma linha que comece com o caracter > indica testes adicionais e mensagens a serem apresentadas. O número de > na linha indica o nível do teste; uma linha sem > no seu início é considerada com de nível zero. Cada linha no nível n+1 está sob o controle da linha de nível n mais próxima precedente no arquivo mágico. Caso o teste na linha de nível n seja bem sucedida, o teste especificado em todas as linhas subseqüentes de nível n+1 são executados, e as mensagens apresentadas caso o teste sejam bem sucedido. A próxima linha do nível n finalizará os testes. Caso o primeiro caracter seguindo o último > seja um ( então a cadeia de caracteres após os parênteses é interpretada como um deslocamento indireto, Isso significa que o número após os parênteses é usado como um deslocamento no arquivo. O valor quando lido é usado novamente como um deslocamento no arquivo. Deslocamentos indiretos tem o formato: ((x[.[bsl]][+-][y]). O valor de x é usado como um deslocamento no arquivo. Um byte, short ou long é lido como aquele deslocamento dependendo da especificação do tipo [bsl] . A este número é adicionado o valor de y e o resultado é usado como um deslocamento do arquivo. O tipo padrão caso não seja especificado é long.

Algumas vezes você pode não saber o deslocamento exato e isso depende do tamanho dos arquivos precedentes. Pode-se especificar o deslocamento relativo no final do último campo de nível superior (obviamente isso pode ser feito somente através de um teste de subnível), por exemplo testes começando com > ). Tal deslocamento relativo é especificado usando & como um prefixo do deslocamento.

PROBLEMAS
Os formatos long, belong, lelong, short, beshort, leshort, date, bedate, e ledate são dependentes de sistemas; talvez eles devam ser especificados como um número de bytes (2B, 4B, etc...), desde que os arquivos sejam reconhecidos como de um sistema no qual os tamanhos são invariáveis.

Não há suporte para dados especificados como endian usados em deslocamentos indiretos..

VEJA TAMBÉM
file(1) - o comando que lê este arquivo.

TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução) Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)