Wie oft ist es einem schon passiert: „rm -rf *“ und schon sind die Dateien futsch. Gegen diese Wildcard-Killer ist jedoch ein Filesystem-Kraut gewachsen: Die „-i“ Datei. Wie funktioniert es?
Die Shell löst beim „*“ alle Dateien des aktuellen Verzeichnisses auf, dann wird die Argumentenliste an den „rm“-Befehl weitergeleitet. Die erste Datei heißt wird dabei nach „-i“ aufgelöst, was für das „rm“-Kommando interaktives Löschen bedeutet. Eine solche Datei im Root- und im Home-Verzeichnis schützt vor so manchem Datenverlusst.
Eine solche „-i“-Datei lässt sich jedoch nicht so einfach erzeugen. Zum Beispiel „touch -i“ funktioniert nicht. Man kann die Datei aber über „touch ./-i“ anlegen und über „rm ./-i“ löschen.
Oder einfach ein:
alias rm=’rm -I –preserve-root‘
http://explainshell.com/explain?cmd=rm+-I+–preserve-root
Der Alias ist auch eine gute Idee, hat aber einige Probleme. Bei externen Datenträgern, die zwischen verschiedenen Rechnern bzw. Usern geteilt werden, funktioniert das so nicht. Zusätzlich muss man darauf achten bei Skripten diesen Alias auszunehmen, denn da möchte man ja eben nur in Ausnahmefällen eine interaktive Aufforderung. Danke übrigens für den Link auf explainshell.com – das kannte ich noch nicht 🙂
man chattr
Ist mir bekannt, geht aber nur mit Dateisystemen, die Attribute in der Art unterstützen. Oftmals ist das Ändern der Dateiattribute auch nicht gewünscht. Das -i ist aus meiner Sicht ein wirksamer Wildcard-Schutz. Selbstverständlich funktioniert dies nur bei Kommandos, die auch einen -i aka Interactive-Switch besitzen. Also alles sehr einsatzspezifisch, aber nicht weniger praktisch. 🙂