Introduzione
Ad un certo punto della loro carriera, tutti risolveranno un problema. E ognuno ha il proprio passaggio preferito per la risoluzione dei problemi da utilizzare. Per molti amministratori di sistema, il primo passo da fare è assicurarsi che tutto sia aggiornato. Per altri si tratta solo di controllare i file di registro prima di trovare la soluzione. Per me e altri qui su Atlantic.Net, è lsof; un'utilità della riga di comando utilizzata per elencare le informazioni sui file che vengono aperti da vari processi.
Utilizzato principalmente per la risoluzione dei problemi di connessione di rete, lsof è un'applicazione potente ma troppo poco conosciuta. Se hai familiarità con i comandi Linux generali, lsof è uno strumento facile da ricordare perché "elenca i file aperti".
Prerequisiti
lsof è un comando specifico di Unix. Per usarlo per identificare le informazioni di sistema, dovrai utilizzare un sistema in stile Unix, come CentOS o Ubuntu. lsof è preinstallato su questi sistemi.
Se utilizzi un sistema Windows, puoi ottenere risultati simili utilizzando il menu Process Explorer, oltre ai comandi netstat e sysinternals.
ldi flag di utilizzo
Una cosa che è importante capire è che lsof ha un gran numero di flag disponibili che possono essere usati per modificare l'output che ricevi. Di seguito vengono mostrati tutti i flag disponibili:
[example@unixlinux.online ~]# lsof --help usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s] [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
L'esame di ogni bandiera sarebbe un articolo molto più lungo, quindi manterremo le cose semplici e tratteremo solo le opzioni quotidiane più utilizzate.
Flag di opzioni chiave
È importante capire come funziona lsof, soprattutto per impostazione predefinita. Quando si passano le opzioni al comando lsof, il comportamento predefinito è O i risultati. Ciò significa che l'esecuzione di lsof utilizza sia -i
così come il -p
flag otterrai i risultati di entrambi.
Questi sono i flag usati più spesso nella nostra risoluzione dei problemi:
default : with no options flags, lsof lists all open files for active processes grouping : it's possible to group options, such as passing the flags though -nPi. Just keep an eye out for which options take additional parameters -a : AND the result (instead of the default OR) -l : show the userID instead of the username in the output -h : get help -i : selects the listing of files that match -n : stop host name resolution of network numbers -t : get process IDs only -P : stop conversion of port numbers to port names
Per iniziare
Elenca tutti i file aperti.
# lsof

Elenca tutti i file aperti.
Mostra tutte le connessioni:
# lsof -i

Mostra tutte le connessioni
Il server su cui stiamo testando è un nuovo server Atlantic.Net CentOS6 su cui non sono installati pacchetti software aggiuntivi. Puoi vedere dall'output sopra che il server sta ascoltando solo il traffico SSH e SMTP. Se vuoi vedere il numero di porta effettivo invece del nome del servizio, dovremo eseguire il comando utilizzando il -Pi
bandiera:
lsof -Pi

Mostra tutte le connessioni in ascolto sulle porte senza risolvere il nome del servizio.
Come puoi vedere, tutti i *:ssh e localhost:smtp l'output è stato convertito in *:22 e localhost:25 . Per la maggior parte degli amministratori di sistema, soprattutto se non sei abituato a esaminare e analizzare i servizi di sistema, spesso è più facile risolvere i problemi identificando direttamente la porta invece di utilizzare il nome del servizio.
Mostra connessioni su porte IPv6:
lsof -i6

Mostra connessioni su porte IPv6
Rispetto a lsof -i
comando precedente, questo comando cerca specificamente i servizi con un TYPE di IPv6 .
Mostra connessioni su una porta specifica senza risolvere il nome del servizio:
lsof -Pi :25

Mostra le connessioni su una porta specifica senza risolvere il nome del servizio
L'analisi specifica di tutti i processi correnti in ascolto sulla porta 25 mostra che ci sono due processi correnti sul sistema (uno IPv4, uno IPv6) in esecuzione. Nessuno di questi processi è in ascolto di connessioni esterne.
Mostra porte di ascolto:
lsof -i -sTCP:LISTEN

Mostra le porte di ascolto
Questo comando elenca tutti i processi in esecuzione che si trovano in LISTEN stato, il che significa che stanno attivamente ascoltando le connessioni in entrata.
Mostra chi sta utilizzando un file:
lsof /path/of/file
Puoi vedere dal comando precedente due processi sono attivamente in esecuzione e utilizzano /var/log/ messaggi file in qualche modo.
Mostra ricorsivamente tutti i file aperti in una directory:
lsof +D /usr/lib

Mostra ricorsivamente tutti i file aperti in una directory
Sul nostro sistema di test, utilizzando il +D
flag mostra sei processi aperti separati originati da /usr/lib directory.
Mostra file aperti per utente:
lsof -u atlantic-noc

Mostra i file aperti per utente
L'utente atlantic-noc ha una sessione SSH attiva con un ID processo (PID) di 7769.
Mostra tutti i file aperti con un ID processo specifico:
lsof -p 7790

Mostra tutti i file aperti con un ID processo specifico
Il -p
l'opzione ha filtrato i file aperti in modo che vengano mostrati solo quelli con l'ID processo specificato. In questo caso, PID 7790. È possibile selezionare più PID specificando una virgola, ad esempio -p 7789,7790
Mostra tutte le attività di rete per un utente specifico:
lsof -a -u atlantic-noc -i
Il
-a
flag combina (modifica il comportamento OR predefinito in AND) il -u
e -i
flag per fornire un elenco di utilizzo dei file di rete per l'utente atlantic-noc; in questo caso solo una singola sessione SSH.
Nient'altro?
I comandi presentati sopra sono solo l'inizio per lsof; uno strumento versatile che può essere utilizzato da solo o in combinazione con altri strumenti di risoluzione dei problemi di Unix, come strace. Ma questo è un articolo per un'altra volta.
Ricordati di controllare il nostro blog per eventuali aggiornamenti a questo articolo, altri post relativi a Linux e ulteriori istruzioni sui comandi Unix o scopri di più sui nostri affidabili servizi di hosting VPS.