Introduzione a Lsof

Sotto Linux, molti oggetti sono considerati un file, indipendentemente dal fatto che l'oggetto sia effettivamente un file, dispositivo, directory o socket. Elencare un file è facile, c'è la shell integrata lsper quello. E se un utente volesse vedere quali file sono attualmente aperti dal processo del server Web? O se quell'utente volesse scoprire quali file sono aperti in una determinata directory? Ecco dove lsofentra in gioco. Immagina lsofcome lscon l'aggiunta di "file aperti".

Si noti che mentre i BSD hanno un'utilità diversa per questo lavoro fstat, anche molti altri tipi di Unix (Solaris, per esempio) possiedono lsof. Le opzioni e i flag sono diversi sulle altre piattaforme, così come l'aspetto dell'output, ma in generale le conoscenze in questo articolo dovrebbero essere applicabili anche a loro.

Innanzitutto, diamo un'occhiata al formato lsofdell'output e al modo in cui deve essere letto. L'output normale di lsofsenza parametri sarebbe simile al seguente. Questo è stato tagliato per essere leggibile.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Queste colonne indicano quanto segue:

  • COMANDO - Il processo a cui appartiene un file aperto, in questo esempio tutto è correlato init.
  • PID - Il numero di identificazione del processo di detto processo.
  • UTENTE: l'utente con cui viene eseguito il processo. Perché initè quasi sempre root.
  • FD - Il descrittore di file del file, l'essere più comune:
    • cwd- La directory di lavoro corrente (è possibile notare la somiglianza con il pwdcomando che stampa la directory di lavoro corrente).
    • rtd - La directory principale di un processo.
    • txt- A text file, questo può significare un file di configurazione relativo al processo o il "codice sorgente" relativo (o appartenente a) al processo.
    • mem - Un cosiddetto "file mappato in memoria", che significa un segmento di memoria virtuale (leggi: RAM) che è stato assegnato a un file.
    • Un numero: il numero rappresenta il descrittore di file effettivo, il carattere dopo il numero è la modalità in cui viene aperto il file:
    • r - Leggere.
    • w - Scrivi.
    • u - Leggere e scrivere.
  • TYPE - Specifica il tipo effettivo del file, i più comuni sono:
    • REG - Un file normale.
    • DIR - Una directory.
    • FIFO - Il primo che entra è il primo ad uscire.
  • DISPOSITIVO: il numero maggiore e minore del dispositivo che contiene il file.
  • SIZE - La dimensione del file, in byte.
  • NODE - Il numero di inode del file.
  • NOME: il nome del file.

Questo potrebbe essere un po 'travolgente per ora, ma se lavori con lsofalcune volte, affonderà rapidamente nel tuo cervello.

Come accennato in precedenza, l'output di lsofè stato ridotto qui. Senza alcun argomento o filtro, lsofproduce centinaia di righe di output che ti lasceranno solo confuso.

Esistono due approcci di base per risolvere questo problema:

  • Utilizzare una o più delle lsofopzioni della riga di comando per restringere i risultati.
  • Inoltra l'output, ad esempio grep.

Mentre quest'ultima opzione può sembrare più comoda poiché non dovrai memorizzare le lsofopzioni della riga di comando, in genere non è così flessibile ed efficiente, quindi ci atterremo alla prima.

Immaginiamo che tu voglia aprire un file con il tuo editor di testo preferito e che l'editor di testo ti dice che può essere aperto solo in modalità di sola lettura perché un altro programma sta già accedendo ad esso. lsofti aiuterà a scoprire chi è l'autore:

lsof /path/to/your/file

Ciò produrrà un output simile al seguente:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Apparentemente, hai dimenticato di chiudere la sessione e quella più vecchia! Un problema molto simile si verifica quando provi a smontare una condivisione NFS e umountti dice che non è possibile perché qualcosa sta ancora accedendo alla cartella montata. Ancora una volta, lsofpuò aiutarti a identificare il colpevole:

