NOM

fileDéterminer le type d'un fichier

SYNOPSIS

file [-bcdEhiklLNnprsSvzZ0] [--apple] [--exclude-quiet] [--extension] [--mime-encoding] [--mime-type] [-e nom_test] [-F séparateur] [-f fichier_de_noms] [-m fichiers_magiques] [-P nom=valeurfile ...

file -C [-m fichiers_magiques]

file [--help]

DESCRIPTION

Cette page de manuel documente la version 5.44 de la commande file.
file teste chaque argument dans le but de les classer. Il y a trois ensembles de tests qui se déroulent dans cet ordre : tests du système de fichiers, tests magiques et tests de langage. Le premier test qui réussit provoque l'affichage du type de fichier.
Le type affiché contiendra généralement un des mots text (le fichier ne contient que des caractères affichables et quelques caractères de contrôle courants et peut probablement être lu sur un terminal ASCII) de façon sûre, executable (le fichier contient le résultat de la compilation d'un programme sous une forme compréhensible pour des noyaux UNIX ou autres) ou data signifiant tout le reste (les données sont généralement “binaire” ou non-affichable). Les exceptions sont des formats de fichiers bien connus (fichiers core, archives tar) qui sont connus pour contenir des données binaires. Lors de la modification des fichiers magiques ou du programme lui-même, assurez-vous de « préserver ces mots clé ». Les utilisateurs comptent sur le fait que tous les fichiers lisibles d'un répertoire ont le mot “text” affiché. Ne faites pas comme a fait Berkeley en changeant “shell commands text” en “shell script”.
Les tests du système de fichiers sont basés sur l'examen du retour d'un appel système stat(2). Le programme vérifie si le fichier est vide, ou si c'est un type de fichier spécial. Tous les types de fichiers connus appropriés au système sur lequel vous travaillez (sockets, liens symboliques ou tubes nommés (FIFO) sur les systèmes qui les implémentent) sont reconnus de façon intuitive s'ils sont définis dans le fichier d'en-tête du système <sys/stat.h>.
Les tests « magiques » sont utilisés pour rechercher des fichiers contenant des données dans des formats particuliers. L'exemple canonique de cela est un fichier exécutable binaire (programme compilé), dont le format est défini dans <elf.h>, <a.out.h> et peut-être dans <exec.h> dans le répertoire include standard. Ces fichiers contiennent un “nombre magique” stocké à un emplacement particulier près du début du fichier qui dit au système d'exploitation UNIX que le fichier est un exécutable binaire et lequel parmi les nombreux types. Le concept de “nombre magique” a été appliqué par extension aux fichiers de données. Tout fichier contenant un identifiant invariable à un petit décalage fixé dans le fichier peut généralement être décrit de cette manière. L'information identifiant ces fichiers est lue à partir de /etc/magic et du fichier magique compilé /usr/share/misc/magic.mgc ou des fichiers présents dans le répertoire /usr/share/misc/magic si le fichier compilé n'existe pas. De plus, si ou $HOME/.magic existent, ils seront utilisés de préférence aux fichiers magiques du système.
Si un fichier ne correspond à aucune entrées du fichier magique, il est examiné afin de voir s'il semble être un fichier texte. Les jeux de caractères ASCII, ISO-8859, ASCII-étendu 8 bits non ISO (tels ceux utilisés sur Macintosh et les systèmes de PC IBM), Unicode encodés en UTF-8 ou en UTF-16 et les jeux de caractères EBCDIC peuvent être différenciés par les différents intervalles et séquences d'octets qui constituent le texte imprimable dans chaque jeu. Si un fichier passe avec succès l'un de ces tests, son jeu de caractères est signalé. Les fichiers ASCII, ISO-8859-x, UTF-8 et ASCII-étendu sont identifiés comme “text” (texte), car ils sont pour la plupart lisibles sur pratiquement n'importe quel terminal ; UTF-16 et EBCDIC sont seulement des “character data” (données caractères), car, même contenant du texte, celui-ci nécessite une traduction avant de pouvoir être lu. De plus, file essaiera de déterminer d'autres caractéristiques des fichiers type texte. Si les lignes d'un fichier sont terminées par CR, CRLF ou NEL au lieu du standard Unix LF, ce sera signalé. Les fichiers qui contiennent des séquences d'échappement intégrées ou de la surimpression seront également identifiés.
Une fois que file a déterminé le jeu de caractères utilisé dans un fichier de type texte, il essaiera de déterminer dans quel langage le fichier est écrit. Les tests de langage cherchent des chaînes particulières (cf. <names.h>) qui peuvent apparaître n'importe où dans les quelques premiers blocs d'un fichier. Par exemple, le mot-clé .br indique que le fichier est très probablement un fichier d'entrée troff(1), comme le mot-clé struct indique un programme en C. Ces tests sont moins fiables que les deux groupes précédents, ils sont donc réalisés en dernier. Les routines de test de langage testent également quelques autres types divers (comme les archives tar(1) ou les fichiers JSON).
Tout fichier qui ne peut pas être identifié comme ayant été écrit dans un des jeux de caractères listés plus haut est simplement considéré comme “data” (données).

OPTIONS

--apple
Faire en sorte que la commande file affiche le type de fichier et le code créateur tel qu'utilisé par les vieilles versions de MacOS. Le code consiste en huit lettres, la première décrivant le type de fichier, la dernière le créateur. Cette option ne fonctionne bien qu'avec les formats de fichiers où la sortie de style apple est définie.
-b, --brief
Ne pas faire précéder les lignes de sortie par les noms de fichiers (mode bref).
-C, --compile
Écrire un fichier de sortie magic.mgc qui contient une version pré-analysée du fichier ou du répertoire magique.
-c, --checking-printout
Provoquer un affichage pour vérification de la forme analysée du fichier magique. Cela est habituellement utilisé en conjonction avec l'option -m pour déboguer un nouveau fichier magique avant de l'installer.
-d
Afficher les informations de débogage interne vers stderr.
-E
Pour les erreurs de système de fichiers (fichier non trouvé, etc), au lieu de traiter l'erreur comme une sortie normale comme POSIX l'exige et de continuer, émettre un message d'erreur et quitter.
-e, --exclude nom_test
Exclure le test nommé dans nom_test de la liste des tests pour déterminer le type de fichier. Les noms de test valables sont :
apptype
Application de type EMX (seulement sur EMX).
ascii
Différents types de fichiers texte (ce test essaiera de deviner l'encodage du texte, sans respecter les réglages de l'option ‘encoding’).
encoding
Différents encodages de textes pour des tests magiques « doux ».
tokens
Ignoré pour la rétrocompatibilité.
cdf
Affiche les détails des fichiers de documents composés (Compound Documents Files).
compress
Chercher et regarder dans des fichiers compressés.
csv
Vérifie les fichiers de valeurs séparées par des virgules.
elf
Afficher les détails de fichier ELF, à condition que les tests magiques doux soient activés et que le magique elf soit trouvé.
json
Examiner les fichiers JSON (RFC-7159) en les analysant pour conformité.
soft
Consulter les fichiers magiques.
tar
Examiner les fichiers tar en vérifiant la somme de contrôle de 512 octets de l'en-tête tar. L'exclusion de ce test peut fournir plus de contenu détaillé en utilisant la méthode magique douce (soft).
text
Un synonyme pour ‘ascii’.
--exclude-quiet
Comme --exclude, mais ignorer les tests que file ne reconnait pas. Cela est destiné à la compatibilité avec les anciennes versions de file.
--extension
Afficher sous forme de liste séparée par des barres obliques les extensions valables pour le type de fichier trouvé.
-F, --separator separateur
Utiliser les chaînes spécifiées comme séparateur entre le nom de fichier et le résultat sur le fichier renvoyés. Par défaut ‘:’.
-f, --files-from fichier_de_noms
Lire le nom des fichiers à examiner à partir du fichier_de_noms (un par ligne) avant la liste des arguments. Un fichier_de_noms ou au moins un argument de nom de fichier doit être présent ; pour tester l'entrée standard, utilisez ‘-’ comme argument de nom de fichier. Veuillez noter que le fichier_de_noms est déplié et que les noms de fichiers inclus sont traités lorsque cette option est rencontrée et cela avant tout autre traitement d'options. Cela permet de traiter plusieurs listes de fichiers avec différents arguments de ligne de commande avec la même invocation file. Cependant, si vous voulez définir le délimiteur, vous devez le faire avant de spécifier la liste de fichiers, comme : “-F @ -f fichier_de_noms”, au lieu de : “-f fichier_de_noms -F @”.
-h, --no-dereference
Cette option fait que les liens symboliques ne sont pas suivis (pour les systèmes qui gèrent les liens symboliques). Il s'agit du comportement par défaut si la variable d'environnement POSIXLY_CORRECT n'est pas définie.
-i, --mime
Faire en sorte que la commande file affiche des chaînes de type mime plutôt que celles plus traditionnelles facilement lisibles par un humain. Il peut dire par exemple ‘text/plain; charset=us-ascii’ au lieu de “ASCII text”.
--mime-type, --mime-encoding
Comme -i, mais n'afficher que le(s) élement(s) spécifié(s).
-k, --keep-going
Ne pas s'arrêter à la première correspondance, mais continuer. Les correspondances subséquentes seront préfixées par la chaîne ‘\012- ’. (si vous voulez une nouvelle ligne, consultez l'option -r). Le motif magique avec la plus grande valeur (voir l'option -l) vient en premier.
-l, --list
Afficher une liste de motifs et leur valeur triée par ordre décroissant de valeur de magic(5) qui est utilisée pour la correspondance (voir aussi l'option -k).
-L, --dereference
Cette option fait que les liens symboliques sont suivis, comme l'option du même nom dans ls(1) (sur les systèmes qui prennent en charge les liens symboliques). C'est le comportement par défaut si la variable d'environnement POSIXLY_CORRECT est définie.
-m, --magic-file magicfiles
Indiquer une liste alternative de fichiers et répertoires contenant les nombres magiques. Cela peut être un simple item ou une liste de fichiers séparée par des deux-points ( :). Si un fichier magique compilé est trouvé en même temps qu'un fichier ou un répertoire, il sera utilisé à la place.
-N, --no-pad
Ne pas remplir les noms de fichiers pour qu'ils soient alignés dans la sortie.
-n, --no-buffer
Forcer le vidage de stdout après l'examen de chaque fichier. Cela n'est utile que lors de l'examen d'une liste de fichiers. Cela est destiné à être être utilisé par des programmes qui veulent récupérer le type de fichier depuis un tube.
-p, --preserve-date
Sur les systèmes qui prennent en charge utime(3) ou utimes(2), tenter de préserver la date d'accès des fichiers analysés, pour faire semblant que file ne les a jamais lus.
-P, --parameter name=value
Définir diverses limites de paramètres.
Nom Valeur_par_défaut Explication
bytes 1048576 nombre maximal d'octets à lire depuis le fichier
elf_notes 256 maximum de notes ELF traitées
elf_phnum 2048 maximum de sections de programme ELF traitées
elf_shnum 32768 maximum de sections ELF traitées
encoding 65536 nombre maximal d'octets à analyser pour l'évaluation de l'encodage
indir 50 limite de récursion pour la magie indirecte
name 50 limite du nombre d'utilisations pour le nom/l'utilisation magique
regex 8192 limite de longueur pour les recherches regex
-r, --raw
Ne pas traduire les caractères non-imprimables en \ooo. Normalement file traduit les caractères non-imprimables dans leur représentation octale.
-s, --special-files
Normalement, file tente seulement de lire et de déterminer le type de fichiers passés en argument que stat(2) rapporte être des fichiers ordinaires. Cela évite les problèmes, car lire des fichiers spéciaux peut avoir des conséquences particulières. Indiquer l'option -s fait en sorte que file lise aussi les fichiers d'arguments qui sont des fichiers spéciaux en mode bloc ou caractère. C'est utile pour déterminer le type du système de fichiers des données dans des partitions de disque brutes qui sont des fichiers spéciaux en mode bloc. Cette option fait aussi en sorte que file ne tienne pas compte de la taille de fichier telle qu'elle est indiquée par stat(2), puisque, sur certains systèmes, stat(2) indique une taille nulle pour les partitions du disque brutes.
-S, --no-sandbox
Sur les systèmes où libseccomp (https://github.com/seccomp/libseccomp) est disponible, l'option -S désactive le bac à sable qui est activé par défaut. Cette option est nécessaire à file pour exécuter des programmes de décompression externes, par exemple dans le cas où l'option -z est indiquée et où les décompresseurs intégrés ne sont pas disponibles. Sur les systèmes où le bac à sable n'est pas disponible, cette option n'a aucun effet.
Note : Cette version Debian de file a été construite sans la prise en charge de seccomp, donc cette option n'a aucun effet.
-v, --version
Afficher la version du programme et quitter.
-z, --uncompress
Essayer de regarder dans les fichiers compressés.
-Z, --uncompress-noreport
Essayer de regarder dans les fichiers compressés, mais n'afficher des informations que sur le contenu, pas sur la compression.
-0, --print0
Ajouter un caractère NULL ‘\0’ après la fin du nom de fichier. Pratique pour couper ( cut(1)) la sortie. Cela n'affecte pas le séparateur, qui est toujours affiché.
Si cette option est répétée plus d'une fois, alors file affiche juste le nom de fichier suivi d'un zéro suivi de la description (ou ERROR: text) suivi par un second zéro pour chaque entrée.
--help
Afficher un message d'aide puis quitter.

ENVIRONNEMENT

La variable d'environnement MAGIC peut être utilisée pour spécifier le nom du fichier de nombres magiques par défaut. Si cette variable est définie, alors file n'essaiera pas d'ouvrir $HOME/.magic. Le cas échéant, file ajoute “.mgc” à la valeur de cette variable de manière appropriée. La variable d'environnement POSIXLY_CORRECT contrôle (sur les systèmes qui gèrent les liens symboliques) si file essaie de suivre les liens symboliques ou non. Si elle est définie, alors file suit les liens symboliques, autrement il ne le fait pas. Ce comportement est aussi contrôlé par les options -L et -h.

FICHIERS

/usr/share/misc/magic.mgc
Liste compilée des nombres magiques par défaut.
/usr/share/misc/magic
Répertoire contenant les fichiers magiques par défaut.

CODE DE RETOUR

file quittera avec 0 si l'opération a réussi ou >0 si une erreur a été rencontrée. Les erreurs suivantes provoquent des messages de diagnostic, mais n'affectent pas le code de retour du programme (comme requis par POSIX), à moins que -E ne soit indiquée :
  • Un fichier n'a pas été trouvé
  • Il n'y a pas de permission pour lire un fichier
  • Le type de fichier ne peut pas être déterminé

EXEMPLES

$ file file.c file /dev/{wd0a,hda} 
file.c:	  C program text 
file:	  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
	  dynamically linked (uses shared libs), stripped 
/dev/wd0a: block special (0/0) 
/dev/hda: block special (3/0) 
 
$ file -s /dev/wd0{b,d} 
/dev/wd0b: data 
/dev/wd0d: x86 boot sector 
 
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10} 
/dev/hda:   x86 boot sector 
/dev/hda1:  Linux/i386 ext2 filesystem 
/dev/hda2:  x86 boot sector 
/dev/hda3:  x86 boot sector, extended partition table 
/dev/hda4:  Linux/i386 ext2 filesystem 
/dev/hda5:  Linux/i386 swap file 
/dev/hda6:  Linux/i386 swap file 
/dev/hda7:  Linux/i386 swap file 
/dev/hda8:  Linux/i386 swap file 
/dev/hda9:  empty 
/dev/hda10: empty 
 
$ file -i file.c file /dev/{wd0a,hda} 
file.c:	     text/x-c 
file:	     application/x-executable 
/dev/hda:     application/x-not-regular-file 
/dev/wd0a:    application/x-not-regular-file 

VOIR AUSSI

hexdump(1), od(1), strings(1), magic(5)

CONFORMITÉ AUX STANDARDS

Ce programme est supposé dépasser la définition de l'interface System V de FILE(CMD), pour autant qu'on puisse le déterminer à partir du langage vague qu'il contient. Son comportement est en grande partie compatible avec le programme System V du même nom. Cette version connaît cependant plus de nombres magiques et produira donc des sorties différentes (bien que plus précises) dans de nombreux cas.
La différence significative entre cette version et celle de System V est que cette version traite tout espace blanche comme un délimiteur, donc les espaces dans les chaînes de motif doivent être protégées. Par exemple,
>10	string	language impress	(imPRESS data)
dans un fichier de nombres magiques existant devrait être changé en
>10	string	language\ impress	(imPRESS data)
De plus, dans cette version, si une chaîne de motif contient une barre oblique inversée (  \ ), elle doit être protégée. Par exemple
0	string		\begindata	Andrew Toolkit document
dans un fichier de nombres magiques existant devrait être changé en
0	string		\\begindata	Andrew Toolkit document
Les éditions 3.2 et ultérieures de SunOS de Sun Microsystems incluent une commande file dérivée de celle de System V, mais avec quelques extensions. Cette version diffère de celle de Sun seulement sur des points mineurs. Elle inclut l'utilisation de l'extension de l'opérateur par exemple,
>16	long&0x7fffffff	>0		not stripped

SÉCURITÉ

Sur les systèmes où libseccomp (https://github.com/seccomp/libseccomp) est disponible, file permet de limiter les appels système à ceux qui sont nécessaires au fonctionnement du programme. L'application de cette limitation n'apporte aucun avantage en matière de sécurité lorsqu'il est demandé à file de décompresser des fichiers d'entrée en exécutant des programmes externes avec l'option -z. Pour activer l'exécution de décompresseurs externes, il est nécessaire de désactiver le bac à sable en utilisant l'option -S.

RÉPERTOIRE MAGIQUE

Les entrées du fichier magique ont été recueillies à partir de diverses sources, principalement USENET, et ont été fournies par divers auteurs. Christos Zoulas (adresse ci-dessous) collectera les entrées additionnelles ou corrigées du fichier magique. Une mise à jour des entrées du fichier magique sera distribuée périodiquement.
L'ordre des entrées présentes dans le fichier magique est important. Suivant le système utilisé, l'ordre dans lequel elles sont rangées peut être incorrect.

HISTORIQUE

Il y a eu une commande file dans chaque UNIX depuis au moins Research Version 4 (la page de manuel date de novembre 1973). La version System V introduit un changement majeur significatif : la liste externe de types magiques. Cela a légèrement ralenti le programme mais l'a rendu beaucoup plus flexible.
Ce programme, basé sur la version de System V, a été écrit par Ian Darwin ⟨[email protected]⟩ sans regarder aucun code source de quelqu'un d'autre.
John Gilmore a révisé le code intensivement, l'améliorant par rapport à la première version. Geoff Collyer a trouvé plusieurs incohérences et fourni quelques entrées de fichiers magiques. Les contributions de l'opérateur ‘&’ ont été faite par Rob McMahon ⟨[email protected]⟩, 1989.
Guy Harris, ⟨[email protected]⟩, a effectué de nombreuses modifications de 1993 à nos jours.
Le développement initial et la maintenance de 1990 à aujourd'hui est de Christos Zoulas ⟨[email protected]⟩.
Modifié par Chris Lowth ⟨[email protected]⟩, 2000 : gestion de l'option -i pour afficher les chaînes de type mime, en utilisant un fichier magique et une logique interne alternatifs.
Modifié par Eric Fischer ⟨[email protected]⟩, juillet 2000, pour identifier les codes de caractères et essayer d'identifier les langages des fichiers non-ASCII.
Modifié par Reuben Thomas ⟨[email protected]⟩, 2007-2011, pour améliorer la prise en charge de MIME, fusionner la magie MIME et non MIME, gérer les répertoires ainsi que les fichiers de nombres magiques, appliquer de nombreuses corrections de bogues, mettre à jour et corriger beaucoup de nombres magiques, améliorer la construction du système, améliorer la documentation et réécrire les liaisons Python en Python pur.
La liste des contributeurs au répertoire ‘magic’ (fichiers magiques) est trop longue pour l'inclure ici. Vous vous reconnaîtrez ; merci à vous. Beaucoup de contributeurs sont listés dans les fichiers source.

NOTICE LÉGALE

Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Couvert par le copyright Berkeley Software Distribution standard ; consulter le fichier COPYING dans la distribution des sources.
Les fichiers tar.h et is_tar.c ont été écrits par John Gilmore à partir de son programme du domaine public, et ne sont pas couverts par la licence ci-dessus.

BOGUES

Merci de rapporter les bogues et d'envoyer les patchs au traqueur de bogue à https://bugs.astron.com/ ou à la liste de diffusion à ⟨[email protected]⟩ (visitez d'abord https://mailman.astron.com/mailman/listinfo/file pour vous inscrire).

À FAIRE

Corriger la sortie afin que les tests pour les drapeaux MIME et APPLE ne soient pas partout nécessaires et que la sortie réelle ne soit faite qu'à un seul endroit. Cela a besoin d'être élaboré. Suggestion : placer les sorties possibles dans une liste, puis choisir la dernière valeur (la plus spécifique, on espère) à la fin, ou utiliser celle par défaut si la liste est vide. Cela ne doit pas ralentir l'évaluation.
La manipulation de MAGIC_CONTINUE et l'affichage \012 - entre les entrées est maladroit et compliqué ; à remanier et centraliser.
Certaines logiques d'encodage sont codées en dur dans encoding.c et pourraient être déplacées dans les fichiers magiques si nous avions une annotation !:charset.
Continuez de corriger tous les bogues de nombres magiques. Consultez le système de suivi de bogues de Debian pour une bonne source d'information.
Stocker les chaînes de longueur quelconque, par exemple pour les motifs %s, pour qu'elles puissent être affichées. Corrige le bogue Debian nº 271672. Cela peut se faire en allouant des chaînes dans un pool de chaînes, en stockant le pool de chaînes à la fin du fichier magique et en convertissant tous les pointeurs de chaînes en décalages relatifs au pool de chaînes.
Ajouter la syntaxe pour les décalages relatifs après le niveau actuel (Debian bug nº 466037).
Faire un fichier -ki work, c'est-à-dire donner plusieurs types MIME.
Ajouter une bibliothèque zip pour jeter un œil dans les documents Office2007 afin d'afficher plus de détails sur leur contenu.
Ajouter une option pour afficher les URL pour les sources des descriptions de fichiers.
Combiner les scripts de recherches et ajouter une méthode pour mapper les noms d'exécutables en type MIME (par exemple, avoir une valeur magique pour !:mime qui fasse que la chaîne résultante soit recherchée dans une table). Cela devrait empêcher l'ajout de la même magie répétitivement pour chaque nouvel interpréteur de hash-bang.
Lorsqu'un descripteur de fichier est disponible, nous pouvons passer et ajuster la mémoire tampon à la place de la gestion de la mémoire tampon que nous faisons actuellement.
Arranger “name” et “use” pour vérifier la cohérence à la compilation (dupliquer “name”, “use” pointant vers “name” indéfini). Rendre “name” / “use” plus efficaces en gardant une liste classée de noms. Le cas spécial ^ pour inverser le boutisme dans l'analyseur syntaxique afin qu'il ne soit pas nécessaire de le protéger, et le documenter.
Si les décalages indiqués en interne dans le fichier dépassent la taille du tampon (la variable HOWMANY dans fichier.h), alors nous ne cherchons pas à atteindre ce décalage et nous abandonnons. Il serait préférable que la gestion des tampons se fasse quand le descripteur de fichier est disponible pour pouvoir chercher autour du fichier. On doit néanmoins être attentif, car cela peut avoir un impact en matière de performance et donc de sécurité, car il est possible de ralentir les choses en cherchant de façon répétée.
Il y a maintenant une prise en charge pour garder des tampons séparés et avoir des décalages à partir de la fin du fichier, mais la gestion du tampon interne nécessite encore un remaniement.

DISPONIBILITÉ

Vous pouvez obtenir la dernière version de l'auteur original par FTP anonyme sur ftp.astron.com dans le répertoire /pub/file/file-X.YZ.tar.gz.

TRADUCTION

La traduction française de cette page de manuel a été créée par Frédéric Delanoy <[email protected]> et bubu <[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à [email protected]

Recommended readings

Pages related to file you should read also: