Löscht nur 'rm -rf' irgendwelche Dateien?

16

Ich lief vor kurzem rm -rf, nicht rm -rf /, aber es ist nichts passiert. Ich erhalte gerade ein Ergebnis wie dieses:

Terminal

Ich hatte Angst, weil ich mir Sorgen mache, dass es einige Dateien hätte löschen können, aber das tat es nicht. Seien Sie sich nur sicher, ob dadurch Dateien aus meinem Verzeichnis gelöscht wurden.

user3439894
quelle
36
Wenn Sie sich nicht sicher sind (bestimmte 100%), führen Sie keinen Befehl aus.
Solar Mike
5
Geben Sie niemals Befehle ein, die Sie nicht verstehen. Alles was Sie brauchten war ein. oder ein / und du wirst eine Menge Sachen löschen.
Nelson
18
Wenn Sie mit potenziell gefährlichen Befehlen experimentieren möchten, sollten Sie eine virtuelle Maschine installieren.
musicman523
6
Probieren Sie alles aus, was Sie wollen (solange Ihre Daten sicher gesichert sind). Es ist nur Software und Sie können sie immer neu installieren, wenn etwas schief geht. Lassen Sie sich nicht von jemandem trainieren, der Angst vor dem Computer hat.
Hobbs
3
Führen Sie auf jeden Fall einen Befehl aus, wenn Sie sich nicht sicher sind, zu 100%. Es gibt nur so viele Möglichkeiten zu lernen, und sie tatsächlich auszuführen, ist eine davon. Vorsichtsmaßnahme und haben natürlich Backups und verwenden VMs und all das. Aber nichts aus Angst laufen zu lassen, wird wenig dazu beitragen, dass Sie wachsen. Es sollte offensichtlich sein, wann Sie besonders vorsichtig sein müssen (dh rm), aber für viele / die meisten anderen Befehle, z. B. alle Pipe-basierten Textbearbeitungsbefehle, ist es am einfachsten / einfachsten, sie nur häufig auszuprobieren. Natürlich zusammen mit dem Studium der Manpage.
AnoE

Antworten:

49

Nein, es rm -rfwerden keine Dateien gelöscht, da Sie dem Befehl kein Argument übergeben haben.

fd0
quelle
5
Und deswegen -fist es kein Fehler, es ohne Argumente auszuführen. rm -rbeschwert sich über "fehlenden Operanden", -funterdrückt diesen aber und unterdrückt auch Fehler für Dateien, die nicht existieren. (So ​​könnte beispielsweise ein Skript rm -rf /foo/bar/*zum Leeren eines möglicherweise bereits leeren Verzeichnisses verwendet werden, ohne 2>/dev/nullFehler quetschen zu müssen.)
Peter Cordes
34

Von der Manualseite :

rm entfernt jede angegebene Datei.

Dies bedeutet, dass Sie damit eine Liste von Dateien auf einmal entfernen können, z. B. mit

rm -rf test1.txt test2.txt

Zum Glück haben Sie nur eine leere Dateiliste übergeben und nichts gelöscht. Was @SolarMike außerdem sagt : Wenn Sie nicht wissen, was ein Befehl tut, führen Sie ihn nicht aus . macOS wurde entwickelt, um alle gefährlichen (aber potenziell leistungsfähigen) Unix-Vorgänge vor dem Endbenutzer zu verbergen.

Glorfindel
quelle
7
Zu -rIhrer Information: Das Flag ist nicht erforderlich, es sei denn, Sie löschen Verzeichnisse rekursiv. Wenn es sich nur um Dateien handelt, rmist dies ausreichend - das -fist für die Erzwingung, dass Sie nicht für jede Datei gefragt werden, ob Sie sicher sind.
Tim S.
9
Das -f führt auch dazu, dass die Verwendungsmeldung bei falscher Verwendung nicht angezeigt wird. Aus diesem Grund gab es beim Betrieb des OP überhaupt keine Ausgabe rm -rf. Hätten sie 'rm -r' ohne angegebene Dateien / Verzeichnisse ausgeführt, hätten sie diese Verwendungsmeldung erhalten: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash
2
@barrycarter Das stimmt überhaupt nicht - es wird immer noch versucht /, es zu löschen , es wird nur die nicht vorhandene Datei übersprungen xyz*(die einfach nicht erweitert wird, weil es keine Übereinstimmung gibt).
flauschige
3
@barrycarter Dieses Verhalten hängt von der Globbing-Konfiguration Ihrer Shell ab. Zumindest in bashs Standard unter macOS wird es tatsächlich gelöscht aund bfür mich - auch ohne Angabe -f. Führen Sie echo rm -f a b c*stattdessen dieselben Befehle aus , um das tatsächliche Verhalten zu sehen.
flauschige
2
@barrycarter und fluffy: Was passiert, hängt davon ab, ob die Shell-Variable nonomatch gesetzt ist oder nicht.
Thomas Padron-McCarthy
13

Für den Laien / Linux / Unix-Neuling:

rm Allein macht man nichts, weil man nicht gesagt hat, was man loswerden soll.

man rm kann das meiste erklären, wenn du es verstehst.

-r bedeutet rekursiv, wie in "alles in Unterordner aufnehmen"

-f bedeutet erzwingen, "frag mich nicht zu bestätigen" -Modus

rm -rf(TUN SIE DAS NICHT)/ würde sagen, dass Sie alles unter /(dem Stammordner) löschen müssen, ohne dies zu überprüfen (bei neueren MacOS-Versionen wird SIP Sie daran hindern, MacOS selbst zu entfernen, aber viele andere Dinge werden gelöscht).

rm [some file name] würde nur diese Datei löschen.

rm -rf /home/myuser/bookswürde alles in myuser's booksOrdner sowie den Ordner löschen .

s1ns3nt
quelle
6
Heutzutage müssen Sie tun rm -rf / --no-preserve-root, um Ihr Bein richtig zu schießen.
Gallifreyan
1
@Gallifreyan Gibt es jemals eine Möglichkeit, dein Bein richtig zu schießen?
PascalVKooten
1
Dieser soll gut funktionieren. Ich kenne keine andere :)
Gallifreyan
1
@Gallifreyan auf macOS? pastebin.com/aVAsNcKC weist auf etwas anderes hin
nohillside
@ Gallifreyan: find / -deletesollte "funktionieren" (dh tatsächlich löschen, also nicht ausführen.)
Peter Cordes
4

Nein, aber wenn Sie löschen möchten Hier ist ein Beispiel:

Nachdem Sie Terminal gestartet haben (in Ihrem Ordner / Programme / Dienstprogramme), geben Sie cd ~ / Desktop ein, um zum Desktop-Verzeichnis zu navigieren. Wenn Sie hier eine Datei mit dem Namen MyFile.rtf haben, die Sie nie wieder sehen wollten, können Sie den folgenden Befehl ausführen:

rm MyFile.rtf

Wenn Sie die Eingabetaste drücken, wird die Datei verworfen! Es wird weg sein, Toast, Geschichte. Du kannst es nicht zurückbekommen.

alvaro
quelle
Tatsächlich entfernt rm alle Verweise auf die Datei, löscht die Festplatte der Datei nicht durch Überschreiben jedes Bytes, wenn ich die Dokumentation richtig verstehe.
NoBugs
@NoBugs Aber fairerweise funktionieren alle modernen Löschvorgänge, auch Windows. Wenn die Löschfunktion jedes Byte überschreibt, wird dies als solches angekündigt (hauptsächlich, weil es länger dauert und die meiste Zeit unnötig ist).
Insane