- 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>
609 lines
15 KiB
Markdown
609 lines
15 KiB
Markdown
# 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
|