0 Votes

Nettoyage Système (script)

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

Présentation

Ce script nettoie un système Linux : caches, paquets inutiles, fichiers temporaires anciens, journaux trop volumineux.

Il est conçu pour être sûr, verbeux et personnalisable, avec un mode simulation.


Objectifs

  • Libérer de l’espace disque
  • Éviter les lenteurs causées par des accumulations inutiles
  • Prévenir les erreurs d’espace faible
  • Réduire le bruit dans les sauvegardes automatiques

Script

#!/bin/bash
set -euo pipefail

DRY_RUN="${1:-}"        # ./nettoyage.sh --dry-run pour simuler
LOG="$HOME/nettoyage_$(date +%F).log"

run() {
 if [ "$DRY_RUN" = "--dry-run" ]; then
   echo "[simulation] $*" | tee -a "$LOG"
 else
   echo "+ $*" | tee -a "$LOG"
   "$@" >> "$LOG" 2>&1 || true
 fi
}

echo "Début du nettoyage : $(date)" | tee "$LOG"
df -h / | tail -n 1 | tee -a "$LOG"

# Caches utilisateur de plus de 30 jours
echo "Cache utilisateur" | tee -a "$LOG"
run find "$HOME/.cache" -type f -atime +30 -delete

# Paquets (Debian/Ubuntu)
if command -v apt >/dev/null; then
 echo "Paquets apt" | tee -a "$LOG"
  run sudo apt-get autoclean -y
  run sudo apt-get autoremove --purge -y
fi

# Paquets (Fedora/RHEL)
if command -v dnf >/dev/null; then
 echo "Paquets dnf" | tee -a "$LOG"
  run sudo dnf clean all
  run sudo dnf autoremove -y
fi

# Fichiers temporaires de plus de 10 jours, non utilisés
echo "Fichiers temporaires anciens" | tee -a "$LOG"
run sudo find /var/tmp -type f -atime +10 -delete

# Journaux systemd : garder 7 jours, au plus 500 Mo
echo "Journaux systemd" | tee -a "$LOG"
run sudo journalctl --vacuum-time=7d
run sudo journalctl --vacuum-size=500M

echo "Fin du nettoyage : $(date)" | tee -a "$LOG"
df -h / | tail -n 1 | tee -a "$LOG"
Warning

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.


Docker

docker image prune          # images intermédiaires sans nom
docker system prune         # conteneurs arrêtés, réseaux inutilisés, cache de build
Warning

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.


Sécuriser les suppressions

  • Lancer d'abord avec dry-run
  • Préférer find ... -delete avec un critère d'âge à un rm -rf global
  • Vérifier la syntaxe avant d'exécuter : bash -n nettoyage.sh
  • 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

Journalisation

Le script écrit un journal daté dans $HOME, ce qui permet de vérifier les erreurs et d'auditer les nettoyages passés.


Automatiser avec cron

Pour l'exécuter tous les dimanches à 6 h :

crontab -e
0 6 * * 0 /chemin/vers/nettoyage.sh

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.


À adapter selon la distribution

DistributionCommande principale
Debian / Ubuntuapt, journalctl, dpkg
Fedora / RHELdnf, journalctl
Arch Linuxpacman -Rns $(pacman -Qtdq)
Alpine Linuxapk cache clean

Liens utiles


Liens internes