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"
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"
Docker
docker image prune # images intermédiaires sans nom
docker system prune # conteneurs arrêtés, réseaux inutilisés, cache de build
docker system prune # conteneurs arrêtés, réseaux inutilisés, cache de build
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
| Distribution | Commande principale |
|---|---|
| Debian / Ubuntu | apt, journalctl, dpkg |
| Fedora / RHEL | dnf, journalctl |
| Arch Linux | pacman -Rns $(pacman -Qtdq) |
| Alpine Linux | apk cache clean |