Ich denke, so ziemlich die Leute hier haben fälschlicherweise rm -rf
das falsche Verzeichnis erstellt, und hoffentlich hat es keinen großen Schaden angerichtet. Gibt es eine Möglichkeit, Benutzer daran zu hindern, eine ähnliche Unix-Horrorgeschichte zu schreiben ? Jemand erwähnte dies (im Kommentarbereich des vorherigen Links )
... Ich bin mir ziemlich sicher, dass jetzt jeder Unix-Kurs oder jede Unix-Firma, die Unix verwendet, rm -fr setzt, um Konten von Personen zu deaktivieren, die versuchen, es auszuführen, oder sie daran zu hindern, es auszuführen ...
Gibt es eine Implementierung davon in einer aktuellen Unix- oder Linux-Distribution? Und wie wird dieser Fehler häufig auch von einem Systemadministrator (mit Root-Zugriff) verhindert?
Es scheint, dass das Stammverzeichnis ( /
) in Solaris (seit 2005) und GNU (seit 2006) geschützt war . Gibt es sowieso die Möglichkeit, den gleichen Schutz auch für einige andere Ordner zu implementieren?
Um mehr Klarheit zu schaffen, habe ich nicht nach allgemeinen Hinweisen zur rm
Verwendung gefragt (und ich habe den Titel aktualisiert, um darauf hinzuweisen). Ich möchte etwas mehr wie den Schutz des Stammordners: Damit rm -rf /
Sie einen bestimmten Parameter übergeben müssen: rm -rf --no-preserve-root /
.. Gibt es ähnliche Implementierungen für benutzerdefinierte Verzeichnisse? Oder kann ich Dateien angeben, die zusätzlich /
durch die Optionerve-root geschützt werden sollen ?
quelle
rm
Befehl durch einen zu ersetzen, der diese Funktion nicht hat.rm -rf
kann ein Ereignis sein, das einen Lebenslauf generiert. Überprüfen Sie und überprüfen Sie dreifach, bevor Sie es ausführenAntworten:
Geben Sie nicht ein
rm -rf
, um Fehler zu vermeiden .rm -rf
Wenn Sie einen Verzeichnisbaum löschen müssen, empfehle ich den folgenden Workflow:
mv directory-to-delete DELETE
DELETE
und überprüfen Sie, ob es tatsächlich das ist, was Sie löschen wolltenrm -rf DELETE
Rufen Sie niemals
rm -rf
mit einem anderen Argument als anDELETE
. Wenn Sie das Löschen in mehreren Schritten durchführen, können Sie überprüfen, ob Sie nicht das Falsche löschen, entweder aufgrund eines Tippfehlers (wie inrm -rf /foo /bar
anstelle vonrm -rf /foo/bar
) oder aufgrund eines Braino (oops, nein, ich wollte löschenfoo.old
und behaltenfoo.new
). .Wenn Ihr Problem darin besteht, dass Sie anderen nicht vertrauen können, dass sie nicht tippen
rm -rf
, sollten Sie ihre Administratorrechte entfernen. Es kann noch viel mehr schief gehen alsrm
.Machen Sie immer Backups .
Überprüfen Sie regelmäßig, ob Ihre Backups funktionieren und auf dem neuesten Stand sind.
Behalten Sie alles, was nicht einfach heruntergeladen werden kann, unter Versionskontrolle.
Wenn Sie mit einem einfachen Unix-System einige Verzeichnisse wirklich durch löschen möchten
rm
, ersetzen Sie (oder besser Schatten)rm
durch ein benutzerdefiniertes Skript, das bestimmte Argumente zurückweist. Oder vonhg rm
.Einige Unix-Varianten bieten mehr Möglichkeiten.
chmod +a 'group:everyone deny delete_child' somedir
(Dies verhindert nicht das Löschen von Dateien in Unterverzeichnissen: if Wenn Sie dies möchten, legen Sie die ACL auch im Unterverzeichnis fest.rm
das Ändern bestimmter Verzeichnisse verbieten .quelle
--no-preserve-root
Option für einen anderen wichtigen Ordner überlegt . Und das gibt es anscheinend nicht einmal als Übung ...rm -rf
bedeutet schon "lösche das, ja ich bin sicher ich weiß was ich tue". Wenn Sie mehr möchten, ersetzen Sie esrm
durch ein Skript, das sich weigert, bestimmte Verzeichnisse zu löschen.rm
Zugriff auf bestimmte Verzeichnisse verhindern. Da Ihre Frage nicht nur Linux betrifft, hätte ich auch OSX erwähnen sollen, das etwas mit dem zu tun hat, was Sie wollen.Wenn Sie
rm *
und das zsh verwenden, können Sie die Option einstellenrmstarwait
:Jetzt warnt die Shell, wenn Sie Folgendes verwenden
*
:Wenn Sie es ablehnen (
n
), passiert nichts. Andernfalls werden alle Dateien gelöscht.quelle
zsh -f
verwendet?rm -rf *
Erstellen Sie zum Schutz vor einem Unfall in einem Verzeichnis eine Datei mit dem Namen "-i" (dies können Sie mit Emacs oder einem anderen Programm tun) in diesem Verzeichnis. Die Shell versucht, -i zu interpretieren und veranlasst sie, in den interaktiven Modus zu wechseln.Beispiel: Sie haben ein Verzeichnis
rmtest
mit der darin genannten Datei aufgerufen-i
. Wenn Sie versuchen,rm
alles im Verzeichnis zu finden,rm
wird es zuerst-i
an das Verzeichnis übergeben und wechselt in den interaktiven Modus. Wenn Sie eine solche Datei in die Verzeichnisse einfügen, für die Sie einen gewissen Schutz wünschen, kann dies hilfreich sein.Beachten Sie, dass dies gegen unwirksam ist
rm -rf rmtest
.quelle
> -i
BEARBEITEN wie durch Kommentar vorgeschlagen:
Sie können das Attribut von ändern, um die Datei oder das Verzeichnis unveränderlich zu machen, und es kann dann nicht einmal von root gelöscht werden, bis das Attribut entfernt wird.
chattr +i /some/important/file
Dies bedeutet auch, dass die Datei auch von root ohnehin nicht beschrieben oder geändert werden kann . Ein weiteres anscheinend verfügbares Attribut, das ich selbst nicht verwendet habe, ist das Append-Attribut (
chattr +a /some/important/file
. Dann kann die Datei nur im Append-Modus geöffnet werden, was bedeutet, dass auch keine Löschung erfolgt. Sie können sie jedoch hinzufügen (z. B. eine Protokolldatei). Dies bedeutet, dass Sievim
Sie können es beispielsweise nicht bearbeiten , aber Sie können es tunecho 'this adds a line' >> /some/important/file
. Die Verwendung von>
anstelle von>>
wird fehlschlagen.Diese Attribute können mit einem Minuszeichen deaktiviert werden, d. H.
chattr -i file
Andernfalls, wenn dies nicht geeignet ist, übe ich immer
ls /some/dir
zuerst, und anstatt den Befehl erneut einzugeben, drücke den Pfeil CTL-A nach oben, lösche dann denls
und tippe meinen ein,rm -rf
wenn ich ihn brauche. Nicht perfekt, aber wenn Sie sich die Ergebnisse von ls ansehen, wissen Sie vorher, ob es das ist, was Sie wollten.quelle
Wenn Sie die Programmiersprache C verstehen, ist es meiner Meinung nach möglich, den rm-Quellcode neu zu schreiben und einen kleinen Patch für den Kernel zu erstellen. Ich habe dies auf einem Server gesehen und es war unmöglich, einige wichtige Verzeichnisse zu löschen. Wenn Sie 'rm -rf / direcotyr' eingeben, wird eine E-Mail an sysadmin gesendet.
quelle
Eine mögliche Wahl besteht darin, die Verwendung zu beenden
rm -rf
und die Verwendung zu startenrm -ri
. Der zusätzlichei
Parameter besteht darin, sicherzustellen, dass Sie gefragt werden, ob Sie die Datei wirklich löschen möchten.Wahrscheinlich ist es am besten, wenn Sie einen Alias
rm -ri
für etwas Denkwürdiges verwendenkill_it_with_fire
. Wenn Sie Lust haben, etwas zu entfernen, töten Sie es auf diese Weise mit Feuer.quelle
f
das genaue Gegenteil voni
Option? Ich habe es versucht und trotzdem gearbeitet ...r
drin. Habe es einfach behoben.Ich möchte den Verzeichnisnamen wie folgt an die erste Stelle setzen:
quelle