El comando lsof en Linux: listar archivos abiertos por procesos

Introducción a lsof

El comando lsof (List Open Files) es una herramienta esencial para administradores de sistemas Linux que permite ver qué archivos, dispositivos, sockets y tuberías tiene abierto cada proceso en el sistema. Esta información resulta útil para depurar problemas de permisos, detectar fugas de recursos o investigar actividades sospechosas.

Instalación y disponibilidad

En la mayoría de las distribuciones modernas, lsof viene preinstalado. Si no está disponible, puedes instalarlo con el gestor de paquetes correspondiente:

  • Debian/Ubuntu: sudo apt-get install lsof
  • Red Hat/CentOS: sudo yum install lsof
  • Fedora: sudo dnf install lsof
  • Arch Linux: sudo pacman -S lsof

Sintaxis básica

La forma más simple de ejecutar lsof es sin argumentos, lo que muestra todos los archivos abiertos por todos los procesos:

sudo lsof

Debido a que la salida puede ser muy extensa, suele ser útil combinarlo con opciones de filtrado o con grep.

Opciones de filtrado más usadas

  • -p <PID>: muestra los archivos abiertos por el proceso cuyo ID es <PID>.
  • -u <usuario>: lista los archivos abiertos por todos los procesos del usuario especificado.
  • -i <condición>: filtra conexiones de red. Por ejemplo, -i TCP:80 muestra los sockets TCP en el puerto 80.
  • +D <directorio>: lista todos los archivos abiertos dentro de un directorio y sus subdirectorios.
  • -d <descriptor>: limita la salida a ciertos tipos de descriptores de archivo (por ejemplo, -d 1 para stdout).
  • -t: solo imprime los PID, útil para pasar a otros comandos como kill.
  • -F: produce una salida en formato máquina‑legible, ideal para scripts.

Ejemplos prácticos

A continuación se presentan algunos ejemplos que ilustran el uso cotidiano de lsof:

  • Ver qué archivos tiene abierto un proceso específico:

    sudo lsof -p 1234

  • Encontrar procesos que están usando un puerto:

    sudo lsof -i TCP:22

  • Listar todos los archivos abiertos por un usuario:

    sudo lsof -u juan

  • Detectar procesos que mantienen abierto un archivo borrado:

    sudo lsof | grep deleted

  • Obtener solo los PID de los procesos que usan un directorio:

    sudo lsof -t +D /var/log

  • Usar salida máquina‑legible para un script:

    sudo lsof -F pct -i TCP:80

Consideraciones de seguridad

Debido a que lsof puede revelar información sensible (rutas de archivos, nombres de usuarios, detalles de conexiones de red), su ejecución suele requerir privilegios de root para ver la información de todos los procesos. En entornos donde se aplica el principio de menor privilegio, es recomendable restringir el acceso a lsof mediante sudo o mediante capacidades específicas del kernel.

Conclusión

El comando lsof es una herramienta poderosa y versátil que pertenece al kit de cualquier administrador Linux. Dominar sus opciones permite diagnosticar rápidamente problemas de recursos, auditar el uso de archivos y monitorear la actividad de red del sistema. Practicar con los ejemplos mostrados y consultar la página de manual (man lsof) te ayudará a extraer el máximo provecho de esta utilidad.