Comando Linux lsof
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 -c nginx # Ver los archivos abiertos por todos los procesos nginx
3. Ver conexiones de red
Ejemplo
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 actualtxt: Archivo de código del programamem: Archivo mapeado en memoria0u、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
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:
- Ejecutar directamente
lsofescaneará todo el sistema y puede consumir bastantes recursos - Utiliza en la medida de lo posible condiciones de filtrado precisas (como
-p、-u、-ietc.) para reducir el alcance de la consulta - 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:
- fuser: Ver rápidamente qué procesos están usando un archivo o socket específico
- ss/netstat: Especializado en información de conexiones de red
- 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:
- Localizar rápidamente problemas de ocupación de recursos
- Diagnosticar problemas relacionados con archivos y red
- Comprender el estado de funcionamiento del sistema
- 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.
Otras extensiones