Machen Sie den Linux-Papierkorbbefehl rückgängig

23237
cdb

Können Operationen in einem Terminal rückgängig gemacht werden, z. B. das Löschen von Dateien rm?

Erhaltene Lösungen:

  1. Aliasing
  2. Hilfsprogramme wiederherstellen
  3. Sicherungsprogramme
  4. LibTrash
  5. Versionierung (FUSE)
23
On `rm`: It *unlinks* a file from it's `inode`. The question: "Where do files go when the `rm`command is issued" -> http://unix.stackexchange.com/questions/10883/where-do-files-go-when-the-rm-command-is-issued might also be a good read for you. erch vor 10 Jahren 1

12 Antworten auf die Frage

61
John T

Es gibt kein generelles "Rückgängigmachen" für jede Operation im Terminal. Wenn Sie eine Datei nach der Verwendung wiederherstellen möchten, rmmüssen Sie sich die Wiederherstellungssoftware ansehen.

Um zukünftige Fehler zu vermeiden, können Sie aliasalternative Befehle zum Entfernen von Dateien verwenden. Fügen Sie sie Ihrem hinzu ~/.bashrcund gewöhnen Sie sich an, sie anstelle von zu verwenden rm.

  1. alias rmi = 'rm -i'

    Wenn Sie verwenden rmi, werden Sie zur Bestätigung zukünftiger Löschvorgänge aufgefordert. Vermeiden Sie es, die Gewohnheit zu entwickeln, yunmittelbar nach dem Erteilen eines rmiBefehls zu drücken, da dies den Zweck verfehlt.

  2. Sie können auch Dateien löschen, die mit dem trshBefehl im Terminal in den Papierkorb (auf KDE und Gnome) gelöscht wurden :

    alias trsh='mv --target-directory="$HOME/.Trash"' 

    Wenn Sie verwenden trsh, haben Sie eine begrenzte "undelete" Funktion. Hüte dich vor dem

    trsh dir1/file1 dir2/file1 

    kann immer noch einen nicht wiederherstellbaren Datenverlust verursachen.

+1 für eine viel bessere Antwort als meine =) The How-To Geek vor 15 Jahren 3
Der zweite Alias ​​ist sehr, sehr klug. +1. LiraNuna vor 15 Jahren 9
Wie machst du das auf einem Mac? ~. / Papierkorb ist der Papierkorb, aber mv hat nicht den Zielverzeichnis-Schalter ... Rich Bradshaw vor 15 Jahren 0
@Rich: Sie können eine Funktion definieren: rm () mouviciel vor 15 Jahren 1
Papierkorb () # bash-Funktion, kein Alias. Das erwartete Verhalten von rm zu ändern, ist meiner Meinung nach eine schlechte Idee. Richard Hoskins vor 15 Jahren 3
Ja, ich hätte rm nicht überladen - ich denke, das unterstützt -r oder -f nicht, also ist es nicht identisch. Rich Bradshaw vor 15 Jahren 0
Das Aliasing von "rm" in "rm -i" ist das Risiko, dass Sie sich an das Sicherheitsnetz gewöhnen, das Sie erhalten. Dann gehst du auf einen anderen Rechner, der diesen Alias ​​nicht hat ... Dentrasi vor 15 Jahren 19
Aus den Gründen, die Richard und Dentrasi erwähnen, ziehe ich es vor, eine benutzerdefinierte Funktion oder den Alias ​​"rmi" -> "rm -i" zu erstellen. Es ist wirklich ein Fehler, einem bestehenden Programm einfach durch Aliasing im Weg zu stehen. Telemachus vor 15 Jahren 3
Ich würde Aliasing von 'rm' nicht als sichere oder gute Lösung empfehlen, besonders nicht als Alias ​​für 'mv'. Es fördert nur die falsche Sicherheit. Was passiert Ihrer Meinung nach, wenn Sie `file1` in` dir1` und dann `file1` in` dir2` löschen? Es würde auch nicht für Leute (oder Skripte) wie mich funktionieren, die gewohnt sind, `\ command 'anstelle von` command' auszuführen. Sie sollten die Verwendung eines Befehls wie "trsh" / "Papierkorb" oder "rm" explizit empfehlen, wenn eine undelete-Funktion erforderlich ist. nagul vor 15 Jahren 1
Die Leute scheinen über das Aliasing ein wenig nervös zu sein. Wenn ich ein anderes Personen-System verwende, ist das erste, woran ich denke, dass alle meine kleinen Programme und Verknüpfungen weg sind, daher ist es für mich nicht wirklich ein Problem. Aber ich werde bearbeiten. John T vor 15 Jahren 2
@John: keine große Sache, aber wenn man sagt, wir seien "nervös", klingen wir wie verlorene Touristen. Wir sind mit Ihrer ursprünglichen Methode nicht einverstanden und haben Gründe dafür angegeben. Es gibt keinen Nervenkitzel. (Das heißt, ich habe mein Downvote entfernt, da Sie zu rmi gewechselt haben. Vielen Dank, dass Sie die Kommentare ernsthaft in Betracht gezogen haben.) Telemachus vor 15 Jahren 1
@John: Danke für die Bearbeitung. Es wird hoffentlich Leute in die richtige Richtung schubsen. +1 von mir. nagul vor 15 Jahren 0
Ich würde 'rm -i' auch nicht empfehlen, nicht wegen anderer Systeme, sondern einfach weil es Sie trainiert, 'y' wirklich schnell zu treffen, nachdem Sie `rm 'aufgerufen haben. Daher bietet es keine zusätzliche Sicherheit, da Sie meistens erst nach dem Drücken von "y" feststellen, dass dies keine so gute Idee war. Grumbel vor 15 Jahren 1
Ich bin hier bei Grumbel: Vermeiden Sie den Alias ​​'rm -i', da Sie schnell die Gewohnheit entwickeln werden, 'y' zu drücken. Die Trash () - Funktion ist wesentlich intelligenter. Ich habe mein / tmp als tmpfs (ramdrive) gemountet .. also zeige ich meinen Papierkorb () auf / temp. Wenn ich einen Fehler gemacht habe, kann ich ihn wiederherstellen. Wenn nicht, wird der nächste Neustart alles wegwischen. es gibt eine Größenbegrenzung für das, was in diese "trächtigen" nachdrücklich passt :) akira vor 15 Jahren 0
Ich habe immer rm, mv und cp-Alias, um -i hinzuzufügen. Es ist für mv und cp am nützlichsten, da Sie normalerweise nichts damit anfangen wollen. Gewöhnen Sie sich nie daran, rm * zu laufen und antworten Sie mit Ja / Nein. Wie andere gesagt haben, wird dieses Sicherheitsnetz eines Tages nicht da sein und Sie werden es bereuen. Peter Cordes vor 14 Jahren 1
6
The How-To Geek

Es gibt keinen Papierkorb für die Befehlszeile.

Sie können einige der verschiedenen undelete-Dienstprogramme ausprobieren, es gibt jedoch keine Garantie, dass sie funktionieren.

Ja, es gibt einen Papierkorb für die Befehlszeile. Trash-cli in einer anderen Antwort. Sparhawk vor 10 Jahren 0
Trash-cli ist so gut :) und verwendet Trashlib, besser als das Verschieben von Dateien. erm3nda vor 8 Jahren 0
5
joe

Sie können trash-cli verwenden, wenn Sie KDE verwenden, wenn Sie eine GUI ausführen. Dies ist ein Befehlszeilenprogramm zum Löschen / Wiederherstellen mithilfe der KDE-Papierkorbfunktionen.

trash-cli funktioniert auch mit GNOME-Papierkorb und bietet Kompatibilität für RM-Optionen (für das Aliasing). Andrea Francia vor 14 Jahren 1
Vergessen Sie nicht "alias rm = trash", damit Ihre typischen Befehlszeilenverschraubungen mit Rückgängig-Schaltflächen geliefert werden. Ryan Thompson vor 14 Jahren 0
Ich denke, 'alias rm = trash' ist potentiell gefährlich. Wenn Sie eine Chance haben, werden Sie eines Tages das System eines anderen verwenden und vergessen (oder ssh). Viel sicherer, sich an das Schreiben von "Papierkorb" statt "rm" zu gewöhnen. Sparhawk vor 10 Jahren 0
4
Alvin Row

Sie können rmeinen Alias ​​für den trashBefehl erstellen (Sie müssen trashzuerst installieren .) Fügen Sie Folgendes hinzu ~/.bashrc:

alias rm='trash' 

Dies ist vorzuziehen, alias rm='mv --target-directory=$HOME/.Trash'da ~ / .Trash NICHT der Papierkorbordner für gnome ist. Es ist IMHO besser zu wissen trash, wo sich der eigentliche Papierkorb befindet.

Übrigens hätte ich dies in einem Kommentar gepostet, aber ich habe nicht genügend Vertreter.

+1 für "da ~ / .Trash NICHT der Papierkorbordner für gnome ist." Rm sollte jedoch auch nicht in den Papierkorb verschoben werden. Sie sollten nur Müll anstelle von rm verwenden, wenn Sie das wollen. nagul vor 15 Jahren 5
Richtig, aber für manche Menschen sterben alte Gewohnheiten schwer. Alvin Row vor 15 Jahren 0
'rmtrash' ist eine weitere Option. Itachi vor 9 Jahren 0
3
Telemachus

Es gibt eine größere Frage, die es wert ist, angesprochen zu werden. Shell-Befehle sind nicht gesprächig (sie prüfen nicht, was Sie wollen) und erwarten, dass Sie wissen, was Sie tun. Dies ist von grundlegender Bedeutung für deren Gestaltung . Es ist eine Funktion, kein Fehler.

Manche Leute empfinden Macho, wenn sie solche Befehle verwenden, was ich ziemlich dumm finde, aber es ist wichtig, die Gefahren zu verstehen. In einem Terminal können Sie erheblichen Schaden anrichten, auch wenn Sie nicht root sind. Ich glaube, Sie haben sich wahrscheinlich wirklich nur darum gekümmert rm, aber da Sie sagten "Können wir die im Terminal durchgeführten Operationen rückgängig machen", war dies meiner Meinung nach wert. Die allgemeine Antwort ist nein, das kannst du nicht.

3
joschi

Zwei weitere technische Lösungen sind noch nicht genannt worden:

  1. libtrash : Eine dynamische Bibliothek, die in Ihrer Shell vorab geladen werden kann, die das Löschen / Entfernen von Systemaufrufen abfängt und die Dateien stattdessen in einen Papierkorbordner verschiebt (ähnlich wie ein Alias, funktioniert jedoch bei jeder Anwendung, wenn er vorab geladen wird).
  2. Ein Versionierungsdateisystem. Wenn Sie eine Datei löschen (oder bearbeiten, kopieren oder ...), können Sie einfach den alten Zustand wiederherstellen. Dies kann mit einem FUSE- Dateisystem und einem seiner Versionierungs-Dateisysteme erfolgen .
2
Aaaaaaaaaha ERLEBNIS

Option 1: Siehe Linux-Dateien von einem ext2-Dateisystem wiederherstellen . Diese Seite verweist auf ein Programm, das von Sebastian Hetze von der Firma LunetIX geschrieben wurde, das (wie der Titel vermuten lässt) kürzlich gelöschte Dateien aus einem ext2-Dateisystem löscht. Verwendungsbeispiel:

# undelete -d /dev/hdc3 -a 10 

Warnungen:

  • Die ursprüngliche Website ist weg. Der Link oben bezieht sich auf das Internetarchiv.
  • Die Website (s) befinden sich in einer Mischung aus Englisch und Deutsch.
  • Wie bereits erwähnt, ist das Tool speziell für das ext2-Dateisystem konzipiert. Es ist unwahrscheinlich, dass Sie mit einem anderen Dateisystemtyp arbeiten. insbesondere nicht diejenigen, die nicht ext N .

Option 2: Ich habe auf meinem Rechner rsnapshot (rsync) ausgeführt, wodurch stündliche Momentaufnahmen meiner ausgewählten Ordner erstellt werden. Dies geschieht schrittweise jede Stunde, 2 Stunden oder was immer Sie CRON sagen lassen. Nach einem ganzen Tag werden diese Schnappschüsse in einen täglichen Schnappschuss und nach 7 Tagen in einer Woche usw. wiederverwendet. Dadurch kann ich etwa einen Monat für jede Stunde in der Zeit zurückkehren! Es ist ziemlich gut mit Festplattenspeicher, da es symbolische Links zu Dateien erstellt, die sich nie geändert haben ...

Nur um zu klären, ist # 1 spezifisch für ext2-Dateisysteme. Es würde auf einem ext3-Dateisystem nicht funktionieren. nagul vor 15 Jahren 0
1
cdb

Wiederherstellen mit grep on /dev/partition( Linux oder Unix gelöschte Dateien wiederherstellen - Dateien wiederherstellen ),

grep -b 'search-text' /dev/partition > file.txt 

Einfach mal probieren.

1
Grumbel

Es gibt Undelete-Dienstprogramme für ext2, aber die meisten anderen Linux-Dateisysteme stecken in der Steinzeit und verfügen nicht über erweiterte Usability-Funktionen. Trauriger Zustand bei gigantischen Laufwerken mit genügend Speicherplatz, um eine Datei nie wieder zu löschen, ist alltäglich.

Sie haben also drei Optionen:

  1. Führen Sie regelmäßig Sicherungen durch, zum Beispiel mit einem Befehl wie:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Verwenden Sie ein Versionskontrollwerkzeug, z. B. gitfür Ihre gesamte Arbeit. Dies schützt zwar nicht vor einem Wahnsinnigen rm -r, der das Repository tötet, schützt es jedoch vor regelmäßigen Problemen, da Sie git rmnicht roh verwenden werden rm.

  3. Seien Sie besonders vorsichtig und nicht zu viel Vertrauen in rm -i, trash-cliund Freunde, da die meisten Daten, die Sie auf der Shell verlieren Sie durch versehentliches nicht verlieren rm, sondern durch falsch adressierte Rohre, vertippte Ausgabedateien, falsch adressierte mvund Sachen, also Dinge, die überschreibt Ihre Daten nicht nur löschen.

Alle drei für maximale Sicherheit tun.

Es ist ziemlich komisch, ext2 modern zu nennen. Die neueren Dateisysteme verwenden kompliziertere Festplattenformate als ext2 / 3 und mussten einfach zu findende Speicherorte aufgeben, an denen Sie Dateien finden können, die gelöscht werden sollen. Sie sind für Menschen gedacht, die Backups von Dingen machen, die ihnen wichtig sind. Übrigens, ich verwende immer mv und cp -i, da ich normalerweise nichts aufräumen möchte. Normalerweise tippe ich \ rm, weil ich auch rm -i als Alias ​​verwendet habe, aber ich möchte die Frage nicht beantworten. Peter Cordes vor 14 Jahren 0
0
a14m

Überprüfen Sie dies ... Migh be help http://artmees.github.io/rm/

Angenommen, du hast es getan

rm very_important_file 

vom Terminal aus. Das Wiederherstellen dieser Datei ist ein langwieriger und nicht immer erfolgreicher Prozess

stattdessen, wenn Sie das erwähnte Skript verwendet haben. Sie müssen sich nicht darum kümmern, weil

rm very_important_file mv very_important_file ~/.Trash/ 

sind gleichwertig. Das Skript verarbeitet mehr Fälle und ändert Ihr System rmin keiner Weise. Dies liegt daran, dass es in den lokalen Ordner des Benutzers abgelegt wird, so dass es die System-RM spiegelt und es nicht beeinflusst oder die Verwendung deaktiviert

Dies ist ein weiterentwickelter Aliasing-Ansatz, ohne dabei ein Feature zu verlieren

Es wäre gut, wenn Sie erklären könnten, was dies bedeutet und wie es auf die Frage zutrifft, vielleicht ein Beispiel hinzufügen usw. slhck vor 10 Jahren 1