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>
This commit is contained in:
isUnknown 2026-02-05 08:37:50 +01:00
parent 4e99c5025c
commit e33395dc35
10 changed files with 2811 additions and 17 deletions

View file

@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"Bash(grep:*)",
"Bash(git add:*)"
]
}
}

157
serveur/README.md Normal file
View file

@ -0,0 +1,157 @@
# Guides d'administration serveur
Collection de guides pratiques pour administrer des serveurs Linux et services auto-hébergés.
## 📁 Structure
```
serveur/
├── linux-essentials/ Guides généralistes Linux
└── forgejo/ Guides spécifiques Forgejo
```
---
## 🚀 Démarrage rapide
### Vous débutez sur Linux ?
👉 Commencez par [linux-essentials/architecture-filesystem.md](linux-essentials/architecture-filesystem.md)
### Votre disque est plein ?
👉 Suivez [linux-essentials/diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md)
### Problème avec Forgejo ?
👉 Consultez [forgejo/QUICK-START.md](forgejo/QUICK-START.md)
---
## 📚 Tous les guides
### [linux-essentials/](linux-essentials/) - Bases Linux
| Guide | Description | Niveau | Temps |
|-------|-------------|--------|-------|
| **[architecture-filesystem.md](linux-essentials/architecture-filesystem.md)** | Comprendre /etc, /var, /lib et l'organisation Linux | Débutant | 30-45 min |
| **[diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md)** | Identifier et résoudre les problèmes d'espace disque | Débutant | 15-30 min |
| **[analyse-logs-detection-bots.md](linux-essentials/analyse-logs-detection-bots.md)** | Analyser les logs, détecter et bloquer les bots | Intermédiaire | 20-40 min |
| **[comprendre-commandes-find-du.md](linux-essentials/comprendre-commandes-find-du.md)** | Maîtriser find, du, pipes et grep (pédagogique) | Débutant | 1h |
### [forgejo/](forgejo/) - Forge Git
| Guide | Description | Niveau | Temps |
|-------|-------------|--------|-------|
| **[QUICK-START.md](forgejo/QUICK-START.md)** | Sécuriser Forgejo contre les bots en 15 min | Intermédiaire | 15 min |
| **[bloquer-telechargements-abusifs.md](forgejo/bloquer-telechargements-abusifs.md)** | Guide complet : Fail2ban, rate limiting, monitoring | Intermédiaire | 30-60 min |
---
## 🎯 Par problème
### Disque saturé (100%)
**Diagnostic :**
1. Identifier le coupable → [diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md)
2. Si c'est `repo-archive` (Forgejo) → [forgejo/bloquer-telechargements-abusifs.md](forgejo/bloquer-telechargements-abusifs.md)
### Bots qui attaquent
**Actions :**
1. Analyser les logs → [analyse-logs-detection-bots.md](linux-essentials/analyse-logs-detection-bots.md)
2. Bloquer avec Fail2ban → [forgejo/bloquer-telechargements-abusifs.md](forgejo/bloquer-telechargements-abusifs.md)
### Apprendre Linux
**Parcours :**
1. Architecture système → [architecture-filesystem.md](linux-essentials/architecture-filesystem.md)
2. Commandes essentielles → [comprendre-commandes-find-du.md](linux-essentials/comprendre-commandes-find-du.md)
3. Pratique → [diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md)
---
## 🔧 Commandes les plus utiles
### Espace disque
```bash
df -h # Vue globale
sudo du -sh /* | sort -h | tail -10 # Top 10 racine
sudo du -sh /var/* | sort -h | tail -10 # Top 10 dans /var
```
### Fichiers
```bash
find /path -type f -size +100M # Gros fichiers
find /path -type f -mmin +360 # Fichiers de +6h
find /path -type f -mmin +360 -delete # Supprimer fichiers de +6h
```
### Logs
```bash
sudo journalctl -u service -n 50 # Logs d'un service
sudo tail -f /var/log/syslog # Logs système en temps réel
docker logs container --since 24h # Logs Docker 24h
```
### Système
```bash
ls -la /etc/ # Configurations
ls -la /var/log/ # Logs
du -sh /var/lib/docker # Données Docker
```
---
## 📖 Référence rapide
### Dossiers Linux essentiels
| Dossier | Rôle | Exemple typique |
|---------|------|-----------------|
| `/etc` | Configurations | `/etc/nginx/nginx.conf` |
| `/var/log` | Logs | `/var/log/syslog` |
| `/var/lib` | Données d'état | `/var/lib/docker/` |
| `/home` | Dossiers utilisateurs | `/home/debian/` |
| `/tmp` | Temporaire (vidé au reboot) | `/tmp/fichier` |
| `/usr/bin` | Commandes système | `/usr/bin/python3` |
| `/usr/local/bin` | Commandes manuelles | `/usr/local/bin/mon-script` |
Voir le guide complet : [architecture-filesystem.md](linux-essentials/architecture-filesystem.md)
---
## 🆘 Aide rapide
### Mon disque est plein
```bash
df -h # Identifier le disque
sudo du -sh /* | sort -h | tail -10 # Trouver le gros dossier
```
→ Puis consulter [diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md)
### Je ne trouve pas un fichier de config
```bash
find /etc -name "*mot-clé*" # Chercher dans /etc
```
→ Voir [architecture-filesystem.md](linux-essentials/architecture-filesystem.md)
### Fail2ban ne fonctionne pas
```bash
sudo fail2ban-client status # Vérifier les jails actives
sudo journalctl -u fail2ban -n 50 # Voir les logs
```
→ Consulter [forgejo/bloquer-telechargements-abusifs.md](forgejo/bloquer-telechargements-abusifs.md)
---
## 🌱 Contribuer
Ces guides sont créés à partir de diagnostics réels sur des serveurs en production.
**Structure des guides :**
- Généralistes → `linux-essentials/`
- Spécifiques à un service → `nom-service/`
**Améliorations bienvenues :**
- Nouveaux guides
- Corrections
- Clarifications
- Scripts d'automatisation

View file

@ -0,0 +1,134 @@
# Quick Start : Sécuriser Forgejo contre les bots (15 min)
## Problème
Bots qui téléchargent massivement des archives → Disque saturé (47G en 24-48h)
## Solution en 3 étapes
### 1⃣ Fail2ban : Ban plus rapide (3 min)
```bash
sudo nano /etc/fail2ban/jail.d/forgejo.conf
```
**Changez ces valeurs :**
```ini
maxretry = 8 # Au lieu de 20
bantime = 21600 # Au lieu de 3600
```
**Ajoutez (si absent) :**
```ini
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 604800
```
```bash
sudo systemctl restart fail2ban
```
---
### 2⃣ Forgejo : Rate limit + Expiration (3 min)
```bash
nano /home/debian/forgejo/data/gitea/conf/app.ini
```
**Changez ces valeurs :**
```ini
[api]
RATE_LIMIT_BURST = 20 # Au lieu de 100
[repository.local]
ARCHIVE_EXPIRY = 3600 # Au lieu de 604800
```
```bash
docker restart forgejo
```
---
### 3⃣ Cron : Nettoyage plus fréquent (2 min)
```bash
sudo crontab -e
```
**Remplacez la ligne existante par :**
```bash
0 */6 * * * find /home/debian/forgejo/data/gitea/repo-archive -type f -mmin +360 -delete
```
---
## Nettoyage initial
```bash
# Voir la taille
du -sh /home/debian/forgejo/data/gitea/repo-archive
# Nettoyer maintenant
find /home/debian/forgejo/data/gitea/repo-archive -type f -delete
# Vérifier
du -sh /home/debian/forgejo/data/gitea/repo-archive
```
---
## Vérification quotidienne
```bash
# Taille du cache (objectif : < 5G)
du -sh /home/debian/forgejo/data/gitea/repo-archive
# IP bannies (doit augmenter)
sudo fail2ban-client status forgejo-archive
# Top 5 IP actives
docker logs forgejo --since 24h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn | head -5
```
---
## Résultat attendu
| Avant | Après |
|-------|-------|
| 47G de cache | 2-3G max |
| 20 archives avant ban | 8 archives avant ban |
| Ban 1h | Ban 6h (puis 12h, 24h...) |
| 100 requêtes/min | 20 requêtes/min |
| Archives gardées 7j | Archives supprimées après 1h |
---
## Dépannage
**Le cache se remplit encore ?**
```bash
# Voir qui télécharge
docker logs forgejo --since 1h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn
# Bannir manuellement
sudo fail2ban-client set forgejo-archive banip IP_SUSPECTE
# Vérifier Fail2ban
sudo fail2ban-client status forgejo-archive
```
**Fail2ban ne bannit pas ?**
```bash
# Tester la regex
sudo fail2ban-regex /var/lib/docker/containers/.../...json.log /etc/fail2ban/filter.d/forgejo-archive.conf
# Logs Fail2ban
sudo tail -f /var/log/fail2ban.log
```
---
Pour plus de détails, voir le guide complet : [bloquer-telechargements-abusifs.md](bloquer-telechargements-abusifs.md)

