Ich habe mich gefragt, ob es eine (einfache) Möglichkeit gibt, einen in der Bash-Shell ausgeführten Befehl zu wiederholen / rückgängig zu machen. (um es rückgängig zu machen)
Gibt es etwas Ähnliches wie die Kombination ctrl+ z, um eine Aktion zu wiederholen (zum Beispiel in Word oder LibreOffice)?
command-line
Fraenzine
quelle
quelle
undo
Befehl hilfreich, um ein aktuelles Backup des gesamten Betriebssystems zu erstellen. Wenn etwas schief geht, stellen Sie einfach den vorherigen Zustand wieder her. Schauen Sie sich zum Beispiel rsnapshot anshutdown
Befehl rückgängig machen lol .. kann nicht glauben, dass solche Fragen auch 8 Upvotes an einem Tag bekommen können !!Antworten:
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 voncp
istrm
, 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ßtrm
, 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 Distributionenls
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
oderlxc
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 sieecho
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.
quelle
Nein, es gibt kein "Rückgängigmachen" in Bash, sorry. Aus diesem Grund sollten Sie Ihre Befehle überprüfen oder sie zuerst an unwichtigen Dateien testen (sofern dies möglich ist). Und dreifach überprüfen, ob Sie Dinge als root tun;)
quelle
rm
, ist die Datei weg, sie ist vergangen, sie ist verstorben, sie ist nicht mehr vorhanden, sie ist eine Ex-Datei (Monty Python-Warnung). Jetzt weinen seine Verwandten in Trauer, und Sie können Ihre Tat nicht rückgängig machen. Sie machen die Eingabe oder das Löschen von Zeichen rückgängig, und ich vermute, dass dies eine Funktion Ihres Terminal-Emulators ist. Ich habe es gerade in Terminator ausprobiert und es funktioniert. Das Wechseln zu einer anderen Konsole (in meinem Fall Strg + Alt + F1) funktioniert nicht.Nein, es gibt kein generisches Rückgängigmachen, aber einige Konsequenzen sind reversibler als andere. Nehmen wir zum Beispiel
rm
: Es wird im Wesentlichen zu zwei Zwecken verwendet - um Unordnung zu vermeiden und Speicherplatz für neue Dateien freizugeben. Mit etwas Glück können Sie den Inhalt der Datei mit Tools wie abrufenextundelete
, da beim Ausführen nur der Zeiger auf den Dateianfang überschrieben wirdrm
. Der Inhalt wird überschrieben, wenn das Betriebssystem diesen Speicherplatz erneut verwendet (was Millisekunden oder Jahre später passieren kann). Aufgrund dieser Funktionalitätrm
fällt in die Mitte einer Skala von Systemen, die mehr oder weniger destruktiv sind. Einerseits gibt es MüllSysteme, mit denen Unordnung vermieden werden kann, ohne dass die Gefahr besteht, dass die Daten sofort verloren gehen (da das Rückgängigmachen trivial ist). Noch konservativer ist es , einmal zu schreiben, viele ("WORM") Systeme zu lesen , bei denen die Daten nicht nach Belieben gelöscht oder überschrieben werden können, indem das System darauf schreibt. Am anderen Ende der Skala wird Zerkleinerungssysteme, die Überschreibungsdatei Inhalt ( in der Regel mehrmals) zusätzlich zu dem Zeiger. Zu diesem Zeitpunkt ist die Technologie zum Wiederherstellen Ihrer Daten wahrscheinlich noch nicht einmal vorhanden (und möglicherweise nie vorhanden).Sie können also sehen, dass das am häufigsten verwendete Tool (
rm
) nicht die einzige Alternative ist, aber es bietet einen Kompromiss, mit dem sich die meisten Leute wohl fühlen:Wenn die Kompromisse, die Ihre Werkzeuge eingehen, für Sie inakzeptabel sind, schauen Sie sich um. Die Chancen sind , gibt es Tools gibt , die die Entscheidungen treffen , die das Richtige für sind Sie .
quelle
Anwendungen, die eine Funktion zum Rückgängigmachen bereitstellen, führen dazu einen Verlauf der durchgeführten Aktionen und entweder eine Methode zum Umkehren der Aktion oder eine Momentaufnahme des Status eines Objekts, um einen vorherigen Status wiederherzustellen. Befehle, die in einer Shell ausgeführt werden, führen direkte Aktionen aus oder führen Befehle aus, um Aktionen auszuführen.
Die Shell selbst wäre nicht in der Lage, die aus einem ausgeführten Befehl oder Programm resultierenden Aktionen rückgängig zu machen. Wenn der Befehl oder das Programm eine Historie unterhält und eine Undo-Funktion hat, könnte dies möglicherweise verwendet werden, aber die Shell selbst kann dies nicht.
Wenn Sie beispielsweise ausführen
rm important_file.txt
, wird der Dateisystemtreiber angewiesen, die Verknüpfung der Datei im Dateisystem aufzuheben. Die Shell führt die Aktion nicht aus, sondern ruft nur auf,rm
was der Fall ist.Wenn Sie eine verlorene Datei wiederherstellen möchten, können Sie dies möglicherweise tun, da das Löschen der Datei in der Regel diese nicht tatsächlich entfernt, sondern nur den Verweis darauf entfernt. Nach einiger Zeit wird der Inhalt der Datei überschrieben, wenn andere Daten auf der Festplatte gespeichert werden. Die ursprüngliche Datei kann jedoch für eine Weile mithilfe von Dienstprogrammen wiederhergestellt werden, die sie finden und erneut verknüpfen können.
quelle
Nein, das gibt es nicht, aber wenn Sie beispielsweise mit einem Verzeichnis mit Root-Rechten herumgespielt und etwas vermasselt haben, ist es am besten, alle Dateien, die Sie können, auf einem USB-Laufwerk oder einer SD-Karte zu speichern und Ihr Betriebssystem von dort zurückzusetzen die ISO-Datei (wenn Sie sie noch haben, wenn nicht, können Sie eine andere offline schalten ...). Wenn Sie etwas gelöscht Sie können, wie wraeth sagte, eine Anwendung herunterladen , die Dateidaten an den Dateinamen erneut zu verknüpfen und die Dateien haben Inhalte gespeichert (siehe diese Frage hier ). Können Sie uns für eine genauere Antwort sagen, was Sie falsch gemacht haben?
quelle
Ich werde nicht wiederholen, was andere gesagt haben, aber ich kann sehen, woher Sie kommen. Mein Standardansatz bei der Ausführung "gefährlicher" Befehle war immer, sie zu wiederholen, um zu prüfen, ob alle Variablen richtig erweitert wurden oder nicht. Wenn Sie bestimmte Beispiele nennen können, können wir Ihnen möglicherweise weiterhelfen.
Zum Beispiel in einer Situation wie:
quelle
Wie andere gute Antworten sagten: Es gibt kein "Rückgängigmachen" in der Shell. In Ihrem speziellen Anwendungsfall können Sie zum Rückgängigmachen eines
shutdown
Vorgangs das Herunterfahren abbrechen: siehe /programming//a/526330quelle