Aller au contenu
English
English
Administration Linux medium

Arborescence Linux : à quoi sert chaque répertoire

50 min de lecture

Un fichier de configuration a disparu après une mise à jour, un service écrit ses logs dans un endroit inattendu, un disque /var est plein sans raison évidente, ces situations sont quotidiennes en administration Linux. La réponse est presque toujours la même : savoir où Linux range chaque type de fichier.

Le Filesystem Hierarchy Standard (FHS) est la convention qui définit cette organisation. Pensez-y comme le plan d'un immeuble de bureaux : chaque étage a une fonction précise (accueil, archives, bureaux, local technique). Si vous connaissez le plan, vous trouvez immédiatement ce que vous cherchez.

  • Identifier le rôle de chaque zone fonctionnelle de l'arborescence (/etc/, /var/, /usr/, /run/…)
  • Savoir où chercher configuration, journaux, binaires et données d'exécution
  • Distinguer les particularités entre distributions (Debian/Ubuntu, RHEL/Rocky, Alpine)
  • Diagnostiquer un problème en ciblant le bon répertoire
  • Éviter les erreurs classiques de placement de fichiers

Deux pages traitent du FHS, et elles ne font pas la même chose. Le guide Notions fondamentales Linux en donne la vue d'ensemble : l'arborescence annotée, trois réflexes d'administration, un mini-lab. Celle-ci descend dans le détail de chaque zone, avec les commandes de vérification et les cas d'administration qui s'y rattachent.

Avant d'entrer dans le détail, voici la table de décision qu'un administrateur utilise au quotidien :

Vous cherchez…Regardez dans…Commande rapide
La configuration d'un service/etc/ls /etc/<service>/
Les journaux d'un service/var/log/ ou journalctljournalctl -xeu <service>
Un binaire ou une commande/usr/bin/, /usr/sbin/which <commande>
L'état d'exécution (PID, socket)/run/ls /run/<service>/
Les données persistantes d'un service/var/lib/ls /var/lib/<service>/
Un fichier temporaire/tmp/ ou /var/tmp/ls /tmp/
Les fichiers d'un utilisateur/home/<utilisateur>/ls -la /home/<user>/
Les fichiers de démarrage/boot/ls /boot/
Un périphérique (disque, partition)/dev/lsblk

Le FHS répartit les fichiers selon deux critères : peuvent-ils être partagés entre machines, et sont-ils modifiables en fonctionnement. C'est ce classement qui explique la présence de répertoires en apparence redondants.

C'est le répertoire le plus consulté par un administrateur. Chaque service installé y dépose sa configuration sous forme de fichiers texte éditables.

Sous-répertoires courants :

