Zu den grundlegenden Aufgaben der Dateisystemverwaltung gehört das Erstellen, Ändern und Löschen verschiedener Arten von Dateien und Verzeichnissen. Die Kenntnis einiger grundlegender Tools und Konzepte für das Löschen von Dateien ist sehr nützlich und kann Ihnen Zeit sparen.
Linux bietet mehrere Tools, die uns bei der Entfernung von Dateien helfen können. Oft müssen wir nicht nur eine einzelne, sondern eine ganze Reihe von Dateien und Verzeichnissen anhand bestimmter Kriterien löschen. Es ist hilfreich, ein paar gängige Befehle und ihre Kombinationen zu kennen, um unsere Aufgabe leicht zu erledigen
- Verwenden Sie die folgenden Befehle mit Vorsicht, insbesondere diejenigen, die reguläre Ausdrücke oder bestimmte Suchmuster mit dem Befehl finden verwenden. Ein falscher Ausdruck oder ein falsches Muster kann wichtige Daten/Systemdateien oder einfach nicht beabsichtigte Dateien löschen.
- Erstellen Sie immer ein aktuelles Backup Ihrer wichtigen Daten und Systemdateien.
- Seien Sie vorsichtig, bevor Sie solche Befehle ausführen, insbesondere wenn Sie sie mit Sudo oder als Superuser (root) ausführen.
Entfernen mit unlink
Nicht so populär. Um eine einzelne Datei dauerhaft zu entfernen, können wir den Befehl unlink
verwenden
$ unlink {Datei-Name}
Einzelne Datei entfernen
Es gibt einen häufiger verwendeten Befehl zum Entfernen von Dateien, nämlich den Befehl rm
, mit dem Sie eine oder mehrere Dateien gleichzeitig entfernen können
$ rm {Datei-Name}
rm
fordert Sie bei Dateien, die schreibgeschützt sind, auf, das Löschen zu bestätigen, andernfalls wird die Datei direkt gelöscht. Wenn Sie möchten, dass rm
vor dem Löschen einer Datei immer nachgefragt, verwenden Sie die Option -i
$ rm -i {Dateiname}
der Befehl rm
löscht die Datei, ohne eine Meldung auf dem Bildschirm auszugeben. Um aufzulisten, was der Befehl rm
tatsächlich tut, verwenden Sie mit der Option rm -v
$ rm -v {Datei-Name}
Um schreibgeschützte Dateien zu löschen, ohne eine Bestätigung zu verlangen, verwenden Sie das Flag -f
$ rm -f {Datei-Name}
Mehrere Dateien entfernen
Sie können mehrere Dateien entfernen, indem Sie mehrere Dateinamen als Argumente für rm
angeben.
$ rm {Datei-Name-1} {Datei-Name-2} {Datei-Name-3} ... {Dateiname-N}
rm
unterstützt auch reguläre Ausdrücke. Wenn Sie alle Dateien mit dem Namen Dateiname-*
löschen möchten, können Sie Folgendes verwenden
$ rm Dateiname-*
Wir können auch mehrere Dateien mit regulären Ausdrücken angeben. Wenn wir drei Dateien löschen wollen, die mit Dateiname-1
, Dateiname-2
und Dateiname-3
übereinstimmen, können wir etwas wie folgt verwenden
$ rm datei-name-[123]
Verzeichnis entfernen
Ein leeres Verzeichnis kann mit dem Befehl rm
mit der Option -d
gelöscht werden
$ rm -d {dir-name}
Die für das Entfernen von Dateien unterstützten Optionen können auch mit dem Entfernen von Verzeichnissen kombiniert werden, indem Sie die Option -d
verwenden. Zum Beispiel
$ rm -idv {dir-name}
Um ein Verzeichnis zu löschen, das nicht leer ist, verwenden Sie das Flag -r
$ rm -r {dir-name}
Wenn Sie vor dem Löschen des Verzeichnisses und seines Inhalts keine Eingabeaufforderung wünschen, verwenden Sie die Flagge -rf
. Dadurch wird alles innerhalb des Verzeichnisses gelöscht, einschließlich des Verzeichnisses selbst, ohne dass eine Bestätigung erfolgt. Seien Sie vorsichtig, wenn Sie diese Option verwenden, insbesondere als root
$ rm -rf {dir-name}
Dateien finden und entfernen
Für komplexere Anforderungen können wir den Befehl finden mit verschiedenen Optionen verwenden. Um alle Dateien zu entfernen, die dem Muster {pattern}
innerhalb eines Pfades entsprechen, der durch {dir-to-search}
angegeben ist
$ find {Verzeichnis-zu-Suche} -type f -name {Muster} -exec rm -f {}
\
Beispiel
$ find /var/tmp -type f -name "*.tmp" -exec rm -f {}
\
Wenn wir alles entfernen wollen, was mit dem Muster {pattern}
übereinstimmen, einschließlich der Verzeichnisse innerhalb von {dir-to-search}
, können wir den obigen Befehl leicht abändern
$ find {Verzeichnis-zu-suchen} -name {Muster} -exec rm -rf {}
\
Moderne Versionen des Befehls finden unterstützen intern die Funktion löschen. Hier ersetzt das Flag -delete
den Befehl rm, während -depth
den Befehl finden anweist, zuerst den Inhalt des Verzeichnisses und dann das Verzeichnis selbst zu verarbeiten
$ find {Verzeichnis-zu-suchen}
–
typ f -name {Datei-Namen-Muster} -tiefe -löschen
Das obige Beispiel ist effizienter, wenn Sie mit einer großen Anzahl von Dateien arbeiten, da nicht für jede gefundene Datei ein neuer externer Prozess für den Befehl rm
gestartet wird. Allerdings unterstützen (noch) nicht alle Versionen des Befehls find
die Flagge -delete
. Als Alternative können wir den Befehl xargs
mit find
verwenden, wie im folgenden Beispiel gezeigt
$ find {Verzeichnis-zu-suchen}
–
typ f -name {Muster} -print0 | xargs -0 rm
Oder verwenden Sie den
Terminator des exec-Befehls, um alles, was der find-Befehl gefunden hat, wie xargs zu verketten
$ find {Verzeichnis-zu-suchen}
–
name {Muster} -exec rm -rf {}
Standardmäßig verwendet der find-Befehl das Flag -print
, das wir in der Regel nicht ausgeben. Bei xargs
müssen wir den Zeilenumbruch
zwischen den einzelnen Dateinamen vermeiden. Daher zeigt die Flagge -print0
finden Sie nach jedem gefundenen Dateinamen ein Null-Zeichen
Ausgeben
In ähnlicher Weise geben wir -0
bei xargs
an, damit beide Befehle zusammenpassen. Der Befehl rm
löscht hier die Datei, an die über die Pipeline eingegebene find
übergeben wurde. Der folgende Befehl sucht und löscht zum Beispiel alle *.tmp-Dateien
im Home-Verzeichnis des aktuellen Benutzers (angegeben durch das Symbol ~
)
$ find ~ -name "*.tmp" -print0 | xargs -0 rm
der find-Befehl
bietet mehrere Möglichkeiten, Dateien und Verzeichnisse zu durchsuchen, darunter Eigentümer, Berechtigung, Zeitstempel usw. Im Folgenden werden wir einige dieser Möglichkeiten vorstellen, die uns bei bestimmten Aufgaben zum Entfernen von Dateien helfen können
Suchen und Entfernen von Dateien nach einem Benutzer
Um alles innerhalb eines bestimmten Verzeichnisses zu löschen, das einem bestimmten Benutzer
gehört, verwenden Sie
$ find {dir-to-search}
–
mindepth 1 -Benutzer {Benutzername} -delete
Im obigen Beispiel verhindert das Flag -mindepth
mit dem Wert 1, dass das durch {dir-to-search}
angegebene Verzeichnis gelöscht wird, wenn es dem Suchmuster und den Kriterien entspricht. Oder um alles innerhalb eines bestimmten Verzeichnisses zu löschen, das zu einem bestimmten Gruppe
gehört, verwenden Sie
$ find {dir-to-search}
–
mindepth 1 -group {group-name} -delete
Wenn Sie die Unterverzeichnisse unter dem Suchpfad nicht durchsuchen möchten, haben Sie auch die Möglichkeit, -maxdepth
mit dem entsprechenden Wert für die Verzeichnistiefe zu verwenden
Hier ist ein Beispiel
$ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete
Wenn Sie stattdessen die Benutzer-
und Gruppennummern
angeben möchten, können Sie etwas wie folgt versuchen
$ find {dir-to-search}
–
mindepth 1 -uid {user-id} -gid {group-id} -delete
Leere Verzeichnisse finden und entfernen
Um alle leeren Verzeichnisse innerhalb eines bestimmten Pfades {dir-to-search}
zu löschen, können Sie Folgendes verwenden
$ find {Verzeichnis-zu-Suche}
–
typ d -leer -löschen
Um stattdessen alle leeren Dateien innerhalb eines bestimmten Pfades {dir-to-search}
zu löschen, verwenden Sie
$ find {Verzeichnis-zu-Suche}
–
typ f -leer -löschen
Suchen und Löschen von Dateien, die älter als X sind
Manchmal müssen Sie Dateien löschen, die älter als x
Tage sind. find hat Optionen, um die Erstellungszeit(ctime
), sterbenZugriffszeit (atime
) und die Änderungszeit(mtime
) einer Datei zu lesen. Wir können die Option mtime
mit find verwenden, um Dateien zu finden und zu löschen, die vor mehr als x
Tage wurden geändert
$ find {Verzeichnis-zu-suchen}
–
type f -mtime {X} -delete
Um beispielsweise alle Dateien mit der Endung log in /var/tmp
zu löschen, deren Änderungszeit 30 Tage oder länger zurückliegt, können Sie Folgendes verwenden
$ find /var/tmp -name "*.log" -type f -mtime 30 -delete
Dateien nach Berechtigung suchen und löschen
Jetzt können wir auch Dateien auf der Grundlage einer bestimmten Berechtigung löschen, z.B.
$ find {dir-to-search}
–
name {Muster} -perm {NNN} -löschen
Beispiel
$ find /var/tmp -name "temp*" -perm 755 -delete
Oder wenn wir eine symbolische Form für die Berechtigung verwenden wollen, benutzen Sie
$ find {dir-to-search} -name {Muster} -perm u={rwx},g={rwx},o={rwx}
–
löschen
Beispiel
$ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete
Resümee
Linux bietet die Befehle unlink
, rm
und rmdir
, die einfach sind und mit regulären Ausdrücken leicht erweitert werden können. Für fortgeschrittene Anforderungen haben Sie die Möglichkeit, eine Kombination von Tools wie find
und xargs
zu verwenden, um das zu erreichen, was Sie brauchen. Abgesehen von den Beispielen in diesem Artikel haben Sie die Möglichkeit, find mit jeder seiner verfügbaren Flaggen zu verwenden, um Ihre Suche anzupassen. Lesen Sie die man-Seiten der jeweiligen Befehle, um mehr darüber zu erfahren
Führen Sie find-Befehle immer ohne rm-
oder -delete-Flag
aus und analysieren Sie die Ausgabe, um herauszufinden, welche Dateien oder Verzeichnisse von der Ausführung eines bestimmten Befehls betroffen sein werden. Eine ordnungsgemäße Backup-Konfiguration und -Richtlinie hilft nicht nur bei versehentlichen Löschungen, sondern auch bei Hardwareausfällen und Cyber-Attacken.