144
serveur/forgejo/README.md Normal file
View file

@ -0,0 +1,144 @@
# Guides Forgejo
Guides spécifiques pour administrer et sécuriser une instance Forgejo (forge Git auto-hébergée).
## 📚 Guides disponibles
### 🚀 Démarrage rapide
**[QUICK-START.md](QUICK-START.md)**
- **Objectif :** Sécuriser Forgejo contre les bots en 15 minutes
- **Contenu :** Configuration Fail2ban, rate limiting, cron de nettoyage
- **Niveau :** Intermédiaire
- **Temps :** 15 min
### 🛡️ Guide complet
**[bloquer-telechargements-abusifs.md](bloquer-telechargements-abusifs.md)**
- **Objectif :** Empêcher les bots de saturer le disque avec des téléchargements massifs d'archives
- **Contenu :** Fail2ban détaillé, rate limiting, expiration des archives, monitoring, 5 solutions
- **Niveau :** Intermédiaire
- **Temps :** 30-60 min
---
## 🎯 Par situation
### Disque saturé par repo-archive
**Symptôme :** `/var/lib/docker/.../repo-archive` fait 40-50G
**Action rapide :**
1. Appliquer : [QUICK-START.md](QUICK-START.md)
2. Nettoyage : `find /path/repo-archive -type f -delete`
**Solution complète :**
1. Lire : [bloquer-telechargements-abusifs.md](bloquer-telechargements-abusifs.md)
2. Appliquer la configuration recommandée
3. Monitorer pendant 48h
### Configuration préventive
**Vous installez Forgejo ou voulez sécuriser préventivement :**
1. Lire la section "Configuration complète" de [bloquer-telechargements-abusifs.md](bloquer-telechargements-abusifs.md)
2. Appliquer avant de rendre public
---
## ⚙️ Configuration type recommandée
### Fail2ban (`/etc/fail2ban/jail.d/forgejo.conf`)
```ini
[forgejo-archive]
enabled = true
filter = forgejo-archive
logpath = /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
maxretry = 8
findtime = 600
bantime = 21600
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 604800
```
### Forgejo (`app.ini`)
```ini
[api]
ENABLE_RATE_LIMIT = true
RATE_LIMIT_BURST = 20
RATE_LIMIT_PERIOD = 60s
[repository.local]
ARCHIVE_EXPIRY = 3600
```
### Cron
```bash
# Nettoyage toutes les 6h (fichiers de +6h)
0 */6 * * * find /path/repo-archive -type f -mmin +360 -delete
```
---
## 🔍 Monitoring quotidien
```bash
# Taille du cache (objectif : < 5G)
du -sh /home/debian/forgejo/data/gitea/repo-archive
# Fail2ban status
sudo fail2ban-client status forgejo-archive
# Top 5 IP actives (24h)
docker logs forgejo --since 24h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn | head -5
# Nombre d'archives téléchargées (24h)
docker logs forgejo --since 24h | grep "archive" | wc -l
```
---
## 📊 Métriques de santé
| Métrique | Valeur saine | Alerte |
|----------|--------------|--------|
| Taille cache `repo-archive` | < 5 GB | > 10 GB |
| Nombre de fichiers | < 300 | > 500 |
| IP bannies/jour | 1-5 | > 10 |
| Archives téléchargées/jour | < 100 | > 500 |
---
## 🆘 Dépannage rapide
### Le cache se remplit encore
```bash
# 1. Vérifier la config Forgejo
cat /path/to/app.ini | grep -A3 "\[api\]"
docker restart forgejo
# 2. Vérifier Fail2ban
sudo fail2ban-client status forgejo-archive
# 3. Identifier les IP actives
docker logs forgejo --since 1h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn
# 4. Bannir manuellement si besoin
sudo fail2ban-client set forgejo-archive banip IP_SUSPECTE
```
### Fail2ban ne bannit pas
```bash
# Tester le filtre
sudo fail2ban-regex /var/lib/docker/containers/.../...json.log /etc/fail2ban/filter.d/forgejo-archive.conf
# Vérifier les logs
sudo journalctl -u fail2ban -n 50
# Redémarrer
sudo systemctl restart fail2ban
```
---
[← Retour à l'index principal](../README.md)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,98 @@
# Guides Linux Essentiels
Guides généralistes pour comprendre et administrer un système Linux.
## 📚 Guides disponibles
### 🏗️ Comprendre Linux
**[architecture-filesystem.md](architecture-filesystem.md)**
- **Objectif :** Comprendre l'organisation des dossiers Linux (/etc, /var, /lib, etc.)
- **Contenu :** FHS, rôle de chaque dossier, cas pratiques
- **Niveau :** Débutant
- **Temps :** 30-45 min de lecture
### 🔍 Diagnostic
**[diagnostic-espace-disque.md](diagnostic-espace-disque.md)**
- **Objectif :** Identifier ce qui remplit le disque et comment le nettoyer
- **Contenu :** Commandes `df`, `du`, `find`, cas pratiques (Docker, logs, caches)
- **Niveau :** Débutant à intermédiaire
- **Temps :** 15-30 min selon le problème
**[analyse-logs-detection-bots.md](analyse-logs-detection-bots.md)**
- **Objectif :** Analyser les logs pour identifier les IP problématiques et les bloquer
- **Contenu :** Docker logs, extraction d'IP, Fail2ban, whois, rate limiting
- **Niveau :** Intermédiaire
- **Temps :** 20-40 min
### 📖 Apprendre les commandes
**[comprendre-commandes-find-du.md](comprendre-commandes-find-du.md)**
- **Objectif :** Maîtriser les commandes `find`, `du`, pipes et grep
- **Contenu :** Explications détaillées, exemples progressifs, cas pratiques
- **Niveau :** Débutant (pédagogique)
- **Temps :** 1h de lecture active
---
## 🎯 Par besoin
### Je débute sur Linux
1. Lire : [architecture-filesystem.md](architecture-filesystem.md)
2. Pratiquer avec : [comprendre-commandes-find-du.md](comprendre-commandes-find-du.md)
### Mon disque est plein
1. Diagnostiquer : [diagnostic-espace-disque.md](diagnostic-espace-disque.md)
2. Si besoin d'approfondir les commandes : [comprendre-commandes-find-du.md](comprendre-commandes-find-du.md)
### Je veux analyser les logs
1. Lire : [analyse-logs-detection-bots.md](analyse-logs-detection-bots.md)
2. Pour les commandes : [comprendre-commandes-find-du.md](comprendre-commandes-find-du.md)
---
## 🔧 Commandes essentielles
### Espace disque
```bash
df -h # Vue globale
sudo du -sh /* | sort -h | tail -10 # Top 10 dossiers racine
ncdu / # Navigateur interactif
```
### Fichiers
```bash
find /path -type f -size +100M # Gros fichiers
find /path -type f -mmin +360 # Fichiers de +6h
```
### Logs
```bash
sudo journalctl -u service -n 50 # Logs d'un service
sudo tail -f /var/log/syslog # Logs en temps réel
```
### Système
```bash
ls -la /etc/ # Configurations
ls -la /var/log/ # Logs
du -sh /var/lib/docker # Données Docker
```
---
## 📊 Tableau de référence rapide
| Dossier | Rôle | Exemple |
|---------|------|---------|
| `/etc` | Configurations | `/etc/nginx/nginx.conf` |
| `/var/log` | Logs | `/var/log/syslog` |
| `/var/lib` | Données d'état | `/var/lib/docker/` |
| `/home` | Utilisateurs | `/home/debian/` |
| `/tmp` | Temporaire | `/tmp/fichier` |
| `/usr/bin` | Commandes | `/usr/bin/python3` |
---
[← Retour à l'index principal](../README.md)

View file

@ -727,7 +727,3 @@ docker logs forgejo --since 10m | grep -oP '\d+\.\d+\.\d+\.\d+' | sort -u | wc -
\d+\.\d+\.\d+\.\d+ # IPv4 basique
\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b # IPv4 plus précis
```
---
**Guide créé le 2026-02-03**

View file

@ -0,0 +1,609 @@
# 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

View file

@ -0,0 +1,566 @@
# Comprendre les commandes de diagnostic (find, du, grep)
Guide pédagogique pour comprendre les commandes utilisées dans le diagnostic du cache Forgejo.
---
## 1. La commande `find` : Chercher des fichiers
### Syntaxe de base
```bash
find [où chercher] [critères] [action]
```
### Exemples progressifs
**Exemple 1 : Lister tous les fichiers d'un dossier**
```bash
find /home/debian/forgejo/data/gitea/repo-archive
```
**Ce que ça fait :**
- Parcourt récursivement tout le dossier `repo-archive`
- Affiche tous les fichiers ET dossiers trouvés
---
**Exemple 2 : Seulement les fichiers (pas les dossiers)**
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f
```
**Nouveau paramètre :**
- `-type f` : Filtre pour garder seulement les **f**ichiers (file)
- `-type d` : Pour les **d**ossiers (directory)
---
**Exemple 3 : Compter les fichiers**
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f | wc -l
```
**Décortiquons :**
- `find ... -type f` : Trouve tous les fichiers
- `|` : "Pipe" = envoie le résultat à la commande suivante
- `wc -l` : **W**ord **C**ount avec `-l` (line) = compte les lignes
**Résultat :** Le nombre de fichiers trouvés (ex: `1189`)
---
### Filtres par date : `-mtime`, `-mmin`
**Les 3 formes :**
| Syntaxe | Signification | Exemple |
|---------|---------------|---------|
| `-mtime -1` | Modifié **moins de** 24h | Fichiers créés aujourd'hui |
| `-mtime 0` | Modifié **il y a exactement** 24h | Fichiers d'hier |
| `-mtime +1` | Modifié **plus de** 48h | Fichiers d'avant-hier ou plus |
**Note importante :**
- `-mtime` compte en **jours entiers** (multiples de 24h)
- `-mtime +1` signifie "plus de 1 jour complet" donc **≥ 2 jours** (48h)
**Pour plus de précision, utilisez `-mmin` (minutes) :**
| Syntaxe | Signification |
|---------|---------------|
| `-mmin -60` | Modifié dans les 60 dernières minutes (< 1h) |
| `-mmin +360` | Modifié il y a plus de 360 minutes (> 6h) |
**Exemple pratique :**
```bash
# Fichiers de moins de 6 heures
find repo-archive -type f -mmin -360
# Fichiers de plus de 6 heures
find repo-archive -type f -mmin +360
```
---
### L'opérateur `!` (NOT)
**Inverser une condition :**
```bash
find repo-archive -type f ! -mtime -1
```
**Signification :**
- `-mtime -1` : Fichiers de moins de 24h
- `!` : **NOT** (inverse la condition)
- Résultat : Fichiers de **PLUS de 24h**
**Équivalent :**
- `! -mtime -1` = `-mtime 0 -o -mtime +1` (24h-48h OU plus de 48h)
---
### La commande `-exec` : Exécuter une action sur chaque fichier
**Syntaxe :**
```bash
find [critères] -exec commande {} \;
```
**Composants :**
- `-exec` : Exécute une commande sur chaque fichier trouvé
- `commande` : La commande à exécuter (ex: `ls`, `du`, `rm`)
- `{}` : Remplacé par le chemin du fichier trouvé
- `\;` : Marque la fin de la commande (obligatoire)
**Exemple 1 : Afficher les détails de chaque fichier**
```bash
find repo-archive -type f -exec ls -lh {} \;
```
**Ce qui se passe :**
1. `find` trouve le fichier `/path/to/file1.zip`
2. Exécute : `ls -lh /path/to/file1.zip`
3. Trouve le fichier `/path/to/file2.zip`
4. Exécute : `ls -lh /path/to/file2.zip`
5. Etc.
---
**Exemple 2 : Supprimer tous les fichiers trouvés**
```bash
find repo-archive -type f -mmin +360 -exec rm {} \;
```
**⚠️ Attention :** Cette commande **supprime définitivement** les fichiers.
**Équivalent plus simple :**
```bash
find repo-archive -type f -mmin +360 -delete
```
L'option `-delete` est plus rapide et sûre que `-exec rm`.
---
### Différence entre `\;` et `+`
```bash
# Avec \; : Exécute la commande UNE FOIS par fichier (lent)
find repo-archive -type f -exec du -h {} \;
# → du -h file1.zip
# → du -h file2.zip
# → du -h file3.zip
# Avec + : Exécute la commande UNE FOIS avec TOUS les fichiers (rapide)
find repo-archive -type f -exec du -h {} +
# → du -h file1.zip file2.zip file3.zip
```
**Utilisez `+` quand possible, c'est beaucoup plus rapide.**
---
### La commande `-printf` : Format personnalisé
**Afficher des informations personnalisées :**
```bash
find repo-archive -type f -printf '%TY-%Tm-%Td\n'
```
**Composants :**
- `-printf` : Affiche un format personnalisé (au lieu du nom du fichier)
- `%T` : Date de modification du fichier
- `%TY` : Année (2026)
- `%Tm` : Mois (02)
- `%Td` : Jour (05)
- `\n` : Saut de ligne
**Résultat :**
```
2026-02-03
2026-02-03
2026-02-04
2026-02-04
...
```
**Formater avec l'heure :**
```bash
find repo-archive -type f -printf '%TY-%Tm-%Td %TH:%TM\n'
```
**Résultat :**
```
2026-02-03 14:23
2026-02-03 14:45
2026-02-04 08:12
```
---
## 2. La commande `du` : Disk Usage (taille des fichiers)
### Syntaxe de base
```bash
du [options] [chemin]
```
### Options courantes
| Option | Signification | Exemple |
|--------|---------------|---------|
| `-s` | **S**ummary (résumé total) | Affiche seulement le total |
| `-h` | **H**uman-readable (Go, Mo) | `5.2G` au lieu de `5242880` |
| `-b` | **B**ytes (octets exacts) | Pour des calculs précis |
| `-c` | **C**umulé (total à la fin) | Ajoute une ligne de total |
### Exemples
**Voir la taille d'un dossier :**
```bash
du -sh /home/debian/forgejo/data/gitea/repo-archive
```
**Résultat :**
```
47G /home/debian/forgejo/data/gitea/repo-archive
```
---
**Voir la taille de chaque sous-dossier :**
```bash
du -sh /home/debian/forgejo/data/gitea/*
```
**Résultat :**
```
4.0K /home/debian/forgejo/data/gitea/actions_artifacts
8.0K /home/debian/forgejo/data/gitea/conf
47G /home/debian/forgejo/data/gitea/repo-archive
```
---
**Taille en octets (pour des comparaisons) :**
```bash
du -sb /home/debian/forgejo/data/gitea/repo-archive
```
**Résultat :**
```
50465865728 /home/debian/forgejo/data/gitea/repo-archive
```
**Utilité :** Pour comparer avec un seuil (ex: 10G = 10737418240 octets)
---
### Utiliser `du` avec `find`
**Calculer la taille totale des fichiers trouvés :**
```bash
find repo-archive -type f -exec du -ch {} + | tail -1
```
**Décortiquons :**
1. `find repo-archive -type f` : Trouve tous les fichiers
2. `-exec du -ch {} +` : Calcule la taille de chaque fichier
- `-c` : Affiche un total à la fin
- `-h` : Format lisible (Go, Mo)
- `+` : Passe tous les fichiers en une fois (rapide)
3. `| tail -1` : Garde seulement la dernière ligne (le total)
**Résultat :**
```
47G total
```
---
## 3. Pipeline de commandes avec `|`
### Concept du pipe `|`
Le pipe `|` envoie le **résultat** d'une commande à l'**entrée** de la suivante.
```bash
commande1 | commande2 | commande3
```
**Exemple concret :**
```bash
find repo-archive -type f | wc -l
```
**Ce qui se passe :**
1. `find` affiche tous les fichiers (un par ligne)
2. `|` envoie cette liste à `wc`
3. `wc -l` compte le nombre de lignes
---
### Chaînes courantes
**Compter + Trier :**
```bash
docker logs forgejo --since 24h | grep "archive" | wc -l
```
**Étapes :**
1. `docker logs forgejo --since 24h` : Affiche les logs des 24 dernières heures
2. `grep "archive"` : Garde seulement les lignes contenant "archive"
3. `wc -l` : Compte combien de lignes
---
**Extraire + Compter + Trier :**
```bash
docker logs forgejo --since 24h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn | head -5
```
**Étapes détaillées :**
1. `docker logs forgejo --since 24h` : Logs des 24h
2. `grep "archive"` : Lignes avec "archive"
3. `grep -oP '\d+\.\d+\.\d+\.\d+'` : Extrait les adresses IP (regex)
4. `sort` : Trie les IP alphabétiquement
5. `uniq -c` : Compte les occurrences de chaque IP unique
6. `sort -rn` : Trie par nombre décroissant
7. `head -5` : Garde les 5 premières
**Résultat :**
```
2144 216.73.216.118
42 192.168.1.100
12 10.0.0.5
```
---
## 4. Commandes complémentaires
### `sort` : Trier
| Option | Signification |
|--------|---------------|
| `-h` | Trie en mode "humain" (comprend 10G > 2G) |
| `-r` | **R**everse (ordre décroissant) |
| `-n` | **N**umérique (trie les nombres correctement) |
| `-rn` | Numérique décroissant |
**Exemple :**
```bash
du -sh /var/* | sort -h
```
---
### `uniq` : Dédoublonner
| Option | Signification |
|--------|---------------|
| `-c` | **C**ount (compte les occurrences) |
**Important :** `uniq` ne fonctionne que sur des données **triées**.
```bash
# ❌ Mauvais (données non triées)
echo -e "a\nb\na" | uniq -c
# ✅ Bon (trier d'abord)
echo -e "a\nb\na" | sort | uniq -c
```
---
### `head` / `tail` : Garder les premières/dernières lignes
```bash
# Garder les 10 premières lignes
command | head -10
# Garder les 10 dernières lignes
command | tail -10
# Garder seulement la dernière ligne
command | tail -1
```
---
## 5. Exemples complets avec explications
### Exemple 1 : Trouver les gros fichiers
**Commande :**
```bash
find /home -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h | tail -20
```
**Décortiquons pas à pas :**
| Partie | Rôle |
|--------|------|
| `find /home` | Cherche dans /home |
| `-type f` | Seulement les fichiers |
| `-size +100M` | Plus de 100 MB |
| `-exec ls -lh {} \;` | Affiche les détails de chaque fichier trouvé |
| `2>/dev/null` | Masque les erreurs (permissions refusées) |
| `sort -k5 -h` | Trie par la 5ème colonne (taille) en mode humain |
| `tail -20` | Garde les 20 derniers = les plus gros |
---
### Exemple 2 : Distribution des fichiers par date
**Commande :**
```bash
find repo-archive -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
```
**Décortiquons :**
| Partie | Rôle |
|--------|------|
| `find repo-archive -type f` | Trouve tous les fichiers |
| `-printf '%TY-%Tm-%Td\n'` | Affiche la date de chaque fichier (format YYYY-MM-DD) |
| `sort` | Trie les dates |
| `uniq -c` | Compte combien de fichiers par date |
**Résultat :**
```
676 2026-02-03
513 2026-02-04
```
**Interprétation :** 676 fichiers créés le 3 février, 513 le 4 février.
---
### Exemple 3 : Taille totale des fichiers récents
**Commande :**
```bash
find repo-archive -type f -mtime -1 -exec du -ch {} + | tail -1
```
**Décortiquons :**
| Partie | Rôle |
|--------|------|
| `find repo-archive -type f` | Trouve tous les fichiers |
| `-mtime -1` | Modifiés dans les dernières 24h |
| `-exec du -ch {} +` | Calcule la taille avec total à la fin |
| `tail -1` | Garde la dernière ligne (le total) |
**Résultat :**
```
5.9G total
```
---
## 6. Cas pratique : Diagnostic du cache Forgejo
**Objectif :** Comprendre pourquoi le cache fait 47G.
### Étape 1 : Taille totale
```bash
du -sh /home/debian/forgejo/data/gitea/repo-archive
```
**Résultat :** `47G`
---
### Étape 2 : Nombre de fichiers
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f | wc -l
```
**Résultat :** `1189 fichiers`
---
### Étape 3 : Distribution par date
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
```
**Résultat :**
```
676 2026-02-03
513 2026-02-04
```
**Interprétation :** Tous les fichiers datent de 2-3 jours. Le cron n'a pas nettoyé ou les bots régénèrent constamment.
---
### Étape 4 : Taille des fichiers récents vs anciens
**Fichiers de moins de 24h :**
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f -mtime -1 | wc -l
```
**Résultat :** `239 fichiers`
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f -mtime -1 -exec du -ch {} + | tail -1
```
**Résultat :** `5.9G`
---
**Fichiers de plus de 24h :**
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f ! -mtime -1 | wc -l
```
**Résultat :** `957 fichiers`
```bash
find /home/debian/forgejo/data/gitea/repo-archive -type f ! -mtime -1 -exec du -ch {} + | tail -1
```
**Résultat :** `42G`
---
**Conclusion :**
- 239 fichiers récents (24h) = 5.9G → **Normal**
- 957 fichiers anciens (24h+) = 42G → **PROBLÈME** (auraient dû être supprimés)
**Cause :** Le cron ne s'est pas exécuté OU Fail2ban n'a pas banni les bots assez vite.
---
## Résumé des commandes essentielles
```bash
# Taille d'un dossier
du -sh /path/to/folder
# Nombre de fichiers
find /path -type f | wc -l
# Taille totale des fichiers
find /path -type f -exec du -ch {} + | tail -1
# Fichiers de plus de 6h
find /path -type f -mmin +360
# Supprimer fichiers de plus de 6h
find /path -type f -mmin +360 -delete
# Distribution par date
find /path -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
# Top 20 gros fichiers
find /path -type f -size +100M -exec ls -lh {} \; | sort -k5 -h | tail -20
```

View file

@ -326,20 +326,36 @@ sudo ncdu /
/home/user/forgejo/data/gitea/repo-archive → 48G
```
**Solution :**
**Cause :** Des bots téléchargent massivement des archives Git via `/repo/archive/main.zip`.
**Diagnostic :**
```bash
# Supprimer le cache d'archives
sudo rm -rf /home/user/forgejo/data/gitea/repo-archive/*
# Nombre total de fichiers et taille
find /path/to/repo-archive -type f | wc -l
du -sh /path/to/repo-archive
# Configurer une expiration automatique dans app.ini
[repository.local]
ARCHIVE_EXPIRY = 604800 # 7 jours
# Distribution par date de création
find /path/to/repo-archive -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
# Ajouter un cron de nettoyage quotidien
sudo crontab -e
# Ajouter : 0 3 * * * find /path/to/repo-archive -type f -mtime +1 -delete
# Identifier les IP qui téléchargent le plus
docker logs forgejo --since 24h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn | head -10
```
**Solution immédiate : Nettoyage d'urgence**
```bash
find /home/user/forgejo/data/gitea/repo-archive -type f -delete
```
**Solution pérenne : Bloquer à la source (RECOMMANDÉ)**
Au lieu de nettoyer en boucle, bloquez les téléchargements abusifs :
- Durcir Fail2ban pour bannir plus vite
- Rate limiting dans Forgejo
- Expiration rapide des archives
- Optionnel : désactiver les archives publiques
→ Voir le guide complet : `bloquer-telechargements-abusifs-forgejo.md`
### Problème 2 : Logs Docker volumineux
**Symptôme :**
@ -433,7 +449,3 @@ watch -n 5 'df -h'
- `man du` - Calculer l'utilisation disque
- `man find` - Rechercher des fichiers
- `man lsof` - Lister les fichiers ouverts
---
**Guide créé le 2026-02-03**