Was macht rm -rf?

25

Was rm -rftun, wenn Dateien oder Verzeichnisse entfernt werden?

Wie arbeiten die Optionen -rund -fzusammen?

Sag mir warum
quelle
6
Wieso wurde das noch nie gefragt ?
Dan Dascalescu
16
@DanDascalescu Weil es trivial durch das Lesen der Manpage beantwortet wird, die die erste Anlaufstelle für alle sein sollte, die eine solche Frage beantwortet.
David Richerby
9
Probieren Sie es aus und sehen Sie. (Spoiler: nicht.)
imallett
3
Mit dem Golly! Diese Frage muss ein Streich von DevRobot sein! Wie könnten Sie es möglicherweise zu Ihrem Karma-Level schaffen, ohne jemals die Manpages zu konsultieren? Nun ... bist du ein Mensch ?!
Cbhihe
2
Liest total wie ein Streich in der Tat. Als wollte jemand fragen: "Ist Regen aus H2O?" (Eine gute Antwort wäre: Normalerweise ja, aber in Zukunft, wenn der Mensch die Hälfte der Pflanzenwelt der Erde zerstört hat, sind 50% davon sauer (wie bei saurem Regen).)
Syntaxfehler

Antworten:

52

Der Befehl rm -rfist der gleiche wie rm -r -f.

Auf der rmManpage von (geben Sie man rmein Terminal ein, um es zu sehen) -rgeschieht Folgendes:

remove directories and their contents recursively

Und -fmacht:

ignore nonexistent files and arguments, never prompt

In Kombination machen sie also beides.

Tatsächlich ist es ein sehr gefährlicher Befehl, weil er rekursiv alles in dem von Ihnen gewählten Verzeichnis entfernt (oder einfach die von Ihnen gewählte Datei entfernt), und dies ohne Sie jemals dazu aufzufordern.

Bitte verwenden Sie diesen Befehl mit Vorsicht!

Fabby
quelle
@ Paul, was würde der Schrägstrich tun? Ich benutze diesen Befehl, um dirs häufig und ohne einen Schrägstrich zu entfernen.
Octopus,
1
@Octopus, Schrägstrich allein zeigt das Stammverzeichnis an. 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 rmeinen Sonderfall hat, der es rm -r /nicht zulässt, es sei denn, Sie sagen es auch --no-preserve-root.)
cjm
10
Trotzdem empfehle ich nicht zu versuchen, rm -rf /zu sehen, ob es richtig gefangen ist.
6.
2
@mattburnett Es ist auch in einer VM gefährlich: Möglicherweise haben Sie Bereitstellungen, die nicht lokal für die VM sind. Insbesondere glaube ich, dass es ziemlich üblich ist, eines der Verzeichnisse des Hostcomputers auf der VM bereitzustellen, um Dateien zwischen dem Host und der VM freizugeben.
HDV
1
@mattburnett Ich habe VMs. Ich habe keine isolierte VM. Ich führe nur keine unbekannten ausführbaren Dateien aus. :)
HDV
22

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 .

Bonus:

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
Federico Ponzi
quelle
8

rmist eine Abkürzung für remove. Das rFlag dient zum rekursiven Entfernen von Verzeichnissen und deren Inhalten sowie zum Erzwingen des fMittels und setzt alle Bestätigungsaufforderungen außer Kraft.

Chris
quelle
3
Genau genommen 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-
inode-zuordnungen
Sie haben recht, ich werde meine Antwort bearbeiten.
Chris
1
-r entfernt Verzeichnisse und deren Inhalte rekursiv.
Jim Balter
3

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 rmVerzeichnisse 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 -rFlag 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 findBefehl mit -deleteFlag erzielt (wenn Sie nicht filtern nach angeben -type, aber das ist eine andere Geschichte).

Was -ftut 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 directoryFehlermeldung angezeigt werden.

Siehe auch:

Sergiy Kolodyazhnyy
quelle