Ich finde, dass die Manpage in diesem Fall ein wenig detailliert ist. Die -fOption von hat rmtatsächlich einige Anwendungsfälle:
Um einen Fehler zu vermeiden, beenden Sie den Code
Um nicht dazu aufgefordert zu werden
Berechtigungsprüfungen umgehen
Sie haben Recht, dass es sinnlos ist, eine nicht vorhandene Datei zu entfernen, aber in Skripten ist es sehr praktisch, zu sagen, "Ich möchte diese Dateien nicht, löschen Sie sie, wenn Sie sie finden, aber stören Sie mich nicht, wenn sie nicht vorhanden sind existiert nicht ". Einige Benutzer verwenden das set -ein ihrem Skript, damit es bei Fehlern nicht mehr angezeigt wird (um weiteren Schaden zu vermeiden, den das Skript verursachen kann). rm -rf /home/my/garbageDies ist einfacher als if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.
Hinweis zu Berechtigungsprüfungen: Um eine Datei zu löschen, benötigen Sie eine Schreibberechtigung für das übergeordnete Verzeichnis und nicht für die Datei selbst. Nehmen wir also an, dass sich rootin Ihrem Ausgangsverzeichnis eine Datei befindet, auf die Sie keinen sudoZugriff haben. Sie können die Datei dennoch mithilfe der -fOption entfernen . Wenn Sie Git verwenden, können Sie sehen, dass Git die Schreibberechtigung für die von ihm erstellten Objektdateien nicht belässt:
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
Wenn Sie also verwenden rm, ist die einzige Möglichkeit, ein Git-Repository ohne Verwendung von zu löschen root, die Verwendung von rm -rf.
-fvermeidet einen Fehler-Exit-Code nicht. Wenn rmversucht wird, eine vorhandene Datei zu entfernen, wird ein Fehlercode zurückgegeben.
Gilles 'SO- hör auf böse zu sein'
Ich habe diese Antwort abgelehnt, weil "Um einen Fehler-Exit-Code zu vermeiden" wie folgt geschrieben werden sollte: "Um einen Fehler-Exit-Code zu vermeiden, falls keine Dateioperanden vorhanden sind oder keine Dateioperanden vorhanden sind". Da diese Antwort jetzt geschrieben ist, ist sie falsch.
Harold Fischer
6
Das -f Option unterdrückt Bestätigungsaufforderungen beim Löschen einer schreibgeschützten Datei. Es werden auch Fehler unterdrückt, wenn eine oder mehrere bereitgestellte Dateien nicht vorhanden sind.
Die -fOption ist nützlich , wenn Sie sich bewusst sind , dass einige der Dateien , die Sie sind das Löschen nur gelesen werden können, und Sie wollen nicht darüber aufgefordert werden.
Die fOption ist auch nützlich, wenn Sie einige Dateien entfernen möchten, falls sie existieren, und sich nicht darum kümmern möchten, ob sie existieren oder nicht. Dies wird sehr häufig in Makefiles verwendet , um einen Befehl zum Entfernen von Dateien zu erstellen, die aus Quelldateien neu generiert werden können. Wenn beispielsweise foo.oaus neu erstellt werden foo.c, bar.okann von neu aufgebaut werden bar.c, und myappkann von neu aufgebaut werden foo.ound bar.odann dem Make - Datei Ziel
clean:
rm -f *.o myapp
entfernt myapp, foo.oundbar.o wenn sie existieren und beschwert sich nicht, wenn einer von ihnen nicht existiert.
Einschließlich -fin den Anweisungen , um einen Verzeichnisbaum zu entfernen , ist nicht notwendig , in den meisten Fällen. Dies kann gerechtfertigt sein, da Sie festlegen können, -fdass bei schreibgeschützten Dateien keine Eingabeaufforderungen angezeigt werden, wenn Sie sicher sind, dass die Verzeichnisstruktur unabhängig vom Inhalt entfernt werden soll. Leute, die sagen zu rennen, rm -rfwiederholen jedoch oft nur eine mystische Beschwörung, um etwas loszuwerden, unabhängig davon, ob die Optionen -rund -ftatsächlich notwendig sind. Wenn die Optionen nicht erforderlich sind, sind sie nicht empfehlenswert, da sie das Risiko erhöhen, dass ein Tippfehler im Argument etwas Wichtiges zerstört.
Ich sehe im Allgemeinen die -fVerwendung mit, rmwenn der rmBefehl so ausgerichtet ist, dass er den -iSchalter für interaktive enthält. Der -fSchalter wirkt dem entgegen -i.
Beispiel
Simulieren Sie das Problem damit rm, Aliase zu sein rm -i.
$ alias rm='rm -i'
Machen Sie einige gefälschte Daten
$ touch afile
Versuchen Sie nun, es mit der Aliase-Version von zu löschen rm
$ rm afile
rm: remove regular empty file `afile'?
Versuchen Sie es jetzt mit -f
$ rm -f afile
$
Berechtigungen
Ich glaube auch, dass es Fälle gibt, in denen Sie nur Lesezugriff auf ein Verzeichnis haben und wenn Sie versuchen, die Dateien und / oder Unterverzeichnisse in diesem Verzeichnis zu löschen, erhalten Sie die ähnliche Aufforderung "Sind Sie sicher?". Die Verwendung von -fmacht es überflüssig, ja sagen zu müssen.
Durch die Verwendung des Alias ergibt dies tatsächlich einen Sinn. Und deine Antwort stimmt mit der überein, die ich gerade in den openbsd-Manpages gezeigt habe. Obwohl openbsd nicht GNU / Linux ist, scheint es zu beschreiben, was Sie gerade gesagt haben. Hier ist der Link, wenn jemand überprüfen möchte: [link] openbsd.org/cgi-bin/…
Saliarosaurus
Mit bash können Sie immer \rmohne Aliasing ausführen (\ ist eine Verknüpfung zu dem erstellten commandProgramm). Ich finde, die beste Verwendung -fist in Shell-Skripten, wo Sie etwas wie eine Sperrdatei haben, die möglicherweise existiert oder nicht, -fstoppt die rm: cannot remove 'file': No such file or directoryWarnung.
Drav Sloan
@DravSloan Ja, das macht auch Sinn. Vielen Dank für Ihre Antworten sowohl Drav Sloan als auch slm
saliarosaurus
Ich benutze rm -foft auf das cleanZiel in Makefiles
Alex
-iist nicht wirklich das, worum es -fgeht, es ist eher ein Randfall.
-f
vermeidet einen Fehler-Exit-Code nicht. Wennrm
versucht wird, eine vorhandene Datei zu entfernen, wird ein Fehlercode zurückgegeben.Das
-f
Option unterdrückt Bestätigungsaufforderungen beim Löschen einer schreibgeschützten Datei. Es werden auch Fehler unterdrückt, wenn eine oder mehrere bereitgestellte Dateien nicht vorhanden sind.Die
-f
Option ist nützlich , wenn Sie sich bewusst sind , dass einige der Dateien , die Sie sind das Löschen nur gelesen werden können, und Sie wollen nicht darüber aufgefordert werden.Die
f
Option ist auch nützlich, wenn Sie einige Dateien entfernen möchten, falls sie existieren, und sich nicht darum kümmern möchten, ob sie existieren oder nicht. Dies wird sehr häufig in Makefiles verwendet , um einen Befehl zum Entfernen von Dateien zu erstellen, die aus Quelldateien neu generiert werden können. Wenn beispielsweisefoo.o
aus neu erstellt werdenfoo.c
,bar.o
kann von neu aufgebaut werdenbar.c
, undmyapp
kann von neu aufgebaut werdenfoo.o
undbar.o
dann dem Make - Datei Zielentfernt
myapp
,foo.o
undbar.o
wenn sie existieren und beschwert sich nicht, wenn einer von ihnen nicht existiert.Einschließlich
-f
in den Anweisungen , um einen Verzeichnisbaum zu entfernen , ist nicht notwendig , in den meisten Fällen. Dies kann gerechtfertigt sein, da Sie festlegen können,-f
dass bei schreibgeschützten Dateien keine Eingabeaufforderungen angezeigt werden, wenn Sie sicher sind, dass die Verzeichnisstruktur unabhängig vom Inhalt entfernt werden soll. Leute, die sagen zu rennen,rm -rf
wiederholen jedoch oft nur eine mystische Beschwörung, um etwas loszuwerden, unabhängig davon, ob die Optionen-r
und-f
tatsächlich notwendig sind. Wenn die Optionen nicht erforderlich sind, sind sie nicht empfehlenswert, da sie das Risiko erhöhen, dass ein Tippfehler im Argument etwas Wichtiges zerstört.quelle
Der
-i
Wechsel zurm
Ich sehe im Allgemeinen die
-f
Verwendung mit,rm
wenn derrm
Befehl so ausgerichtet ist, dass er den-i
Schalter für interaktive enthält. Der-f
Schalter wirkt dem entgegen-i
.Beispiel
Simulieren Sie das Problem damit
rm
, Aliase zu seinrm -i
.Machen Sie einige gefälschte Daten
Versuchen Sie nun, es mit der Aliase-Version von zu löschen
rm
Versuchen Sie es jetzt mit
-f
Berechtigungen
Ich glaube auch, dass es Fälle gibt, in denen Sie nur Lesezugriff auf ein Verzeichnis haben und wenn Sie versuchen, die Dateien und / oder Unterverzeichnisse in diesem Verzeichnis zu löschen, erhalten Sie die ähnliche Aufforderung "Sind Sie sicher?". Die Verwendung von
-f
macht es überflüssig, ja sagen zu müssen.quelle
\rm
ohne Aliasing ausführen (\ ist eine Verknüpfung zu dem erstelltencommand
Programm). Ich finde, die beste Verwendung-f
ist in Shell-Skripten, wo Sie etwas wie eine Sperrdatei haben, die möglicherweise existiert oder nicht,-f
stoppt dierm: cannot remove 'file': No such file or directory
Warnung.rm -f
oft auf dasclean
Ziel inMakefile
s-i
ist nicht wirklich das, worum es-f
geht, es ist eher ein Randfall.