Comando Linux lsof

Linux 命令大全Referencia completa de comandos Linux


Una potente herramienta de línea de comandos en Linux, utilizada para listar todos los archivos abiertos en el sistema actual y la información de los procesos relacionados. En Linux, el concepto de "todo es un archivo" significa que lsof no solo puede mostrar archivos regulares, sino también conexiones de red, archivos de dispositivo, tuberías y sockets, entre otros.


Sintaxis básica de lsof

lsof [选项] [文件名或目录]

Descripción de opciones y parámetros comunes

Opción Descripción
-a Usa la lógica AND para combinar múltiples condiciones
-c <进程名> Muestra los archivos abiertos por el proceso especificado
-d <文件描述符> Muestra los archivos con el descriptor de archivo especificado
-i Muestra información relacionada con conexiones de red
-n No resuelve nombres de host (muestra direcciones IP)
-P No resuelve nombres de puerto (muestra números de puerto)
-p <PID> Muestra los archivos abiertos por el ID de proceso especificado
-u <用户名> Muestra los archivos abiertos por el usuario especificado
+D <目录> Muestra recursivamente los archivos abiertos en el directorio
-t Solo muestra el ID de proceso (adecuado para scripts)

Ejemplos de operaciones comunes

1. Ver todos los archivos abiertos

lsof

Esto lista todos los archivos abiertos en el sistema, incluyendo archivos normales, directorios, archivos de biblioteca, dispositivos y conexiones de red, etc.

2. Ver los archivos abiertos por un proceso específico

Ejemplo

lsof -p 1234  # Ver los archivos abiertos por el proceso con PID 1234
lsof -c nginx # Ver los archivos abiertos por todos los procesos nginx

3. Ver conexiones de red

Ejemplo

lsof -i      # Ver todas las conexiones de red
lsof -i :80  # Ver todas las conexiones que usan el puerto 80
lsof -i TCP  # Ver todas las conexiones TCP

4. Ver los archivos abiertos por un usuario

lsof -u root  # 查看 root 用户打开的文件

5. Buscar archivos eliminados pero aún en uso por procesos

lsof | grep deleted

Esta situación es común cuando los archivos de registro se eliminan pero el servicio sigue en ejecución, lo que impide que se libere el espacio en disco.

6. Ver archivos abiertos en un directorio específico

lsof +D /var/log  # 查看 /var/log 目录下被打开的文件

Análisis de los campos de salida

Las columnas típicas de la salida del comando lsof son las siguientes:

COMMAND    PID   USER   FD      TYPE     DEVICE  SIZE/OFF    NODE NAME
  • COMMAND: Nombre del proceso
  • PID: ID del proceso
  • USER: Usuario que ejecuta el proceso
  • FD: Descriptor de archivo
    • cwd: Directorio de trabajo actual
    • txt: Archivo de código del programa
    • mem: Archivo mapeado en memoria
    • 0u、1u、2u: Entrada, salida y error estándar
  • TYPE: Tipo de archivo (REG archivo regular, DIR directorio, CHR dispositivo de caracteres, etc.)
  • DEVICE: Número de dispositivo
  • SIZE/OFF: Tamaño del archivo u offset
  • NODE: Número de inode del archivo
  • NAME: Nombre de archivo o punto de montaje

Escenarios de aplicación avanzada

1. Buscar el proceso que ocupa un puerto

lsof -i :8080

Cuando quieres iniciar un servicio pero el puerto ya está ocupado, este comando puede encontrar rápidamente el proceso que ocupa el puerto.

2. Recuperar archivos eliminados

Cuando un archivo se elimina pero aún hay procesos usándolo, se puede recuperar a través del sistema de archivos /proc:

Ejemplo

lsof | grep deleted  # Encontrar los archivos eliminados y los procesos
ls -l /proc//fd  # Ver los descriptores de archivo del proceso
cp /proc//fd/ /path/to/recovery  # Recuperar el archivo

3. Monitorizar el acceso a archivos

watch -n 1 'lsof /path/to/file'

Esto permite monitorizar en tiempo real qué procesos acceden a un archivo.


Resolución de problemas comunes

1. Espacio en disco insuficiente pero no se encuentran archivos grandes

lsof | grep deleted

Busca archivos eliminados pero aún en uso por procesos y reinicia los procesos correspondientes para liberar espacio.

2. No se puede desmontar el dispositivo

lsof /mount/point

Busca qué procesos están usando el punto de montaje, cierra esos procesos y luego desmonta.

3. Solución de problemas de conexión de red

lsof -i -n -P

Ver todas las conexiones de red para ayudar a diagnosticar conflictos de puertos o problemas de conexión.


Consideraciones de rendimiento

Aunque lsof es potente, al usarlo en entornos de producción con mucha actividad se debe tener en cuenta:

  1. Ejecutar directamentelsofescaneará todo el sistema y puede consumir bastantes recursos
  2. Utiliza en la medida de lo posible condiciones de filtrado precisas (como-p、-u、-ietc.) para reducir el alcance de la consulta
  3. En scripts, utilice la-topción para mostrar solo el PID, reduciendo la sobrecarga de análisis

Herramientas alternativas

Aunque lsof es la herramienta más utilizada, en ciertos escenarios se puede considerar:

  1. fuser: Ver rápidamente qué procesos están usando un archivo o socket específico
  2. ss/netstat: Especializado en información de conexiones de red
  3. ps: Combinado con/procel sistema de archivos también permite obtener parte de la información

Resumen

lsof es la navaja suiza de los administradores de sistemas y desarrolladores de Linux. Dominarlo te ayuda a:

  1. Localizar rápidamente problemas de ocupación de recursos
  2. Diagnosticar problemas relacionados con archivos y red
  3. Comprender el estado de funcionamiento del sistema
  4. Resolver varios problemas de "archivo en uso"

Se recomienda practicar más en el trabajo diario, utilizar flexiblemente varias opciones y parámetros según escenarios específicos, y dominar gradualmente todo el potencial de esta poderosa herramienta.


Linux 命令大全Referencia completa de comandos Linux

Otras extensiones