Gibt es eine Möglichkeit, eine Datei wiederherzustellen, die ich gelöscht habe, die aber noch irgendwo geöffnet ist?

7

Diese Frage bezieht sich auf Wie werden gelöschte Dateien wiederhergestellt? aber es ist etwas anders in der Natur.

Angenommen, ich habe eine Datei mit dem Namen ~/somethingopen in einem Texteditor. 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. Angenommen, ich habe meine Meinung geändert und wollte die Datei zurückbekommen. Die Datei ist im Texteditor noch geöffnet, sodass sie noch nicht von der Festplatte oder dem Dateisystem entfernt wurde .

Gibt es eine Möglichkeit, es wiederherzustellen?

Nathan Osman
quelle
1
Wenn die Datei im Texteditor noch geöffnet ist, können Sie sie einfach ändern und speichern. Auf diese Weise werden Sie dazu aufgefordert und können sie speichern oder "Speichern unter" verwenden. Nur ein Gedanke.
Nitin Venkatesh
3
Ja, die Frage ist sehr interessant, aber das Beispiel ist nicht gut - zum einen glaube ich nicht, dass ein Texteditor die Datei offen hält (wie im "Low-Level-Dateihandle"), während der Text im Editor angezeigt wird. Wahrscheinlicher ist es beim Laden Open-Read-Close und beim Speichern Open-Write-Close. Und wie @nitstorm sagte, können Sie einfach die Funktion Speichern unter verwenden. Vielleicht ist das Abspielen einer Videodatei in einem Videoplayer ein besseres Beispiel ...
Sergey
@ Sergey: Du hast recht - es war wahrscheinlich kein sehr gutes Beispiel.
Nathan Osman

Antworten:

9

Ich weiß nicht, ob es Texteditoren gibt, die die Datei geöffnet halten, während Sie sie bearbeiten. Normalerweise (dh in Emacs) wird die Datei in einen Puffer im RAM eingelesen und dann 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_editordie PID Ihres Editors ermitteln und dann lsof -p your_PIDdie noch geöffneten Dateien anzeigen.

Wenn sich die Datei jedoch noch im Puffer Ihres Editors befindet, können Sie sie einfach speichern.

Aber das war nicht Ihre Frage. Stellen Sie sich also vor, Sie verwenden sie catals Editor, und die Datei ist 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 -nalle geöffneten Dateien anzeigen und grepnach Ihrem Dateinamen 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 Ihres catBefehls. Sie können in das entsprechende Verzeichnis im Dateisystem / proc und in das fdUnterverzeichnis (Dateideskriptor) wechseln:

% 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 die "Datei" einfach 1in eine andere Datei kopieren :

% cp 1 ~/tmp/the_old_file.txt

Und sehen Sie, es ist da:

% cat ~/tmp/the_old_file.txt
Hello world!
Elmicha
quelle
0

Speichern Sie einfach die Datei im Texteditor. Sollte sehr gut funktionieren.

Übrigens werden Sie häufig mit der Meldung "Nicht gespeichert speichern?" Aufgefordert, wenn Sie die Datei noch in einem Editor geöffnet haben und versuchen, das Fenster zu schließen, da der Texteditor auch bemerkt, dass die Datei gelöscht wurde und derzeit "nicht gespeichert" ist «(Zumindest an diesem Ort).

(Nitstorm, bitte benutze die Kommentare nicht für Antworten;)

wolfv
quelle