752 - El detective de archivos abiertos en Linux

752 - El detective de archivos abiertos en Linux

lsof es el detective de Linux que necesitas. Resuelve el misterio de archivos, puertos y procesos bloqueados. Libera espacio y optimiza tu VPS/Docker/RPi.

1:25
-3:15

Una de las maravillas de Linux es el enorme ecosistema de herramientas que lo rodea. Esto es de forma simultánea un gran ventaja y un inconveniente. Hay tanto, que en la mayoría de ocasiones nos perdemos. Pero no solo esto, sino que además, terminamos utilizando un reducido número de herramientas para casi todo. Como aquello de utilizar un martillo para todo. Esto es una verdadera lástima, porque como te digo, teniendo tantas herramientas, en ocasiones nos empecinamos en utilizar siempre las mismas. Así que, siempre ando buscando, probando y estudiando nuevas herramientas que me ayuden en mi día a día, tanto a nivel personal como profesional. Y precisamente por esto, hoy te traigo una herramienta que estoy seguro que te va a encantar. Se trata de una herramienta que te va a permitir saber qué archivos tienes abiertos en tu sistema Linux. Y no solo eso, sino que además, te va a permitir saber qué procesos están utilizando esos archivos. Y todo esto de una forma sencilla y rápida. La herramienta en cuestión se llama lsof.

El detective de archivos abiertos en Linux

En Linux todo es un archivo

Últimamente escucho y veo mucho eso de estas dos noticias se entienden mejor juntas. Pues precisamente esto es lo que me ha pasado a mí con lsof. Y es que para entender el potencial de esta herramienta, primero tenemos que entender un concepto básico de Linux.

Como seguro has escuchado en más de una ocasión, en Linux todo es un archivo. No solo tus documentos de texto o tus fotos son archivos, Linux modela y gestiona casi todos los recursos del sistema como archivos. Archivos regulares, directorios, dispositivos, sockets, pipes, etc. Todo esto es gestionado por el sistema de archivos de Linux.

Ahora esto lo unes con que lsof es una herramienta que te permite listar los archivos abiertos en el sistema. Y ya tienes la combinación perfecta para entender el potencial de esta herramienta.

¿Qué es lsof?

lsof (List Open Files) es una herramienta de línea de comandos que te permite listar los archivos abiertos en el sistema. Esto incluye no solo archivos regulares, sino también directorios, dispositivos, sockets, pipes, etc. Además, lsof te permite ver qué procesos están utilizando esos archivos. Básicamente su función es reportar todos los archivos que están siendo utilizados (o abiertos) por los procesos en ejecución.

Cuando un programa arranca, ya sea un servidor Traefik o un simple script de bash, el kernel de Linux le asigna un número para cada recurso que usa. Estos números se conocen comoDescriptores de Archivo (File Descriptors o FD).

lsof simplemente lee la lista de Descriptores de Archivo de todos los procesos activos y te muestra en un formato legible qué proceso (PID) está asociado a qué recurso (NAME), y cómo lo está usando (FD).

En resumen: Si tienes un problema con un puerto (socket), un disco (directorio), o un log (archivo regular), lsof lo encontrará porque para Linux, todos son archivos abiertos por un proceso.«

Opciones clave de lsof

A continuación tienes una tabla resumen realmente práctica de las opciones de lsof, con ejemplos para que sea todavía mas sencillo y cómodo.

OpciónSignificadoDescripción y UsoEjemplo Práctico
-uPor UsuarioLista los archivos abiertos únicamente por el usuario o usuarios especificados.lsof -u lorenzo
-iPor InternetMuestra los archivos relacionados con la red: sockets, conexiones TCP/UDP, y puertos de red.lsof -i :8080 (Muestra el proceso usando el puerto 8080)
-pPor PIDRestringe la salida a los archivos abiertos por un ID de proceso (PID) específico.lsof -p 12345
-cPor ComandoLista los archivos abiertos por procesos cuyo nombre de comando coincida con el especificado.lsof -c neovim
+DDirectorio recursivoBusca en el directorio especificado y en todos sus subdirectorios.lsof +D /var/log
+LLinksFiltra por el número de enlaces de un archivo. Usado con +L1 para encontrar archivos borrados que aún están referenciados.lsof +L1 (Para encontrar archivos borrados)

¿Para que utilizar lsof?

Como te decía en la introducción del episodio, lsof es una herramienta tremendamente útil para detectar problemas relacionados con archivos abiertos en tu sistema Linux. Así, aquí tienes algunos ejemplos prácticos de cómo puedes utilizar lsof en tu día a día,

A. Encontrar qué Proceso usa un Archivo/Directorio

  • Caso: Quieres desmontar un disco (umount /mnt/datos) y da un error de «Device or resource busy».
  • Solución:lsof /mnt/datos
    • Tip Avanzado: Usar el argumento +D para incluir todos los archivos dentro de un directorio montado (ej: lsof +D /ruta/al/directorio).

B. Identificar Procesos por Usuario o PID

  • Por Usuario: lsof -u <usuario> (Ej: lsof -u lorenzo o lsof -u root). Útil para ver qué está haciendo un usuario específico.
  • Por PID: lsof -p <PID>. Para inspeccionar los archivos abiertos por un proceso específico (por ejemplo, tu instancia de Neovim o un servidor Docker).
  • Excluir Usuarios: lsof -u ^root. Muy útil para filtrar y centrarse en los procesos de usuario.

C. Gestión de Red y Puertos

  • Caso: Quieres iniciar un servidor web en el puerto 8080 y el puerto ya está en uso. ¿Quién lo está ocupando?
  • Solución: lsof -i :8080.
  • Filtrar por Protocolo: lsof -i UDP o lsof -i TCP.
  • Ver todas las conexiones de red: lsof -i.

D. Archivos Borrados que Siguen Ocupando Espacio

  • Caso: Borraste un archivo de log gigante (.log) pero el espacio en disco no se liberó. El proceso que lo usaba sigue ejecutándose.
  • Solución: lsof | grep deleted o, mejor, lsof +L1 (para listar archivos con menos de 1 enlace, a menudo archivos borrados).
  • Acción de seguimiento: Una vez identificado el PID, el proceso debe reiniciarse o terminarse (kill <PID>) para liberar el descriptor de archivo y el espacio.

E. Librerías

  • Caso: Necesitas saber que librería está utilizando una determinada aplicación.
  • Solución: lsof -p | grep ‘txt|mem’

F. Swap

  • Caso: El rendimiento del sistema es lento debido al swapping. Quieres identificar el proceso que está utilizando swap.
  • Solución: lsof | grep swp

G. Identificar conexiones de red

  • Caso: Quieres ver que procesos están actualmente escuchando o tienen una conexión establecidad.
  • Solución: lsof -i | grep LISTEN
  • Solución: lsof -i | grep ESTABLISHED

H. Dispositivos

  • Caso: No puedes acceder a un dispositivo como la cámara porque hay un proceso que lo está utilizando.
  • Solución: lsof /dev/video0

Conclusión

Como ves, lsof es una herramienta realmente potente y versátil que puede ayudarte a resolver una amplia variedad de problemas relacionados con archivos abiertos en tu sistema Linux. Ya sea que estés tratando de desmontar un disco, liberar espacio en disco, o simplemente entender qué procesos están utilizando qué recursos, lsof es una herramienta que deberías tener en tu caja de herramientas de Linux. Lo cierto es que en muchas ocasiones, ando peleando para instalar netstat, y la verdad es que en la mayoría de ocasiones con lsof tengo suficiente.

Espero que te sea de utilidad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *