- 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>
12 KiB
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
find [où chercher] [critères] [action]
Exemples progressifs
Exemple 1 : Lister tous les fichiers d'un dossier
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)
find /home/debian/forgejo/data/gitea/repo-archive -type f
Nouveau paramètre :
-type f: Filtre pour garder seulement les fichiers (file)-type d: Pour les dossiers (directory)
Exemple 3 : Compter les fichiers
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 suivantewc -l: Word Count 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 :
-mtimecompte en jours entiers (multiples de 24h)-mtime +1signifie "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 :
# 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 :
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 :
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
find repo-archive -type f -exec ls -lh {} \;
Ce qui se passe :
findtrouve le fichier/path/to/file1.zip- Exécute :
ls -lh /path/to/file1.zip - Trouve le fichier
/path/to/file2.zip - Exécute :
ls -lh /path/to/file2.zip - Etc.
Exemple 2 : Supprimer tous les fichiers trouvés
find repo-archive -type f -mmin +360 -exec rm {} \;
⚠️ Attention : Cette commande supprime définitivement les fichiers.
Équivalent plus simple :
find repo-archive -type f -mmin +360 -delete
L'option -delete est plus rapide et sûre que -exec rm.
Différence entre \; et +
# 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 :
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 :
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
du [options] [chemin]
Options courantes
| Option | Signification | Exemple |
|---|---|---|
-s |
Summary (résumé total) | Affiche seulement le total |
-h |
Human-readable (Go, Mo) | 5.2G au lieu de 5242880 |
-b |
Bytes (octets exacts) | Pour des calculs précis |
-c |
Cumulé (total à la fin) | Ajoute une ligne de total |
Exemples
Voir la taille d'un dossier :
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 :
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) :
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 :
find repo-archive -type f -exec du -ch {} + | tail -1
Décortiquons :
find repo-archive -type f: Trouve tous les fichiers-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)
| 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.
commande1 | commande2 | commande3
Exemple concret :
find repo-archive -type f | wc -l
Ce qui se passe :
findaffiche tous les fichiers (un par ligne)|envoie cette liste àwcwc -lcompte le nombre de lignes
Chaînes courantes
Compter + Trier :
docker logs forgejo --since 24h | grep "archive" | wc -l
Étapes :
docker logs forgejo --since 24h: Affiche les logs des 24 dernières heuresgrep "archive": Garde seulement les lignes contenant "archive"wc -l: Compte combien de lignes
Extraire + Compter + Trier :
docker logs forgejo --since 24h | grep "archive" | grep -oP '\d+\.\d+\.\d+\.\d+' | sort | uniq -c | sort -rn | head -5
Étapes détaillées :
docker logs forgejo --since 24h: Logs des 24hgrep "archive": Lignes avec "archive"grep -oP '\d+\.\d+\.\d+\.\d+': Extrait les adresses IP (regex)sort: Trie les IP alphabétiquementuniq -c: Compte les occurrences de chaque IP uniquesort -rn: Trie par nombre décroissanthead -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 |
Reverse (ordre décroissant) |
-n |
Numérique (trie les nombres correctement) |
-rn |
Numérique décroissant |
Exemple :
du -sh /var/* | sort -h
uniq : Dédoublonner
| Option | Signification |
|---|---|
-c |
Count (compte les occurrences) |
Important : uniq ne fonctionne que sur des données triées.
# ❌ 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
# 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 :
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 :
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 :
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
du -sh /home/debian/forgejo/data/gitea/repo-archive
Résultat : 47G
Étape 2 : Nombre de fichiers
find /home/debian/forgejo/data/gitea/repo-archive -type f | wc -l
Résultat : 1189 fichiers
Étape 3 : Distribution par date
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 :
find /home/debian/forgejo/data/gitea/repo-archive -type f -mtime -1 | wc -l
Résultat : 239 fichiers
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 :
find /home/debian/forgejo/data/gitea/repo-archive -type f ! -mtime -1 | wc -l
Résultat : 957 fichiers
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
# 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