Esta pregunta está relacionada con ¿Cómo recuperar archivos borrados? pero es ligeramente diferente en naturaleza.
Supongamos que tengo un archivo llamado ~/something
abrir en un editor de texto. Además, suponga que abro una terminal y ejecuto el siguiente comando mientras el archivo aún está abierto en el editor de texto:
rm ~/something
Esto eliminará el archivo. Ahora suponga que cambié de opinión y quería recuperar el archivo. El archivo aún está abierto en el editor de texto, por lo que aún no se ha eliminado del disco o del sistema de archivos .
¿Hay alguna forma de recuperarlo?
Respuesta aceptada:
No sé si hay algún editor de texto que mantenga el archivo abierto mientras lo editas. Normalmente (es decir, en Emacs), el archivo se lee en un búfer en la RAM y luego se cierra. Editas solo en RAM. Cuando guarda el búfer, el archivo se abre, se escribe y se cierra de nuevo. Puede utilizar ps auxw | grep your_editor
para encontrar el PID de su editor, entonces lsof -p your_PID
para ver los archivos que todavía están abiertos.
Por otro lado, si el archivo aún está en el búfer de su editor, simplemente puede guardarlo.
Pero esa no era tu pregunta, así que supongamos que estás usando cat
como su editor, y el archivo todavía está realmente abierto:
% 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
Puedes usar lsof -n
para ver todos los archivos abiertos y grep
para buscar su nombre de archivo.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
En la segunda columna puedes ver el PID de tu cat
dominio. Puede cambiar al directorio correspondiente en el sistema de archivos /proc y al fd
(descriptor de archivo) subdirectorio:
% 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
Ahora puedes simplemente copiar el "archivo" 1
a otro archivo:
% cp 1 ~/tmp/the_old_file.txt
Y mira, está ahí:
% cat ~/tmp/the_old_file.txt
Hello world!