Diese Frage bezieht sich auf Wie kann man gelöschte Dateien wiederherstellen? aber es ist etwas anders in der Natur.
Angenommen, ich habe eine Datei namens ~/something
in einem Texteditor öffnen. Angenommen, ich öffne ein Terminal und führe den folgenden Befehl aus, während die Datei noch im Texteditor geöffnet ist:
rm ~/something
Dadurch wird die Datei gelöscht. Nehmen wir nun an, ich hätte meine Meinung geändert und wollte die Datei zurückbekommen. Die Datei ist immer noch im Texteditor geöffnet, sie wurde also noch nicht von der Festplatte oder dem Dateisystem entfernt .
Gibt es eine Möglichkeit, es wiederherzustellen?
Akzeptierte Antwort:
Ich weiß nicht, ob es Texteditoren gibt, die die Datei geöffnet lassen, während Sie sie bearbeiten. Normalerweise (d.h. in Emacs) wird die Datei in einen Puffer im RAM gelesen und dann wird die Datei geschlossen. Sie bearbeiten nur im RAM. Wenn Sie den Puffer speichern, wird die Datei geöffnet, geschrieben und wieder geschlossen. Sie können ps auxw | grep your_editor
um die PID Ihres Editors zu finden, dann lsof -p your_PID
um die noch offenen Dateien zu sehen.
Befindet sich die Datei hingegen noch im Puffer Ihres Editors, können Sie sie einfach speichern.
Aber das war nicht Ihre Frage, also nehmen wir an, Sie verwenden cat
als Ihr Editor, und die Datei ist wirklich noch offen:
% cat >the_file.txt
Hello world!
^Z
zsh: suspended cat > the_file.txt
% rm the_file.txt
% ls -l the_file.txt
ls: cannot access the_file.txt: No such file or directory
Sie können lsof -n
verwenden um alle geöffneten Dateien zu sehen und grep
um nach Ihrem Dateinamen zu suchen.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
In der zweiten Spalte sehen Sie die PID Ihrer cat
Befehl. Sie können in das entsprechende Verzeichnis im /proc-Dateisystem und in den fd
wechseln (Dateideskriptor) Unterverzeichnis:
% cd /proc/2145/fd
% ls -l
total 0
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 0 -> /dev/pts/4
l-wx------ 1 elmicha elmicha 64 2012-11-07 00:22 1 -> /home/elmicha/tmp/the_file.txt (deleted)
lr-x------ 1 elmicha elmicha 64 2012-11-07 00:22 15 -> /proc/4501/auxv
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 2 -> /dev/pts/4
Jetzt können Sie einfach die „Datei“ 1
kopieren in eine andere Datei:
% cp 1 ~/tmp/the_old_file.txt
Und siehe da, es ist da:
% cat ~/tmp/the_old_file.txt
Hello world!