Filesystem Hierarchy Standard
# Filesystem Hierarchy Standard

Filesystem Hierarchy Standard (« norme de la hiérarchie des systèmes de fichiers », abrégé en FHS) définit l'arborescence et le contenu des principaux répertoires des systèmes de fichiers des systèmes d'exploitation GNU/Linux et de la plupart des systèmes Unix.

La version actuelle est la 3.0 et fut publiée le 3 juin 2015.

## Présentation générale

La standardisation d'une hiérarchie de système de fichiers a commencé en août 1993. Le FSSTND (Filesystem Standard) est un standard sur la hiérarchie de système de fichiers spécifique à GNU/Linux ; la première version date du 14 février 1994. Les versions suivantes datent des 9 octobre 1994 et 28 mars 1995.

En 1996, la définition de ce standard a été généralisée aux différents Unix et à leurs dérivés, en accord avec les membres de la communauté des développeurs BSD. Ce standard est alors renommé Filesystem Hierarchy Standard.

Initialement, le FHS est maintenu par le Free Standards Group (en) qui compte parmi ses membres Hewlett-Packard, Red Hat, IBM, Dell et plusieurs autres. Résultat d'une fusion entre le Free Standards Group et l'Open Source Development Labs, la Fondation Linux a pris le relais en 2007.

La vaste majorité des distributions GNU/Linux ne respectent pas strictement le standard, même celles développées par des membres du Free Standards Group (par exemple, le répertoire /srv/).

* Un répertoire /run est déjà utilisé et proposé pour la prochaine version du FHS par plusieurs distributions majeures dont Fedora, SUSE, Debian et Ubuntu afin notamment de centraliser les fichiers résidant en mémoire, de simplifier la séquence de démarrage et aussi faciliter la mise en place d'un système monté en lecture seule.
   * Exemples de changements :
      * /dev/.* → /run/*
      * /dev/shm → /run/shm
      * /var/lock → /run/lock
      * /var/run → /run
      * /tmp → /run/tmp

De plus, d'autres versions d'Unix ont une approche complètement différente :

* GoboLinux.
* NixOS.
* Mac OS X utilise des noms plus explicites, tels que /Library/, /Applications/ et /Users/.

## Arborescence des répertoires

| Répertoire | Description | Exemple d'implémentation de la norme |
| - | - | - |
| /bin/ | Doit contenir toutes les commandes de base nécessaires au démarrage et à l'utilisation d'un système minimaliste (par exemple : cat, ls, cp, sh) excluant les commandes systèmes et celles réservées aux administrateurs (qui sont plutôt placées dans /sbin/). Le nom du répertoire est tiré de l'abréviation de binaires. | |
| /boot/ | Chargeur d'amorçage Exemple de fichiers : initrd (image mémoire du ramdisk utilisé par le processus init) noyaux | Exemple d'implémentation : Si grub est le chargeur d'amorçage, il y aura le fichier de configuration correspondant grub.conf |
| /dev/ | Fichiers correspondant (directement ou non) avec un périphérique (abréviation de device) Les fichiers de périphériques : périphériques physiques (disque, réseau, bande, disquette) périphériques virtuels ; /dev/null /dev/zero | Exemple d'implémentation Les fichiers de périphériques : Périphériques physiques IDE (Exemple pour GNU/Linux : /dev/sda, /dev/sdb, /dev/sdc : En effet, dans les versions récentes du noyau Linux, les périphériques IDE ne se nomment plus hdX, mais bel et bien sdX, comme les périphériques SCSI). SCSI ; sous GNU/Linux, cela inclut l'USB et le S-ATA ; exemple : /dev/sda, /dev/sdb, /dev/sdc Les terminaux : /dev/tty, tty0 à tty59 /dev/console Console initiale Carte réseau (sous GNU/Linux, cela correspond aux interfaces réseau eth0, eth1…) Carte son Périphérique à bande Périphérique série : par exemple modem ou port RS-232. Disquette 3 pouces et demi : sous GNU/Linux, /dev/fd0 Liens symboliques Cas typique sous GNU/Linux : /dev/cdrom est un lien symbolique vers le fichier de périphérique correspondant (par exemple : /dev/sr0) |
| /etc/ | Fichiers de configuration (et cetera ; rétroacronymie : abréviation de editable text configuration, soit configuration éditable en mode texte en français). | |
| /etc/opt/ | Fichiers de configuration pour les applications installées dans /opt | |
| /etc/X11/ | Ce répertoire contient les fichiers de configuration pour X11. | N.B. : Le client et le serveur X11 peuvent être sur deux ordinateurs différents. Le serveur peut ne pas avoir de carte graphique. Pour les ordinateurs utilisant XFree86, le principal fichier de configuration est XF86Config-4 ou XF86Config selon la distribution. Pour les ordinateurs utilisant Xorg, le principal fichier de configuration est xorg.conf |
| /etc/sgml/ | Fichiers de configuration pour SGML. | Sans objet le plus souvent |
| /etc/xml/ | Fichiers de configuration pour XML. | |
| /home/ | Répertoires des utilisateurs (exemple : /home/dupont). Recommandé mais optionnel, car certains systèmes avec beaucoup d'utilisateurs (notamment via NFS) doivent utiliser une structure différente. | |
| /lib/ | Bibliothèques logicielles nécessaires pour les exécutables de /bin/ et /sbin/ (abréviation de libraries, soit bibliothèques en français). | |
| /lib<qual>/ | Bibliothèques logicielles essentielles dans un format alternatif. Ces répertoires sont optionnels mais, s'ils existent, leurs noms doivent respecter certaines exigences. | |
| /mnt/ | Point de montage pour les systèmes de fichiers temporaires (abréviation de mount ou point de montage). | |
| /media/ | Point de montage pour les médias amovibles (apparu dans FHS-2.3). | Parmi les médias amovibles, il y a notamment les CD-ROM et les clés USB. |
| /opt/ | Logiciels optionnels | Logiciels non inclus dans la distribution et installés manuellement pour tous les utilisateurs. |
| /proc/ | Système de fichiers virtuel documentant le noyau et les différents processus (abréviation de processes, soit processus en français). | |
| /root/ | Répertoire de l'Utilisateur root (optionnel mais fortement recommandé). | |
| /sbin/ | Exécutables pour les administrateurs (abréviation de system binaries, soit binaires système en français). | |
| /srv/ | Données pour les services hébergés sur le système. Habituellement le contenu web statique ou les fichiers d'un serveur FTP, une base de données… | |
| /tmp/ | Fichiers temporaires (voir aussi /var/tmp et /run/tmp). Est généralement vidé à chaque démarrage et possède le sticky bit. | |
| /usr/ | Contient certains répertoires semblables à ceux présents à la racine mais qui ne sont pas nécessaires au fonctionnement minimal du système (usr est l'acronyme de « UNIX System Resources »). | |
| /usr/bin/ | Binaires exécutables qui ne sont pas déjà présents dans /bin et donc pas indispensables à un système minimaliste. | |
| /usr/include/ | Entêtes des bibliothèques partagées | |
| /usr/lib/ | Bibliothèques partagées | |
| /usr/lib<qual>/ | Bibliothèques partagées dans un format alternatif (optionnel) | |
| /usr/sbin/ | Binaires pour l'administrateur qui ne sont pas déjà fournis par /sbin | |
| /usr/share/ | Fichiers indépendants de la plateforme (non binaires) | La documentation : répertoire man pour les man (sous GNU/Linux : document au format roff compressé) répertoire doc : documentation au format HTML ou autre |
| /usr/src/ | Optionnel. Code source divers, généralement limité au noyau et aux bibliothèques système. FHS 2.2 demandait que toutes les sources soient dans ce répertoire, ce que certains Unix continuent de faire bien que ce ne soit plus recommandé. | Sources du noyau Linux dans /usr/src/linux/ (spécifique à Linux). |
| /usr/X11R6/ | X Window System, X11 version 6. | |
| /usr/local/ | Hiérarchie tertiaire pour les données locales, spécifiques à l'ordinateur. | |
| /var/ | Ne contient que des répertoires ou liens symboliques vers d'autres répertoires, ces derniers étant destinés à contenir des fichiers variables divers (voir les sous-répertoires pour les détails). L'objectif est de pouvoir monter le répertoire /usr en lecture seule. base de données boîte aux lettres de messagerie journaux, voir historique | |
| /var/cache/ | Cache pour des données conservées localement, le plus souvent pour des raisons de performance. Si elles sont encore utiles, les applications doivent pouvoir régénérer ou récupérer toutes ces données même si elles sont effacées. | Serveur DNS BIND pour diminuer l'utilisation du processeur et accélérer certaines requêtes. Gestionnaires de paquetages tel que APT dans Debian. Tomcat pour conserver divers fichiers générés dynamiquement à partir des fichiers sources. |
| /var/lock/ | Fichiers de verrouillage, permettant de connaître quelles ressources sont en cours d'utilisation (voir aussi /run/lock) | |
| /var/log/ | Fichiers de journalisation (logs en anglais). | Exemple sous GNU/Linux : syslog, XFree86.0.log, kern.log, mysql, gdm/:0.log |
| /var/mail/ | Boîtes de courriels des utilisateurs. | |
| /var/run/ | Fichiers temporaires des logiciels en cours d'exécution (voir aussi /run) | Exemples : PID ou statut des services |
| /var/spool/ | Regroupe des répertoires qui contiennent des données en attente de traitement. | File d'attente de fichiers à imprimer par CUPS dans /var/spool/cups/ |
| /var/spool/cron/ | Optionnel sauf pour Linux. Contient les informations pour gérer les tâches planifiées. | cron (tâches périodiques). at (tâches planifiées par l'utilisateur pour une exécution unique). |
| /var/spool/mail/ | Optionnel et est maintenant habituellement un lien symbolique vers /var/mail (le répertoire utilisé par la plupart des Unix). | |
| /var/tmp/ | Fichiers temporaires. Contrairement à /tmp, ils ne doivent pas être automatiquement effacés lors d'un redémarrage. | Attention, car ceci n'interdit pas l'existence d'une tâche cron qui efface périodiquement les vieux fichiers, par exemple ceux qui n'ont pas été accédés depuis plus de 30 jours. |
| /var/spool/mqueue/ | Courriels en cours de transit sur la machine (optionnel). | Courriels en attente d'envoi vers d'autres serveurs ou pour livraison aux utilisateurs locaux. Sendmail utilise ce répertoire. |
| /var/www/ | Site internet. | |
