FILE(1) | General Commands Manual | FILE(1) |
file
—
Déterminer le type d'un fichier
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=valeur] file
... |
file |
-C [-m
fichiers_magiques] |
file |
[--help ] |
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).
--apple
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
-C
,
--compile
-c
,
--checking-printout
-m
pour
déboguer un nouveau fichier magique avant de l'installer.-d
-E
-e
,
--exclude
nom_testEMX
(seulement sur
EMX).--exclude-quiet
--exclude
, mais ignorer les tests que
file
ne reconnait pas. Cela est destiné
à la compatibilité avec les anciennes versions de
file
.--extension
-F
,
--separator
separateur-f
,
--files-from
fichier_de_nomsfile
. 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
POSIXLY_CORRECT
n'est pas définie.-i
,
--mime
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
-i
, mais n'afficher que le(s)
élement(s) spécifié(s).-k
,
--keep-going
-r
). Le motif magique avec la plus grande valeur
(voir l'option -l
) vient en premier.-l
,
--list
-k
).-L
,
--dereference
POSIXLY_CORRECT
est définie.-m
,
--magic-file
magicfiles-N
,
--no-pad
-n
,
--no-buffer
-p
,
--preserve-date
file
ne les a jamais lus.-P
,
--parameter
name=valueNom | 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
file
traduit les caractères non-imprimables
dans leur représentation octale.-s
,
--special-files
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
-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
-z
,
--uncompress
-Z
,
--uncompress-noreport
-0
,
--print0
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
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
.
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 :
$ 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
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
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
.
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.
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 ⟨ian@darwinsys.com⟩ 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 ⟨cudcv@warwick.ac.uk⟩, 1989.
Guy Harris, ⟨guy@netapp.com⟩, a effectué de nombreuses modifications de 1993 à nos jours.
Le développement initial et la maintenance de 1990 à aujourd'hui est de Christos Zoulas ⟨christos@astron.com⟩.
Modifié par Chris Lowth ⟨chris@lowth.com⟩,
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 ⟨enf@pobox.com⟩, juillet 2000, pour identifier les codes de caractères et essayer d'identifier les langages des fichiers non-ASCII.
Modifié par Reuben Thomas ⟨rrt@sc3d.org⟩, 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.
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.
Merci de rapporter les bogues et d'envoyer les patchs au traqueur de bogue à https://bugs.astron.com/ ou à la liste de diffusion à ⟨file@astron.com⟩ (visitez d'abord https://mailman.astron.com/mailman/listinfo/file pour vous inscrire).
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.
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.
La traduction française de cette page de manuel a été créée par Frédéric Delanoy <delanoy_f@yahoo.com> et bubu <bubub@no-log.org>
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 à debian-l10n-french@lists.debian.org
26 octobre 2022 | Debian |