Sie sollten verstehen, dass dies bash
nur eine Ausführungsumgebung ist. Es führt Befehle aus, die Sie aufrufen - es ist nicht Sache der Shell, auch nur zu wissen, was der Befehl tut, sondern Sie können jede beliebige ausführbare Datei aufrufen, die Sie möchten. In den meisten Fällen ist nicht einmal klar, was ein Rückgängigmachen bewirken würde - können Sie beispielsweise einen Film "unplayen"? Können Sie eine E-Mail "abschicken"? Was würde "Firefox rückgängig machen" zum Beispiel bedeuten? Sie können es schließen, aber Lesezeichen, Downloads und Verlauf stimmen nicht überein.
Wenn Sie einen Befehl ausführen, wird er ausgeführt, unabhängig davon, was er tut. Es liegt an Ihnen zu wissen, was Sie tun. Beachten Sie, dass dies nicht bedeutet, dass einzelne Befehle nicht rückgängig gemacht werden können. Sie können sogar eine Wrapper-Funktion schreiben, die Sie vor dummen Fehlern schützt.
Zum Beispiel mv
ist es einfach umzukehren, indem Sie die Datei einfach dorthin verschieben, wo sie herkommt, es sei denn, Sie haben etwas überschrieben. Deshalb gibt es einen -i
Schalter, um Sie vor dem Überschreiben zu fragen. Technisch Inverse von cp
ist rm
, es sei denn , etwas überschrieben wurde (wieder -i
fragt man darüber). rm
ist dauerhafter, um zu versuchen, die Dateien wieder zu bekommen, müssen Sie tatsächlich ein bisschen Hacking auf niedrigerer Ebene durchführen (es gibt Tools dafür). Wenn Sie das Dateisystem als Black-Box betrachten, wäre es technisch überhaupt nicht möglich (nur die Details des logischen und physischen Layouts der Daten ermöglichen eine gewisse Schadensbegrenzung). rm
Das heißt rm
, wenn Sie "Müll" -Funktionalität wollen, ist das eigentlich nurmv
in ein vorab festgelegtes Verzeichnis (und möglicherweise einen geplanten Dienst, um es zu pflegen oder zu leeren) - nichts Besonderes. Sie können jedoch dazu verwenden -i
, Sie vor dem Löschen aufzufordern. Sie können eine Funktion oder einen Alias verwenden, um -i
diese Befehle immer einzuschließen.
Beachten Sie, dass die meisten Anwendungen Sie auf unterschiedliche Weise vor Datenverlust schützen. Die meisten (~ alle) Texteditoren erstellen ~
am Ende Sicherungsdateien, falls Sie die alte Version wiederherstellen möchten. In einigen Distributionen ls
ist der Alias standardmäßig so eingestellt, dass sie ausgeblendet werden ( -B
), aber sie sind vorhanden. Ein Großteil des Schutzes wird durch die ordnungsgemäße Verwaltung von Berechtigungen gewährleistet: Seien Sie nicht root, es sei denn, Sie müssen es sein. Machen Sie Dateien schreibgeschützt, wenn Sie nicht möchten, dass sie geändert werden. Manchmal ist es nützlich, eine "Sandbox" -Umgebung zu haben - Sie führen Dinge auf einer Kopie aus, prüfen, ob es in Ordnung ist, und führen die Änderungen dann zusammen (oder verwerfen sie). chroot
oder lxc
kann verhindern, dass Ihre Skripte aus einem Verzeichnis entkommen und Schaden anrichten.
Wenn Sie versuchen, Dinge in großen Mengen auszuführen - zum Beispiel, wenn Sie einen komplexen Suchbefehl, eine while-Schleife, eine lange Pipeline oder ähnliches haben, ist es eine gute Idee, zuerst nur echo
die Befehle auszuführen, die ausgeführt werden. Wenn die Befehle dann vernünftig aussehen, entfernen Sie sie echo
und führen Sie sie real aus. Und natürlich, wenn Sie sich nicht sicher sind, was Sie tun, machen Sie zuerst eine Kopie. Manchmal erstelle ich einfach ein Tarball des aktuellen Verzeichnisses.
Apropos Tarballs - Tarbombs und Zipbombs sind leider weit verbreitet (wenn Leute ein Archiv ohne richtiges Unterverzeichnis erstellen und beim Entpacken die Dateien verstreut werden, entsteht ein riesiges Durcheinander). Ich habe mich daran gewöhnt, vor dem Auspacken selbst ein Unterverzeichnis anzulegen (ich könnte den Inhalt auflisten, bin aber faul). Ich denke darüber nach, ein Skript zu erstellen, das nur dann ein Unterverzeichnis erstellt, wenn der Inhalt ohne Unterverzeichnis archiviert wurde. Aber wenn es passiert, ls -lrt
hilft es, die neuesten Dateien zu finden, um sie dort abzulegen, wo sie hingehören. Ich habe dies nur als Beispiel angeführt - ein Programm kann viele Nebenwirkungen haben, von denen die Shell nichts zu wissen vermag (wie könnte es sein? Es wird ein anderes Programm aufgerufen!) zweimal laufen).
Möglicherweise sind die gefährlichsten Befehle diejenigen, die sich mit dem Dateisystem befassen: mkfs, fdisk / gdisk und so weiter. Sie können das Dateisystem vollständig zerstören (obwohl mit geeigneter forensischer Software zumindest ein teilweises Reverse Engineering möglich ist). Überprüfen Sie immer das zu formatierende Gerät und die korrekte Partitionierung, bevor Sie den Befehl ausführen.