file
usa vários tipos de teste :
1: If file does not exist, cannot be read, or its file status could not be determined, the output shall indicate that the file was processed, but that its type could not be determined.
Isso será exibido como cannot open file: No such file or directory
.
2: If the file is not a regular file, its file type shall be identified. The file types directory, FIFO, socket, block special, and character special shall be identified as such. Other implementation-defined file types may also be identified. If file is a symbolic link, by default the link shall be resolved and file shall test the type of file referenced by the symbolic link. (See the
-h
and-i
options below.)
Isso será exibido como .: directory
e /dev/sda: block special
. Muito do formato para este e o ponto anterior é parcialmente definido pelo POSIX - você pode depende de certas strings estarem na saída.
3: If the length of file is zero, it shall be identified as an empty file.
Isso é foo: empty
.
4: The file utility shall examine an initial segment of file and shall make a guess at identifying its contents based on position-sensitive tests. (The answer is not guaranteed to be correct; see the -d, -M, and -m options below.)
5: The file utility shall examine file and make a guess at identifying its contents based on context-sensitive default system tests. (The answer is not guaranteed to be correct.)
Estes 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 seqüência especial de bytes que está em um local conhecido em um arquivo que identifica seu tipo. Tradicionalmente, esse lugar são os primeiros dois bytes, mas o termo foi estendido para incluir seqüências de caracteres mais longas e outros locais. Veja esta outra questão para mais detalhes sobre números mágicos no comando file
.
O comando file
tem um banco de dados desses números e a que tipo eles correspondem; esse banco de dados geralmente está em /usr/share/mime/magic
e mapeia o conteúdo do arquivo para tipos MIME . A saída lá (geralmente parte de file -i
se você não obtiver por padrão) será um tipo de mídia definido ou uma extensão. "Testes sensíveis ao contexto" usam o mesmo tipo de abordagem, mas são um pouco confusos. Nenhum deles tem a garantia de estar certo, mas eles pretendem ser bons palpites.
file
também tem um banco de dados que mapeia esses tipos para nomes, com os quais ele saberá que um arquivo identificado como application/pdf
pode ser descrito como PDF document
. Esses nomes legíveis por humanos também podem estar localizados em outro idioma. Estas serão sempre algumas descrições de alto nível do tipo de arquivo de uma maneira que uma pessoa entenderá, em vez de uma máquina.
A maioria dos resultados diferentes que você pode obter virão desses estágios. Você pode examinar o arquivo magic
para obter uma lista de tipos suportados e como eles são identificados - meu sistema conhece 376 tipos diferentes. Os nomes dados e os tipos suportados são determinados pelo empacotamento e pela configuração do sistema e, portanto, o sistema pode suportar mais ou menos que o meu, mas geralmente há muitos deles. libmagic
também inclui testes adicionais codificados.
6: The file shall be identified as a data file.
Isso é foo: data
, quando não conseguiu descobrir nada sobre o arquivo.
Existem também outras tags pequenas que podem aparecer. Um arquivo executável ( +x
) incluirá " executable
" na saída, geralmente separado por vírgulas. A implementação de file
também pode saber coisas extras sobre alguns formatos de arquivo para poder descrever pontos adicionais sobre eles, como em seu " PDF document, version 1.4
".