GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer les fichiers qui n'ont pas été consultés pendant un certain temps sous Linux

Nous avons déjà expliqué comment rechercher et supprimer manuellement des fichiers de plus de X jours à l'aide de la commande "find" sous Linux . Aujourd'hui, nous ferons de même, mais uniquement si les fichiers n'ont pas été consultés pendant un certain temps. Dites bonjour à "Tmpwatch" , un utilitaire de ligne de commande pour supprimer de manière récursive les fichiers qui n'ont pas été consultés depuis un certain temps. Pas seulement les fichiers, tmpwatch supprimera également les répertoires vides.

Par défaut, Tmpwatch décidera quels fichiers/répertoires doivent être supprimés en fonction de leur atime (temps d'accès). Vous pouvez bien sûr modifier ce comportement en utilisant ctime (heure de changement d'inode), mtime (temps de modification) également. Normalement, Tmpwatch peut être utilisé pour supprimer le contenu de /tmp répertoire et d'autres éléments inutilisés et indésirables comme les anciens fichiers journaux.

Un avertissement important !!

Avant de commencer à utiliser cet outil, vous devez savoir que Tmpwatch supprimera les fichiers et les répertoires de manière récursive en fonction des critères donnés. Ne pas exécuter tmpwatch dans / (répertoire racine) . Ce répertoire contient des fichiers importants nécessaires au bon fonctionnement du système Linux. Si vous ne faites pas assez attention, tmpwatch supprimera les fichiers et répertoires système importants qui correspondent aux critères donnés dans l'ensemble du répertoire racine. Il n'y a pas de mécanisme de sauvegarde intégré à l'outil Tmpwatch pour vous empêcher de l'exécuter sur le répertoire racine. Il n'y a donc aucun moyen d'annuler l'opération. Vous êtes prévenu !

Installer Tmpwatch sur Linux

Tmpwatch est disponible dans les dépôts par défaut de la plupart des distributions Linux.

Sur Fedora, CentOS, RHEL, AlmaLinux et Rocky Linux, vous pouvez l'installer à l'aide de la commande :

$ sudo dnf install tmpwatch

Sur openSUSE :

$ sudo zypper install tmpwatch

Sur Debian et ses dérivés comme Ubuntu, Tmpwatch est disponible sous un nom différent, c'est-à-dire Tmpreaper . Tmpreaper est principalement basé sur `tmpwatch-1.2/1.4' par Erik Troan de Redhat. Maintenant, tmpreaper est maintenu pour Debian par Paul Slootman .

Pour installer tmpreaper sur Debian, Ubuntu, Linux Mint, exécutez :

$ sudo apt install tmpreaper

Pour le lancer, lancez :

$ tmpreaper <options>

Ou entrez le chemin complet :

$ /usr/sbin/tmpreaper <options>

Supprimer les fichiers qui n'ont pas été consultés pendant un certain temps à l'aide de Tmpwatch / Tmpreaper

L'utilisation de Tmpwatch et de Tmpreaper est presque la même. Si vous utilisez des systèmes basés sur Debian, remplacez "Tmpwatch" par "Tmpreaper" dans les exemples suivants.

Supprimer les fichiers qui ne sont pas consultés plus de X jours

Pour supprimer des fichiers de plus de 10 jours, exécutez :

tmpwatch 10d /var/log/

La commande ci-dessus supprimera tous les fichiers et répertoires vides qui ne sont pas consultés plus de 10 jours à partir de /var/log/ dossier.

Supprimer les fichiers qui ne sont pas modifiés plus de X jours

Comme je l'ai déjà dit, Tmpwatch supprimera les fichiers en fonction de leur temps d'accès. Vous pouvez également supprimer des fichiers en fonction de leur heure de modification (mtime) en utilisant -m option.

Par exemple, la commande suivante supprimera les fichiers qui ne sont pas modifiés pendant les 10 jours dans /var/log/ dossier.

tmpwatch -m 10d /var/log/

