GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Löschen Sie Dateien, auf die für eine bestimmte Zeit unter Linux nicht zugegriffen wurde

Wir haben bereits behandelt, wie man Dateien, die älter als X Tage sind, mit dem Befehl „find“ in Linux manuell findet und löscht . Heute werden wir dasselbe tun, aber nur, wenn die Dateien für einen bestimmten Zeitraum nicht aufgerufen wurden. Begrüßen Sie "Tmpwatch" , ein Befehlszeilendienstprogramm zum rekursiven Löschen von Dateien, auf die für eine bestimmte Zeit nicht zugegriffen wurde. Nicht nur Dateien, tmpwatch löscht auch leere Verzeichnisse.

Standardmäßig entscheidet Tmpwatch, welche Dateien/Verzeichnisse gelöscht werden sollen, basierend auf ihrer atime (Zugriffszeit). Sie können dieses Verhalten natürlich ändern, indem Sie ctime verwenden (Inode-Wechselzeit), mtime (Änderungszeit)-Werte ebenfalls. Normalerweise kann Tmpwatch verwendet werden, um den Inhalt von /tmp zu löschen Verzeichnis und andere ungenutzte und unerwünschte Dinge wie alte Protokolldateien.

Eine wichtige Warnung!!

Bevor Sie dieses Tool verwenden, müssen Sie wissen, dass Tmpwatch Dateien und Verzeichnisse basierend auf den angegebenen Kriterien rekursiv löscht. Führen Sie tmpwatch nicht in / (Stammverzeichnis) aus . Dieses Verzeichnis enthält wichtige Dateien, die erforderlich sind, um das Linux-System am Laufen zu halten. Wenn Sie nicht vorsichtig genug sind, löscht tmpwatch die wichtigen Systemdateien und Verzeichnisse, die den angegebenen Kriterien im gesamten Stammverzeichnis entsprechen. In das Tmpwatch-Tool ist kein Schutzmechanismus integriert, der Sie daran hindert, es im Stammverzeichnis auszuführen. Es gibt also keine Möglichkeit, den Vorgang rückgängig zu machen. Sie wurden gewarnt!

Installieren Sie Tmpwatch unter Linux

Tmpwatch ist in den Standard-Repositories der meisten Linux-Distributionen verfügbar.

Unter Fedora, CentOS, RHEL, AlmaLinux und Rocky Linux können Sie es mit folgendem Befehl installieren:

$ sudo dnf install tmpwatch

Unter openSUSE:

$ sudo zypper install tmpwatch

Auf Debian und seinen Derivaten wie Ubuntu ist Tmpwatch unter einem anderen Namen verfügbar, z. B. Tmpreaper . Tmpreaper basiert hauptsächlich auf `tmpwatch-1.2/1.4' von Erik Troan von Red Hat. Jetzt wird tmpreaper für Debian von Paul Slootman betreut .

Um tmpreaper unter Debian, Ubuntu, Linux Mint zu installieren, führen Sie Folgendes aus:

$ sudo apt install tmpreaper

Führen Sie zum Starten Folgendes aus:

$ tmpreaper <options>

Oder geben Sie den vollständigen Pfad ein:

$ /usr/sbin/tmpreaper <options>

Löschen Sie Dateien, auf die für eine bestimmte Zeit nicht zugegriffen wurde, mit Tmpwatch / Tmpreaper

Die Verwendung von Tmpwatch und Tmpreaper ist fast gleich. Wenn Sie auf Debian-basierten Systemen arbeiten, ersetzen Sie in den folgenden Beispielen „Tmpwatch“ durch „Tmpreaper“.

Dateien löschen, auf die länger als X Tage nicht zugegriffen wurde

Um Dateien zu löschen, die älter als 10 Tage sind, führen Sie Folgendes aus:

tmpwatch 10d /var/log/

Der obige Befehl löscht alle Dateien und leeren Verzeichnisse, auf die länger als 10 Tage nicht zugegriffen wurde, von /var/log/ Ordner.

Löschen Sie Dateien, die länger als X Tage nicht geändert wurden

Wie ich bereits sagte, löscht Tmpwatch Dateien basierend auf ihrer Zugriffszeit. Sie können Dateien auch basierend auf ihrer Änderungszeit (mtime) mit -m löschen Option.

Beispielsweise löscht der folgende Befehl Dateien, die in den 10 Tagen in /var/log/ nicht geändert wurden Ordner.

tmpwatch -m 10d /var/log/

Hier, -m bezieht sich auf die Änderungszeit und d ist die Parameter. Der Parameter definiert den Altersschwellenwert für das Entfernen von Dateien. Sie können die folgenden time_spec-Parameter zum Entfernen von Dateien verwenden.

  • d - für Tage,
  • h - stundenlang,
  • m - minutenlang,
  • s - für Sekunden.

Stunden ist die Standardeinstellung.

Zum Beispiel, um Dateien zu löschen, die in den letzten 10 Stunden nicht geändert wurden , führen Sie einfach Folgendes aus:

tmpwatch -m 10 /var/log/

Wie Sie vielleicht bemerkt haben, habe ich den Parameter time_spec im obigen Befehl nicht verwendet. Weil, h (für Stunden) ist der Standardparameter, daher müssen wir ihn nicht erwähnen, wenn Dateien gelöscht werden, die in den letzten X Stunden nicht geändert wurden.

Symlinks löschen

Wenn Sie symbolische Links löschen möchten, nicht nur normale Dateien und Verzeichnisse, verwenden Sie -s Option wie unten.

tmpwatch -s 10 /var/log/

Alle Dateien löschen

Um alle Dateitypen zu entfernen, nicht nur normale Dateien, symbolische Links und Verzeichnisse, verwenden Sie -a Option.

tmpwatch -a 10 /var/log/

Der obige Befehl löscht alle Dateitypen, einschließlich regulärer Dateien, Symlinks und Verzeichnisse in /var/log/ Ordner.

Verzeichnisse vom Löschen ausschließen

Manchmal möchten Sie vielleicht Dateien löschen, aber keine Verzeichnisse. wenn ja, wäre der Befehl:

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

Der obige Befehl löscht alle Dateien außer den Verzeichnissen, die in den letzten 10 Stunden nicht geändert wurden.

Führen Sie einen Testlauf durch, ohne tatsächlich etwas zu löschen

Manchmal möchten Sie vielleicht sehen, welche Dateien tatsächlich gelöscht werden. Dies ist hilfreich, wenn Sie Tmpwatch in einem wichtigen Verzeichnis ausführen. Wenn ja, führen Sie Tmpwatch im Testmodus mit -t aus Option.

tmpwatch -t 30 /var/log/

Beispielausgabe vom CentOS 7-Server:

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

Auf Debian-basierten Systemen sehen Sie eine Ausgabe wie unten.

$ 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'.
[...]

Dadurch wird der Vorgang nur simuliert, aber nichts wirklich gelöscht. Tmpwatch führt einfach einen Probelauf durch und zeigt Ihnen, welche Dateien in der Ausgabe gelöscht werden.

Löschen der Datei erzwingen

Wenn Sie die Dateien zwangsweise löschen möchten, verwenden Sie -f Option.

tmpwatch -f 10h /var/log/

Normalerweise werden die Dateien des aktuellen Benutzers ohne Schreibzugriff nicht entfernt. Das -f Option löscht sie ebenfalls.

Bestimmte Dateien vom Löschen ausschließen

Tmpreaper hat eine Option, um Dateien vor dem Löschen zu überspringen. Dies ist nützlich, wenn Sie bestimmte Dateitypen behalten und alles andere löschen möchten. Verwenden Sie in diesem Fall --protect Option.

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

Dieser Befehl überspringt alle Dateien mit .txt Erweiterung vor dem Löschen

Beispielausgabe:

(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'.

Wie Sie sehen können, überspringt Tmpreaper die *.txt Dateien vor dem Löschen.

Diese Option ist übrigens nicht in Tmpwatch verfügbar.

Einrichten eines Cron-Jobs zum regelmäßigen Löschen von Dateien

Möglicherweise möchten Sie Tmpwatch/Tmpreaper nicht ständig manuell ausführen. In diesem Fall könnten Sie einen Cron-Job einrichten, um den Bereinigungsprozess zu automatisieren.

Bei der Installation von Tmpreaper , wird ein täglicher Cronjob erstellt (/etc/cron.daily/tmpreaper ). Dieser Job liest die Optionen aus /etc/timereaper.conf einreichen und entsprechend handeln. Öffnen Sie die Datei und ändern Sie die Werte gemäß Ihren Anforderungen. Standardmäßig löscht Tmpreaper Dateien, die 7 Tage älter sind. Sie können dies jedoch ändern, indem Sie den Wert "TMPREAPER_TIME=7d" ändern in der Datei tmpreaper.conf.

Wenn Sie "Tmpwatch" verwenden, müssen Sie einen Cron-Job manuell erstellen und den Cron-Eintrag darin einfügen.

# crontab -e

Fügen Sie die folgende Zeile hinzu:

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

Gemäß dem obigen Cron-Job wird Tmpwatch jeden Tag um 1 Uhr morgens ausgeführt und Dateien löschen, die 30 Tage älter sind.

Weitere Einzelheiten zum Festlegen von Cron-Jobs finden Sie unter folgendem Link.

  • Ein Anfängerleitfaden für Cron-Jobs

Nochmals:Bitte seien Sie vorsichtig, wenn Sie Tmpwatch/Tmpreaper-Befehle verwenden . Überprüfen Sie den Pfad, bevor Sie ihn ausführen, um Datenverlust zu vermeiden.

Weitere Einzelheiten finden Sie in den Manpages.

$ man tmpwatch

Oder,

$ man tmpreaper

Verwandte Lektüre:

  • Autotrash – Ein CLI-Tool zum automatischen Löschen alter Dateien im Papierkorb
  • Trash-cli :Ein Befehlszeilen-Papierkorb für Unix-ähnliche Systeme
  • Älteste Datei suchen und löschen, wenn mehr als X Dateien in einem Verzeichnis vorhanden sind
  • So finden und entfernen Sie nicht verwendete Pakete in Linux
  • So bereinigen Sie Junk-Dateien in Ubuntu mit Ubuntu Cleaner

Linux
  1. Große Dateien finden und entfernen, die geöffnet sind, aber gelöscht wurden?

  2. Alle Verzeichnisse auflisten, die keine Datei mit einem bestimmten Dateinamen enthalten?

  3. Finden Sie Dateien, die heute (oder seit einer bestimmten Zeit) in Unix und Linux geändert wurden

  4. So finden und löschen Sie Dateien, die älter als ein bestimmter Zeitraum in Linux sind

  5. Warum sehe ich MSG_EOR für SOCK_SEQPACKET unter Linux nicht?

ls-Befehl in Linux zum Auflisten von Dateien

So finden und löschen Sie Dateien, die einen bestimmten Text in ihrem Namen in Linux enthalten

So löschen Sie Dateien, die in einer anderen Datei unter Linux aufgeführt sind

So entfernen/löschen Sie Dateien in Linux mit dem Befehl rm

Dropbox für einen Linux Cloud Server eingerichtet

Linux verfolgt alle Dateien, auf die der Prozess zugreift?