Sobes.tech
Middle

Come si può sapere con quali file un programma sta lavorando attualmente in Linux?

sobes.tech AI

Risposta dell'AI

Utilizzare l'utility lsof (elencare i file aperti).

# Uso di base di lsof per visualizzare un elenco di tutti i file aperti
lsof

Per ottenere un elenco di file aperti da un processo specifico (per PID):

# Visualizzare l'elenco dei file aperti dal processo con PID 1234
lsof -p 1234

Per ottenere un elenco di file aperti da un comando specifico (per nome):

# Visualizzare l'elenco dei file aperti da tutti i processi chiamati "nginx"
lsof -c nginx

Per ottenere un elenco di file aperti da un utente specifico:

# Visualizzare l'elenco dei file aperti dall'utente "user1"
lsof -u user1

Flag aggiuntivi di lsof:

Flag Descrizione
-i Mostra le connessioni di rete (socket)
-n Non convertire indirizzi IP in nomi host
-P Non convertire le porte in nomi di servizi
-r [N] Riavvia lsof ogni N secondi

Esempio di utilizzo per determinare quale processo utilizza un file specifico:

# Quale processo utilizza il file /var/log/syslog?
lsof /var/log/syslog

L'output di lsof include le seguenti colonne:

  • COMMAND: Nome del comando che ha avviato il processo.
  • PID: Identificatore del processo.
  • TID: Identificatore del thread (se applicabile).
  • USER: Nome dell'utente che ha avviato il processo.
  • FD: Descrittore di file.
  • TYPE: Tipo di nodo del file (DIR, REG, FIFO, CHR, BLK, SOCK, ecc.).
  • DEVICE: Identificatore del dispositivo.
  • SIZE/OFF: Dimensione del file o offset.
  • NODE: Numero di inode.
  • NAME: Nome del file o indirizzo di rete.