Introduzione
Il lsof
comando sta per Elenco file aperti e mostra i file aperti e quale processo li utilizza. Poiché Linux vede ogni oggetto come un file, come dispositivi, directory, ecc., i file aperti non identificati impediscono agli utenti di modificarli.
Inoltre, l'enorme numero di file rende difficile trovare processi dannosi. Il lsof
comando aiuta a identificare questi processi in modo da poterli terminare.
Questo articolo spiegherà come utilizzare il Comando lsof in Linux con esempi.

Prerequisiti
- Accesso al terminale.
- Privilegi del gruppo Sudo.
- Privilegi di root per alcuni comandi.
lsof Sintassi dei comandi
Il lsof
la sintassi del comando è:
lsof [options]
Nota: Per la maggior parte dei comandi, esegui lsof
con sudo
per evitare errori di "autorizzazione negata".
ldi opzioni di comando
Il lsof
comando ha molte opzioni. La tabella seguente include gli argomenti utilizzati più spesso:
Opzione | Descrizione |
---|---|
lsof | Elenca tutti i file aperti. |
-b | Sopprime i blocchi del kernel. |
/ [file system] / | Mostra i file aperti in un particolare file system. |
/dev/tty* | Visualizza i file associati al terminale. |
-u [username] | Stampa tutti i file aperti da un utente. |
-u ^[username] | Stampa tutti i file aperti da tutti tranne un utente specifico. |
-c [process] | Elenca tutti i file a cui si accede da un particolare processo. |
-p [process ID] | Mostra tutti i file aperti associati a un ID processo specifico. |
-p ^[process ID] | Mostra i file aperti da tutti gli altri PID. |
-R | Elenca gli ID processo padre. |
+D [directory path] | Stampa tutti i file aperti in una directory. |
-i | Visualizza tutti i file a cui si accede dalle connessioni di rete. |
-i [IP version number] | Filtra i file in base al loro IP. |
- i [udp or tcp] | Filtra i file aperti in base al tipo di connessione (TCP o UDP). |
-i :[port number] | Trova i processi in esecuzione su una porta specifica. |
-i :[port range] | Trova i processi in esecuzione su intervalli di porte specifici. |
-t [file name] | Elenca gli ID dei processi che hanno avuto accesso a un particolare file. |
# kill -9 'lsof -t -u [user] ' | Uccide tutti i processi utente. |
-d mem | Mostra tutti i file mappati in memoria. |
[path] | grep deleted | Stampa i file eliminati bloccati. |
man | Apre la pagina man. |
ldi esempi di comandi
lsof
incorpora diversi argomenti che consentono agli utenti di gestire le attività di amministrazione del sistema e della rete. Di seguito sono descritti i lsof
più comuni casi d'uso.
Elenca tutti i file
Se eseguito senza alcuna opzione, lsof
elenca tutti i file aperti da qualsiasi processo:
sudo lsof

Il lsof
il comando restituisce molti dettagli. Pertanto, reindirizza sempre lsof
con less
per visualizzare l'output una pagina alla volta.
sudo lsof | less

Per andare in fondo all'elenco, premi Invio o freccia giù . Esci dall'elenco con Q .
Il lsof
l'output è costituito da diverse colonne. Tuttavia, non tutte le colonne si applicano a tutti i tipi di file. L'intestazione è simile a questa:

Le colonne predefinite nel lsof
output sono:
- COMANDO - Si riferisce al comando associato al processo che ha aperto il file.
- PID - Il numero di identificazione del processo che esegue il file.
- TID - Rappresenta un numero di identificazione dell'attività per il rispettivo processo. È vuoto se un processo, non un'attività, ha aperto il file.
- TASKCMD - Si riferisce al nome del comando nella prima colonna. Tuttavia, TASKCMD può differire quando un'attività cambia il nome del comando.
- UTENTE - Nomina l'utente che esegue il processo. La colonna contiene l'ID utente o il nome.
- FD - È il descrittore di file utilizzato dal processo per associare il file.
- TIPO - Mostra il tipo di file e il suo numero di identificazione.
- DISPOSITIVO - Stampa i numeri di dispositivo relativi al file.
- TAGLIA/OFF - Rappresenta il valore o il file preso durante il runtime (dimensione o offset).
- NODO - Il numero di nodo del file locale o il numero di inode della directory/directory principale.
- NOME - Mostra il percorso o il collegamento al file.
Nascondi i blocchi del kernel
Il lsof
predefinito l'output include anche i file aperti dal kernel. Per eliminare i blocchi del kernel, esegui lsof
con il -b
bandiera:
sudo lsof -b

Visualizza i file di un filesystem specifico
Usa il lsof
comando per mostrare i file aperti in un particolare file system:
sudo lsof / [file system] /
Ad esempio, per vedere tutti i file aperti nel sys
directory, esegui:
sudo lsof / sys/

Stampa i file del terminale
Elenca tutti i file aperti collegati al terminale prendendo di mira il dev
directory con lsof
:
lsof /dev/tty*

Mostra tutti i file a cui accede un utente
Usa lsof
con un -u
flag per visualizzare i file aperti da un utente specifico:
sudo lsof -u [username]
Ad esempio:
lsof -u saraz

Il comando elenca i file aperti da saraz .
Per stampare tutti i file aperti da tutti tranne un utente specifico, eseguire:
sudo lsof -u ^[username]
Ad esempio:
lsof -u ^saraz

