Manuels pour la ligne de commande

Man » Manuel file en ligne - documentation détaillée en ligne pour la page de manuel file

🌍
file — déterminer le type de fichier

SYNOPSIS

file   [-bcdEhiklLNnprsSvzZ0]   [--apple]   [--exclude-quiet]   [--extension]   [--mime-encoding]
[--mime-type] [-e testname] [-F separator] [-f namefile]  [-m  magicfiles]  [-P  name=value]
file ...
file -C [-m magicfiles]
file [--help]

DESCRIPTION

Cette page de manuel documente la version 5.46 de la commande file.

file  teste chaque argument afin de déterminer son type. Il effectue trois séries de tests, dans l’ordre suivant : tests du système de fichiers, tests « magiques » et tests linguistiques. Le premier test qui réussit entraîne l’affichage du type de fichier.

Le type affiché contient généralement l’un des mots suivants : text (le fichier ne contient que des caractères imprimables et quelques caractères de contrôle courants et est probablement sûr à lire sur un terminal ASCII), executable (le fichier contient le résultat de la compilation d’un programme dans un format compréhensible par un noyau UNIX ou un autre), ou data (ce qui signifie tout autre chose, les données sont généralement « binaires » ou non imprimables). Les exceptions sont les formats de fichiers bien connus (fichiers core, archives tar) qui contiennent des données binaires. Lorsque vous modifiez les fichiers « magiques » ou le programme lui-même, assurez-vous de conserver ces mots-clés. Les utilisateurs dépendent du fait que tous les fichiers lisibles d’un répertoire affichent le mot « text ». Ne faites pas comme Berkeley et ne changez pas « shell commands text » en « shell script ».

Les tests du système de fichiers sont basés sur l’examen du résultat d’un appel système stat(2). Le programme vérifie si le fichier est vide ou s’il s’agit d’un type de fichier spécial. Tout type de fichier connu approprié au système sur lequel vous exécutez le programme (sockets, liens symboliques ou tubes nommés (FIFO) sur les systèmes qui les prennent en charge) est déduit s’il est défini dans le fichier d’en-tête du système .

Les tests « magiques » sont utilisés pour vérifier les fichiers avec des données dans des formats fixes spécifiques. L’exemple canonique de ceci est un fichier exécutable binaire (programme compilé) a.out, dont le format est défini dans , et éventuellement dans le répertoire include standard. Ces fichiers contiennent un « nombre magique » stocké à un endroit particulier près du début du fichier, qui indique au système d’exploitation UNIX qu’il s’agit d’un fichier exécutable binaire et de son type. Le concept de « nombre magique » a été étendu aux fichiers de données. Tout fichier contenant un identifiant invariant à un petit décalage fixe dans le fichier peut généralement être décrit de cette manière. Les informations identifiant ces fichiers sont lues à partir de /etc/magic et du fichier « magique » compilé /usr/share/misc/magic.mgc, ou des fichiers du répertoire /usr/share/misc/magic si le fichier compilé n’existe pas. De plus, si $HOME/.magic.mgc ou $HOME/.magic existe, il sera utilisé de préférence aux fichiers « magiques » du système.

Si un fichier ne correspond à aucune des entrées du fichier « magic », il est examiné pour déterminer s’il semble être un fichier texte. Les jeux de caractères ASCII, ISO-8859-x, les jeux de caractères étendus ASCII non-ISO (tels que ceux utilisés sur les systèmes Macintosh et IBM PC), Unicode encodé en UTF-8, Unicode encodé en UTF-16 et le jeu de caractères EBCDIC peuvent être distingués par les différentes plages et séquences d’octets qui constituent le texte imprimable dans chaque ensemble. Si un fichier passe l’un de ces tests, son jeu de caractères est signalé. Les fichiers ASCII, ISO-8859-x, UTF-8 et ASCII étendus sont identifiés comme « texte » car ils seront pour la plupart lisibles sur presque n’importe quel terminal ; les fichiers UTF-16 et EBCDIC ne sont que des « données de caractères » car, bien qu’ils contiennent du texte, ce texte nécessitera une traduction avant de pouvoir être lu.

De plus, le programme tentera de déterminer d’autres caractéristiques des fichiers de type texte. Si les lignes d’un fichier sont terminées par CR, CRLF ou NEL, au lieu de LF (la norme Unix), cela sera indiqué. Les fichiers contenant des séquences d’échappement intégrées ou des caractères de superposition seront également identifiés.

Une fois que le programme a déterminé le jeu de caractères utilisé dans un fichier de type texte, il tentera de déterminer la langue dans laquelle le fichier est écrit. Les tests de langue recherchent des chaînes spécifiques (voir ) qui peuvent apparaître n’importe où dans les 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), tout comme le mot-clé struct indique un programme C. Ces tests sont moins fiables que les deux groupes précédents, ils sont donc effectués en dernier. Les routines de test de langue testent également certains éléments divers (tels que les archives tar(1) et les fichiers JSON).

Tout fichier qui ne peut être identifié comme étant écrit dans l’un des jeux de caractères énumérés ci-dessus est simplement qualifié de « données ».

OPTIONS

--apple
Permet à la commande `file` d’afficher le type de fichier et le code créateur tel qu’utilisé par les anciennes versions de MacOS. Le code se compose de huit lettres, la première décrivant le type de fichier et la dernière, le créateur. Cette option ne fonctionne correctement que pour les formats de fichiers pour lesquels une sortie de type Apple est définie.

-b, --brief
N’ajoute pas le nom des fichiers au début des lignes de sortie (mode bref).

-C, --compile
Écrit un fichier de sortie `magic.mgc` qui contient une version pré-analysée du fichier ou du répertoire « magic ».

-c, --checking-printout
Affiche une sortie de vérification de la forme analysée du fichier « magic ». Cette option est généralement utilisée en conjonction avec l’option `-m` pour déboguer un nouveau fichier « magic » avant de l’installer.

-d
Affiche des informations de débogage internes sur stderr.

-E
En cas d’erreurs de système de fichiers (fichier introuvable, etc.), au lieu de gérer l’erreur comme une sortie normale, comme l’exige POSIX, affiche un message d’erreur et quitte.

-e, --exclude testname
Exclut le test nommé dans testname de la liste des tests utilisés pour déterminer le type de fichier. Les noms de test valides sont :

apptype  Type d’application EMX (uniquement sur EMX).

ascii  Divers types de fichiers texte (ce test tentera de deviner le codage du texte, indépendamment du paramètre de l’option « encoding »).

encoding  Différents codages de texte pour les tests de type souple.

tokens  Ignoré pour la compatibilité avec les versions antérieures.

cdf  Affiche les détails des fichiers de documents composites.

compress  Vérifie et examine les fichiers compressés.

csv  Vérifie les fichiers CSV (Comma Separated Value).

elf  Affiche les détails des fichiers ELF, à condition que les tests de type souple soient activés et que la signature ELF soit trouvée.

json  Examine les fichiers JSON (RFC-7159) en les analysant pour vérifier leur conformité.

soft  Consulte les fichiers de type.

simh  Examine les fichiers de bande SIMH.

tar  Examine les fichiers tar en vérifiant la somme de contrôle de l’en-tête tar de 512 octets. L’exclusion de ce test peut permettre d’obtenir une description du contenu plus détaillée en utilisant la méthode de type souple.

text  Un synonyme de « ascii ».

--exclude-quiet
Comme --exclude, mais ignore les tests que le fichier ne reconnaît pas. Ceci est destiné à la compatibilité avec les versions antérieures de la commande file.

--extension
Affiche une liste des extensions valides pour le type de fichier trouvé, séparées par une barre oblique.

-F, --separator separator
Utilise la chaîne spécifiée comme séparateur entre le nom du fichier et le résultat du fichier renvoyé. La valeur par défaut est « : ».

-f, --files-from namefile
Lit les noms des fichiers à examiner à partir de namefile (un par ligne) avant la liste des arguments. Soit namefile, soit 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 namefile est décompressé et que les noms de fichiers contenus sont traités lorsque cette option est rencontrée et avant tout autre traitement des options. Cela permet de traiter plusieurs listes de fichiers avec différents arguments de ligne de commande lors d’une même invocation de la commande file. Ainsi, si vous souhaitez définir le délimiteur, vous devez le faire avant de spécifier la liste des fichiers, par exemple : « -F @ -f namefile », au lieu de : « -f namefile -F @ ».

-h, --no-dereference
Cette option empêche les liens symboliques d’être suivis (sur les systèmes qui prennent en charge les liens symboliques). C’est la valeur par défaut si la variable d’environnement POSIXLY_CORRECT n’est pas définie.

-i, --mime
Cette option permet à la commande file de renvoyer des chaînes de type MIME plutôt que les chaînes plus traditionnelles lisibles par l’homme. Ainsi, elle peut renvoyer « text/plain ; charset=us-ascii » au lieu de « Texte ASCII ».

--mime-type, --mime-encoding
Comme -i, mais affiche uniquement l’élément ou les éléments spécifiés.

-k, --keep-going
Ne pas s’arrêter au premier résultat. Continuer. Les résultats suivants seront précédés de la chaîne « \012- ». (Si vous souhaitez une nouvelle ligne, voir l’option -r). Le modèle de type avec la force la plus élevée (voir l’option -l) est affiché en premier.

-l, --list
Affiche une liste de motifs et de leur force, triée par ordre décroissant de la force « magic(5) » utilisée pour la correspondance (voir également l’option -k).

-L, --dereference
Cette option fait suivre les liens symboliques, comme l’option du même nom dans [ls]({filename}../../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
Spécifie une liste alternative de fichiers et de répertoires contenant des définitions « magic ». Il peut s’agir d’un seul élément ou d’une liste séparée par des deux-points. Si un fichier « magic » compilé est trouvé à côté d’un fichier ou d’un répertoire, il sera utilisé à la place.

-N, --no-pad
N’aligne pas les noms de fichiers dans la sortie.

-n, --no-buffer
Force la sortie standard à être vidée après avoir vérifié chaque fichier. Ceci n’est utile que lorsqu’une liste de fichiers est vérifiée. Il est destiné à être utilisé par des programmes qui souhaitent obtenir la sortie de type de fichier à partir d’un canal.

-p, --preserve-date
Sur les systèmes qui prennent en charge utime(3) ou utimes(2), tente de conserver l’heure d’accès des fichiers analysés, pour faire comme si le fichier n’avait jamais été lu.

-P, --parameter name=value
Définit diverses limites de paramètres.

Nom         Par défaut    Explication
bytes        1M         nombre maximal d’octets à lire à partir du fichier
elf_notes    256        nombre maximal d’entrées ELF traitées
elf_phnum    2K         nombre maximal de sections de programme ELF traitées
elf_shnum    32K        nombre maximal de sections ELF traitées
elf_shsize   128MB      taille maximale de la section ELF traitée
encoding     65K        nombre maximal d’octets pour déterminer l’encodage
indir        50         limite de récursion pour la « magic » indirecte
name         100        limite d’utilisation pour la « magic » de type « name/use »
regex        8K         longueur maximale pour les recherches d’expressions régulières

-r, --raw
N’affiche pas les caractères non imprimables sous la forme \ooo. Normalement, file traduit les caractères non imprimables en leur représentation octale.

-s, --special-files
Normalement, file tente uniquement de lire et de déterminer le type des fichiers argument qui sont des fichiers ordinaires selon [stat]({filename}../../stat)(2). Cela évite les problèmes, car la lecture de fichiers spéciaux peut avoir des conséquences particulières. La spécification de l’option -s fait en sorte que file lise également les fichiers argument qui sont des fichiers spéciaux de type bloc ou caractère. Ceci est utile pour déterminer le type de système de fichiers des données contenues dans les partitions de disque brutes, qui sont des fichiers spéciaux de type bloc. Cette option fait également que file ignore la taille du fichier telle que rapportée par [stat]({filename}../../stat)(2), car sur certains systèmes, elle indique une taille de zéro pour les partitions de disque brutes.

-S, --no-sandbox
Sur les systèmes où libseccomp (https://github.com/seccomp/libseccomp) est disponible, l’option -S désactive le « sandboxing » qui est activé par défaut. Cette option est nécessaire pour que file exécute des programmes de décompression externes, c’est-à-dire lorsque l’option -z est spécifiée et que les décompresseurs intégrés ne sont pas disponibles. Sur les systèmes où le « sandboxing » n’est pas disponible, cette option n’a aucun effet.

Remarque : cette version Debian du fichier a été compilée sans prise en charge de seccomp, cette option n’a donc aucun effet.

-v, --version
Affiche la version du programme et se termine.

-z, --uncompress
Essaie d’examiner l’intérieur des fichiers compressés.

-Z, --uncompress-noreport
Essaie d’examiner l’intérieur des fichiers compressés, mais affiche uniquement des informations sur le contenu et non sur la compression.

-0, --print0
Affiche un caractère nul « \0 » après la fin du nom de fichier. Utile pour [cut]({filename}../../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, file affiche simplement le nom de fichier, suivi d’un NUL, suivi de la description (ou de la mention ERREUR : texte), suivi d’un deuxième NUL pour chaque entrée.

--help Affiche un message d’aide et se termine.

ENVIRONNEMENT

La variable d’environnement MAGIC peut être utilisée pour définir le nom de fichier de magie par défaut. Si cette variable est définie, file n’essaiera pas d’ouvrir $HOME/.magic. File ajoute « .mgc » à la valeur de cette variable, si nécessaire. La variable d’environnement POSIXLY_CORRECT contrôle (sur les systèmes qui prennent en charge les liens symboliques) si file tentera ou non de suivre les liens symboliques. Si elle est définie, file suit le lien symbolique, sinon il ne le suit pas. Cela est également contrôlé par les options -L et -h.

FICHIERS

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

CODE DE SORTIE

file se terminera avec 0 si l’opération a réussi ou avec une valeur supérieure à 0 en cas d’erreur. Les erreurs suivantes génèrent des messages de diagnostic, mais n’affectent pas le code de sortie du programme (comme l’exige POSIX), à moins que -E ne soit spécifié :
Un fichier ne peut pas être trouvé.
Il n’y a pas de permission de lire un fichier.
Le type de fichier ne peut pas être déterminé.

EXEMPLES

$ file file.c file /dev/{wd0a,hda}
file.c

La différence significative entre cette version et System V est que cette version traite tout espace blanc comme un délimiteur, de sorte que les espaces dans les chaînes de motif doivent être échappés. Par exemple,

>10     string  language impress        (imPRESS data)

dans un fichier magic existant devrait être modifié en

>10     string  language\ impress       (imPRESS data)

De plus, dans cette version, si une chaîne de motif contient une barre oblique inverse, elle doit être échappée. Par exemple,

0      string          \begindata      Andrew Toolkit document

dans un fichier magic existant devrait être modifié en

0      string          \\begindata     Andrew Toolkit document

Les versions SunOS 3.2 et ultérieures de Sun Microsystems incluent une commande file dérivée de la version System V, mais avec quelques extensions. Cette version diffère de celle de Sun de manière mineure. Elle inclut l’extension de l’opérateur « & », utilisé, par exemple, comme suit :

>16     long&0x7fffffff >0              not stripped

SÉCURITÉ

Sur les systèmes où libseccomp (https://github.com/seccomp/libseccomp) est disponible, la commande file applique une limitation des appels système aux seuls appels nécessaires au fonctionnement du programme. Cette application n’apporte aucun avantage en termes de sécurité lorsque la commande file est appelée pour décompresser des fichiers d’entrée en exécutant des programmes externes avec l’option -z. Pour permettre l’exécution de décompresseurs externes, il faut désactiver le sandbox en utilisant l’option -S.

RÉPERTOIRE MAGIC

Les entrées des fichiers magic ont été collectées à partir de diverses sources, principalement sur USENET, et ont été fournies par divers auteurs. Christos Zoulas (adresse ci-dessous) collectera des entrées de fichiers magic supplémentaires ou corrigées. Une consolidation des entrées de fichiers magic sera distribuée périodiquement.

L’ordre des entrées dans le fichier magic est important. En fonction du système que vous utilisez, l’ordre dans lequel elles sont assemblées peut être incorrect.

HISTORIQUE

Il existe une commande file dans chaque version d’UNIX depuis au moins la version de recherche 4 (page de manuel datée de novembre 1973). La version System V a introduit un changement majeur important : la liste externe de types magic. Cela a légèrement ralenti le programme, mais l’a rendu beaucoup plus flexible.

Ce programme, basé sur la version System V, a été écrit par Ian Darwin ⟨_\⟩ sans examiner le code source de quiconque.

John Gilmore a révisé le code de manière approfondie, l’améliorant par rapport à la première version. Geoff Collyer a trouvé plusieurs lacunes et a fourni certaines entrées de fichiers magic. Contributions de l’opérateur « & » par Rob McMahon, ⟨_\⟩, 1989.

Guy Harris, ⟨_\⟩, a apporté de nombreuses modifications de 1993 à nos jours.

Développement et maintenance principaux de 1990 à nos jours par Christos Zoulas ⟨_\⟩.

Modifié par Chris Lowth ⟨_\⟩, 2000 : gestion de l’option -i pour générer des chaînes de type MIME, en utilisant un fichier magic alternatif et une logique interne.


Modifié par Eric Fischer ⟨_\⟩, juillet 2000, pour identifier les codes de caractères et tenter d’identifier les langues des fichiers non-ASCII.

Modifié par Reuben Thomas ⟨_\⟩, 2007-2011, pour améliorer la prise en charge de MIME, fusionner les magics MIME et non-MIME, prendre en charge les répertoires ainsi que les fichiers de magic, appliquer de nombreuses corrections de bugs, mettre à jour et corriger de nombreux magics, améliorer le système de construction, améliorer la documentation et réécrire les liaisons Python en Python pur.

La liste des contributeurs au répertoire « magic » (fichiers magic) est trop longue pour être incluse ici. Vous savez qui vous êtes ; merci. De nombreux contributeurs sont répertoriés dans les fichiers sources.

AVIS JURIDIQUE

Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Couvert par le copyright standard de la distribution de logiciels Berkeley ; voir le fichier COPYING dans la distribution source.

Les fichiers tar.h et is_tar.c ont été écrits par John Gilmore à partir de son programme tar(1) du domaine public, et ne sont pas couverts par la licence ci-dessus.

BUGS

Veuillez signaler les bugs et envoyer les correctifs au suivi des bugs à l’adresse https://bugs.astron.com/ ou à la liste de diffusion à ⟨_\⟩ (visitez https://mailman.astron.com/mailman/listinfo/file pour vous abonner).

À FAIRE

Corriger la sortie afin que les tests des indicateurs MIME et APPLE ne soient plus nécessaires partout, et que la sortie réelle ne soit effectuée qu’à un seul endroit. Cela nécessite une conception. Suggestion : pousser les sorties possibles dans une liste, puis sélectionner la dernière sortie (la plus spécifique, on l’espère) à la fin, ou utiliser une valeur par défaut si la liste est vide. Cela ne doit pas ralentir l’évaluation.

La gestion de MAGIC_CONTINUE et l’impression de \012- entre les entrées sont maladroites et compliquées ; refactoriser et centraliser.

Une partie de la logique d’encodage est codée en dur dans encoding.c et peut être déplacée vers les fichiers magic si nous avions une annotation !:charset.

Continuer à supprimer tous les bugs magic. Voir Debian BTS pour une bonne source.

Stocker des chaînes de caractères de longueur arbitraire, par exemple pour les modèles %s, afin qu’elles puissent être affichées. Corrige le bug Debian n° 271672. Cela peut être fait en allouant des chaînes dans un pool de chaînes, en stockant le pool de chaînes à la fin du fichier magic et en convertissant tous les pointeurs de chaînes en décalages relatifs par rapport au pool de chaînes.

Ajouter une syntaxe pour les décalages relatifs par rapport au niveau actuel (bug Debian n° 466037).

Permettre à file -ki de fonctionner, c’est-à-dire de fournir plusieurs types MIME.

Ajouter une bibliothèque zip afin que nous puissions jeter un coup d’œil à l’intérieur des documents Office2007 pour afficher plus de détails sur leur contenu.

Ajouter une option pour afficher les URL des sources des descriptions des fichiers.

Combiner les recherches de script et ajouter un moyen de mapper les noms d’exécutables aux types MIME (par exemple, avoir une valeur magic pour !:mime qui fait que la chaîne résultante est recherchée dans une table). Cela éviterait d’ajouter le même magic à plusieurs reprises pour chaque nouvel interpréteur hash-bang.

Lorsqu’un descripteur de fichier est disponible, nous pouvons ignorer et ajuster le tampon au lieu de la gestion maladroite du tampon que nous effectuons actuellement.


Corriger « name » et « use » pour vérifier la cohérence au moment de la compilation (doublons de « name », « use » pointant vers un « name » non défini). Rendre « name »/« use » plus efficaces en conservant une liste triée des noms. Gérer le cas particulier de « ^ » pour inverser l’ordre des octets dans l’analyseur afin qu’il n’ait pas à être échappé, et documenter cela.

Si les décalages spécifiés en interne dans le fichier dépassent la taille du tampon (variable HOWMANY dans file.h), nous n’effectuons pas de recherche à cet emplacement, mais nous abandonnons. Il serait préférable que la gestion du tampon soit effectuée lorsque le descripteur de fichier est disponible afin que nous puissions effectuer des recherches dans le fichier. Il faut toutefois être prudent, car cela peut avoir des conséquences sur les performances et donc sur la sécurité, car on peut ralentir les choses en effectuant des recherches répétées.

Il existe désormais une prise en charge pour conserver des tampons séparés et avoir des décalages à partir de la fin du fichier, mais la gestion interne du tampon doit être revue.

DISPONIBILITÉ

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