Rm (Unix)

rm
Rm --help Command - Unix.png
Das rm Befehl
Originalautor (en) Ken Thompson, Dennis Ritchie
(AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung 3. November 1971; vor 50 Jahren
Geschrieben in C
Betriebssystem Unix, Unix-artig, V, Plan 9, Inferno, Kolibrios, Ibm i
Plattform Plattformübergreifend
Typ Befehl
Lizenz CoreUtils: GPLV3+
Plan 9: MIT -Lizenz

rm (kurz für Löschen) ist ein grundlegender Befehl an Unix und Unix-artig Betriebssysteme Wird verwendet, um Objekte zu entfernen, z. Computerdateien, Verzeichnisse und Symbolische Links aus Dateisysteme und auch Sonderdateien wie zum Beispiel Geräteknoten, Rohre und Steckdosen, ähnlich wie del Befehl in MS-DOS, OS/2, und Microsoft Windows. Der Befehl ist auch in der erhältlich EFI -Hülle.[1]

Überblick

Das rm Der Befehl entfernt Verweise auf Objekte aus dem Dateisystem mit der Dateisystem Verknüpfen Systemaufruf, bei dem diese Objekte möglicherweise mehrere Referenzen hatten (z. B. eine Datei mit zwei verschiedenen Namen), und die Objekte selbst werden nur dann verworfen, wenn alle Referenzen entfernt wurden und keine Programme noch offene Handles für die Objekte haben.

Dies ermöglicht Szenarien, in denen ein Programm eine Datei öffnen, sie sofort aus dem Dateisystem entfernen und dann für den temporären Speicherplatz verwenden kann, wobei Sie wissen, dass der Speicherplatz der Datei nach dem Ablauf des Programms zurückgefordert wird, auch wenn es durch Absturz beendet ist.

Der Befehl zerstört im Allgemeinen keine Dateidaten, da sein Zweck wirklich nur zu Verknüpfen Referenzen, und der Freed -System -System enthält möglicherweise weiterhin übrig gebliebene Daten aus der entfernten Datei. Dies kann in einigen Fällen ein Sicherheitsbedenken sein, und hartgesottene Versionen bieten manchmal das Auslöschen der Daten, wenn der letzte Link gekürzt wird, und Programme wie z. Fetzen und SRM sind verfügbar, die speziell Datenwischfunktionen bieten.

rm wird im Allgemeinen nur auf gesehen Unix-Ableitete Betriebssysteme, die in der Regel nicht für die Wiederherstellung gelöschter Dateien über einen Mechanismus wie das vorkommen Mülleimer recyceln,[2] Daher die Tendenz für Benutzer, einzuschließen rm in einer Art Wrapper, um die versehentliche Datei -Löschung zu begrenzen.

Es gibt wahnsinnig Versorgungsunternehmen, die versuchen, den Index zu rekonstruieren, und die Datei zurückbringen können, wenn die Teile nicht wiederverwendet wurden.

Geschichte

Auf einigen alten Versionen von Unix die rm Der Befehl würde Verzeichnisse löschen, wenn sie leer wären.[3] Dieses Verhalten kann noch in einigen Versionen von erhalten werden rm mit dem -d Flagge, z. B. die BSDS (wie zum Beispiel Freebsd,[4] Netbsd,[5] OpenBSD[6] und Mac OS) abgeleitet von 4.4bsd-lite2.

Die Version von rm gebündelt GNU CoreUtils wurde von Paul Rubin, David Mackenzie, geschrieben, Richard Stallmanund Jim Meyering.[7] Diese Version bietet auch -d Option, um bei der Kompatibilität zu helfen.[8] Die gleiche Funktionalität wird vom Standard bereitgestellt rmdir Befehl.

Das -ich Option in Version 7 ersetzt DSW, oder "aus Switches löschen", die in debütierten Version 1. Doug McIlroy schrieb das DSW "War ein Verzweiflungstool, das zum Aufräumen von Dateien mit unbedeutbaren Namen entworfen wurde".[9]

Der Befehl ist als separates Paket für Microsoft Windows als Teil der verfügbar Unxutils Sammlung von einheimisch Win32 Häfen von gemeinsamen GNU-Unix-ähnlichen Versorgungsunternehmen.[10] Kolibrios beinhaltet eine Implementierung der rm Befehl.[11] Das rm Der Befehl wurde auch auf die portiert Ibm i Betriebssystem.[12]

Syntax

rm Löscht die angegebene Datei, nachdem die Optionen hinzugefügt wurden. Benutzer können einen vollständigen Pfad oder einen relativen Dateipfad verwenden, um die zu löschenden Dateien anzugeben. rm Löscht ein Verzeichnis nicht standardmäßig.[13]rm foo löscht die Datei "Foo"Im Verzeichnis befindet sich der Benutzer derzeit.

rmVerwenden Sie wie andere Befehle Optionen, um anzugeben, wie es sich verhalten wird:

  • -r, "rekursiv", das Verzeichnisse beseitigt und den Inhalt vorher rekursiv entfernt (um Dateien ohne Verzeichnis nicht zu verlassen).
  • -ich, "interaktiv", was nach einer Bestätigung jeder Löschung fragt.
  • -f, "Force", die nicht existierende Dateien ignoriert und alle Bestätigungsanforderungen überschreibt (effektiv stornieren -ich), obwohl es keine Dateien aus einem Verzeichnis entfernen, wenn das Verzeichnis schreibgeschützt ist.
  • -V, "wörtlich", was was druckt rm macht es auf das Terminal
  • -d, "Verzeichnis", das ein leeres Verzeichnis löscht und nur dann funktioniert, wenn das angegebene Verzeichnis leer ist.
  • -Ein-Datei-SystemEntfernt nur Dateien auf demselben Dateisystem als Argument und ignorieren montierte Dateisysteme.

rm kann durch a überlagert werden Hülse alias (C Shell alias, Bourne Shell oder bash) Funktion von "rm -i"Um eine versehentliche Löschung von Dateien zu vermeiden. Wenn ein Benutzer immer noch eine große Anzahl von Dateien ohne Bestätigung löschen möchte, kann er das manuell abbrechen -ich Argument durch Hinzufügen der -f Option (als Option, die später in der erweiterten Befehlszeile angegeben wurde "rm -i -f"Hat Vorrang). Leider erzeugt dieser Ansatz gefährliche Gewohnheiten in Richtung der Verwendung von Wildcarding, was zu einer eigenen Version von versehentlichen Entfernungen führt.

rm -rf (unterschiedlich, rm -rf /, rm -rf *und andere) wird häufig in Witzen und Anekdoten über Unix -Katastrophen verwendet.[14] Das rm -rf / Variante des Befehls, falls von a ausgeführt werden Superuser, würde dazu führen, dass jede vom vorliegende Dateisystem zugängliche Datei vom Computer gelöscht wird.

rm wird oft in Verbindung mit verwendet mit Xargs So liefern Sie eine Liste von Dateien zum Löschen:

 Xargs rm <Filelist

Oder um alle zu entfernen PNG -Bilder In allen Verzeichnissen unter dem aktuellen:

 finden . -Name '*.png' -exec rm {} + 

Berechtigungen

Normalerweise erfordert das Löschen einer Datei in den meisten Dateisystemen eine Schreibberechtigung im übergeordneten Verzeichnis (und die Erlaubnis ausführen, um das Verzeichnis überhaupt erst einzugeben). (Beachten Sie, dass die Berechtigungen in der Datei selbst verwirrend für Anfänger irrelevant sind. GNU jedoch jedoch rm Bittet um Bestätigung, ob eine schreibgeschützte Datei gelöscht werden soll, es sei denn, die Option -F wird verwendet.)[15]

Ein Verzeichnis löschen (mit rm -r), man muss alle seine Inhalte rekursiv löschen. Dies erfordert, dass man das Verzeichnis gelesen und schreiben und ausführen muss (falls es nicht leer ist) und alle nicht leeren Unterverzeichnisse rekursiv (falls vorhanden). Die Leseberechtigungen sind erforderlich, um den Inhalt des Verzeichnisses aufzulisten, um sie zu löschen. Dies führt manchmal zu einer seltsamen Situation, in der ein nicht leeres Verzeichnis nicht gelöscht werden kann, da man keine Schreibberechtigung dafür hat und daher seinen Inhalt nicht löschen kann. Aber wenn das gleiche Verzeichnis leer wäre, könnte man es löschen.[16]

Wenn eine Datei in einem Verzeichnis mit dem liegt klebriges Stück Setzen Sie und löschen Sie die Datei dann erforderlich, um der Eigentümer der Datei zu sein.

Schutz des Dateisystemstamms

Sun Microsystems eingeführt "rm -rf /"Schutz in Solaris 10, erstmals im Jahr 2005 veröffentlicht. Nach Ausführung des Befehls berichtet das System nun, dass die Entfernung von / nicht zulässig ist.[17] Kurz darauf wurde die gleiche Funktionalität eingeführt in Freebsd Version von rm Dienstprogramm.[18] GNU rm weigert sich auszuführen rm -rf / Wenn die -PRESERVE-WROT Option ist gegeben,[19] das war der Standard seit Version 6.4 von GNU -Kern -Dienstprogramme wurde im Jahr 2006 veröffentlicht. In neueren Systemen wurde dies ausfallsicher ist immer aktiv, auch ohne die Option. Um den Befehl auszuführen, muss der Benutzer die fehlschließende Sicherheit umgehen, indem Sie die Option hinzufügen -No-Preserve-Root, auch wenn sie der Superuser sind.

Benutzerdicht

Systemadministratoren, Designer und sogar Benutzer versuchen häufig, sich gegen versehentliches Löschen von Dateien zu verteidigen, indem sie einen Alias ​​oder eine Funktion in den Zeilen von Folgendes erstellen:

alias rm="rm -i" rm () { /bin/rm -i "$@" ; } 

Das führt zu rm Bitten Sie den Benutzer, auf Dateibasis zu bestätigen, unabhängig davon, ob er gelöscht werden sollte, indem Sie die Y- oder N-Taste drücken. Leider neigt dies dazu, Benutzer zu schulen, um über die Wildcards nachlässig zu sein, die sie in ihre übergeben rm Befehle und fördert sowie eine Tendenz, abwechselnd zu pocken y und die Rückkehrschlüssel, um zu bestätigen - bis kurz hinter der einen Datei, die sie behalten mussten. Benutzer wurden sogar so weit gesehen "Ja | RM -Dateien", das automatisch" y "für jede Datei einfügt.

Ein Kompromiss, der es Benutzern ermöglicht, nur einmal zu bestätigen, die ordnungsgemäße Wildcarding zu fördern und die Überprüfung der Liste zu erleichtern, kann mit so etwas erreicht werden:

wenn [ -n "$ PS1" ] ; dann   rm ()   {        ls -fcsd "$@"  Echo 'Entfernen Sie [NY]? '' | Tr -d '\ 012' ; lesen  wenn [ "_$ Antwort" = "_y" ]; dann           /bin/rm -rf "$@"  anders  Echo '(abgebrochen)'  fi  } fi 

Es ist wichtig zu beachten rm Auf dem Suchpfad sollte es auch nicht in nicht interaktiven Muscheln erlaubt sein, wo es Stapeljobs brechen könnte. Einschließen der Definition in der wenn [-n "$ ps1"]; dann .... ; fi Konstrukt schützt vor letzterem.

Es gibt Alternativen von Drittanbietern, die eine versehentliche Löschung wichtiger Dateien wie "Safe-RM" verhindern,[20] oder "Müll".[21]

Maximale Befehlszeilenargumentbeschränkung

GNU -Kern -Dienstprogramme Implementierung in mehrfacher verwendet Linux -Verteilungen wird in Befehlszeilenargumenten begrenzt Bytes Anzahl der Seiten, die im Kernel für Befehlszeilenargumente zugewiesen werden, bevor Kernel 2.6.23 am 9. Oktober 2007 veröffentlicht wird[22] [23]wurden in Kernel Compile -Zeit bei Variable definiert Max_arg_pages in include/linux/binfmts.h Datei, aber neue Kerne begrenzt die maximale Argumentationslänge auf 25% der maximalen Stapelgrenze (ULIMIT -S). Fehler: /bin/rm: Argumentliste zu lange. wird fordert, wenn die Argumentgrenze des Befehlszeilens überschritten wird[24]

Siehe auch

Verweise

  1. ^ "EFI -Muscheln und Skripten". Intel. Abgerufen 2013-09-25.
  2. ^ "UNIX - Häufig gestellte Fragen (3/7) [Häufiger Beitrag] Abschnitt - Wie kann ich" eine Datei "nicht" uneLete "?". www.faqs.org.
  3. ^ "RM -Seite aus Abschnitt 1 des UNIX 8. Handbuchs". Man.cat-V.org.
  4. ^ "RM (1)", FreeBSD-5.4-Release, abgerufen 5. Februar, 2015
  5. ^ "RM (1)", Netbsd-2.0, abgerufen 5. Februar, 2015
  6. ^ "RM (1)", OpenBSD-3.6, abgerufen 5. Februar, 2015
  7. ^ "RM (1): Dateien/Verzeichnisse entfernen - Linux Man Page". Linux.die.net.
  8. ^ Krzysztof Goj (22. Januar 2012). "RM: Neue Option--dir (-d), um leere Verzeichnisse zu entfernen". coreUtils.git.
  9. ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
  10. ^ "Native Win32 -Ports einiger GNU -Dienstprogramme". Unxutils.SourceForge.net.
  11. ^ "Shell - Kolibrios Wiki". wiki.kolibrios.org.
  12. ^ IBM. "IBM System I Version 7.2 Programmierung Qshell" (PDF). Abgerufen 2020-09-05.
  13. ^ "RM (1) - Linux Manual Page". Man7.org.
  14. ^ Gite, Vivek. "Linux/Unix: Eine Datei löschen". Nixcraft. Abgerufen 24. November 2011.
  15. ^ "Linux RM -Befehlshilfe und Beispiele". ComputerHope. 24. Januar 2018. Archiviert vom Original am 16. April 2016. Abgerufen 24. Januar 2019.{{}}: CS1 Wartung: Ungeeignete URL (Link)
  16. ^ McElhearn, Kirk (2. Januar 2014). "Beherrschen Sie die Befehlszeile: Löschen von Dateien und Ordnern". Macworld. Abgerufen 24. Januar 2019.
  17. ^ "Einmischen in die Angelegenheiten der Zauberer". Archiviert von das Original Am 2016-11-03.
  18. ^ "Das vorherige Komitee hat RM (1) Code hinzugefügt, um alle · FreeBSD/FreeBSD@D6b7bd9 zu entfernen und zu entfernen.". GitHub.
  19. ^ "RM -Aufruf (GNU CoreUtils)". www.gnu.org.
  20. ^ "Safe-RM in Launchpad". Launchpad.
  21. ^ "Andreafrancia/Trash-Cli". 12. September 2020 - über Github.
  22. ^ "Linux_2_6_23 - Linux -Kernel -Neulinge". kernelnewbies.org.
  23. ^ "Kernel/Git/Torvalds/Linux.git - Linux -Kernel -Quellbaum". git.kernel.org.
  24. ^ ""Argumentliste zu lang": Beyond Argumente und Einschränkungen | Linux Journal ". www.linuxjournal.com.

Weitere Lektüre

  • McElhearn, Kirk (2006). Die MAC OS X -Befehlszeile: UNIX unter der Motorhaube. John Wiley & Sons. ISBN 978-0470113851.

Externe Links