Haben wir ein Undo in Linux?


Antworten:


53

Linux bietet (wie andere Unices auch) von Haus aus keine Funktion zum Rückgängigmachen. Die Philosophie ist, dass wenn es weg ist, es weg ist. Wenn es wichtig war, hätte es gesichert werden müssen.

Es gibt ein Fuse-Dateisystem, das Kopien alter Versionen automatisch aufbewahrt: copyfs , das in allen guten Distributionen verfügbar ist. Das kann natürlich eine Menge Ressourcen verbrauchen.

Der beste Schutz gegen solche Unfälle ist die Verwendung eines Versionskontrollsystems (cvs, bazaar, darcs, git, mercurial, subversion, ...). Das Erlernen dauert ein wenig, zahlt sich aber mittel- und langfristig aus.


1
Eine gute Alternative könnte Gitfs sein, das sich im Entwicklungsstadium befindet
test30

1
Nun, wenn Sie versehentlich eine Datei löschen oder überschreiben, die Sie noch nicht
bereitstellen

14

Unglücklicherweise nicht.


19
Ich weiß nicht, dass ich das für unglücklich halte ... Es würde einige Ressourcen erfordern, um ein Undo zu implementieren. Ich mag es nicht einmal, wenn die -iOption rmstandardmäßig aktiviert ist. Meine Unix-Systeme sollten meine Hand nicht halten.
Xenoterracide

5
-i ist standardmäßig aktiviert ?! Nicht meine Distribution, nicht mein Herr!
Stefan

9

Nein, es gibt in keinem Unix ein magisches Rückgängigmachen. Unix setzt voraus, dass Sie wissen, was Sie tun. Verwenden Sie zur Rückgängig-Unterstützung ein VCS (in Ihrem Texteditor ist es wahrscheinlich auch eingebaut).

Die meisten Dateisysteme können dies nicht transparent ausführen.

Time Machine und System Restore auf Mac bzw. Windows sind nur Sicherungs- / Änderungskontrollsysteme.


7

Es gibt kein Rückgängigmachen in der Befehlszeile. Sie können Befehle jedoch als rm -iund ausführen mv -i. Dies wird Sie mit einem "Sind Sie sicher?" Frage, bevor sie den Befehl ausführen.

Es ist auch möglich, einem Startskript einen Alias ​​dafür hinzuzufügen (z. B. ~/.bashrcoder /etc/bash.bashrc):

alias remove='rm -i'
alias move='mv -i'

Bearbeiten: Aufgrund der folgenden Vorschläge habe ich meinen Rat entfernt, die Standardbefehle als Alias ​​zu verwenden. Stattdessen werden jetzt neue Befehle eingeführt.


1
+1. nur um hier hinzuzufügen. Nachdem Sie die obigen Aliase festgelegt haben, können Sie in einigen Fällen mit \ rm und \ mv den Alias ​​umgehen, wenn Sie nur direkt entfernen möchten, ohne dass Sie dazu aufgefordert werden, sich sicher zu sein. Sie können auch die Option -f verwenden.
Hemant

2
mv -iFordert nur zum Überschreiben einer Datei auf (was sie nützlich und nicht unangenehm macht). In diesem Sinne alias cp='cp -i'.
Gilles 'SO - hör auf böse zu sein'

8
Das Aliasing von RM und MV ist eine sehr schlechte Idee. (rm ist von allen schlechter.) Gewöhnen Sie sich niemals an, rm als rm -i zu verwenden - Sie würden es irgendwann irgendwo verwenden, wo der Alias ​​nicht definiert ist und Sie werden etwas endgültig löschen. Wenn Sie dazu aufgefordert werden möchten, gewöhnen Sie sich an, immer rm -i zu verwenden.
Msakr

Wenn Sie dazu aufgefordert werden möchten, verwenden Sie einen Alias ​​unter einem anderen Namen. Ich verwende move = 'mv -i', copy = 'cp -i', symlink = 'ln -si' und installiere einen Papierkorbbefehl, der anstelle von rm verwendet wird. Ich benutze immer noch mv, cp und rm direkt beim Skripten, aber für die interaktive Verwendung sind diese Aliase praktisch.

