Il compito del comando lsof è "elencare i file aperti" nel sistema. Un file aperto non significa necessariamente un pdf o un file di testo, include file del disco o pipe utilizzati dai processi in background.
Questo comando è uno strumento utile per i debugger del sistema operativo e gli amministratori di sistema.
Anche se il comando lsof è un'utilità Linux preinstallata, gli utenti Ubuntu/Debian possono installare utilizzando apt se non lo hai installato:
sudo apt install lsof
Altri utenti Linux possono installare tramite il loro comando di installazione standard seguito da lsof
.
Passiamo rapidamente all'utilizzo di lsof
comando:
Elenca tutti i file aperti nel sistema
Eseguendo il comando lsof senza alcuna opzione, possiamo elencare tutti i file aperti nel sistema. In questo modo il terminale verrà svuotato con un sacco di dati. Pertanto, è consigliabile utilizzare less
comando che limita i dati generati da qualsiasi comando
sudo lsof | less

Premendo il 'ENTER'
o il tasto freccia giù, possiamo andare in fondo all'elenco.
Ciascun file nell'output fornisce informazioni importanti sul tipo e sull'utilizzo.
- COMANDO – Il comando Linux associato al processo responsabile dell'apertura del file.
- PID – ID processo del processo che contiene il file.
- TID – L'ID thread per il rispettivo processo.
- UTENTE – L'utente Linux che gestisce il processo.
- FD – Descrittore di file utilizzato dal processo per l'associazione al file.
- cwd – directory di lavoro corrente
- rtd – directory principale
- txt – un programma testuale come un codice
- mem – file mappato in memoria
- TIPO – Il tipo del file
- REG – File normale
- DIR – Directory
- CHR – File di caratteri
- LINK – File di collegamento simbolico
- DISPOSITIVO – I numeri di dispositivo relativi al file.
- TAGLIA/OFF – La dimensione del file o il suo offset in byte.
- NODO – Il numero dell'inode.
- NOME – Il nome del file.
Nota: Alcune informazioni come l'inode o il numero del dispositivo potrebbero essere oscurate se il comando non viene eseguito utilizzando i permessi di root.
Possiamo saperne di più sull'output dalle pagine di manuale a cui è possibile accedere dal terminale eseguendo man lsof.
Elenca tutti i file aperti da un utente specifico usando il comando lsof
Il lsof
comando supporta molte opzioni che possono essere applicate per filtrare i file aperti. Uno di questi è -u
opzione per visualizzare i file aperti per un utente specifico.
sudo lsof -u <USER_NAME> | less

La terza colonna si basa sull'utente responsabile dell'apertura del file. Simile all'output di base, il terminale è sovraffollato di dati privi di significato e quindi utilizza less
comando è consigliato.
Elenca i file aperti in una directory particolare
I file esistono all'interno di una directory, quindi è abbastanza banale poter estrarre i file aperti in una directory particolare.
lsof +D <DIR_NAME>

Nella figura sopra, abbiamo elencato il file attualmente aperto nella cartella Documenti. Il file aperto è un normale file C++.
Elenca i file aperti in un particolare file system con il comando lsof
Invece di una singola directory, lsof
comando può elencare i file aperti da un particolare file system. Ciò si ottiene inserendo il nome del file system dopo lsof
comando.
lsof <FILE_SYSTEM>

Nella figura sopra, mostriamo i file aperti nel file system /proc.
Elenca i file aperti da un particolare processo
Utilizzando gli ID di processo, possiamo filtrare i file aperti. Questo può essere fatto con l'aiuto di -p
opzione.
lsof -p <PID>

Lo snippet sopra del terminale mostra l'elenco dei file aperti per il processo con PID come 3404.
Nota: Il simbolo del cursore
(^)
viene utilizzato per negare i parametri inlsof
comando. Ad esempiolsof -p ^3404
, visualizza l'elenco dei file aperti per tutti i PID tranne 3404.
Elenca i file di rete aperti
Linux archivia una serie di file di rete per la memorizzazione di indirizzi IP o la configurazione dell'interfaccia di rete. Questi tipi di file aperti possono essere filtrati da -i
bandiera.
lsof -i

Questi file hanno determinate caratteristiche come i tipi di protocolli di rete. I file aperti possono essere ulteriormente filtrati utilizzando parametri specifici come:
- '4' – I file di rete per IPv4
- '6' – I file di rete per IPv6
- 'TCP' – I file di rete per TCP
- 'UDP' – I file di rete per UDP
- 'TCP:25' – I file di rete per TCP, con numero di porta 25
- 'TCP:1-25' – I file di rete per TCP, con numero di porta da 1 a 25
Ad esempio:
lsof -i 6

Utilizzo di lsof Command per cercare i file aperti sulla base del comando
Con migliaia di file aperti nel sistema, sembra impossibile cercare linearmente un comando particolare. Pertanto, il lsof
il comando ha il -c
opzione per filtrare i file aperti in base al comando.
lsof -c <COMMAND>

Conclusione
Il lsof
comando supporta molte opzioni efficaci per il debug e la risoluzione dei problemi di sistema. I lettori interessati possono visitare le pagine di manuale attraverso il terminale eseguendo man lsof
, per acquisire maggiori informazioni sui privilegi e sull'output del comando.
Sentiti libero di commentare di seguito per qualsiasi domanda o feedback.