guides/serveur/linux-essentials/architecture-filesystem.md
isUnknown e33395dc35 Réorganiser les guides et ajouter architecture filesystem
- Nouvelle structure : linux-essentials/ et forgejo/
- Nouveau guide : architecture-filesystem.md (comprendre /etc, /var, etc.)
- Déplacement et renommage des guides existants
- README pour chaque dossier
- Suppression des sections auteurs

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 08:37:50 +01:00

15 KiB

Architecture du système de fichiers Linux

Guide complet pour comprendre l'organisation des dossiers sur un système Linux (Debian, Ubuntu, etc.).

Table des matières

  1. Vue d'ensemble
  2. Arborescence de base
  3. Dossiers systèmes essentiels
  4. Dossiers de données
  5. Dossiers temporaires
  6. Cas pratiques
  7. Mémo rapide

1. Vue d'ensemble

Le principe UNIX : "Tout est fichier"

Sous Linux, tout est représenté comme un fichier :

  • Les vrais fichiers (documents, images)
  • Les dossiers (fichiers spéciaux)
  • Les périphériques (disques, clavier, souris)
  • Les processus en cours
  • Les connexions réseau

Hiérarchie FHS (Filesystem Hierarchy Standard)

Linux suit une convention appelée FHS qui définit où mettre quoi.

Analogie avec une maison :

  • / → La maison entière (racine)
  • /home → Les chambres des habitants
  • /etc → Le tableau électrique et les plans
  • /var → Le garage et la cave (stockage variable)
  • /tmp → La corbeille (temporaire)
  • /usr → Les communs (salon, cuisine)

2. Arborescence de base

/                        ← Racine (root) du système
├── bin/                 → Commandes de base (ls, cp, cat)
├── boot/                → Fichiers de démarrage (kernel)
├── dev/                 → Périphériques (disques, USB)
├── etc/                 → Fichiers de configuration
├── home/                → Dossiers personnels des utilisateurs
│   ├── alice/
│   ├── bob/
│   └── debian/
├── lib/                 → Bibliothèques système
├── media/               → Points de montage auto (USB, CD)
├── mnt/                 → Points de montage manuels
├── opt/                 → Logiciels optionnels (tiers)
├── proc/                → Informations sur les processus (virtuel)
├── root/                → Dossier personnel de l'utilisateur root
├── run/                 → Données runtime (PID, sockets)
├── sbin/                → Commandes d'administration système
├── srv/                 → Données des services (web, ftp)
├── sys/                 → Informations système (virtuel)
├── tmp/                 → Fichiers temporaires
├── usr/                 → Applications et utilitaires utilisateur
│   ├── bin/             → Commandes utilisateur
│   ├── lib/             → Bibliothèques
│   ├── local/           → Logiciels installés localement
│   └── share/           → Données partagées (docs, icônes)
└── var/                 → Données variables (logs, caches)
    ├── cache/           → Caches applicatifs
    ├── lib/             → Données d'état (bases de données)
    ├── log/             → Logs système et applicatifs
    ├── mail/            → Boîtes mail
    ├── spool/           → Files d'attente (impression, mail)
    └── tmp/             → Temporaire persistant entre reboots

3. Dossiers systèmes essentiels

/etc - Configuration

Rôle : Contient tous les fichiers de configuration du système et des applications.

Exemples importants :

Fichier/Dossier Rôle
/etc/passwd Liste des utilisateurs du système
/etc/group Liste des groupes d'utilisateurs
/etc/hostname Nom de la machine
/etc/hosts Résolution DNS locale
/etc/fstab Points de montage des disques
/etc/crontab Tâches planifiées système
/etc/ssh/ Configuration du serveur SSH
/etc/nginx/ Configuration Nginx
/etc/fail2ban/ Configuration Fail2ban
/etc/systemd/ Services systemd

Commande utile :

# Trouver tous les fichiers de config modifiés récemment
find /etc -type f -mtime -7

⚠️ Attention :

  • Toujours faire une backup avant modification
  • Les droits sont stricts (souvent root uniquement)

/var - Données variables

Rôle : Contient les données qui changent fréquemment pendant le fonctionnement du système.

Sous-dossiers importants :

/var/log - Logs

Les plus courants :

Fichier Contenu
/var/log/syslog Logs système généraux (Debian/Ubuntu)
/var/log/auth.log Authentifications (SSH, sudo)
/var/log/kern.log Messages du kernel
/var/log/fail2ban.log Logs Fail2ban
/var/log/nginx/ Logs Nginx (access.log, error.log)
/var/log/apache2/ Logs Apache

Commandes utiles :

# Voir les logs système
sudo tail -f /var/log/syslog

# Voir les tentatives SSH
sudo grep "Failed password" /var/log/auth.log

# Taille des logs
sudo du -sh /var/log

/var/lib - Données d'état des applications

Exemples :

Dossier Contenu
/var/lib/docker/ Images, conteneurs, volumes Docker
/var/lib/mysql/ Bases de données MySQL
/var/lib/postgresql/ Bases de données PostgreSQL
/var/lib/apt/ État des paquets APT