Ici, -m fait référence à l'heure de modification et d est le paramètre. Le paramètre définit le seuil d'âge pour la suppression de fichiers. Vous pouvez utiliser les paramètres time_spec suivants pour supprimer des fichiers.

  • d - pendant des jours,
  • h - pendant des heures,
  • m - pendant quelques minutes,
  • s - pendant quelques secondes.

Heures est la valeur par défaut.

Par exemple, pour supprimer des fichiers qui n'ont pas été modifiés depuis 10 heures , lancez simplement :

tmpwatch -m 10 /var/log/

Comme vous l'avez peut-être remarqué, je n'ai pas utilisé le paramètre time_spec dans la commande ci-dessus. Parce que, h (pendant des heures) est le paramètre par défaut, nous n'avons donc pas à le mentionner lors de la suppression de fichiers qui n'ont pas été modifiés au cours des X dernières heures.

Supprimer les liens symboliques

Si vous souhaitez supprimer des liens symboliques, pas seulement des fichiers et des répertoires normaux, utilisez -s comme ci-dessous.

tmpwatch -s 10 /var/log/

Supprimer tous les fichiers

Pour supprimer tous les types de fichiers, pas seulement les fichiers normaux, les liens symboliques et les répertoires, utilisez -a option.

tmpwatch -a 10 /var/log/

La commande ci-dessus supprimera tous les types de fichiers, y compris les fichiers normaux, les liens symboliques et les répertoires dans /var/log/ dossier.

Exclure les répertoires de la suppression

Parfois, vous voudrez peut-être supprimer des fichiers, mais pas des répertoires. si c'est le cas, la commande serait :

tmpwatch -am 10 --nodirs /var/log/

La commande ci-dessus supprimera tous les fichiers à l'exception des répertoires qui n'ont pas été modifiés au cours des 10 dernières heures.

Effectuer un test sans rien supprimer

Parfois, vous voudrez peut-être voir quels fichiers vont réellement être supprimés. Cela sera utile lors de l'exécution de Tmpwatch sur un répertoire important. Si c'est le cas, lancez Tmpwatch en mode test avec -t option.

tmpwatch -t 30 /var/log/

Exemple de sortie du serveur CentOS 7 :

removing file /var/log/wtmp
removing directory /var/log/ppp if empty
removing directory /var/log/tuned if empty
removing directory /var/log/anaconda if empty
removing file /var/log/dmesg.old
removing file /var/log/boot.log
removing file /var/log/dnf.librepo.log

Sur les systèmes basés sur Debian, vous verrez une sortie comme ci-dessous.

