0 Votes

Modifications pour le document Nettoyage Système (script)

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

Depuis la version 1.1
modifié par john
sur 2025/05/24 23:47
Commentaire de modification : Imported from XAR
À la version 4.1
modifié par john
sur 2026/09/20 20:26
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Titre
... ... @@ -1,1 +1,1 @@
1 -ScriptsPerso/Nettoyage
1 +Nettoyage Système (script)
Contenu
... ... @@ -1,132 +3,143 @@
1 -= Script de nettoyage système =
2 -
3 3  {{toc/}}
4 4  
5 5  == Présentation ==
6 6  
7 -Ce script permet de **nettoyer un système Linux** en supprimant :
8 -- les caches d’utilisateur,
9 -- les paquets inutiles,
10 -- les fichiers temporaires,
11 -- les vieux fichiers journaux,
12 -- et autres éléments obsolètes.
5 +Ce script nettoie un système Linux : caches, paquets inutiles, fichiers temporaires anciens, journaux trop volumineux.
13 13  
14 -Il est conçu pour être **sûr**, **verbeux**, et **personnalisable**.
7 +Il est conçu pour être **sûr**, **verbeux** et **personnalisable**, avec un mode simulation.
15 15  
16 ------
9 +----
17 17  
18 18  == Objectifs ==
19 19  
20 20  * Libérer de l’espace disque
21 21  * Éviter les lenteurs causées par des accumulations inutiles
22 -* Prévenir les erreurs d’espace faible (`disk full`)
15 +* Prévenir les erreurs d’espace faible
23 23  * Réduire le bruit dans les sauvegardes automatiques
24 24  
25 ------
18 +----
26 26  
27 -== Exemple de script complet ==
20 +== Script ==
28 28  
29 29  {{code language="bash"}}
30 30  #!/bin/bash
31 -
32 32  set -euo pipefail
33 33  
26 +DRY_RUN="${1:-}" # ./nettoyage.sh --dry-run pour simuler
34 34  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 +
35 35  echo "Début du nettoyage : $(date)" | tee "$LOG"
39 +df -h / | tail -n 1 | tee -a "$LOG"
36 36  
37 -# 1. Nettoyage des caches utilisateur
38 -echo "Nettoyage du cache utilisateur (~/.cache)" | tee -a "$LOG"
39 -rm -rf ~/.cache/* >> "$LOG" 2>&1 || true
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
40 40  
41 -# 2. Nettoyage des paquets orphelins (Debian/Ubuntu)
42 -if command -v apt &>/dev/null; then
43 - echo "Nettoyage apt (autoclean, autoremove)" | tee -a "$LOG"
44 - sudo apt autoclean -y >> "$LOG" 2>&1
45 - sudo apt autoremove -y >> "$LOG" 2>&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
46 46  fi
47 47  
48 -# 3. Nettoyage DNF (RHEL/Fedora)
49 -if command -v dnf &>/dev/null; then
50 - echo "Nettoyage dnf" | tee -a "$LOG"
51 - sudo dnf clean all -y >> "$LOG" 2>&1
52 - sudo dnf autoremove -y >> "$LOG" 2>&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
53 53  fi
54 54  
55 -# 4. Suppression des fichiers temporaires
56 -echo "Suppression de /tmp" | tee -a "$LOG"
57 -sudo rm -rf /tmp/* /var/tmp/* >> "$LOG" 2>&1 || true
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
58 58  
59 -# 5. Nettoyage des anciens journaux
60 -echo "Nettoyage des journaux (>7 jours)" | tee -a "$LOG"
61 -sudo journalctl --vacuum-time=7d >> "$LOG" 2>&1 || true
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
62 62  
63 -echo "Nettoyage terminé : $(date)" | tee -a "$LOG"
68 +echo "Fin du nettoyage : $(date)" | tee -a "$LOG"
69 +df -h / | tail -n 1 | tee -a "$LOG"
64 64  {{/code}}
65 65  
66 ------
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}}
67 67  
68 -== Astuces supplémentaires ==
76 +----
69 69  
70 -* Pour un système graphique, on peut aussi nettoyer les miniatures GNOME :
71 - {{code language="bash"}} rm -rf ~/.cache/thumbnails/*
72 - {{/code}}
78 +== Docker ==
73 73  
74 -* Pour les utilisateurs de Docker :
75 - {{code language="bash"}} docker system prune -af
76 - {{/code}}
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}}
77 77  
78 ------
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}}
79 79  
89 +----
90 +
80 80  == Sécuriser les suppressions ==
81 81  
82 -Pour éviter les suppressions accidentelles :
83 -- Toujours **tester d’abord avec `echo`**
84 -- Utiliser `rm -i` pour confirmation
85 -- Ajouter `--dry-run` pour des commandes comme `rsync` ou `apt`--
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
86 86  
87 ------
98 +----
88 88  
89 89  == Journalisation ==
90 90  
91 -Le script ci-dessus crée un **log daté** dans `$HOME`, ce qui permet de :
92 -- Vérifier les erreurs
93 -- Auditer les nettoyages passés
94 -- Automatiser sans crainte (par cron)
102 +Le script écrit un journal daté dans ##$HOME##, ce qui permet de vérifier les erreurs et d'auditer les nettoyages passés.
95 95  
96 ------
104 +----
97 97  
98 -== Automatiser avec `cron` ==
106 +== Automatiser avec cron ==
99 99  
100 -Pour exécuter le nettoyage tous les dimanches à 6h :
108 +Pour l'exécuter tous les dimanches à 6 h :
101 101  
102 -1. Modifier la crontab :
103 - {{code language="bash"}} crontab -e
104 - {{/code}}
110 +{{code language="bash"}}
111 +crontab -e
112 +{{/code}}
105 105  
106 -2. Ajouter la ligne suivante :
107 - {{code language="bash"}} 0 6 * * 0 /chemin/vers/nettoyage.sh
108 - {{/code}}
114 +{{code language="text"}}
115 +0 6 * * 0 /chemin/vers/nettoyage.sh
116 +{{/code}}
109 109  
110 ------
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##.
111 111  
112 -== À adapter selon votre distribution ==
120 +----
113 113  
114 -|= Distribution |= Commande principale |
115 -| Debian / Ubuntu | `apt`, `journalctl`, `dpkg` |
116 -| Fedora / RHEL   | `dnf`, `journalctl` |
117 -| Arch Linux      | `pacman -Rns $(pacman -Qtdq)` |
118 -| Alpine Linux    | `apk cache clean` |
122 +== À adapter selon la distribution ==
119 119  
120 ------
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##
121 121  
130 +----
131 +
122 122  == Liens utiles ==
123 123  
124 -* [Systemd journalctl vacuum](https://www.freedesktop.org/software/systemd/man/journalctl.html#--vacuum-size=)
125 -* [GNU `rm` documentation](https://man7.org/linux/man-pages/man1/rm.1.html)
126 -* [ShellCheck](https://www.shellcheck.net) pour analyser les scripts
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]]
127 127  
128 ------
138 +----
129 129  
130 130  == Liens internes ==
131 131  
132 -* [[Retour aux scripts personnels>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
142 +* [[Retour aux scripts perso>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
143 +* [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]