• =?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