GNU/Linux >> Linux Esercitazione >  >> Linux

15 Esempi di comandi lsof Linux (Identifica i file aperti)

lsof sta per List Open Files.

È facile ricordare il comando lsof se lo pensi come "ls + of", dove ls sta per list e of sta per file aperti.

È un'utilità della riga di comando che viene utilizzata per elencare le informazioni sui file aperti da vari processi. In unix, tutto è un file (pipe, socket, directory, dispositivi, ecc.). Quindi, usando lsof, puoi ottenere le informazioni su tutti i file aperti.

1. Introduzione a lsof

Digitando semplicemente lsof verrà fornito un elenco di tutti i file aperti appartenenti a tutti i processi attivi.

# lsof

COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe
...

Per impostazione predefinita, viene visualizzato un file per riga. La maggior parte delle colonne sono autoesplicative. Spiegheremo i dettagli su un paio di colonne criptiche (FD e TYPE).

FD – Rappresenta il descrittore di file. Alcuni dei valori di FD sono,

  • cwd – Directory di lavoro corrente
  • txt – File di testo
  • mem ​​– File mappato in memoria
  • mmap – Dispositivo mappato in memoria
  • NUMERO – Rappresenta il descrittore di file effettivo. Il carattere dopo il numero, ad esempio '1u', rappresenta la modalità di apertura del file. r per leggere, w per scrivere, u per leggere e scrivere.

TIPO – Specifica il tipo di file. Alcuni dei valori di TYPEs sono,

  • REG – File normale
  • DIR – Directory
  • FIFO – First In First Out
  • CHR – File speciale di caratteri

Per un elenco completo di FD &TYPE, fare riferimento a man lsof.

2. Elenca i processi che hanno aperto un file specifico

Puoi elencare solo i processi che hanno aperto un file specifico, fornendo il nome del file come argomenti.

# lsof /var/log/syslog

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

3. Elenca i file aperti in una directory

Puoi elencare i processi che hanno aperto i file in una directory specificata usando l'opzione '+D'. +D ricorderà anche le sottodirectory. Se non vuoi che lsof ricorra, usa l'opzione '+d'.

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

4. Elenca i file aperti in base ai nomi dei processi che iniziano con

Puoi elencare i file aperti dai nomi dei processi che iniziano con una stringa, usando l'opzione '-c'. -c seguito dal nome del processo elencherà i file aperti dal processo che iniziano con quel nome del processo. Puoi dare più opzioni -c su una singola riga di comando.

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

5. Elenca i processi utilizzando un punto di montaggio

A volte, quando proviamo a smontare una directory, il sistema visualizzerà l'errore "Dispositivo o risorsa occupata". Quindi dobbiamo scoprire quali sono tutti i processi che utilizzano il punto di montaggio e uccidere quei processi per smontare la directory. Usando lsof possiamo trovare quei processi.

# lsof /home

Funzionerà anche quanto segue.

# lsof +D /home/

6. Elenca i file aperti da un utente specifico

Per trovare l'elenco dei file aperti da utenti specifici, usa l'opzione '-u'.

# lsof -u lakshmanan

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

A volte potresti voler elencare i file aperti da tutti gli utenti, aspettati alcuni 1 o 2. In tal caso puoi usare '^' per escludere solo l'utente particolare come segue

# lsof -u ^lakshmanan

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

Il comando precedente elencava tutti i file aperti da tutti gli utenti, aspettati l'utente 'lakshmanan'.

7. Elenca tutti i file aperti da un processo specifico

Puoi elencare tutti i file aperti da un processo specifico usando l'opzione '-p'. A volte sarà utile ottenere maggiori informazioni su un processo specifico.

# lsof -p 1753

COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0
...

8. Termina tutti i processi che appartengono a un particolare utente

Quando vuoi uccidere tutti i processi che hanno file aperti da un utente specifico, puoi usare l'opzione '-t' per elencare in output solo l'id del processo del processo e passarlo per kill come segue

# kill -9 `lsof -t -u lakshmanan`

