file
utilise plusieurs types de tests :
1: Si le fichier n'existe pas, ne peut pas être lu ou si son état n'a pas pu être déterminé, la sortie doit indiquer que le fichier a été traité, mais que son type n'a pas pu être déterminé.
Ce sera sorti comme cannot open file: No such file or directory
.
2: Si le fichier n'est pas un fichier normal, son type de fichier doit être identifié. Le répertoire des types de fichiers, FIFO, socket, spécial bloc et caractère spécial doit être identifié comme tel. D'autres types de fichiers définis par l'implémentation peuvent également être identifiés. Si le fichier est un lien symbolique, par défaut le lien doit être résolu et le fichier doit tester le type de fichier référencé par le lien symbolique. (Voir les options -h
et -i
ci-dessous.)
Ce sera produit comme .: directory
et /dev/sda: block special
. Une grande partie du format pour cela et le point précédent est partiellement défini par POSIX - vous pouvez compter sur certaines chaînes dans la sortie.
3: Si la longueur du fichier est nulle, il doit être identifié comme un fichier vide.
C'est ça foo: empty
.
4: L'utilitaire de fichier doit examiner un segment initial du fichier et doit deviner l'identification de son contenu sur la base de tests sensibles à la position. (La réponse n'est pas garantie d'être correcte; voir les options -d, -M et -m ci-dessous.)
5: L'utilitaire de fichier doit examiner le fichier et faire une supposition pour identifier son contenu en fonction des tests système par défaut contextuels. (La réponse n'est pas garantie d'être correcte.)
Ces deux utilisent l' identification par numéro magique et sont la partie la plus intéressante de la commande. Un nombre magique est une séquence spéciale d'octets qui se trouve à un endroit connu dans un fichier qui identifie son type. Traditionnellement, cet endroit est les deux premiers octets, mais le terme a été étendu pour inclure des chaînes plus longues et d'autres emplacements. Voir cette autre question pour plus de détails sur les nombres magiques dans la file
commande.
La file
commande a une base de données de ces numéros et à quel type ils correspondent; cette base de données se trouve généralement dans /usr/share/mime/magic
et mappe le contenu du fichier aux types MIME . La sortie là-bas (souvent file -i
si vous ne l'obtenez pas par défaut) sera un type de média défini ou une extension. Les "tests contextuels" utilisent le même type d'approche, mais sont un peu plus flous. Rien de tout cela n'est garanti, mais ils sont censés être de bonnes suppositions.
file
possède également une base de données mappant ces types à des noms, par laquelle il saura qu'un fichier qu'il a identifié comme application/pdf
pouvant être décrit comme un PDF document
. Ces noms lisibles par l'homme peuvent également être localisés dans une autre langue. Ce sera toujours une description de haut niveau du type de fichier d'une manière qu'une personne comprendra, plutôt qu'une machine.
La majorité des sorties différentes que vous pouvez obtenir proviendront de ces étapes. Vous pouvez consulter le magic
fichier pour une liste des types pris en charge et comment ils sont identifiés - mon système connaît 376 types différents. Les noms donnés et les types pris en charge sont déterminés par la configuration et la configuration de votre système. Par conséquent, votre système peut prendre en charge plus ou moins que le mien, mais il y en a généralement beaucoup. libmagic
contient également des tests codés en dur supplémentaires.
6: Le fichier doit être identifié comme un fichier de données.
C'est foo: data
quand il n'a pas réussi à comprendre quoi que ce soit sur le fichier.
Il existe également d'autres petites balises qui peuvent apparaître. Un fichier exécutable ( +x
) inclura " executable
" dans la sortie, généralement séparé par des virgules. L' file
implémentation peut également connaître des choses supplémentaires sur certains formats de fichiers pour pouvoir décrire des points supplémentaires à leur sujet, comme dans votre " PDF document, version 1.4
".