0 Votes

Code source wiki de Nettoyage Système (script)

Modifié par john le 2026/09/20 20:26

Afficher les derniers auteurs
1 {{toc/}}
2
3 == Présentation ==
4
5 Ce script nettoie un système Linux : caches, paquets inutiles, fichiers temporaires anciens, journaux trop volumineux.
6
7 Il est conçu pour être **sûr**, **verbeux** et **personnalisable**, avec un mode simulation.
8
9 ----
10
11 == Objectifs ==
12
13 * Libérer de l’espace disque
14 * Éviter les lenteurs causées par des accumulations inutiles
15 * Prévenir les erreurs d’espace faible
16 * Réduire le bruit dans les sauvegardes automatiques
17
18 ----
19
20 == Script ==
21
22 {{code language="bash"}}
23 #!/bin/bash
24 set -euo pipefail
25
26 DRY_RUN="${1:-}" # ./nettoyage.sh --dry-run pour simuler
27 LOG="$HOME/nettoyage_$(date +%F).log"
28
29 run() {
30 if [ "$DRY_RUN" = "--dry-run" ]; then
31 echo "[simulation] $*" | tee -a "$LOG"
32 else
33 echo "+ $*" | tee -a "$LOG"
34 "$@" >> "$LOG" 2>&1 || true
35 fi
36 }
37
38 echo "Début du nettoyage : $(date)" | tee "$LOG"
39 df -h / | tail -n 1 | tee -a "$LOG"
40
41 # Caches utilisateur de plus de 30 jours
42 echo "Cache utilisateur" | tee -a "$LOG"
43 run find "$HOME/.cache" -type f -atime +30 -delete
44
45 # Paquets (Debian/Ubuntu)
46 if command -v apt >/dev/null; then
47 echo "Paquets apt" | tee -a "$LOG"
48 run sudo apt-get autoclean -y
49 run sudo apt-get autoremove --purge -y
50 fi
51
52 # Paquets (Fedora/RHEL)
53 if command -v dnf >/dev/null; then
54 echo "Paquets dnf" | tee -a "$LOG"
55 run sudo dnf clean all
56 run sudo dnf autoremove -y
57 fi
58
59 # Fichiers temporaires de plus de 10 jours, non utilisés
60 echo "Fichiers temporaires anciens" | tee -a "$LOG"
61 run sudo find /var/tmp -type f -atime +10 -delete
62
63 # Journaux systemd : garder 7 jours, au plus 500 Mo
64 echo "Journaux systemd" | tee -a "$LOG"
65 run sudo journalctl --vacuum-time=7d
66 run sudo journalctl --vacuum-size=500M
67
68 echo "Fin du nettoyage : $(date)" | tee -a "$LOG"
69 df -h / | tail -n 1 | tee -a "$LOG"
70 {{/code}}
71
72 {{warning}}
73 Ne pas faire ##rm -rf /tmp/* /var/tmp/*## sur un système en marche : ces dossiers contiennent des fichiers utilisés par les services en cours (sessions, verrous, travaux temporaires). ##/tmp## est vidé au redémarrage sur les systèmes récents, et ##systemd-tmpfiles## fait déjà le ménage périodiquement.
74 {{/warning}}
75
76 ----
77
78 == Docker ==
79
80 {{code language="bash"}}
81 docker image prune # images intermédiaires sans nom
82 docker system prune # conteneurs arrêtés, réseaux inutilisés, cache de build
83 {{/code}}
84
85 {{warning}}
86 ##docker system prune -af## supprime toutes les images non utilisées par un conteneur en cours, y compris celles construites localement, qui devront être reconstruites. À éviter dans un script automatique.
87 {{/warning}}
88
89 ----
90
91 == Sécuriser les suppressions ==
92
93 * Lancer d'abord avec ##--dry-run##
94 * Préférer ##find ... -delete## avec un critère d'âge à un ##rm -rf## global
95 * Vérifier la syntaxe avant d'exécuter : ##bash -n nettoyage.sh##
96 * Sur un serveur, relire la liste proposée par ##apt autoremove## avant de confirmer : il retire parfois des paquets encore utiles, installés comme dépendances
97
98 ----
99
100 == Journalisation ==
101
102 Le script écrit un journal daté dans ##$HOME##, ce qui permet de vérifier les erreurs et d'auditer les nettoyages passés.
103
104 ----
105
106 == Automatiser avec cron ==
107
108 Pour l'exécuter tous les dimanches à 6 h :
109
110 {{code language="bash"}}
111 crontab -e
112 {{/code}}
113
114 {{code language="text"}}
115 0 6 * * 0 /chemin/vers/nettoyage.sh
116 {{/code}}
117
118 Les commandes en ##sudo## ne fonctionneront dans une crontab utilisateur que si ##sudo## est configuré sans mot de passe pour ces commandes ; sinon, placer le script dans ##/etc/cron.d/## avec l'utilisateur ##root##.
119
120 ----
121
122 == À adapter selon la distribution ==
123
124 |=Distribution|=Commande principale
125 |Debian / Ubuntu|##apt##, ##journalctl##, ##dpkg##
126 |Fedora / RHEL|##dnf##, ##journalctl##
127 |Arch Linux|##pacman -Rns $(pacman -Qtdq)##
128 |Alpine Linux|##apk cache clean##
129
130 ----
131
132 == Liens utiles ==
133
134 * [[journalctl (documentation systemd)>>https://www.freedesktop.org/software/systemd/man/journalctl.html]]
135 * [[Manuel de rm>>https://man7.org/linux/man-pages/man1/rm.1.html]]
136 * [[ShellCheck>>https://www.shellcheck.net]]
137
138 ----
139
140 == Liens internes ==
141
142 * [[Retour aux scripts perso>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
143 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]