Il comando precedente ucciderà tutti i processi appartenenti all'utente 'lakshmanan', che ha file aperti.

Allo stesso modo puoi anche usare '-t' in molti modi. Ad esempio, per elencare l'id di un processo che ha aperto /var/log/syslog può essere fatto da

# lsof -t /var/log/syslog

489

Parlando di kill, sapevi che ci sono 4 modi per uccidere un processo?

9. Combina più opzioni di elenco usando O/E

Per impostazione predefinita, quando utilizzi più di un'opzione di elenco in lsof, verranno messe in OR. Ad esempio,

# lsof -u lakshmanan -c init

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2
...

Il comando precedente utilizza due opzioni di elenco, '-u' e '-c'. Quindi il comando elencherà il processo appartiene all'utente "lakshmanan" e il nome del processo inizia con "init".

Ma quando vuoi elencare un processo che appartiene all'utente "lakshmanan" e il nome del processo inizia con "init", puoi usare l'opzione "-a".

# lsof -u lakshmanan -c init -a

Il comando precedente non produrrà nulla, perché non esiste alcun processo denominato "init" appartenente all'utente "lakshmanan".

10. Esegui lsof in modalità ripetizione

lsof supporta anche la modalità Ripeti. Prima elencherà i file in base ai parametri forniti, quindi ritarderà per secondi specificati e di nuovo elencherà i file in base ai parametri forniti. Può essere interrotto da un segnale.

La modalità di ripetizione può essere abilitata utilizzando '-r' o '+r'. Se viene utilizzato '+r', la modalità di ripetizione termina quando non vengono trovati file aperti. '-r' continuerà a elencare, ritardare, elencare fino a quando non viene fornito un interrupt indipendentemente dal fatto che i file siano aperti o meno.

Ogni uscita del ciclo verrà separata utilizzando '======='. Specificare anche il ritardo di tempo come '-r' | '+r'.

# lsof -u lakshmanan -c init -a -r5

=======
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan
inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /
inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash
inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so
inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh
=======

Nell'uscita sopra, per i primi 5 secondi, non c'è uscita. Dopodiché viene avviato uno script chiamato "inita.sh" che elenca l'output.

Trovare una connessione di rete

Anche le connessioni di rete sono file. Quindi possiamo trovare informazioni su di loro usando lsof.

11. Elenca tutte le connessioni di rete

Puoi elencare tutte le connessioni di rete aperte utilizzando l'opzione '-i'.

# lsof -i

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

Puoi anche utilizzare "-i4" o "-i6" per elencare solo "IPV4" o "IPV6" rispettivamente.

12. Elenca tutti i file di rete utilizzati da un processo specifico

Puoi elencare tutti i file di rete utilizzati da un processo come segue

# lsof -i -a -p 234

Puoi anche utilizzare quanto segue

# lsof -i -a -c ssh

Il comando precedente elencherà i file di rete aperti dai processi che iniziano con ssh.

13. Elenca i processi in ascolto su una porta particolare

Puoi elencare i processi in ascolto su una porta particolare usando "-i" con ":" come segue

# lsof -i :25

COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)

14. Elenca tutte le connessioni TCP o UDP

Puoi elencare tutte le connessioni TCP o UDP specificando il protocollo usando '-i'.

# lsof -i tcp; lsof -i udp;

15. Elenca tutti i file NFS (Network File System)

Puoi elencare tutti i file NFS usando l'opzione '-N'. Il seguente comando lsof elencherà tutti i file NFS utilizzati dall'utente 'lakshmanan'.

# lsof -N -u lakshmanan -a

Linux
  1. 7 Esempi di comando lsof in Linux

  2. Esempi pratici di comando rsync in Linux

  3. Comando Linux ls - Elenca file

  4. 8 Esempi di comandi TR Linux

  5. sa Esempi di comandi in Linux

Comando SS in Linux con esempi utili

Comando Linux lsof spiegato con 12 esempi pratici

Esempi di comandi id in Linux

Esempi di comandi lsattr in Linux

lsof Command in Linux con esempi

Comando di comunicazione Linux con esempi