Questa domanda è correlata a Come recuperare i file cancellati? ma è di natura leggermente diversa.
Supponiamo di avere un file chiamato ~/something
apri in un editor di testo. Supponiamo inoltre di aprire un terminale ed eseguire il seguente comando mentre il file è ancora aperto nell'editor di testo:
rm ~/something
Questo cancellerà il file. Supponiamo ora di aver cambiato idea e di voler recuperare il file. Il file è ancora aperto nell'editor di testo, quindi non è stato ancora rimosso dal disco o dal filesystem .
C'è un modo per recuperarlo?
Risposta accettata:
Non so se ci sono editor di testo che mantengono aperto il file mentre lo stai modificando. Normalmente (cioè in Emacs), il file viene letto in un buffer nella RAM e quindi il file viene chiuso. Si modifica solo nella RAM. Quando si salva il buffer, il file viene aperto, scritto e chiuso di nuovo. Puoi usare ps auxw | grep your_editor
per trovare il PID del tuo editor, quindi lsof -p your_PID
per vedere i file ancora aperti.
D'altra parte, se il file è ancora nel buffer del tuo editor, puoi semplicemente salvarlo.
Ma non era la tua domanda, quindi facciamo finta che tu stia usando cat
come editor e il file è ancora aperto:
% 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
Puoi usare lsof -n
per vedere tutti i file aperti e grep
per cercare il tuo nome file.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Nella seconda colonna puoi vedere il PID del tuo cat
comando. Puoi passare alla directory corrispondente nel filesystem /proc e in fd
(descrittore di file) sottodirectory:
% 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
Ora puoi semplicemente copiare il "file" 1
in un altro file:
% cp 1 ~/tmp/the_old_file.txt
E guarda, è lì:
% cat ~/tmp/the_old_file.txt
Hello world!