Ich habe gerade einige Daten in Ordner A verloren, der sich danach in Ordner B befand rm -rf B
. Bevor ich erkennen konnte, was ich getan habe, war alles vorbei. Jetzt ist eine Lektion gelernt, ich möchte einige meiner Ordner idiotensicher machen, um ein nächstes Mal zu vermeiden, wenn ich etwas Ähnliches mache und mich umbringen möchte.
Eine Möglichkeit, die ich mir vorstellen kann, besteht darin, eine Bash-Funktion zu schreiben und sie als Alias zu verwenden rm
. Diese Funktion sucht in jedem Unterordner nach einer versteckten Datei wie z .dontdelete
. Wenn es gefunden wird, würde es fragen, ob ich wirklich weitermachen möchte. Ich kann nicht machen ist schreibgeschützt, da es einen Prozess gibt, der ständig in diesen Ordner schreibt. Gibt es einen besseren Weg, dies zu tun?
quelle
rm
,rm -i
vor jedem Entfernen einen Alias zu erstellen:> -i Eingabeaufforderung oder> -I einmal vor dem Entfernen von mehr als drei Dateien oder beim rekursiven Entfernen. Weniger aufdringlich als -i, bietet aber dennoch Schutz vor den meisten Fehlern. Sie können diese jederzeit mit anderen Flags überschreiben.safe-rm
tmpwatch
zu erstellen, der ausgeführt wird, um stündlich Dateien aus diesem Ordner zu löschen.Antworten:
Bei der Recherche Ihrer Frage bin ich auf diese Technik gestoßen, die Ihnen in Zukunft helfen könnte.
Sie können anscheinend eine Datei im Verzeichnis wie folgt berühren:
Wenn Sie nun den Befehl
rm -fr *
in einem Verzeichnis ausführen, in dem das-i
vorhanden ist, wird die interaktive Eingabeaufforderung von angezeigtrm
.Das Gleiche kann erreicht werden, indem Sie einfach einen Alias an Ort und Stelle lassen, um dies
rm
immer zu tunrm -i
. Das kann nervig werden. Ich habe so oft gesehen, dass dieser Alias vorhanden ist und dann deaktiviert wird, wenn Sie wirklich löschen möchten, ohne dazu aufgefordert zu werden.Jetzt werden Sie in Verzeichnissen folgendermaßen begrüßt:
So überschreiben Sie den Alias:
Dies hört jedoch immer noch nicht auf
rm -fr
. Aber es bietet Ihnen einen gewissen Schutz.Verweise
quelle
--force
es wirklich ernst meint , wenn man etwas sagt .rm -I
(Großbuchstabeni
) in einem Alias nützlich sein können, da es etwas weniger aufdringlich ist (laut Manpage werden Sie nur aufgefordert, wenn Sie mehr als drei Dateien entfernen oder rekursiv).touch ./-i
Trick nur mit GNU funktioniertrm
und nur, wenn die Variable POSIXLY_CORRECT nicht festgelegt ist (POSIX-Befehle erkennen keine Optionen nach Argumenten).Viele Möglichkeiten:
alias rm='rm -i'
- rm wird fragen - es sei denn, Sie geben an-f
...chmod -w dir
- schützt Dateien direkt in diesem Verzeichnis.chattr +i
wenn du es wirklich so meinstAber ein besserer Weg ist wahrscheinlich, ein gutes Backup zu haben und wichtige Daten in einer Art Versionskontrolle (wie
git
) zu speichern , was auch viele andere Vorteile bringt.quelle
rm -i
aber wie zu erwarten ist, funktioniert es nicht mit-f
Option. Ich benutze Git für viele andere Zwecke, aber was ist, wenn ich es versehentlich auchrm -rf *
in Git mache ?Verwenden Sie eine Versionskontrollsoftware
git
, um Ihre Projekte zu kapseln.Solange Sie nicht ein ganzes Projekt löschen, müssen Sie absichtlich eingeben
rm -rf .*
, um das.git
Verzeichnis zu entfernen und alle für ein Rollback erforderlichen Daten zu verlieren.Dies hat den zusätzlichen Vorteil, dass Sie Backups Ihrer Daten auf einen Remote-Server wie Github oder Bitbucket übertragen können.
quelle
So
rm -rf dir
funktioniert es:dir
und der Inhalt aufgelistet.unlink
Sie ihn auf.Wenn Sie für die Verzeichnisliste zuerst einen speziellen Dateinamen zurückgeben könnten und wenn Sie einen Prozess, der eine
unlink
Datei ausführt, zum Erliegen bringen könnten , würde dies das Problem lösen. Dies könnte mit einem Sicherungsdateisystem erfolgen.Zum Beispiel könnten Sie das
loopback.pl
Beispiel aus dem Perl-Fuse-Modul anpassen, das nur ein Dummy-Dateisystem implementiert, das nur ein Durchgang zu einem realen Dateisystem darunter ist (siehe auch Patch unten):.{{do-not-delete}}.
, stellen Sie der Liste der Einträge zwei Dateien voran:.{{do-not-delete}}!error
und.{{do-not-delete}}!kill
unlink
ersten versuchen , geben Sie denEPERM
Code zurück, sodassrm
eine Fehlermeldung angezeigt wirdunlink
zweiten wird der Prozess abgebrochen.Hier ein Patch, der als Proof of Concept auf dieses
loopback.pl
Beispiel angewendet werden soll:quelle
Ich habe ein Skript erstellt, um diese Aufgabe zu vereinfachen. Das Shell-Skript ändert die Lese- / Schreibberechtigung und das Chattr-Flag einer bestimmten Ordnerliste interaktiv, ohne nach dem Root-Passwort zu fragen. Sie können die Zip-Datei über den unten angegebenen Link herunterladen.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
Ich habe auch ein Installationsskript beigefügt, um die Einrichtung zu vereinfachen. Anweisungen sind in der Zip-Datei enthalten.
quelle