$ tmpreaper -t 30 /var/log/
(PID 1803) Pretending to clean up directory `/var/log/'.
(PID 1804) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 1804) Back from recursing down `apache2'.
(PID 1804) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 1804) Back from recursing down `dbconfig-common'.
(PID 1804) Pretending to clean up directory `dist-upgrade'.
(PID 1804) Back from recursing down `dist-upgrade'.
(PID 1804) Pretending to clean up directory `lxd'.
(PID 1804) Back from recursing down `lxd'.
Pretending to remove file `/var/log//cloud-init.log'.
(PID 1804) Pretending to clean up directory `landscape'.
Pretending to remove file `landscape/sysinfo.log'.
(PID 1804) Back from recursing down `landscape'.
[...]

Cela ne fera que simuler l'opération, mais ne supprimera rien. Tmpwatch effectuera simplement une simulation et vous montrera quels fichiers vont être supprimés dans la sortie.

Forcer la suppression du fichier

Si vous souhaitez supprimer de force les fichiers, utilisez -f option.

tmpwatch -f 10h /var/log/

Normalement, les fichiers appartenant à l'utilisateur actuel, sans accès en écriture, ne sont pas supprimés. Le -f l'option les supprimera également.

Ignorer la suppression de certains fichiers

Tmpreaper a une option pour ignorer les fichiers de la suppression. Cela sera utile lorsque vous souhaitez conserver certains types de fichiers et supprimer tout le reste. Si c'est le cas, utilisez --protect option.

tmpreaper --protect '*.txt' -t 10h /var/log/

Cette commande ignorera tous les fichiers qui ont .txt extension de la suppression

Exemple de résultat :

(PID 2623) Pretending to clean up directory `/var/log/'.
(PID 2624) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 2624) Back from recursing down `apache2'.
(PID 2624) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 2624) Back from recursing down `dbconfig-common'.
(PID 2624) Pretending to clean up directory `dist-upgrade'.
(PID 2624) Back from recursing down `dist-upgrade'.
Pretending to remove empty directory `dist-upgrade'.
Entry matching `--protect' pattern skipped. `ostechnix.txt'
(PID 2624) Pretending to clean up directory `lxd'.

Comme vous pouvez le voir, Tmpreaper ignore le *.txt fichiers de la suppression.

Cette option n'est pas disponible dans Tmpwatch, soit dit en passant.

Configuration de la tâche cron pour supprimer périodiquement des fichiers

Vous ne voudrez peut-être pas exécuter manuellement Tmpwatch/Tmpreaper tout le temps. Dans ce cas, vous pouvez configurer une tâche cron pour automatiser le processus de nettoyage.

Lors de l'installation de Tmpreaper , il créera une tâche cron quotidienne (/etc/cron.daily/tmpreaper ). Cette tâche lira les options de /etc/timereaper.conf déposer et agir en conséquence. Ouvrez le fichier et modifiez les valeurs selon vos besoins. Par défaut, Tmpreaper supprimera les fichiers datant de 7 jours. Vous pouvez cependant changer cela en modifiant la valeur "TMPREAPER_TIME=7d" dans le fichier tmpreaper.conf.

Si vous utilisez "Tmpwatch", vous devez créer manuellement une tâche cron et y insérer l'entrée cron.

# crontab -e

Ajoutez la ligne suivante :

0 1 * * * /usr/sbin/tmpwatch 30d /var/log/

Conformément au travail cron ci-dessus, Tmpwatch s'exécutera tous les jours à 1h du matin et supprimera les fichiers qui ont 30 jours de plus.

Pour plus de détails sur la configuration des tâches cron, consultez le lien suivant.

  • Guide du débutant sur les tâches Cron

Encore une fois, veuillez faire attention lorsque vous utilisez les commandes Tmpwatch/Tmpreaper . Vérifiez le chemin avant de l'exécuter pour éviter la perte de données.

Pour plus de détails, consultez les pages de manuel.

$ man tmpwatch

Ou,

$ man tmpreaper

Lire connexe :

  • Autotrash :un outil CLI pour purger automatiquement les anciens fichiers supprimés
  • Trash-cli :une corbeille en ligne de commande pour les systèmes de type Unix
  • Rechercher et supprimer le fichier le plus ancien s'il y a plus de X fichiers dans un répertoire
  • Comment rechercher et supprimer des packages inutilisés sous Linux
  • Comment nettoyer les fichiers indésirables dans Ubuntu à l'aide d'Ubuntu Cleaner

Linux
  1. Rechercher et supprimer des fichiers volumineux ouverts mais supprimés ?

  2. Obtenir tous les fichiers qui ont été modifiés à une date précise ?

  3. Rechercher les fichiers modifiés aujourd'hui (ou depuis un certain temps) sous Unix et Linux

  4. Comment rechercher et supprimer des fichiers antérieurs à une période donnée sous Linux

  5. Comment puis-je trouver des fichiers qui n'ont qu'une certaine autorisation pour le propriétaire ?

Commande ls sous Linux pour lister les fichiers

Comment rechercher et supprimer des fichiers contenant un texte spécifique dans leurs noms sous Linux

Comment supprimer des fichiers répertoriés dans un autre fichier sous Linux

Comment supprimer/supprimer des fichiers sous Linux à l'aide de la commande rm

Dropbox configuré pour un serveur cloud Linux

Linux suit tous les fichiers accessibles par processus ?