# 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](#1-vue-densemble) 2. [Arborescence de base](#2-arborescence-de-base) 3. [Dossiers systèmes essentiels](#3-dossiers-systèmes-essentiels) 4. [Dossiers de données](#4-dossiers-de-données) 5. [Dossiers temporaires](#5-dossiers-temporaires) 6. [Cas pratiques](#6-cas-pratiques) 7. [Mémo rapide](#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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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 :** ```bash # 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` | **Config**urations | `/etc/nginx/nginx.conf` | | `/var` | Données **var**iables | `/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 ```bash # 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 :** - [FHS (Filesystem Hierarchy Standard)](https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf) **Commandes utiles :** ```bash # 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