- 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>
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
- Vue d'ensemble
- Arborescence de base
- Dossiers systèmes essentiels
- Dossiers de données
- Dossiers temporaires
- Cas pratiques
- 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
/homepour 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 :
- Configuration :
/etc/[nom-app]/ - Données :
/var/lib/[nom-app]/ - Logs :
/var/log/[nom-app]/ - 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 interactiftree: Affichage en arbrehtop: Monitoring incluant infos filesystem