CheminContenu
/etc/ssh/Configuration du serveur et du client SSH (sshd_config, clés host)
/etc/systemd/Surcharges locales des unités systemd
/etc/apt/ ou /etc/yum.repos.d/Sources de paquets (Debian/Ubuntu ou RHEL/Rocky)
/etc/netplan/ ou /etc/NetworkManager/Configuration réseau persistante
/etc/fstabTable des montages persistants
/etc/passwd, /etc/shadow, /etc/groupComptes utilisateurs et groupes
/etc/sudoers, /etc/sudoers.d/Règles de délégation de privilèges
/etc/logrotate.d/Règles de rotation des journaux
/etc/crontab, /etc/cron.d/Tâches planifiées système
Fenêtre de terminal
# Lister les sous-répertoires de /etc pour voir les services configurés
ls -d /etc/*/

De cette séparation découle la règle qui gouverne toute la configuration d'un système Linux : ne modifiez jamais un fichier dans /usr/lib/systemd/ ni dans /usr/share/. Ces chemins appartiennent au gestionnaire de paquets, qui réécrit leur contenu à la première mise à jour et efface vos changements sans prévenir. Copiez le fichier dans /etc/, par exemple dans /etc/systemd/system/, pour créer une surcharge locale : c'est elle qui gagne, et elle survit aux mises à jour.

Guides associés : Utilisateurs et groupes, sudo, Montage persistant, systemd.

/var/ stocke tout ce qui change au fil du temps : journaux, caches, files d'attente, bases de données de services.

CheminContenuPourquoi c'est important
/var/log/Journaux système et applicatifsPremier endroit à consulter lors d'un incident
/var/lib/État persistant des services (BDD, paquets)Ne pas supprimer sans comprendre
/var/cache/Caches des gestionnaires de paquetsNettoyable pour récupérer de l'espace
/var/spool/Files d'attente (impression, mail, cron)Rarement modifié manuellement
/var/tmp/Fichiers temporaires persistants entre rebootsPlus durable que /tmp/

C'est la mine d'or du diagnostic. Le contenu varie selon la distribution :

FichierContenu
/var/log/syslogMessages système généraux
/var/log/auth.logConnexions, authentification, sudo
/var/log/dpkg.logInstallations et mises à jour APT
/var/log/kern.logMessages du noyau
/var/log/apache2/Logs Apache (si installé)

Cette croissance permanente a une conséquence qu'il vaut mieux anticiper : sur un serveur en production, /var/log/ grossit vite, et si /var/ partage la partition de /, un disque plein bloque le système entier, pas seulement la journalisation. D'où l'usage répandu de placer /var/ sur une partition séparée, et le réflexe de surveillance qui va avec, df -h /var.

Fenêtre de terminal
# Voir l'espace occupé par les journaux
du -sh /var/log/
# Vérifier l'espace restant sur la partition
df -h /var
# Lire les dernières entrées du journal système
journalctl -n 50 --no-pager

Guides associés : Journaux avec journalctl, Rotation avec logrotate, Contrôler l'espace disque.

/usr/ contient la majorité des programmes et bibliothèques installés par le gestionnaire de paquets. C'est le cœur applicatif du système.

CheminContenu
/usr/bin/Commandes utilisateur (ls, grep, systemctl, vim…)
/usr/sbin/Commandes d'administration (fdisk, useradd, iptables…)
/usr/lib/Bibliothèques partagées (.so) et fichiers de support
/usr/lib/systemd/Unités systemd fournies par les paquets (ne pas modifier ici)
/usr/share/Documentation, fichiers indépendants de l'architecture
/usr/local/Logiciels installés manuellement (hors gestionnaire de paquets)

Un point d'histoire explique ce que vous verrez sur une machine récente. /bin/ et /sbin/ étaient autrefois des répertoires distincts, réservés aux binaires essentiels au démarrage. Sur Debian 12+, Ubuntu 22.04+, RHEL 9+, Fedora et Arch, ce sont désormais des liens symboliques vers /usr/bin/ et /usr/sbin/ : c'est la fusion dite usr-merge. En pratique, ls /bin et ls /usr/bin affichent le même contenu.

La fusion touche en réalité 4 répertoires, pas deux : /lib/ et /lib64/ sont eux aussi des liens vers usr/lib/ et usr/lib64/. Une seconde vague, plus discrète, a visé /var : /var/run et /var/lock pointent maintenant vers /run et /run/lock. Le savoir évite une confusion courante, car on rencontre encore /var/run/quelquechose.pid dans quantité de scripts et de documentations : ces chemins fonctionnent toujours, mais ne désignent plus l'endroit qu'on croit.

La boucle ci-dessous établit l'état réel de votre machine en une fois :

Fenêtre de terminal
for d in /bin /sbin /lib /lib64 /var/run /var/lock; do
printf '%-11s -> %s\n' "$d" "$(readlink "$d" || echo '(pas un lien)')"
done
Fenêtre de terminal
# Vérifier que /bin est bien un lien vers /usr/bin
ls -ld /bin /sbin
# Trouver où se situe une commande
which systemctl
type -a ls
# Voir les bibliothèques utilisées par un programme
ldd /usr/bin/ls

Ces deux répertoires servent aux logiciels installés en dehors du gestionnaire de paquets, mais avec des conventions différentes :

RépertoireUsageExemple
/opt/<éditeur>/Application tierce complète, auto-contenue/opt/google/chrome/, /opt/jetbrains/
/usr/local/bin/Binaire compilé ou téléchargé manuellementScript maison, outil Go/Rust compilé

Guide associé : Gérer les paquets.

/run/, /proc/, /sys/, données d'exécution volatiles

Section intitulée « /run/, /proc/, /sys/, données d'exécution volatiles »

Ces trois répertoires ne sont pas sur disque. Leur contenu est généré dynamiquement par le noyau et disparaît au reboot.

RépertoireSupportContenu
/run/tmpfsPID files, sockets, verrous, état runtime des services
/proc/procfsVue virtuelle sur les processus et le noyau
/sys/sysfsVue virtuelle sur le matériel et les pilotes
Fenêtre de terminal
# Voir le PID d'un service via /run
cat /run/sshd.pid 2>/dev/null || echo "Fichier PID absent (service arrêté ou géré par systemd)"
# Lire des informations sur le CPU via /proc
cat /proc/cpuinfo | head -20
# Voir la mémoire totale
cat /proc/meminfo | grep MemTotal
# Lire un paramètre noyau via /sys
cat /sys/block/sda/queue/scheduler 2>/dev/null

Guide associé : Gérer les processus.

/home/, /root/, /srv/, données utilisateur et services

Section intitulée « /home/, /root/, /srv/, données utilisateur et services »
RépertoirePropriétaireContenu
/home/<user>/L'utilisateurFichiers personnels, config locale (~/.bashrc, ~/.ssh/)
/root/rootLe home de root (ne pas confondre avec /)
/srv/ServicesDonnées servies par la machine (sites web, dépôts, partages)
Fenêtre de terminal
# Voir l'espace occupé par chaque utilisateur
du -sh /home/*/
# Vérifier les droits du home de root
ls -ld /root/

