Guía Completa para Dominar el Comando lsof en Linux: Opciones, Ejemplos y Casos Prácticos

Artículos Guías Manuales Sistemas Linux Windows Binario 0

El comando lsof (List Open Files) es una herramienta poderosa en sistemas Unix y Linux para mostrar información sobre los archivos que están abiertos por los procesos en el sistema. Esta guía completa te proporcionará una descripción detallada de sus opciones, cómo utilizar el comando y ejemplos prácticos de uso.

¿Qué es lsof?

lsof muestra una lista de archivos abiertos y los procesos que los tienen abiertos. En Unix y Linux, "todo es un archivo", por lo que un archivo puede ser un archivo regular, un directorio, un socket de red, una tubería, un dispositivo, etc. Con lsof, puedes inspeccionar estos archivos y los procesos asociados a ellos.

Instalación

En la mayoría de las distribuciones de Linux, lsof está disponible por defecto. Si no lo tienes instalado, puedes hacerlo utilizando el gestor de paquetes de tu distribución:

  • Ubuntu/Debian:

    sudo apt-get install lsof
  • CentOS/Fedora:

    sudo yum install lsof

Sintaxis básica

La sintaxis básica de lsof es:

lsof [opciones] [archivo(s) o directorio(s)]

Opciones más comunes de lsof

  1. -a: Combina varias opciones usando AND en lugar de OR. Útil para filtrar resultados.
    • Ejemplo: Mostrar solo los archivos abiertos por el proceso 1234 que están en el directorio /home/user:

      lsof -a -p 1234 +D /home/user
  2. -c <nombre>: Muestra archivos abiertos por procesos que coinciden con el nombre dado.
    • Ejemplo: Mostrar archivos abiertos por procesos cuyo nombre empieza con "sshd":

      lsof -c sshd
  3. -p <PID>: Muestra archivos abiertos por el proceso con el ID especificado.
    • Ejemplo: Mostrar archivos abiertos por el proceso con PID 1234:

      lsof -p 1234
  4. -u <usuario>: Muestra archivos abiertos por los procesos pertenecientes a un usuario específico.
    • Ejemplo: Mostrar archivos abiertos por procesos del usuario root:

      lsof -u root
  5. -i <condición>: Muestra archivos relacionados con conexiones de red que coinciden con la condición dada (por ejemplo, puerto, protocolo, dirección).
    • Ejemplo: Mostrar conexiones de red abiertas en el puerto 22:

      lsof -i :22
    • Ejemplo: Mostrar conexiones de red abiertas por procesos que utilizan el protocolo TCP:

      lsof -i TCP
  6. +D <directorio>: Muestra todos los archivos abiertos bajo un directorio específico, de manera recursiva.
    • Ejemplo: Mostrar todos los archivos abiertos en /var/log:

      lsof +D /var/log
  7. +d <directorio>: Similar a +D, pero solo muestra los archivos en el directorio dado (no recursivo).
    • Ejemplo: Mostrar archivos abiertos en el directorio /tmp:

      lsof +d /tmp
  8. -t: Muestra solo los PIDs de los procesos que tienen los archivos abiertos.
    • Ejemplo: Mostrar PIDs de procesos que tienen archivos abiertos en /var/log:

      lsof -t +D /var/log
  9. -n y -P: -n impide la resolución de nombres de hosts, y -P impide la conversión de números de puerto a nombres de servicio. Esto acelera el comando.
    • Ejemplo: Mostrar conexiones de red sin convertir nombres de host ni nombres de servicio:

      lsof -i -n -P
  10. -r <intervalo>: Repite el comando lsof cada intervalo de tiempo (en segundos).
    • Ejemplo: Ejecutar lsof cada 5 segundos:

      lsof -r 5
  11. -U: Muestra solo los sockets de dominio UNIX.
    • Ejemplo: Mostrar sockets de dominio UNIX:

      lsof -U
  12. -s <tamaño>: Filtra archivos abiertos por tamaño, mostrando solo aquellos que cumplen con el criterio.
    • Ejemplo: Mostrar archivos abiertos que son mayores a 1 MB:

      lsof -s 1048576

Ejemplos de uso práctico de lsof

  1. Listar archivos abiertos por un usuario específico:

    lsof -u username

    Este comando mostrará todos los archivos que están siendo usados por los procesos que pertenecen al usuario username.
  2. Listar todos los archivos abiertos por el sistema:

    lsof

    Esto muestra una lista de todos los archivos abiertos en el sistema.
  3. Listar todos los archivos abiertos en un directorio específico:

    lsof +D /path/to/directory

    Este comando listará todos los archivos abiertos dentro de un directorio y sus subdirectorios.
  4. Listar procesos que tienen un archivo específico abierto:

    lsof /path/to/file

    Esto muestra los procesos que tienen el archivo /path/to/file abierto.
  5. Listar conexiones de red abiertas:

    lsof -i

    Este comando muestra todas las conexiones de red activas.
  6. Listar conexiones de red abiertas por un puerto específico:

    lsof -i :80

    Muestra las conexiones de red abiertas en el puerto 80 (comúnmente usado por HTTP).
  7. Forzar la terminación de procesos que tienen un archivo específico abierto:

    kill -9 $(lsof -t /path/to/file)

    Esto matará todos los procesos que tienen el archivo /path/to/file abierto.
  8. Monitorear archivos abiertos en tiempo real:

    lsof -r 2

    Esto ejecutará el comando lsof cada 2 segundos, mostrando la lista actualizada de archivos abiertos.

Conclusión

El comando lsof es una herramienta versátil y esencial para la administración de sistemas Unix y Linux, permitiendo a los administradores de sistemas diagnosticar problemas, monitorizar la actividad de archivos y gestionar los recursos del sistema de manera efectiva. Con las opciones y ejemplos proporcionados en esta guía, deberías tener una comprensión sólida de cómo utilizar lsof en diversas situaciones.