Was rm -rf
tun, wenn Dateien oder Verzeichnisse entfernt werden?
Wie arbeiten die Optionen -r
und -f
zusammen?
Was rm -rf
tun, wenn Dateien oder Verzeichnisse entfernt werden?
Wie arbeiten die Optionen -r
und -f
zusammen?
Antworten:
Der Befehl rm -rf
ist der gleiche wie rm -r -f
.
Auf der rm
Manpage von (geben Sie man rm
ein Terminal ein, um es zu sehen) -r
geschieht Folgendes:
remove directories and their contents recursively
Und -f
macht:
ignore nonexistent files and arguments, never prompt
In Kombination machen sie also beides.
Bitte verwenden Sie diesen Befehl mit Vorsicht!
rm -rf /
löscht theoretisch jede Datei auf Ihrem Computer, die sich in einem Verzeichnis befindet, für das Sie Schreibrechte haben. Wenn Sie als Root angemeldet sind, bedeutet dies, dass Sie das gesamte System auslöschen. (In der Praxis funktioniert es nicht, weil GNU rm
einen Sonderfall hat, der es rm -r /
nicht zulässt, es sei denn, Sie sagen es auch --no-preserve-root
.)
rm -rf /
zu sehen, ob es richtig gefangen ist.
Zusätzlich zur vorherigen richtigen Antwort möchte ich Ihnen das Angeln beibringen:
Wenn Sie sich nicht sicher sind, wie ein Befehl funktioniert, welche Optionen und welche Funktionen er hat, öffnen Sie ein Terminal und geben Sie ein
man <command>
Beispielsweise:
man rm
Dort können Sie nach der Option suchen. Eine Manpage kann sehr lang sein, also im Terminaltyp:
/<pattern>
Also zum Beispiel:
/-f
Sie können leicht landen zu:
-f, --force
ignore nonexistent files and arguments, never prompt
Für -r do:
-r, -R, --recursive
remove directories and their contents recursively
Mit n
(next) und N
(previous) können Sie zwischen den Suchergebnissen wechseln .
Wenn Sie etwas tun müssen, aber den Befehlsnamen nicht kennen, verwenden Sie diese Option apropos
, um in Manpages zu suchen:
apropos <pattern>
Beispielsweise:
apropos directory listing
rm
ist eine Abkürzung für remove. Das r
Flag dient zum rekursiven Entfernen von Verzeichnissen und deren Inhalten sowie zum Erzwingen des f
Mittels und setzt alle Bestätigungsaufforderungen außer Kraft.
r flag is to remove directories
ist das nicht richtig. Es entfernt Verzeichnisse zusammen mit dem Inhalt. Es ist eine rekursive Operation. Ihren Worten zufolge werden nur die Verzeichnisse entfernt. Was ist mit den Unterverzeichnissen, Dateien darunter? da der verzeichniseintrag nur name-
Wie bereits erwähnt, rm -rf <ARG>
sollen Dateien zwangsweise rekursiv entfernt werden, wobei <ARG>
sich ein Verzeichnis befindet (obwohl es sich auch um eine Datei handeln kann).
Der springende Punkt von -r
(rekursives Entfernen) ist, dass rm
Verzeichnisse nicht entfernt werden können, wenn sie nicht leer sind, einfach weil der zugrunde liegende Systemaufruf, der rm
( unlink ) verwendet, nur leere Verzeichnisse bearbeitet . Das -r
Flag führt also eine Tiefensuche durch, die zuerst in Verzeichnisse absteigt und zuerst Dateien entfernt. Erst dann, wenn das Verzeichnis leer ist, wird es entfernt. Der gleiche Effekt wird über den find
Befehl mit -delete
Flag erzielt (wenn Sie nicht filtern nach angeben -type
, aber das ist eine andere Geschichte).
Was -f
tut es zwei Dinge - eine Aufforderung verhindert dafür , ob Sie die Datei oder nicht (wie wenn Sie eine Datei zu entfernen von einem anderen Benutzer gehören, aus Ihrem Verzeichnis, wird es nicht zeigen entfernen möchten rm: remove write-protected regular empty file 'f1'?
Bestätigungsaufforderung) und ignoriert nicht vorhandene Dateien. Beispielsweise sollte bei einem nicht vorhandenen Dateinamen eine rm: cannot remove 'nonexistent': No such file or directory
Fehlermeldung angezeigt werden.
Siehe auch: