Che cosa significa "test magici" per il comando file?


20

Stavo leggendo il filecomando e mi sono imbattuto in qualcosa che non capisco bene:

Il file è progettato per determinare il tipo di file su cui viene eseguita la query .... il file esegue questo eseguendo tre serie di test sul file in questione:

  • test del filesystem,
  • test di magia ,
  • test di lingua

Quali sono i test di magia ?

Risposte:


15

Ciò si riferisce ai "byte magici" che molti formati di file hanno all'inizio di un file che mostrano che tipo di file è.

Ad esempio, se un file inizia con #!allora viene considerato uno script.


28

"magia" qui si riferisce a " numeri magici ": un valore speciale che si trova in una posizione nota in un file che ne identifica il tipo. Il filecomando ha un database di questi numeri e il tipo a cui corrispondono. La libreria associata a quel database si chiama libmagic e puoi accedervi dai tuoi programmi.

Non sono necessariamente "numeri" come potremmo pensare di loro. Ad esempio, un file di immagine PNG inizia sempre con "\ x89PNG \ r \ n \ x1a \ n", una classe Java inizia con i quattro byte (in esadecimali) CA FE BA BE e un file HTML ha "<html" da qualche parte vicino all'inizio. È solo una piccola sequenza di dati che è nota per essere in un file di quel tipo, di solito molto vicino all'inizio.

Quando le persone definiscono i formati di file, spesso ne includono uno deliberatamente o semplicemente come parte del processo di adattamento del formato. filepossono usarli in seguito. Ha anche altri modi per guardare effettivamente il contenuto del file per indovinare di cosa si tratta ("test del linguaggio").


6
Si noti che in origine i "numeri magici" erano, in particolare, i primi due byte di un file eseguibile, utilizzati dal kernel per caricarlo nel modo appropriato. #!è in realtà un esempio di ciò, perché il kernel stesso, vedendo quei byte, dovrebbe invocare il comando che segue.
IMSoP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.