O que significa "testes mágicos" para o comando file?


20

Eu estava lendo sobre o filecomando e me deparei com algo que não entendi direito:

O arquivo foi projetado para determinar o tipo de arquivo que está sendo consultado .... O arquivo realiza isso executando três conjuntos de testes no arquivo em questão:

  • testes de sistema de arquivos,
  • testes mágicos ,
  • testes de linguagem

O que são testes de mágica ?

Respostas:


15

Isso se refere aos "bytes mágicos" que muitos formatos de arquivo possuem no início de um arquivo que mostram que tipo de arquivo é esse.

Por exemplo, se um arquivo começa com, #!então é considerado um script.


28

"mágica" aqui se refere a " números mágicos ": um valor especial que está em um local conhecido em um arquivo que identifica seu tipo. O filecomando possui um banco de dados desses números e a que tipo eles correspondem. A biblioteca que acompanha esse banco de dados é chamada libmagic , e você pode acessá-la a partir de seus próprios programas.

Eles não são necessariamente "números", como poderíamos pensar neles. Por exemplo, um arquivo de imagem PNG sempre começa com "\ x89PNG \ r \ n \ x1a \ n", uma classe Java começa com os quatro bytes (em hexadecimal) CA FE BA BE e um arquivo HTML tem "<html" em algum lugar perto do início. É apenas uma pequena sequência de dados que se sabe estar em um arquivo desse tipo, geralmente muito próximo ao início.

Quando as pessoas estão definindo os formatos de arquivo, elas geralmente incluem um deles, deliberadamente ou apenas como parte da adequação do formato. filepode usá-los depois. Ele também tem outras maneiras de realmente olhar o conteúdo do arquivo para adivinhar o que é ("testes de idioma").


6
Observe que, originalmente, os "números mágicos" eram, especificamente, os dois primeiros bytes de um arquivo executável, usado pelo kernel para carregá-lo da maneira apropriada. #!é realmente um exemplo disso, porque o próprio kernel, ao ver esses bytes, deve invocar o comando a seguir.
IMSOP
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.