O utilitário file
determina o tipo de arquivo de 3 maneiras:
Primeiro, os testes do sistema de arquivos : Dentro desses testes, um dos status chamadas do sistema familiar são invocadas no arquivo. Isso retorna os diferentes tipos de arquivo unix : arquivo, diretório, link, dispositivo de caractere, dispositivo de bloco, canal nomeado ou um soquete comum . Dependendo disso, os testes mágicos são feitos.
Os testes mágicos são um pouco mais complexos. Os tipos de arquivo são adivinhados por um banco de dados de padrões chamado arquivo mágico . Alguns tipos de arquivos podem ser determinados pela leitura de um bit ou número em um lugar específico dentro do arquivo (binários, por exemplo). O arquivo mágico contém " números mágicos " para testar o arquivo se ele os contém ou não e quais informações de texto devem ser impressas. Aqueles " números mágicos " podem ser valores de 1-4Byte, strings, datas ou mesmo expressões regulares. Com mais testes, informações adicionais podem ser encontradas. No caso de um executável, informações adicionais seriam se dinamicamente vinculado ou não, < href="http://en.wikipedia.org/wiki/Strip_%28Unix%29"> despojado ou não ou a arquitetura. Às vezes, vários testes devem passar antes que o tipo de arquivo possa ser identificado de verdade. Mas de qualquer forma, não importa quantos testes são realizados, é sempre apenas um bom palpite .
Aqui estão os primeiros 8 bytes em um arquivo com alguns tipos de arquivos comuns que podem nos ajudar a ter uma ideia de como esses números mágicos podem ser:
Hexadecimal ASCII
PNG 89 50 4E 47|0D 0A 1A 0A ‰PNG|....
JPG FF D8 FF E1|1D 16 45 78 ÿØÿá|..Ex
JPG FF D8 FF E0|00 10 4A 46 ÿØÿà|..JF
ZIP 50 4B 03 04|0A 00 00 00 PK..|....
PDF 25 50 44 46|2D 31 2E 35 %PDF|-1.5
Se o tipo de arquivo não puder ser encontrado em testes mágicos, o arquivo parece ser um arquivo de texto e file
procura pela codificação do conteúdo. A codificação é diferenciada pelos diferentes intervalos e sequências de bytes que constituem o texto imprimível em cada conjunto.
As quebras de linha também são investigadas, dependendo de seus valores HEX:
-
0A
(\n
) classifica um arquivo terminado Un * x / Linux / BSD / OSX -
0D 0A
(\r\n
) são arquivos dos sistemas operacionais da Microsoft -
0D
(\r
) seria o Mac OS até a versão 9 -
15
(5
) seria IBMs AIX
Agora, os testes de idioma são iniciados. Se parecer ser um arquivo de texto, o arquivo será pesquisado em busca de determinadas cadeias para descobrir qual idioma contém (C, Perl, Bash). Algumas linguagens de script também podem ser identificadas pelo hashbang ( #!/bin/interpreter
) na primeira linha do script .
Se nada se aplicar ao arquivo, o tipo de arquivo não poderá ser determinado e file
apenas imprimirá "data". Este também é o caso se o arquivo estiver criptografado .
Então, você vê que não há necessidade de um sufixo. Um sufixo de qualquer maneira poderia confundir, se definido errado.