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

27

Ich habe hier einige Fragen gesehen, bei denen Leute versehentlich rm -rf --no-preserve-rootoder rm -rf *aus Versehen den größten Teil oder das gesamte Dateisystem gelöscht haben, bevor sie reagieren können.

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

Nzall
quelle
4
Ich kann mir keinen nützlichen Fall vorstellen ... Ich denke, diese Option existiert nur, um die Orthogonalität des UNIX-Prinzips zu erhalten (in Bezug auf die Beibehaltung der gleichen Dinge ohne Ausnahmen). Sie möchten höchstwahrscheinlich die Ausnahme im Fall von /, aber der »allgemeine Fall« ist immer noch vertreten. Mit anderen Worten: »Es ist nicht die Aufgabe meines Computers, mir zu sagen, was ich tun soll.« Und das sollte es auch nicht sein.
Andreas Wiese
Es ist eine mögliche Waffe für die Übernahme von SkyNet.
Mitch Dart

Antworten:

26

WICHTIG: Moderne UEFI-Systeme hängen die Firmware in das /sysVerzeichnis 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 beschädigt 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 dies tatsächlich ein Beispiel ist in info rm:

`--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 chrooteingetreten sind. In diesem Fall rm -rf --no-preserve-root /wird das System in der chrootUmgebung gelöscht, aber Ihr System bleibt intakt.

Ich bin mir sicher, dass es weitere 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 hinzugefügt (die vorherige ist hier), bevor dies rm -rf /ein vollkommen gültiger Befehl war. Historisch gesehen waren die Verzeichnisse .und seit 1979 vor dem ersten Löschen von Verzeichnissen ..geschützt . Mehr dazu hier .rmrm

terdon
quelle
21
VERWENDEN SIE DIES NICHT, UM ALLE DATEN ZU LÖSCHEN, WENN IHR SYSTEM UEFI (neue Computer) ist. Wenn Sie dies tun, werden alle Firmware-Variablen gelöscht, und das Motherboard wird unbrauchbar wie ein Ziegelstein
Suici Doga
5
@ SuiciDoga: Quelle oder weitere Erklärung? Die Motherboard-Firmware sollte nicht auf der Festplatte gespeichert werden, da sie sonst verloren gehen würde, wenn Sie das Laufwerk ziehen.
Tarka
15
@Tarka: / sys / firmware / efi / efivars / wird möglicherweise eingehängt, und beim rekursiven Löschen werden diese Variablen möglicherweise entfernt. Es sollte wirklich kein System ziegeln, könnte aber. Siehe thenextweb.com/insider/2016/02/01/...
cyanic
4
@Tarka sie sind nicht auf der Festplatte gespeichert und das Ziehen des Laufwerks würde sie nicht beeinträchtigen. Aus Gründen, die ich noch nicht verstanden habe, sind sie jedoch so montiert, dass sie tatsächlich unter zugänglich sind /.
Terdon
20
Die richtige Methode zum Löschen eines Laufwerks besteht darin, seine Partitionen neu zu formatieren (oder sie insgesamt neu zu partitionieren). Nicht alle Dateisysteme sind Festplatten. Wenn rm -rf /Sie also einen Remote-Computer verwenden , können Sie ihn beispielsweise über den NFS / CIFS / SSHFS-Mount einer anderen Person leeren.
Score_Under
12

Die Existenz des --no-preserve-rootSchalters ist nicht hinzufügen zusätzliche Funktionalität , sondern zu überschreiben , eine sehr vernünftige Einschränkung der Funktionalität. Dieser Schalter basiert wahrscheinlich auf der Philosophie, dass der Computer das tun sollte, was ihm gesagt wurde, und dass Befehle verfügbar sein sollten, um die gewünschten Aktionen auszuführen. Dieser Wechsel datiert UEFI voraus und ist meiner Erfahrung nach mittlerweile veraltet.

In der modernen Praxis rmvermeidet der Befehl 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, was eine Verletzung der besonderen Überlegungen darstellt, die bereits für die Verzeichnisse .und vorgenommen wurden ... Aus diesem Grund hat das Normungsgremium diese Sonderausnahme zugelassen - nicht zur Verhinderung eines Unfalls. Diese Änderung wurde erstmals mit Solaris 10 Build 36 eingeführt.

http://archive.is/5lmc9

Durette
quelle
Danke für den Link! Ich hatte gehofft, dass dieser historische Aspekt zitiert wird, als ich mich fragte, was der Grund für die Änderung war.
Cameron Gagnon
Interessante Zusatzinfo - danke
Mark
1

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 rmBefehl erfolgt, ist es Teil des Prozesses switch_root (8) beim Booten Ihres (nicht eingebetteten) Linux-Systems.

Explorer09
quelle