Cette séparation des rôles se traduit souvent par une décision de partitionnement. Sur un serveur multi-utilisateurs, monter /home/ sur une partition séparée permet de réinstaller le système sans toucher aux données des comptes : la réinstallation écrase /, /home est simplement remonté ensuite.

Guide associé : Utilisateurs et groupes.

RépertoireContenu
/dev/Fichiers spéciaux représentant les périphériques (disques, terminaux, null, random)
/mnt/Point de montage temporaire pour l'administrateur
/media/Point de montage automatique pour les supports amovibles (USB, CD)

Fichiers /dev/ courants :

PériphériqueReprésente
/dev/sda, /dev/sdbDisques SATA/SAS
/dev/nvme0n1Disque NVMe
/dev/vdaDisque virtio (VM KVM)
/dev/nullPuits sans fond (redirigez-y ce que vous voulez ignorer)
/dev/zeroSource infinie de zéros
/dev/random, /dev/urandomGénérateurs de nombres aléatoires
/dev/tty*, /dev/pts/*Terminaux
Fenêtre de terminal
# Lister les disques et partitions
lsblk
# Voir les périphériques bloc disponibles
ls -l /dev/sd* /dev/nvme* /dev/vd* 2>/dev/null

Guides associés : Vue d'ensemble du stockage, Identifier les disques, Montage persistant.

/boot/ contient le noyau Linux, l'initramfs et la configuration du chargeur de démarrage. C'est un répertoire critique, une modification maladroite peut empêcher le système de démarrer.

FichierRôle
vmlinuz-*Noyau Linux compressé
initrd.img-* / initramfs-*Image du système de fichiers initial (pilotes, LVM, chiffrement)
grub/Configuration du chargeur GRUB2
config-*Options de compilation du noyau
System.map-*Table des symboles du noyau (debug)
Fenêtre de terminal
# Voir les noyaux installés
ls -lh /boot/vmlinuz-*
# Voir l'espace occupé par /boot
df -h /boot

Guide associé : Démarrage et reboot.

RépertoireDurée de vieNettoyage
/tmp/Jusqu'au prochain rebootPar systemd-tmpfiles au démarrage
/var/tmp/Persistant entre rebootsNettoyé périodiquement (30 jours par défaut)
Fenêtre de terminal
# Sur quel système de fichiers /tmp se trouve-t-il vraiment ?
df -Th /tmp
# Voir les fichiers temporaires les plus volumineux
du -sh /tmp/* 2>/dev/null | sort -rh | head -10

Une croyance tenace mérite d'être levée ici, parce qu'elle fait mal prévoir le comportement d'une machine inconnue. L'explication qu'on lit partout, « /tmp est un disque en RAM, donc il se vide au redémarrage », est fausse sur beaucoup de distributions. Sur une Ubuntu 24.04, df -Th /tmp répond :

Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 14G 2.1G 12G 16% /

C'est la partition racine en ext4, et /tmp n'est même pas un point de montage distinct. Fedora et les Arch récentes, elles, montent bien un tmpfs : d'où la confusion.

Ce qui vide réellement /tmp au démarrage, c'est systemd-tmpfiles. La règle vit dans /usr/lib/tmpfiles.d/tmp.conf :

D /tmp 1777 root root 30d

et l'unité qui l'applique tourne avec l'option --boot :

Fenêtre de terminal
systemctl cat systemd-tmpfiles-setup.service | grep ExecStart
ExecStart=systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev

La distinction n'est pas académique : c'est l'explication qui permet de prévoir le comportement d'une machine que vous ne connaissez pas. Le 30d de la règle, par exemple, signifie qu'un /tmp non-tmpfs voit aussi ses vieux fichiers purgés en cours de fonctionnement, ce qu'un « disque en RAM » n'expliquerait pas.

Dernier point sur ce répertoire, à l'usage des scripts : créez vos fichiers temporaires avec mktemp plutôt qu'à la main. La commande tire un nom unique, ce qui écarte d'un coup les collisions entre deux exécutions simultanées et l'attaque par lien symbolique, où un tiers place un lien à l'emplacement que votre script s'apprête à écrire.

Le FHS est un standard, mais chaque famille de distributions a ses particularités :

AspectDebian / UbuntuRHEL / Rocky / FedoraAlpine
Journal système/var/log/syslog/var/log/messages/var/log/messages
Logs d'authentification/var/log/auth.log/var/log/secure/var/log/messages
Logs paquets/var/log/dpkg.log/var/log/dnf.logaucun
Config réseau/etc/netplan//etc/NetworkManager//etc/network/
Config paquets/etc/apt//etc/yum.repos.d//etc/apk/
Init (PID 1)systemdsystemdOpenRC
usr-mergeOui, (Debian 12+)Oui, (RHEL 9+)Non, (séparé)

Ces commandes ne modifient rien. Elles vous aident à vérifier votre compréhension.

  1. Repérer les zones fonctionnelles

    Fenêtre de terminal
    # Voir les répertoires racine
    ls -ld /etc /var /usr /run /proc /sys /boot /tmp /home /dev /srv /opt
  2. Identifier les fichiers de configuration d'un service

    Fenêtre de terminal
    # Exemple avec SSH
    ls -la /etc/ssh/
    cat /etc/ssh/sshd_config | head -30
  3. Trouver où un service stocke ses données

    Fenêtre de terminal
    # Données persistantes
    ls /var/lib/ | head -20
    # Journaux
    ls /var/log/ | head -20
  4. Vérifier les systèmes de fichiers virtuels

    Fenêtre de terminal
    # /proc et /sys ne sont pas sur disque
    df -Th /proc /sys /run /tmp
  5. Confirmer le usr-merge

    Fenêtre de terminal
    # Sur une distribution moderne, /bin est un lien
    ls -ld /bin /sbin /lib

Les 6 symptômes ci-dessous sont ceux qu'une mauvaise lecture de l'arborescence produit le plus souvent. Ils se reconnaissent à un point commun : le message d'erreur ne nomme jamais le répertoire fautif. Lisez la colonne de gauche comme ce que vous voyez à l'écran, celle du milieu comme l'hypothèse à vérifier en premier, et la dernière comme la commande qui tranche.

SymptômeCause probableSolution
No space left on device sur /varJournaux ou caches trop volumineuxdu -sh /var/log/* | sort -rh, puis journalctl --vacuum-size=500M ou apt clean
Fichier de config modifié mais pas pris en compteÉdité dans /usr/lib/systemd/ au lieu de /etc/systemd/system/Créer une surcharge dans /etc/ et relancer systemctl daemon-reload
Commande introuvable après installation manuelleBinaire placé hors du PATHDéplacer vers /usr/local/bin/ ou ajouter le chemin au PATH
/boot plein, impossible de mettre à jour le noyauAnciens noyaux non purgésapt autoremove (Debian) ou dnf remove --oldinstallonly (RHEL)
Fichier temporaire disparu après rebootPlacé dans /tmp/, que systemd-tmpfiles vide au démarrageUtiliser /var/tmp/ pour les fichiers qui doivent survivre au reboot
Permission denied sur un fichier dans /run/Fichier PID/socket appartenant à un autre serviceVérifier le propriétaire avec ls -la /run/<fichier>, ne pas modifier les droits manuellement

Une carte ne remplace pas le terrain : l'arborescence se mémorise en la parcourant. Dans un shell jetable, vous explorez les zones du FHS, retrouvez une configuration dans /etc, un journal dans /var/log et un fichier volatil dans /run ; la validation compare vos réponses à la sortie attendue.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Le FHS organise Linux en zones fonctionnelles : /etc/ pour la configuration, /var/ pour les données variables, /usr/ pour les binaires, /run/ pour l'exécution volatile.
  • Trois réflexes d'administration : config → /etc/, problème → /var/log/ ou journalctl, runtime → /run/.
  • Ne modifiez jamais les fichiers dans /usr/lib/ : créez une surcharge dans /etc/.
  • /proc/, /sys/ et /run/ sont virtuels, ne les incluez pas dans vos sauvegardes.
  • /tmp/ est vidé au reboot. Utilisez /var/tmp/ pour les fichiers temporaires persistants.
  • Les journaux système varient selon la distribution : syslog et auth.log sur Debian/Ubuntu, messages et secure sur RHEL/Rocky.

Ces questions reviennent chez qui découvre l'arborescence, et portent sur les confusions les plus coûteuses : la différence entre /root et la racine /, l'endroit où déposer un logiciel installé à la main, et ce qu'il est prudent de supprimer pour libérer de l'espace.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn