In Linux, tutto è considerato come file e organizzato all'interno di directory. lsof (Elenco file aperti) visualizza un elenco di file aperti. Aiuta principalmente a scoprire le informazioni sul processo che ha aperto i file. Oltre ai file, può elencare una directory, un file speciale di blocco, una libreria condivisa, un file speciale di caratteri, una normale pipe, una named pipe, una presa Internet, una presa di dominio UNIX e molti altri.
In questo tutorial impariamo a conoscere lsof command su Linux utilizzando esempi di facile comprensione .
lsof comando
Il comando lsof per impostazione predefinita è disponibile nella maggior parte delle distribuzioni Linux. Molto comunemente il comando lsof viene utilizzato quando non siamo in grado di smontare un disco, quindi il comando lsof aiuta a trovare il file aperto e il suo processo che lo causa.
Sintassi:
lsof [options] [names]
La sintassi sopra elencherà tutti i file che sono stati aperti da tutti i processi nel sistema.
1. Elenca tutti i file aperti
Per ottenere rapidamente un elenco di file aperti, digitare lsof. Elenca tutti i file che sono stati aperti dai vari processi del sistema.
$ lsof
Normalmente l'output sarà molto lungo, usi $ sudo lsof | more
, se desideri visualizzare i contenuti una schermata alla volta.
2. Elenca i file aperti per nome utente
lsof ha un comando che può essere utilizzato per trovare un elenco di file specifici aperti da un utente specifico.
Per elencare i file aperti in base a un nome utente usa il seguente comando:
$ lsof -u bobbin
Per più utenti utilizzare la seguente sintassi:
$ lsof -u [username1] -u [username2]
O
$ lsof -u [username1], [username2]
Per elencare i file aperti ad eccezione di determinati utenti:
$ lsof -u ^root
Per elencare solo l'id del processo usa -t
opzione.
$ lsof -t -u sonar
Ciò sarà utile nel caso in cui sia necessario terminare tutti i processi relativi a un uso specifico.
$ kill -9 lsof -t -u sonar
3. Elenca i file aperti per processo
lsof può anche essere usato per elencare i file aperti da un processo specifico usando il -c
opzione seguita dal nome del processo.
Ad esempio per elencare tutti i file aperti tramite ssh:
$ lsof -c ssh
4. Elenca i file aperti per nome file
Possiamo specificare il nome del file come argomento per elencare tutti i processi che hanno aperto un file specifico.
Per elencare tutti i processi aperti dal file /var/log/messages, digitare:
$ lsof /var/log/messages
5. Elenca i file aperti per ID processo
A ogni file viene assegnato un ID processo. Un singolo processo può aprire un numero elevato di file. Possiamo usare il comando lsof per elencare tutti i file aperti per un determinato ID processo.
Ad esempio, per elencare i file aperti con ID processo 2, digitare:
$ lsof -p 2
Incase per elencare i file aperti per più ID processo, digitare
$ lsof -p 2,3
Un sistema contiene un gran numero di processi, ognuno dei quali ha file aperti per l'uso. Un processo può avere molti processi figlio e questo processo è anche noto come processo padre.
Il comando lsof viene utilizzato con -R
opzione per ottenere un elenco di file aperti da PPID (Parent Process IDentification).
$ lsof -R
Puoi dall'output che la quinta colonna mostrerà il PPID dei file aperti.
Per trovare il PPID per un PID specifico, digitare:
$ lsof -p [PID] -R
6. Elenca i file aperti in una directory
Per elencare i file aperti in una directory specifica, possiamo usare il comando lsof.
Usa +d
opzione per visualizzare un elenco di file aperti nella directory fornita, tuttavia, non va nelle sottodirectory.
L'esempio seguente cerca i file aperti nella directory /var/log:
$ lsof +d /var/log
L'opzione +D comanda a lsof di cercare nell'intera profondità della directory tutte le istanze aperte, nonché tutti i file e le directory che contiene.
In questo caso, lsof cerca i file aperti in /var/log e nelle sue sottodirectory:
$ lsof +D /var/log
7. Elenca i file aperti con protocollo di rete
Un sistema può essere collegato a varie reti per vari scopi. Tutto in Linux è un file, possiamo esaminare i file che vengono aperti da alcune connessioni di rete nel sistema.
Per elencare i file aperti nel protocollo TCP, possiamo eseguire il comando seguente.
$ lsof -i TCP
Per elencare i file aperti nel protocollo UDP, possiamo eseguire il comando seguente.
$ sudo lsof -i UDP
8. Elenca i file aperti per numero di porta
lsof ha un comando che elenca in modo specifico i file aperti su un determinato numero di porta per elencare tutti i processi in esecuzione su quella porta.
Ad esempio per elencare i file aperti sulla porta numero 443
$ lsof -i :443
Puoi elencare i file aperti per più numeri di porte come segue:
$ lsof -i :80,443
Puoi anche elencare i file aperti di TCP o UDP per intervalli di porte.
$ lsof -i TCP:1-49151
9. Elenca i file aperti per IPv4/IPv6
C'è un'opzione in lsof per elencare i file di rete IPv4 o IPv6 aperti.
Per visualizzare i file aperti IPv4, digitare
$ lsof -i4
È possibile utilizzare la seguente sintassi per visualizzare i file aperti IPv6:
$ lsof -i6
10. Esegui lsof continuamente
La modalità di ripetizione consente a lsof di ripetere continuamente gli aggiornamenti con ritardi specifici. La modalità di ripetizione può essere abilitata utilizzando l'opzione '-r' o '+r', dove '+r' termina quando non vengono trovati file aperti e '-r' continuerà a essere elencato fino a quando non viene avviato un interrupt manuale. Ogni uscita del ciclo di ritardo verrà separata utilizzando '========'.
Sintassi:
$ lsof [options] -r/+r[time-interval]
Ad esempio:
$ lsof -u sonar -r5
lsof intestazioni di comando
Il lsof
ha varie colonne.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
Il nome del comando UNIX associato al processo è memorizzato nel COMMAND
colonna.
Il PID
visualizza l'ID di processo del comando.
Il USER
visualizza il nome dell'utente associato al processo seguente.
Il TID
mostra l'ID attività.
Il FD
è un descrittore di file che include abbreviazioni come cwd (Current Working Directory), txt (File di testo), mem (file mappato in memoria), rtd (directory principale) e molti altri.
TYPE
è l'abbreviazione di un tipo di file specifico, come REG (file normale), DIR (directory), CHR (file speciale di caratteri) e così via.
Il DEVICE
contiene i numeri del dispositivo.
Il SIZE/OFF
contiene la dimensione del file o l'offset del file in byte.
Il NODE
il valore della colonna rappresenta il numero di nodo di un file locale.
Il NAME
visualizza il nome del punto di montaggio e del file system del file, nonché l'indirizzo Internet.
Conclusione
In questo tutorial, abbiamo appreso del comando lsof e dei suoi usi con esempi. lsof fornisce una serie di opzioni per personalizzare l'output in base alle proprie esigenze. Ti consente di combinare facilmente e rapidamente più argomenti per ottenere l'output richiesto.