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
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