lsof +D /path/to/your/directory/

Nota la barra finale, questo è importante. Altrimenti lsofsupponiamo che intendi un file normale. Non essere confuso dal +davanti alla bandiera - lsofha così tante opzioni da linea di comando che ha bisogno +oltre alle più comuni -. L'output sarebbe simile al seguente:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Ciò significa che il processo mocp, con il PID 5637, appartenente all'utente, musicha aperto un file chiamato RMS_GNU_SONG.ogg. Tuttavia, anche dopo aver chiuso quel processo, c'è ancora un problema: il volume NFS non può essere smontato.

lsofha un -cflag che mostra i file aperti con un nome di processo arbitrario.

lsof -c mocp

Ciò produrrebbe un output simile al seguente:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

In questo esempio, c'è un'altra istanza di mocpesecuzione, che ti impedisce di smontare la condivisione. Dopo aver interrotto tale processo, si desidera assicurarsi che l'utente musicnon abbia altri file potenzialmente problematici aperti. lsofha un -uflag per mostrare i file aperti da un utente specifico. Ricorda, un file non è sempre solo un file normale sul tuo disco rigido!

lsof -u music

Puoi anche passare più utenti, separati da virgole:

lsof -u music,moremusic

Una nota importante sul comportamento predefinito di lsof: i risultati sono basati su OR , il che significa che vedrai i risultati dei file aperti da processi di proprietà dell'utente musico dell'utente moremusic. Se si desidera visualizzare i risultati che corrispondono ai processi di proprietà di entrambi gli utenti, è necessario passare il flag -a:

lsof -au music, moremusic

Dato che entrambi gli utenti sono nel gruppo musicusers, puoi anche elencare i file in base al gruppo:

lsof -g musicusers

È inoltre possibile combinare flag della riga di comando:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

Nell'ultima riga, abbiamo aggiunto un altro flag speciale ^, che sta per un NOT logico . Se l'output è vuoto dopo aver eseguito quel comando, molto probabilmente lo smontaggio avrà esito positivo.

Negli esempi precedenti, abbiamo principalmente esaminato i file regolari. Che ne dici di socket e connessioni di rete?

Per elencare tutte le connessioni di rete correnti lsofha il -iflag:

lsof -i

L'output è simile a quello che abbiamo visto finora ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... fatta eccezione per una differenza: invece di nomi di file o directory, la colonna NAMEora mostra le informazioni di connessione. Ogni connessione è composta dalle seguenti parti:

  • Protocollo.
  • Nome host locale.
  • Porta di origine della connessione.
  • Nome DNS di destinazione.
  • Porto di destinazione.
  • Stato della connessione.

Come con molti altri strumenti, è possibile annullare la risoluzione di nomi e porte DNS ( -ne -P, rispettivamente). Il flag -iaccetta parametri aggiuntivi. Puoi specificare se mostrare o meno tcp, udpo icmpconnessioni o determinate porte:

lsof -i :25
or
lsof -i :smtp

Ancora una volta, i parametri possono essere combinati. L'esempio seguente ...

lsof -i tcp:80

... ti mostrerà solo connessioni TCP usando la porta 80. Puoi anche combinarlo con le opzioni che già conosci dai file "classici":

lsof -a -u httpd -i tcp

Questo ti mostrerà tutte le connessioni TCP aperte dall'utente httpd. Nota il -aflag, che modifica il comportamento predefinito di lsof(come menzionato in precedenza). Come con la maggior parte degli strumenti da riga di comando, puoi andare molto in profondità. Quanto segue mostrerà solo connessioni TCP il cui stato è "STABILITO":

lsof -i -s TCP:ESTABLISHED

A questo punto, dovresti avere una conoscenza di base su come lsoffunziona, insieme ad alcuni casi d'uso comuni. Per ulteriori letture, consultare la manpage di lsofsul proprio sistema.



Leave a Comment

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.