Sobes.tech
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.