Commande utile :

# Voir ce qui prend de la place dans /var/lib
sudo du -sh /var/lib/* | sort -h | tail -10

/var/cache - Caches

Exemples :

Dossier Contenu
/var/cache/apt/ Paquets .deb téléchargés
/var/cache/nginx/ Cache Nginx

Nettoyage :

# Nettoyer le cache APT
sudo apt clean

# Voir la taille
sudo du -sh /var/cache/apt

/var/spool - Files d'attente

Exemples :

Dossier Contenu
/var/spool/cron/ Tâches cron des utilisateurs
/var/spool/mail/ Mails en attente

/home - Dossiers personnels

Rôle : Un sous-dossier par utilisateur pour ses fichiers personnels.

Structure typique :

/home/debian/
├── .bashrc              → Config du shell bash
├── .ssh/                → Clés SSH
│   ├── id_rsa
│   ├── id_rsa.pub
│   └── authorized_keys
├── Documents/
├── Downloads/
└── projects/

Commandes utiles :

# Aller dans votre home
cd ~
# ou
cd $HOME

# Voir tous les fichiers cachés (commencent par .)
ls -la ~

# Taille de votre home
du -sh ~

/tmp - Fichiers temporaires

Rôle : Stockage temporaire, vidé au redémarrage (sur la plupart des systèmes).

Caractéristiques :

  • Accessible en écriture par tous les utilisateurs
  • Nettoyé automatiquement
  • Parfois monté en RAM (tmpfs) pour plus de rapidité

Commandes utiles :

# Créer un fichier temporaire
mktemp

# Voir la taille de /tmp
df -h /tmp

# Nettoyer manuellement (⚠️ peut casser des apps en cours)
sudo rm -rf /tmp/*

/usr - Applications utilisateur

Rôle : Contient les programmes et bibliothèques installés par le système de paquets.

Sous-dossiers :

Dossier Contenu
/usr/bin/ Commandes utilisateur (git, python, vim)
/usr/sbin/ Commandes admin (iptables, systemctl)
/usr/lib/ Bibliothèques partagées (.so)
/usr/share/ Données partagées (docs, man pages, icônes)
/usr/local/ Logiciels installés manuellement (hors paquets)

Commandes utiles :

# Où se trouve une commande ?
which python3
# → /usr/bin/python3

# Taille de /usr
du -sh /usr

/opt - Logiciels optionnels

Rôle : Logiciels tiers installés manuellement (pas via apt/yum).

Exemples :

  • /opt/google/chrome/
  • /opt/nodejs/
  • /opt/myapp/

Convention : Chaque logiciel dans son propre dossier.


/srv - Données des services

Rôle : Données servies par le système (sites web, FTP, etc.).

Exemples :

  • /srv/www/ → Sites web
  • /srv/ftp/ → Serveur FTP
  • /srv/git/ → Dépôts Git

Note : Peu utilisé en pratique, beaucoup préfèrent /var/www/ ou /home/user/.


4. Dossiers de données

/root - Dossier de l'admin

Rôle : Dossier personnel de l'utilisateur root (super-admin).

⚠️ Important :

  • Séparé de /home pour raisons de sécurité
  • Accessible uniquement par root
  • Contient souvent des scripts d'admin
# Passer en root
sudo su -

# Voir où vous êtes
pwd
# → /root

/boot - Démarrage système

Rôle : Fichiers nécessaires au démarrage (kernel, initramfs).

Contenu typique :

/boot/
├── vmlinuz-5.10.0-21-amd64    → Kernel Linux
├── initrd.img-5.10.0-21-amd64 → RAM disk initial
└── grub/                       → Bootloader GRUB

⚠️ Attention :

  • Souvent une petite partition (200-500 MB)
  • Peut se remplir avec de vieux kernels

Nettoyage :

# Voir les kernels installés
dpkg --list | grep linux-image

# Supprimer les anciens (apt le fait automatiquement)
sudo apt autoremove

5. Dossiers temporaires

/run - Runtime

Rôle : Informations runtime du système (PID, sockets).

Caractéristiques :

  • Créé au démarrage, vidé au reboot
  • Monté en RAM (tmpfs)
  • Remplace l'ancien /var/run

Exemples :

/run/
├── systemd/          → État systemd
├── docker.sock       → Socket Docker
├── user/1000/        → Session utilisateur ID 1000
└── lock/             → Fichiers de verrou

/proc et /sys - Systèmes de fichiers virtuels

Rôle : Interfaces vers le kernel (pas de vrais fichiers sur disque).

/proc - Informations sur les processus

Exemples :

# Infos CPU
cat /proc/cpuinfo

# Infos mémoire
cat /proc/meminfo

# Processus en cours
ls /proc
# → 1/ 2/ 3/ ... (PIDs)

# Infos sur un processus
cat /proc/1234/cmdline

/sys - Informations hardware

Exemples :

# Infos réseau
ls /sys/class/net/
# → eth0 lo wlan0

# Température CPU (si disponible)
cat /sys/class/thermal/thermal_zone0/temp

6. Cas pratiques

Cas 1 : Chercher un fichier de configuration

Problème : Vous voulez modifier la config de SSH.

Solution :

# Chercher dans /etc
find /etc -name "*ssh*"
# → /etc/ssh/sshd_config

# Éditer
sudo nano /etc/ssh/sshd_config

# Redémarrer le service
sudo systemctl restart ssh

Cas 2 : Analyser les logs d'une application

Problème : Votre application web plante.

Solution :

# Logs Nginx
sudo tail -f /var/log/nginx/error.log

# Logs système
sudo journalctl -u nginx -n 50

# Logs applicatifs (selon l'app)
sudo tail -f /var/log/myapp/error.log

Cas 3 : Le disque est plein

Diagnostic :

# 1. Identifier le disque plein
df -h

# 2. Trouver les gros dossiers à la racine
sudo du -sh /* | sort -h | tail -10

# 3. Si c'est /var (courant)
sudo du -sh /var/* | sort -h | tail -10

# 4. Si c'est /var/log
sudo du -sh /var/log/* | sort -h | tail -10

# 5. Nettoyer les vieux logs
sudo journalctl --vacuum-size=500M

Coupables courants :

  • /var/log/ → Logs trop volumineux
  • /var/lib/docker/ → Images Docker
  • /var/cache/apt/ → Cache de paquets
  • /tmp/ → Fichiers temporaires oubliés

Cas 4 : Où installer un logiciel manuel ?

Options :

Emplacement Quand l'utiliser
/usr/local/bin/ Binaires manuels (disponibles globalement)
/opt/myapp/ Application complète avec ses dépendances
~/bin/ ou ~/.local/bin/ Scripts personnels (utilisateur uniquement)

Exemple :

# Installer un script global
sudo cp mon-script.sh /usr/local/bin/mon-script
sudo chmod +x /usr/local/bin/mon-script

# Installer une app complète
sudo mkdir -p /opt/myapp
sudo cp -r myapp/* /opt/myapp/
sudo ln -s /opt/myapp/bin/myapp /usr/local/bin/myapp

Cas 5 : Trouver où une application stocke ses données

Pistes :

  1. Configuration : /etc/[nom-app]/
  2. Données : /var/lib/[nom-app]/
  3. Logs : /var/log/[nom-app]/
  4. Cache : /var/cache/[nom-app]/

Exemple avec Docker :

# Config (rare, Docker utilise peu /etc)
ls /etc/docker/

# Données (images, conteneurs)
sudo du -sh /var/lib/docker

# Logs des conteneurs
sudo ls /var/lib/docker/containers/

7. Mémo rapide

Tableau récapitulatif

Dossier Rôle Exemple
/ Racine du système Point de départ de tout
/etc Configurations /etc/nginx/nginx.conf
/var Données variables /var/log/syslog
/var/log Logs système/apps /var/log/auth.log
/var/lib État des apps /var/lib/docker/
/home Dossiers utilisateurs /home/debian/
/tmp Temporaire (vidé au reboot) /tmp/fichier-temp
/usr Applications système /usr/bin/python3
/usr/local Apps installées manuellement /usr/local/bin/mon-script
/opt Apps tierces /opt/google/chrome/
/root Dossier de root (admin) /root/.bashrc
/boot Fichiers de démarrage /boot/vmlinuz
/srv Données servies /srv/www/
/run Infos runtime (RAM) /run/docker.sock
/proc Infos processus (virtuel) /proc/cpuinfo
/sys Infos hardware (virtuel) /sys/class/net/

Commandes essentielles

# Naviguer
cd /var/log           # Aller dans un dossier
pwd                   # Voir où je suis
ls -la                # Lister avec fichiers cachés

# Explorer
tree /etc -L 2        # Arborescence (2 niveaux)
find /etc -name "*.conf"  # Trouver des fichiers

# Analyser l'espace
df -h                 # Espace des disques
du -sh /var/*         # Taille des dossiers
ncdu /var             # Navigateur interactif

# Permissions
ls -l fichier         # Voir les permissions
sudo chown user:group fichier  # Changer propriétaire
sudo chmod 644 fichier         # Changer permissions

Checklist : "Où mettre mes fichiers ?"

Type de fichier Emplacement
Configuration d'une app /etc/[app]/
Script personnel ~/bin/ ou ~/.local/bin/
Script global /usr/local/bin/
Application manuelle /opt/[app]/
Site web /var/www/ ou /srv/www/
Base de données /var/lib/[db]/
Logs applicatifs /var/log/[app]/
Cache applicatif /var/cache/[app]/
Fichier temporaire /tmp/
Backup /var/backups/ ou /home/[user]/backups/

Ressources complémentaires

Standards officiels :

Commandes utiles :

# Arbre complet du système (attention, très long)
tree / -L 2

# Pages de manuel
man hier      # Hiérarchie du filesystem
man file      # Types de fichiers

# Infos disque
lsblk         # Liste des disques et partitions
mount         # Points de montage actifs

Outils recommandés :

  • ncdu : Navigateur d'espace disque interactif
  • tree : Affichage en arbre
  • htop : Monitoring incluant infos filesystem