L'output mostra i file controllati da utenti diversi da saraz .
Visualizza i file utilizzati da un processo
Il -c
flag apre tutti i file utilizzati da un processo:
sudo lsof -c [process]
Ad esempio, per elencare i file aperti dal wpa_suppl
processo, esegui:
sudo lsof -c wpa_suppl

Un'altra opzione è usare solo una parte del nome del programma:
sudo lsof -c wpa

lsof
restituisce tutti i programmi che iniziano con il termine wpa
, che include wpa_suppl .
Inoltre, il -c
l'opzione fornisce lo stesso output del piping lsof
con grep :
sudo lsof | grep wpa_suppl

Stampa file aperti da un PID specifico
Usa il -p
opzione per filtrare file specifici in base al numero ID processo (PID). Ad esempio, l'output seguente mostra tutti i file con PID 635.
sudo lsof -p 635

D'altra parte, aggiungi un cursore ^
simbolo per stampare i file aperti da tutti gli altri processi:
sudo lsof -p ^635

Inoltre, combinando lsof
con il -R
flag aggiunge il numero di identificazione del processo padre (PPID) all'output.
Per ottenere informazioni PPID per un PID specifico, eseguire:
sudo lsof -p [PID] -R
Ad esempio, per ottenere il PPID per il PID 635, digitare:
sudo lsof -p 635 -R

L'output mostra la colonna PPID aggiunta all'intestazione.
Mostra file in una directory
Per vedere tutti i file che sono stati aperti in una directory, usa il seguente comando:
sudo lsof +D [directory path]

Questa opzione ricorre anche alle sottodirectory. Per evitare che si ripetano, usa il +d
bandiera.
Mostra i file a cui si accede dalle connessioni di rete
Usa il -i
segnala con lsof
per verificare quali file vengono aperti da una connessione di rete. Esegui questo comando:
sudo lsof -i

L'esempio sopra stampa i file aperti da una connessione di rete, indipendentemente dal tipo di connessione.
Il -i
flag aggiunge molta versatilità a lsof
, consentendo agli utenti di filtrare i file in base a criteri diversi. Usa lsof -i [options]
a:
- Filtra i file in base al loro IP con:
sudo lsof -i [IP version number]
Ad esempio, esegui questo comando per visualizzare solo i file IPv4:
sudo lsof -i 4

Al contrario, stampa solo file IPv6 con:
sudo lsof -i 6

- Visualizza solo i file che utilizzano tcp o udp connessione fornendo il tipo di protocollo:
sudo lsof -i [udp or tcp]

- Trova i processi in esecuzione su una porta specifica . Questa opzione è utile per verificare quale file impedisce a un'altra app di collegarsi a una porta specifica. Eseguire il comando con il numero di porta o il nome del servizio dalla colonna del nome:
sudo lsof -i :[port number/name]

- Stampa tutti i file aperti su intervalli di porte specifici .
Ad esempio, per elencare i file aperti degli intervalli di porte UDP 1-1024, eseguire:

Elenca gli ID dei processi che contengono file aperti
Per visualizzare i PID per i processi che hanno aperto un determinato file, utilizza -t
e fornisci il nome del file.
lsof -t [file name]

Chiudi tutti i processi dell'utente
Il -t
flag uccide anche tutti i processi di un utente specifico. Ad esempio, per terminare tutti i processi dell'utente notsara , esegui questo comando come root:
# kill -9 'lsof -t -u notsara'

Stampa tutti i file mappati in memoria
lsof
stampa quali processi hanno file mappati in memoria. Per mostrare questi processi, esegui:
lsof -d mem

Visualizza i file eliminati bloccati
Un processo a volte mantiene bloccati file di grandi dimensioni anche dopo che sono stati eliminati, consumando spazio su disco.
Usa Lsof
per trovare i file che sono stati eliminati in Linux ma sono ancora bloccati da uno o più processi.
Ad esempio, trova i file eliminati dalla directory principale utilizzando una barra (/
) come simbolo di percorso:
sudo lsof [path] | grep deleted

Combina più opzioni
Il lsof
comando consente più elementi di ricerca sulla riga di comando. Usa E e O logica per combinare diversi argomenti per ottenere risultati specifici. Di seguito sono riportati gli esempi più comuni.
- Elenca i file aperti da un particolare utente o processo con:
sudo lsof -u [username] -c [process]

L'output stampa entrambi i file aperti dall'utente saraz e quelli utilizzati dal processo scatta .
- Visualizza solo i file che corrispondono al primo termine di ricerca e al secondo termine di ricerca con l'operatore logico
-a
(e):
sudo lsof -u [username] -c [process] -a

In questo caso, lsof
mostra solo i file aperti dall'utente saraz e la bash processo.
- Trova tutte le connessioni di rete di un utente:
sudo lsof -i -u [username] -a

Il -i
e -a
flag con il lsof
comando stampa tutte le attività dell'utente root .
Ulteriori informazioni su lsof
Il lsof
comando ha più opzioni di qualsiasi altro comando Linux. Il man
la pagina è lunga quasi 2000 righe e offre molte informazioni.
Per esplorare le possibilità del comando, esegui:
man lsof

Conclusione
Questo tutorial mostra come utilizzare il lsof
comando per la risoluzione di potenziali problemi di sicurezza e di sistema con esempi pratici.
Quindi, impara come copiare file e directory in Linux e confrontare due file usando il comando Linux diff.