0 Votes

Code source wiki de Nettoyage Système (script)

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

Masquer les derniers auteurs
john 1.1 1 {{toc/}}
2
3 == Présentation ==
4
john 4.1 5 Ce script nettoie un système Linux : caches, paquets inutiles, fichiers temporaires anciens, journaux trop volumineux.
john 1.1 6
john 4.1 7 Il est conçu pour être **sûr**, **verbeux** et **personnalisable**, avec un mode simulation.
john 1.1 8
john 2.1 9 ----
john 1.1 10
11 == Objectifs ==
12
13 * Libérer de l’espace disque
14 * Éviter les lenteurs causées par des accumulations inutiles
john 4.1 15 * Prévenir les erreurs d’espace faible
john 1.1 16 * Réduire le bruit dans les sauvegardes automatiques
17
john 2.1 18 ----
john 1.1 19
john 4.1 20 == Script ==
john 1.1 21
22 {{code language="bash"}}
23 #!/bin/bash
24 set -euo pipefail
25
john 4.1 26 DRY_RUN="${1:-}" # ./nettoyage.sh --dry-run pour simuler
john 1.1 27 LOG="$HOME/nettoyage_$(date +%F).log"
john 4.1 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
john 1.1 38 echo "Début du nettoyage : $(date)" | tee "$LOG"
john 4.1 39 df -h / | tail -n 1 | tee -a "$LOG"
john 1.1 40
john 4.1 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
john 1.1 44
john 4.1 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
john 1.1 50 fi
51
john 4.1 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
john 1.1 57 fi
58
john 4.1 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
john 1.1 62
john 4.1 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
john 1.1 67
john 4.1 68 echo "Fin du nettoyage : $(date)" | tee -a "$LOG"
69 df -h / | tail -n 1 | tee -a "$LOG"
john 1.1 70 {{/code}}
71
john 4.1 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
john 2.1 76 ----
john 1.1 77
john 4.1 78 == Docker ==
john 1.1 79
john 4.1 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}}
john 1.1 84
john 4.1 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}}
john 1.1 88
john 2.1 89 ----
john 1.1 90
91 == Sécuriser les suppressions ==
92
john 4.1 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
john 1.1 97
john 2.1 98 ----
john 1.1 99
100 == Journalisation ==
101
john 4.1 102 Le script écrit un journal daté dans ##$HOME##, ce qui permet de vérifier les erreurs et d'auditer les nettoyages passés.
john 1.1 103
john 2.1 104 ----
john 1.1 105
john 4.1 106 == Automatiser avec cron ==
john 1.1 107
john 4.1 108 Pour l'exécuter tous les dimanches à 6 h :
john 1.1 109
john 4.1 110 {{code language="bash"}}
111 crontab -e
112 {{/code}}
john 1.1 113
john 4.1 114 {{code language="text"}}
115 0 6 * * 0 /chemin/vers/nettoyage.sh
116 {{/code}}
john 1.1 117
john 4.1 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
john 2.1 120 ----
john 1.1 121
john 4.1 122 == À adapter selon la distribution ==
john 1.1 123
john 4.1 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##
john 1.1 129
john 2.1 130 ----
john 1.1 131
132 == Liens utiles ==
133
john 4.1 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]]
john 1.1 137
john 2.1 138 ----
john 1.1 139
140 == Liens internes ==
141
john 4.1 142 * [[Retour aux scripts perso>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
john 3.1 143 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]