it-swarm.com.de

Gibt es ein Szenario, in dem rm -rf -no-preserve-root benötigt wird?

Ich habe hier einige Fragen gesehen, bei denen Leute versehentlich rm -rf --no-preserve-root oder rm -rf * tun und dabei den größten Teil oder das gesamte Dateisystem auslöschen, bevor sie reagieren können.

Gibt es jemals einen Grund, --no-preserve-root zu verwenden, sei es im normalen Gebrauch, als Entwickler oder als Administrator?

22
Nzall

WICHTIG: Moderne UEFI-Systeme hängen die Firmware im Verzeichnis /sys ein und stellen sie dem Betriebssystem zur Verfügung. Führen Sie diesen Befehl NICHT auf einem modernen System aus, da dadurch diese Firmware entfernt wird und Ihr Computer im Wesentlichen blockiert wird.


Das einfachste Szenario, das ich mir vorstellen kann, ist, dass jemand alle Daten von seinem Laufwerk löschen möchte. Es kann durchaus legitime Gründe dafür geben und der einfachste Weg, den ich mir vorstellen kann, ist

rm -rf --no-preserve-root /

Es stellt sich heraus, dass dieses Beispiel tatsächlich in info rm angegeben ist:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Ein weiterer guter Grund ist, dass Sie ein eingehängtes Dateisystem löschen möchten, in das Sie chroot- eingetragen haben. In diesem Fall löscht rm -rf --no-preserve-root / das System in der Umgebung chroot, lässt aber Ihr System intakt.

Ich bin mir sicher, dass es mehrere mögliche Gründe gibt, aber im Allgemeinen scheint es ein sehr vernünftiger Ansatz zu sein, dass mein System es mir ermöglicht, damit zu machen, was ich will. Es ist meine Aufgabe, vorsichtig zu sein. Das System sollte es mir nur ermöglichen, das zu tun, was ich tun möchte. Wenn das, was ich will, dumm ist, ist das mein Problem und nicht das des Betriebssystems.

Wie auch immer, dies ist eine relativ neue Einschränkung, sie wurde in der 7. Version der POSIX-Spezifikation (der vorherigen hinzugefügt eins ist hier), vorher war rm / ein vollkommen gültiger Befehl. Historisch gesehen waren die Verzeichnisse . und .. seit 1979, als rm zum ersten Mal die Möglichkeit zum Löschen von Verzeichnissen erhielt, vor rm geschützt. Mehr dazu hier .

22
terdon

Das Vorhandensein des Schalters --no-preserve-root bedeutet nicht, zusätzliche Funktionalität hinzuzufügen , sondern eine sehr vernünftige Einschränkung der Funktionalität außer Kraft zu setzen . Dieser Schalter basiert wahrscheinlich auf der Philosophie, dass der Computer das tun sollte, was ihm gesagt wird, und dass Befehle verfügbar sein sollten, um jede gewünschte Aktion auszudrücken. Dieser Wechsel datiert UEFI voraus und ist meiner Erfahrung nach mittlerweile veraltet.

In der modernen Praxis verhindert der Befehl rm ohne diese Option das versehentliche Löschen des Stammverzeichnisses, wenn eine nicht initialisierte Variable oder ein Streuraum verwendet wird.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Fun Fußnote: Schutz war nicht seine Absicht. Laut einem Sun Microsystems-Blog wird durch das Entfernen des Verzeichnisses / implizit das aktuelle Arbeitsverzeichnis entfernt. Dies verstößt gegen die besonderen Überlegungen, die bereits für die Verzeichnisse . und .. getroffen wurden. Aus diesem Grund hat das Normungsgremium diese besondere Ausnahme zugelassen - nicht zur Verhinderung eines Unfalls. Diese Änderung wurde erstmals mit Solaris 10 Build 36 eingeführt.

http://archive.is/5lmc9

9
durette

Vielleicht ist dies keine Antwort, die der ursprüngliche Fragesteller haben möchte, aber es gibt einen Anwendungsfall, bei dem alle Dateien rekursiv aus dem Stammverzeichnis gelöscht werden müssen. Obwohl es nicht über den Befehl rm erfolgt, ist es Teil des Prozesses switch_root (8) beim Booten Ihres (nicht eingebetteten) Linux-Systems.

1
Explorer09