Middle
¿Cómo se puede saber con qué archivos está trabajando actualmente un programa en Linux?
sobes.tech AI
Respuesta de la IA
Utilizando la utilidad lsof (listar archivos abiertos).
# Uso básico de lsof para mostrar una lista de todos los archivos abiertos
lsof
Para obtener una lista de archivos abiertos por un proceso específico (por PID):
# Mostrar archivos abiertos por el proceso con PID 1234
lsof -p 1234
Para obtener una lista de archivos abiertos por un comando específico (por nombre):
# Mostrar archivos abiertos por todos los procesos con el nombre "nginx"
lsof -c nginx
Para obtener una lista de archivos abiertos por un usuario específico:
# Mostrar archivos abiertos por el usuario "user1"
lsof -u user1
Flags adicionales de lsof:
| Flag | Descripción |
|---|---|
-i |
Mostrar conexiones de red (Sockets) |
-n |
No convertir direcciones IP en nombres de host |
-P |
No convertir puertos en nombres de servicios |
-r [N] |
Reiniciar lsof cada N segundos |
Ejemplo de uso para determinar qué proceso usa un archivo específico:
# ¿Qué proceso usa el archivo /var/log/syslog?
lsof /var/log/syslog
La salida de lsof incluye las siguientes columnas:
- COMMAND: Nombre del comando que inició el proceso.
- PID: Identificador del proceso.
- TID: Identificador del hilo (si aplica).
- USER: Nombre del usuario que inició el proceso.
- FD: Descriptor de archivo.
- TYPE: Tipo de nodo del archivo (DIR, REG, FIFO, CHR, BLK, SOCK, etc.).
- DEVICE: Identificador del dispositivo.
- SIZE/OFF: Tamaño del archivo o desplazamiento.
- NODE: Número de inode.
- NAME: Nombre del archivo o dirección de red.