file
usa vários tipos de teste :
1: Se o arquivo não existe, não pode ser lido ou seu status não pode ser determinado, a saída deve indicar que o arquivo foi processado, mas que seu tipo não pôde ser determinado.
Isso será produzido como cannot open file: No such file or directory
.
2: Se o arquivo não for regular, seu tipo de arquivo deve ser identificado. O diretório de tipos de arquivo, FIFO, soquete, bloco especial e caractere especial devem ser identificados como tal. Outros tipos de arquivos definidos pela implementação também podem ser identificados. Se o arquivo é um link simbólico, por padrão, o link deve ser resolvido e o arquivo deve testar o tipo de arquivo referenciado pelo link simbólico. (Veja as opções -h
e -i
abaixo.)
Isso será produzido como .: directory
e /dev/sda: block special
. Grande parte do formato para isso e o ponto anterior é parcialmente definido pelo POSIX - você pode confiar em certas strings na saída.
3: Se o tamanho do arquivo for zero, ele deve ser identificado como um arquivo vazio.
Isto é foo: empty
.
4: O utilitário de arquivo deve examinar um segmento inicial do arquivo e adivinhar a identificação de seu conteúdo com base em testes sensíveis à posição. (Não é garantido que a resposta esteja correta; consulte as opções -d, -M e -m abaixo.)
5: O utilitário de arquivo deve examinar o arquivo e adivinhar a identificação de seu conteúdo com base em testes de sistema padrão sensíveis ao contexto. (Não é garantido que a resposta esteja correta.)
Esses dois usam a identificação de número mágico e são a parte mais interessante do comando. Um número mágico é uma sequência especial de bytes que está em um local conhecido em um arquivo que identifica seu tipo. Tradicionalmente, esse local são os dois primeiros bytes, mas o termo foi estendido ainda mais para incluir cadeias mais longas e outros locais. Veja esta outra pergunta para obter mais detalhes sobre números mágicos no file
comando.
O file
comando possui um banco de dados desses números e a que tipo eles correspondem; esse banco de dados geralmente está dentro /usr/share/mime/magic
e mapeia o conteúdo do arquivo para os tipos MIME . A saída lá (geralmente parte file -i
se você não a obtiver por padrão) será um tipo de mídia definido ou uma extensão . Os "testes sensíveis ao contexto" usam o mesmo tipo de abordagem, mas são um pouco mais confusos. Não é garantido que nenhum deles esteja certo, mas pretende ser um bom palpite.
file
também possui um banco de dados mapeando esses tipos para nomes, pelo qual saberá que um arquivo identificado como application/pdf
pode ser descrito como a PDF document
. Esses nomes legíveis por humanos também podem ser localizados em outro idioma. Essas sempre serão algumas descrições de alto nível do tipo de arquivo de uma maneira que uma pessoa entenderá, e não uma máquina.
A maioria dos resultados diferentes que você pode obter virá desses estágios. Você pode procurar no magic
arquivo uma lista de tipos suportados e como eles são identificados - meu sistema conhece 376 tipos diferentes. Os nomes fornecidos e os tipos suportados são determinados pelo pacote e pela configuração do sistema e, portanto, o sistema pode suportar mais ou menos que o meu, mas geralmente existem muitos deles. libmagic
também inclui testes adicionais codificados nele.
6: O arquivo deve ser identificado como um arquivo de dados.
Isto é foo: data
, quando ele não conseguiu descobrir nada sobre o arquivo.
Existem também outras pequenas etiquetas que podem aparecer. Um +x
arquivo executável ( ) incluirá " executable
" na saída, geralmente separados por vírgula. A file
implementação também pode saber coisas extras sobre alguns formatos de arquivo para poder descrever pontos adicionais sobre eles, como no seu " PDF document, version 1.4
".