Una de las cosas mas bonitas que se pueden hacer con la versátil herramienta lsof es usarla para recuperar un fichero que acabas de borrar de forma accidental.

Un fichero en Linux esta apuntado por un inodo, que contiene la información del fichero (permisos, propietario y la localización de su contenido en el disco). La operación de borrado del fichero elimina el enlace, pero no el inodo en si mismo – if otro proceso tiene abierto el fichero, el inodo no se libera hasta que el otro proceso finaliza con él.

Para poder hacer la prueba podemos crearnos un fichero de texto(test.txt), lo salvamos y en el terminal ejecutamos algún comando que deje el fichero abierto, por ejemplo less test.txt. Ahora abrimos otro terminal y borramos test.txt con la orden rm test.txt. Una vez borrado si probamos con la orden ls test.txt obtendremos el siguiente mensaje de error:

eloy@ubuntuEEEBox:~$ ls test.txt
ls: no se puede acceder a test.txt: No existe el fichero ó directorio
eloy@ubuntuEEEBox:~$

El asunto es que el comando less todavía tiene referenciado el fichero test.txt. Esto podemos verificarlo mediante los siguientes comandos:

> lsof | grep test.txt
less 4607 eloy 4r REG 254,4 21 8880214 /home/juliet/test.txt (deleted)

Las columnas importantes son la segunda, que nos indica el PID del proceso que tiene el fichero abierto (4607), y la cuarta columna, que nos indica el descriptor del fichero (4). En esta situación, si echamos un vistazo en el directorio /proc, podremos encontrar todavía una referencia al inodo, desde la cual podemos restaurar el fichero original:

> ls -l /proc/4607/fd/4

lr-x—— 1 eloy  eloy 64 Apr 7 03:19
/proc/4607/fd/4 -> /home/eloy/test.txt (deleted)
> cp /proc/4607/fd/4 test.txt.bk

Nota: no se debe usar el flag -a con el comando cp, esto es debido a que con ese modificador se copiara el enlace simbólico roto, en vez de el fichero que nos interesa.

Ahora ya podemos verificar que la copia se ha realizado correctamente y que volvemos a tener el fichero en su estado actual.

Saludos a todos y hasta la próxima.

You must be logged in to post a comment.