@mahmoudsakr Du hast vollkommen recht, ich habe diesen Punkt verpasst. Ich habe diese Befehle auch nicht voreingenommen. Das Aliasing als ein anderer Befehl scheint die vernünftigste Option zu sein!
vdboor

4

Der Grund dafür, dass Linux / Unix-Systeme nicht wiederhergestellt werden können, liegt in der Art und Weise, wie die meisten Dateisysteme ihre Informationen speichern. Alle Datei-Metainformationen werden auf der Vorderseite der Festplatte mit Verweisen auf Inodes auf dem Rest der Festplatte gespeichert. In der Regel weisen die meisten Dateisysteme einer Datei in diesem Metabereich 10 Blöcke zu. Die ersten 7 beziehen sich auf die ersten 7 Inodes. Die 8. und 9. gehen zu Listen von Inodes (doppelt verknüpften Blöcken) und die 10. gehen zu Listen von Listen (dreifach verknüpften Blöcken). Dies variiert von Dateisystem zu Dateisystem (ext4, jfs, xfs usw.), aber diese Listen von Blöcken können normalerweise Dateigrößen von 2 GB bis zu mehreren TB adressieren.

Da all diese Informationen beim Löschen einer Datei auf der Vorderseite der Festplatte gespeichert werden, können Inodes auf der Festplatte nicht auf die Metadaten verweisen, zu denen sie gehören. Im Gegensatz dazu speichern FAT32 und NTFS tatsächlich einige Header-Informationen mit den Dateien selbst, wodurch leichter identifiziert werden kann, zu welcher Datei eine Gruppe von Blöcken gehört (solange dieser Speicherplatz noch nicht von neueren Dateien freigegeben wurde). In der Linux-Arbeit ist es fast immer das erste, was sofort mit neuen Daten überschrieben wird, wenn Sie etwas löschen.


2

Wenn Sie wirklich eine Funktion zum Rückgängigmachen möchten, verwenden Sie die Versionsverwaltung. Subversion funktioniert tatsächlich sehr gut auf einem Einzelplatzrechner. Ich verwende es, um alle meine persönlichen Dateien auf meinem Heimsystem zu kontrollieren. Es scheint übertrieben, bis eine Katastrophe, ein Schurken-Skript oder ein Tippfehler in der Befehlszeile eintreffen.


1
Es wird dich jedoch nicht davor schützen rm -r .. ;)
Umang

1
@Umang Ich hab das eigentlich mal mit git gemacht, wo ich ein lokales Repository habe und versehentlich rm -r project.git. Glücklicherweise, wenn Sie eine andere Version auf einem Remote-Server haben, ist es unwahrscheinlich, dass dies passiert
phunehehe

1
@phunehehe und wer auch immer hat mein Kommentar abgegeben: Wir sind zu sehr an DVCS gewöhnt, um zu erkennen, dass ich völlig falsch lag. SVN verpflichtet sich zum Repo (was nicht die Filiale ist). Sie sind also tatsächlich geschützt rm -r .. Wirklich dumm von mir.
Umang

2

Eine Sache, die ich gerne zu meinem .bashrc hinzufüge, ist eine Funktion zum Kopieren und Entfernen. So etwas wie:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

Aber Sie müssen sich angewöhnen, cprm nicht rm zu tippen.

Offensichtlich müssen Sie den gelöschten Bereich im Auge behalten, wenn Sie nur über begrenzten Speicherplatz verfügen.


4
Sie könnten das wirklich verkürzen, um $ 1 ~ / gelöscht / $ 1
Stefan

ja, und es wird eine Datei ‚neues Dokument 1‘ mit einem anderen ‚neuem Dokument 1‘ überschreibt, wenn Sie die Angabe richtig machen: "$1".
Benutzer unbekannt

@userunknown: meinst du $ 1 in Deanos und Stefans Code sollte mit "$ 1" angegeben werden?
Tim

@ Tim: Ja, das tue ich.
Benutzer unbekannt

Warum nicht statt cp und rm umziehen?
user1559897

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.