Cuando nos quedamos sin espacio en disco, con frecuencia buscamos en el sistema de archivos de nuestro ordenador Linux determinados archivos que ya no necesitamos y los borramos. Pero la eliminación de archivos puede resultar infructuosa si hay procesos activos que hacen referencia a ellos. En esa situación, podemos interrumpir cada proceso que mantenga una referencia abierta antes de retirar los archivos.
No obstante, esto también podría ser problemático. Así por ejemplo, ciertos programas no deberían cerrarse durante el horario laboral. En este artículo le ofrecemos un completo tutorial con todos los pasos necesarios para encontrar, eliminar y recuperar archivos borrados con lsof.
Parte 1. ¿Qué es el comando lsof?

El comando lsof en sistemas Unix y Linux significa "Listar archivos abiertos". Es una herramienta potente para obtener información sobre los archivos abiertos por procesos activos en un mismo sistema. La orden lsof proporciona información sobre los archivos abiertos usados por los procesos, como sockets de red, archivos normales, directorios, archivos especiales de bloque y archivos de caracteres especiales.
- La sintaxis de la orden lsof es la siguiente:
lsof [opciones]
La opción utilizada con el comando lsof determina la información que se mostrará y el formato en el que se presentará.
La orden lsof dispone de numerosas opciones, y en la tabla siguiente se enumeran los argumentos más utilizados.
Opción |
Descripción |
lsof | Lista todos los archivos abiertos |
-b | Oculta bloques del núcleo |
/ [sistema de archivos] / | Muestra los archivos abiertos en un sistema de archivos especificado |
/dev/tty* | Muestra los ficheros asociados al terminal |
-u [nombre de usuario] | Imprime los archivos abiertos que pertenecen a un usuario determinado |
-u ^[nombre de usuario] | Impresión de los archivos abiertos que pertenecen a todos los usuarios excepto a uno determinado |
-c [proceso] | Lista todos los archivos utilizados por un proceso determinado |
-p [ID del proceso] | Visualiza todos los archivos abiertos vinculados a un ID de proceso específico |
-p ^[ID del proceso] | Mostrar los archivos abiertos utilizados por todos los demás ID de proceso |
-R | Lista los ID de los procesos padre |
+D [directory path] | Imprime todos los archivos abiertos en un directorio |
-i | Indica todos los archivos utilizados por las conexiones de red |
-i [número de versión IP] | Filtra los archivos en función de su versión IP |
- i [udp or tcp] | Filtra los archivos abiertos en función del tipo de conexión (TCP o UDP) |
-i :[número de puerto] | Buscar procesos que se ejecutan en un puerto especificado |
-i :[intervalo de puertos] | Busca procesos que se ejecutan en una serie de puertos |
-t [nombre del archivo] | Lista los ID de procesos que han accedido a un archivo específico |
# kill -9 'lsof -t -u [usuario]' | Elimina todos los procesos pertenecientes a un usuario |
-d mem | Muestra todos los archivos en memoria |
[ruta] | grep eliminado | Imprime archivos borrados bloqueados |
man | Abre la página del manual |
Parte 2. ¿Qué hay que hacer para encontrar y eliminar archivos abiertos pero eliminados con lsof?
Entendamos primero el concepto. En Linux, un archivo es un enlace a un inodo, que consiste en todas las propiedades del archivo de los bloques de datos en el disco que comprenden el contenido del archivo. Cuando rm un archivo, se elimina el enlace a su inodo, pero no el inodo en sí; otros procesos pueden seguir utilizándolo. Sólo cuando han finalizado y se han eliminado todos los enlaces, un inodo y los bloques de datos a los que señalaba están disponibles para la escritura.
Aunque el fichero parezca desaparecer en el listado de directorios, los datos están en otra parte si un proceso aún lo tiene abierto.
El directorio/proc intervendrá en el pseudo-sistema de archivos de procesos de Linux. Todos los procesos del sistema tienen un directorio con su nombre, que incluye muchas cosas, entre ellas un subdirectorio fd (descriptor de archivos) con enlaces a todos los archivos que el procesador tiene abiertos. Aunque se haya borrado un archivo del sistema de archivos, sigue existiendo una copia de los datos:
Paso 1. Para determinar a dónde ir, obtenga el id de proceso y el descriptor de archivo del proceso que tiene el archivo abierto utilizando lsof. Una vez que hayas obtenido esa información de lsof, copia los datos de /proc.
- Crea un archivo de texto:
$ man lsof | col -b > myfile
Paso 2. Examine a continuación el contenido del fichero que acaba de crear:
- El comando less debería mostrar una versión en texto plano de la enorme página de manual de lsof.
$ less myfile
Paso 3. Para suspender el comando less, pulse Ctrl-Z.
- Comprueba que tu archivo sigue presente en el prompt del shell:
$ ls -l myfile
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:14 myfile
$ stat myfile
Archivo: `myfile'
Tamaño:114383 :Bloques:: 232 IO Bloque:4096 archivo regular
Dispositivo:341h/833d Inode: 1276722 Enlaces:1
Acceso (0644/-rw-r--r--) Uid: ( 1010/ jimbo) Gid: ( 1010/ jimbo)
Acceso: 2006-10-31 16:15:08.423715488 -0400
Modificar: 2006-10-31 16:14:52.684417746 -0400
Cambia: 2006-10-31 16:14:52.684417746 -0400
Paso 4. Por favor, quítalo.
- Esta vez ya no está.
$ rm myfile$
ls -l myfilels:
myfile: Ningún fichero o directorio$
stat myfilestat:
cannot stat `myfile': Ningún fichero o directorio
$
Llegados a este punto, no debe permitir que salga el archivo, ya que si lo hace, el archivo se perderá para siempre.
Parte 3. ¿Cómo recuperar archivos borrados con lsof?
Una vez encontrados y retirados los archivos abiertos que han sido borrados, vamos a recuperarlos ahora mediante lsof. Si un fichero ha sido borrado pero sigue abierto por un proceso, lsof puede visualizar información sobre el fichero, incluyendo su descriptor de fichero, ID de proceso y ruta de acceso completa.
Paso 1. Eche un vistazo a lo que la ISOF tiene que decir al respecto:
$ lsof | grep myfile
less 4158 jimbo 4r REG 3,65 114383 1276722 /home/jimbo/myfile (suprimido)
En la primera columna se muestra el nombre del comando relacionado con el proceso, la segunda columna contiene el id del proceso y la cuarta columna contiene el descriptor del fichero (la "r" indica que se trata de un fichero normal). Sabe que el proceso 4158 tiene el fichero abierto y el descriptor de fichero 4. Eso es todo lo que necesitas saber para copiarlo fuera de /proc.
Paso 2. Debido a que está restaurando el archivo, podría pensar que usar la bandera -a con cp es lo correcto - pero NO es lo correcto.
- En vez de copiar los datos literales del archivo, estará copiando un enlace simbólico ahora roto al archivo tal y como aparecía anteriormente en su directorio original:
$ ls -l /proc/4158/fd/4
lr-x------ 1 jimbo jimbo 64 Oct 31 16:18 /proc/4158/fd/4 -> /home/jimbo/myfile (suprimido)
$ cp -a /proc/4158/fd/4 myfile.wrong
$ ls -l myfile.wrong
lrwxr-xr-x 1 jimbo jimbo 24 Oct 31 16:22 myfile.wrong -> /home/jimbo/myfile (deleted)
$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/jimbo/myfile '(suprimido
)$ file /proc/4158/fd/4
/proc/4158/fd/4: broken symbolic link to `/home/jimbo/myfile (deleted)'
- Así que, en lugar de todo eso, bastará con un simple cp:
$ cp /proc/4158/fd/4 myfile.saved
- Finalmente, compruebe que lo ha hecho todo correctamente:
$ ls -l myfile.saved
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:25 myfile.saved
$ man lsof | col -b > myfile.new
$ cmp myfile.saved myfile.new
Parte 4. Una Alternativa Simple a lsof para Recuperar Archivos Borrados en Linux
Si buscas una alternativa fácil de usar a lsof para recuperar archivos borrados, considera usar un software de recuperación de archivos de Linux como Wondershare Recoverit. Al contrario que lsof, una línea de comandos, Recoverit tiene una sencilla interfaz gráfica de usuario (GUI) que facilita su utilización, incluso para personas con poca o ninguna experiencia técnica. Gracias a Recoverit, puedes escanear rápidamente el disco duro de tu ordenador y recuperar archivos borrados con sólo unos clics.

Wondershare Recoverit - Tu software de recuperación de Linux seguro y fiable
Lo han descargado 5.481.435 personas.
Recupera documentos, fotos, vídeos, música, correos electrónicos y más de 1000 tipos de archivos perdidos o eliminados de forma eficaz, segura y completa.
Compatibilidad con todas las principales distribuidoras de Linux, incluidas Ubuntu, Linux Mint, Debian, Fedora, Solus, Opensuse, Manjaro, etc.
Asiste en más de 500 escenarios de pérdidas de datos, como borrado, formateo de disco, fallo del sistema operativo, corte de energía, infección por virus, partición perdida y muchos más.
La interfaz sencilla de apuntar y hacer clic le permite recuperar datos de discos duros Linux en unos pocos clics.
Funciona mediante conexión remota. Puedes recobrar los datos perdidos incluso cuando tu dispositivo Linux se ha estrellado.
Te mostraremos cómo usar Wondershare Recoverit en Linux para recuperar datos borrados. Si te resulta difícil leer las instrucciones, aquí tienes un vídeo con un tutorial más detallado.
Para Windows Vista/7/8/10/11
Para macOS X 10.10 - macOS 13
Paso 1. Recuperación de Linux Recoverit
Inicia el software Wondershare Recoverit en tu dispositivo Linux. A continuación, selecciona las opciones NAS y Linux en la parte izquierda de la interfaz principal. Para continuar, seleccione Recuperación de Linux.

Paso 2. Conexión remota Linux
En la ventana nueva que aparece, rellénala con la información necesaria para poder establecer una conexión remota. Una vez terminado, pulsa Conectar.

A la espera de que se establezca la conexión, Recoverit iniciará una búsqueda automática de los datos perdidos en un ordenador Linux.
Paso 3. Proceso de recuperación
En función de la cantidad de datos que se estén escaneando, el escaneado puede tardar algún tiempo; el estado del escaneado se muestra en la barra inferior. La mejor prestación de Recoverit es la posibilidad de pausar el escaneado cada vez que haya que restaurar un archivo.

Cuando el proceso de escaneado finaliza, Recoverit te permite inspeccionar los archivos para asegurarte de que son los que quieres recuperar. Selecciona Recuperar para guardar el archivo en tu dispositivo Linux.

A continuación, el software le pedirá que seleccione una ubicación para los archivos recuperados en su dispositivo. Comprueba que vas a una ubicación distinta de donde perdiste los archivos anteriormente.
Para Windows Vista/7/8/10/11
Para macOS X 10.10 - macOS 13
Resumen
En conclusión, "lsof" es una útil utilidad de línea de comandos para mostrar información sobre archivos abiertos por procesos en sistemas tipo Unix. No obstante, encontrar y recuperar archivos que están abiertos pero han sido eliminados es un proceso complejo y requiere un cierto nivel de conocimientos técnicos. En esos casos, un software de recuperación de archivos como Recoverit puede constituir una alternativa más fácil de usar, ya que ofrece una interfaz gráfica de usuario sencilla para escanear y recuperar rápidamente los archivos eliminados.