=?utf-8?Q?Re:_r=C3=A9flexion_sur_la_commande_file?=
From
Bernard Schoenacker@21:1/5 to
All on Sun May 25 14:50:01 2025
# La commande `file` sous Linux : au-delà des apparences
## Introduction
La commande `file` est souvent perçue comme un simple utilitaire Unix permettant de déterminer le type d’un fichier. En réalité, elle s’appuie sur un système bien plus fin et ancien que les extensions de fichier ou les en-têtes MIME modernes.
Ce document explore le fonctionnement profond de `file`, ses bases heuristiques, son lien (ou son absence de lien direct) avec les types MIME, et la manière dont on peut étendre ou personnaliser son comportement. On y examinera aussi ses limites,
notamment dans la reconnaissance de formats structurés mais non binaires comme Markdown ou les mails au format MH.
---
## Fonctionnement général
Lorsque vous exécutez une commande comme :
```bash
file nom_du_fichier
```
La commande `file` inspecte les **premiers octets** du fichier et les compare à une **base de règles appelée fichier `magic`**. Ces règles décrivent les signatures binaires attendues (appelées *magic numbers*) pour identifier de façon heuristique
le contenu réel du fichier, indépendamment de son extension.
Exemple : un fichier sans extension contenant `%PDF-1.4` dans les premiers octets sera reconnu comme un fichier PDF.
---
## La base `magic`
Le fonctionnement repose sur un fichier binaire compilé, généralement situé ici :
```bash
/usr/share/file/magic.mgc
```
Ce fichier est issu d’un ensemble de définitions textuelles (`magic` ou `magic.mime`) compilées avec :
```bash
file -C -m /chemin/vers/magic
```
Ces fichiers décrivent :
* des motifs binaires à détecter,
* des offsets de lecture dans les fichiers,
* des types d’interprétation