Que signifient les «tests magiques» pour la commande file?

20

Je lisais sur la filecommande et je suis tombé sur quelque chose que je ne comprends pas très bien:

file est conçu pour déterminer le type de fichier interrogé .... file accomplit cela en effectuant trois séries de tests sur le fichier en question:

  • tests de système de fichiers,
  • tests magiques ,
  • tests de langue

Que sont les tests magiques ?

Abdennour TOUMI
la source

Réponses:

15

Cela fait référence aux "octets magiques" que de nombreux formats de fichiers ont au début d'un fichier et qui indiquent de quel type de fichier il s'agit.

Par exemple, si un fichier commence par, #!il est considéré comme un script.

Hauke ​​Laging
la source
28

"magie" se réfère ici à " nombres magiques ": une valeur spéciale qui se trouve à un endroit connu dans un fichier qui identifie son type. La filecommande possède une base de données de ces numéros et à quel type ils correspondent. La bibliothèque qui accompagne cette base de données s'appelle libmagic , et vous pouvez y accéder à partir de vos propres programmes.

Ce ne sont pas nécessairement des «chiffres» comme on pourrait les penser. Par exemple, un fichier image PNG commence toujours par "\ x89PNG \ r \ n \ x1a \ n", une classe Java commence par les quatre octets (en hexadécimal) CA FE BA BE et un fichier HTML contient "<html" quelque part près du début. C'est juste une petite séquence de données qui est connue pour être dans un fichier de ce type, généralement très proche du début.

Lorsque les gens définissent des formats de fichiers, ils en incluent souvent un délibérément ou simplement dans le cadre de l'assemblage du format. filepeut les utiliser par la suite. Il a également d'autres façons de regarder le contenu du fichier pour deviner de quoi il s'agit («tests de langue»).

Michael Homer
la source
6
Notez qu'à l'origine, les "nombres magiques" étaient, spécifiquement, les deux premiers octets d'un fichier exécutable, utilisés par le noyau pour le charger de la manière appropriée. #!en est un exemple, car le noyau lui-même, en voyant ces octets, est censé invoquer la commande qui suit.
IMSoP