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 -Nettoyage 1 +Nettoyage Système (script) - Contenu
-
... ... @@ -1,17 +3,10 @@ 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 16 ---- 17 17 ... ... @@ -19,115 +19,132 @@ 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 25 ---- 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 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 + 66 66 ---- 67 67 68 -== Astuces supplémentaires==78 +== Docker == 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}} 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}} 73 73 74 - * Pour les utilisateurs de Docker :75 - {{code language="bash"}}docker systemprune-af76 - {{/code}}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}} 77 77 78 78 ---- 79 79 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 87 ---- 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 96 ---- 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 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 + 110 110 ---- 111 111 112 -== À adapter selon votredistribution ==122 +== À adapter selon la distribution == 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` |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## 119 119 120 120 ---- 121 121 122 122 == Liens utiles == 123 123 124 -* Systemdjournalctlvacuumhttps~://www.freedesktop.org/software/systemd/man/journalctl.html#--vacuum-size=)--//125 -* GNU`rm`documentationhttps~://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 128 ---- 129 129 130 130 == Liens internes == 131 131 132 -* [[Retour aux scripts perso nnels>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]142 +* [[Retour aux scripts perso>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]] 133 133 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]