Modifications pour le document Nettoyage Système (script)
Modifié par john le 2026/09/20 20:26
Résumé
-
Propriétés de la Page (2 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Titre
-
... ... @@ -1,1 +1,1 @@ 1 - ScriptsPerso/Nettoyage1 +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 scriptcomplet==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 descaches utilisateur38 -echo " Nettoyage ducache utilisateur(~/.cache)" | tee -a "$LOG"39 -r m-rf~/.cache/*>>"$LOG"2>&1||true41 +# 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 paquetsorphelins(Debian/Ubuntu)42 -if command -v apt &>/dev/null; then43 - echo " Nettoyage apt(autoclean, autoremove)" | tee -a "$LOG"44 - sudo apt autoclean -y >> "$LOG" 2>&145 - sudo apt autoremove - y>> "$LOG" 2>&145 +# 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. NettoyageDNF(RHEL/Fedora)49 -if command -v dnf &>/dev/null; then50 - echo " Nettoyage dnf" | tee -a "$LOG"51 - sudo dnf clean all -y >> "$LOG" 2>&152 - sudo dnf autoremove -y >> "$LOG" 2>&152 +# 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 temporaires56 -echo " Suppressionde /tmp" | tee -a "$LOG"57 -sudo rm -rf /tmp/* /var/tmp/*>>"$LOG"2>&1||true59 +# 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éviterles suppressionsaccidentelles :83 - -Toujours **tester d’abord avec`echo`**84 - -Utiliser`rm-i`pourconfirmation85 - -Ajouter`--dry-run`pourdescommandescomme`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. Modifierlacrontab:103 - {{code language="bash"}} crontab -e104 - {{/code}}110 +{{code language="bash"}} 111 +crontab -e 112 +{{/code}} 105 105 106 - 2. Ajouterlaligne suivante:107 - {{code language="bash"}}0 6 * * 0 /chemin/vers/nettoyage.sh108 - {{/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 -* [ Systemdjournalctlvacuum](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 scripts134 +* [[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]]