Utiliser la commande file sous Linux

Mise à jour: 15/10/2023
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2023 Jean-Louis BICQUELET-SALAÜN

Utiliser la commande file sous Linux

La commande File sur Linux vous permet d‘obtenir des informations sur le type de fichier.
C‘est une commande utile pour déterminer le type d'un fichier, surtout si on ne sait pas à quoi il correspond.

La syntaxe de la commande

La commande file est utilisée pour déterminer le type de fichier. Cette commande teste chaque argument pour tenter de le classer.

Il y a trois ensembles de tests possibles :

  • Test de système de fichiers : ce test est basé sur le résultat qui revient à partir d‘un appel système STAT. Le programme vérifie que si le fichier est vide, ou s‘il s‘agit d‘une sorte de fichier spécial. Ce test entraîne l‘impression du type de fichier
  • Test magique : ces tests sont utilisés pour vérifier les fichiers avec des données dans des formats fixes particuliers
  • Test de langue : ce test recherche des chaînes particulières qui peuvent apparaître n‘importe où dans les premiers blocs d‘un fichier

L'utilisation de file est de ce type : file [option] Nfm_fichier

Utilisation basique

Voici un exemple d‘utilisation basique où on cherche à obtenir le type de fichier:

$ file index.php
index.php: PHP script, Non-ISO extended-ASCII text, with very long lines (302)

Supprimer le nom de fichier de la sortie

Par défaut, le nom du fichier apparait. Vous pouvez utiliser l‘option -b et seul le type de fichier sera affiché

C'est utile dans les scripts. Cela évite de taper des commandes du genre file fichier | awk '{ print $2,$3 }'.

--screen $ file -b index.php PHP script, Non-ISO extended-ASCII text, with very long lines (302)

file -b info.txt ASCII text

Obtenir le type MIME du fichier

Vous pouvez également afficher le type MIME du fichier grâce à l‘option -i.

file -i filename
file -i md5
md5: text/x-perl; charset=us-ascii

Voici un exemple de la commande sur un fichier audio, avec et sans l‘information de type mime :

$ file '5 - Le high tech.mp3'
5 - Le high tech.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, JntStereo$ file -i '5 - Le high tech.mp3'
5 - Le high tech.mp3: audio/mpeg; charset=binary

La chanson hight tech du groupe keppeldor est un fichier binaire mpeg à 128 kbps, 44.1 kHz.

Vous pouvez bien sur combiner les options -b et -i.

$ file -ib md5
text/x-perl; charset=us-ascii

Utiliser la commande de fichier avec plusieurs fichiers

La commande de fichier peut être exécutée sur plusieurs fichiers simultanément.

$ file 2html/bin/csv2html 2html/bin/ex2html 2html/bin/sh-csv2html
2html/bin/csv2html:    Perl script text executable
2html/bin/ex2html:     Perl script text executable
2html/bin/sh-csv2html: Bourne-Again shell script, ASCII text executable

Utiliser la commande de fichier avec regex

Si vous souhaitez afficher le type de fichier de tous les fichiers du répertoire actuel, utilisez simplement ceci :

$ file *
dir-diff:     Bourne-Again shell script, Unicode text, UTF-8 text executable
dirlist:      Python script, ISO-8859 text executable
dirsize:      Bourne-Again shell script, Unicode text, UTF-8 text executable
snapper:      Python script, ASCII text executable
stripscripts: Python script, ASCII text executable
tree:         POSIX shell script, Unicode text, UTF-8 text executable

Vous pouvez utiliser une expression régulière si vous le souhaitez:

$ file dir*
dir-diff: Bourne-Again shell script, Unicode text, UTF-8 text executable
dirlist:  Python script, ISO-8859 text executable
dirsize:  Bourne-Again shell script, Unicode text, UTF-8 text executable

Vérifier le système de fichiers d‘un disque

Moins courant, la commande file vous permet d‘obtenir des informations sur un périphérique et en particulier un périphérique de stockage :

*sudo file -sL peripherique

Par exemple pour afficher le système de fichiers pour chaque partition du disque /dev/sda :

Recherchez les partitions:

$ sudo fdisk /dev/sda

Bienvenue dans fdisk (util-linux 2.38.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le disque est actuellement utilisé — le repartitionner est
probablement une mauvaise idée.
Il est recommandé de démonter tous les systèmes de fichiers et désactiver (avec
swapoff) toutes les partitions d'échange de ce disque.


Commande (m pour l'aide) : p

Disque /dev/sda : 447,13 GiB, 480103981056 octets, 937703088 secteurs
Modèle de disque : EMTEC X150 480GB
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0xb8c3f748

Périphérique Amorçage    Début       Fin  Secteurs Taille Id Type
/dev/sda1    *            2048  58593279  58591232  27,9G 83 Linux
/dev/sda2             58593280  60594175   2000896   977M 82 partition d'échange Linux / Sol
/dev/sda3             60594176  80125951  19531776   9,3G 83 Linux
/dev/sda4             80125952 937701375 857575424 408,9G 83 Linux

Commande (m pour l'aide) : q

Avec file on cherche le type de partition:

$ sudo file -sL /dev/sda
[sudo] Mot de passe de jlb : 
/dev/sda: DOS/MBR boot sector
$ sudo file -sL /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=2d2d939c-498e-4750-9ca1-9993c100c41a (needs journal recovery) (extents) (64bit) (large files) (huge files)
$ sudo file -sL /dev/sda2
/dev/sda2: Linux swap file, 4k page size, little endian, version 1, size 250111 pages, 0 bad pages, no label, UUID=7a9544ec-dd8c-4d01-b529-45985514c593
$ sudo file -sL /dev/sda3
/dev/sda3: Linux rev 1.0 ext4 filesystem data, UUID=bedc35e5-5c56-47ee-8fb3-ecd150640528 (needs journal recovery) (extents) (64bit) (large files) (huge files)

Cela permet de trouver le type de filesystem (DOS, ext4) et de trouver l'UUID du disque, ce qui peut être pratique pour monter automatiquement le disque avec le fichier /etc/fstab.