Cómo recuperar archivos borrados en linux desde consola

¿Alguna vez habeis borrado un fichero por equivocacion desde consola, cuando estabais trabajando con el?
Yo desde luego muchas; de esas veces en las que quieres borrar algo escribes un fragmento de la palabra le das al TAB y al ENTER y borras algo que no querías de forma comulsiva :S

Bueno pues hoy os voy a contar como con lsof, la información que se guarda en la carpeta /proc y un poco de suerte, podemos recuperar archivos eliminados desde consola.

Vamos a demostrar como funciona de manera prática:
Primero creamos un fichero de texto:

echo "INFORMACION SECRETA DEL GOBIERNO" > top_secret.txt

Bueno ahora vamos a ver el valor que nos interesa de nuestro fichero, que es el número de inodo, que segun wikipedia: Un inodo contiene las características (permisos, fechas, ubicación, pero NO el nombre) de un archivo regular, directorio, o cualquier otro objeto que pueda contener el sistema de ficheros.

ls -li top_secret.txt lo que nos devuelve lo siguente
313917 -rw-r--r-- 1 psylard psylard 33 2008-06-05 19:56 top_secret.txt
Y este primer número es el inodo: 313917

Si algun programa esta accediendo el fichero que hemos borrado, estamos de suerte. El programa en cuestion tendra una referencia al inodo del fichero borrado y siempre que no cerremos este programa podremos recuperar el contenido de dicho fichero. Esto se suele dar cuando borras por ejemplo el contenido de un archivo *.log y un programa está accediendo a él.

Para nuestro ejemplo lo abriremos con:

less top_secret.txt

INFORMACION SECRETA DEL GOBIERNO
top_secret.txt (END)

Y lo dejaremos suspendido con Ctrl + Z:
[1]+ Stopped less top_secret.txt

Ahora por un despeste casual, lo borraremos accidentalmente:

rm top_secret.txt

Comprobamos que ya no existe:

ls -li top_secret.txt
ls: top_secret.txt: No existe el fichero ó directorio

Y ahora intentamos recuperarlo gracias a la orden lsof que comentamos anteriormente:

lsof | grep top_secret.txt
less 5886 psylard 4r REG 8,1 33 313917 /home/psylard/top_secret.txt (deleted)

Aquí nos dice la ubicacion del fichero en el proc, así que miramos si es verdad:

ls -l /proc/5886/fd/4
lr-x------ 1 psylard psylard 64 2008-06-05 20:13 /proc/5886/fd/4 -> /home/psylard/top_secret.txt (deleted)

Y efectivamente ahí lo tenemos, asi que solo nos queda recuperarlo:

cp /proc/5886/fd/4 top_secret.txt.restaurado

0 comentarios: