Come usare il comando lsof di Linux

Contenuti

Indicatore della shell in Linux

Se tutto in Linux è un file, non ci devono essere solo file sul tuo disco rigido. Questo tutorial ti mostrerà come usare lsof per vedere tutti gli altri dispositivi e processi gestiti come file.

En Linux, tutto è un file

La frase spesso citata che tutto in Linux è un file è vera. Un file è una raccolta di byte. Quando leggono entro un programma o inviato a una stampante, loro sembrano creare un flusso di byte. Quando sono scritti per, loro accettare un flusso di byte.

Molti altri componenti di sistema accettano o generano flussi di byte, come le tastiere, connessioni presa, stampanti e processi di comunicazione. Perché accettano, generare o accettare e generare flussi di byte, questi dispositivi possono essere gestiti, a un livello molto basso, come se fossero file.

Questo concetto di design ha semplificato l'implementazione del sistema operativo Unix. Significava che si poteva creare un piccolo set di controller, strumenti e API per gestire un'ampia gamma di risorse diverse.

I dati e i file di programma che risiedono sul disco rigido sono vecchi file del file system. Possiamo usare il ls comando per elencarli e conoscere alcuni dettagli su di essi.

Come facciamo a scoprire tutti gli altri processi e dispositivi che vengono trattati come se fossero file?? Noi usiamo il lsof comando. Questo elenca i file aperti sul sistema. In altre parole, elenca tutto ciò che viene gestito come se fosse un file.

IMPARENTATO: Cosa significa “tutto è un file” en Linux?

Il comando lsof

Molti dei processi o dispositivi che lsof possono segnalare che appartengono a root o sono stati avviati da root, quindi dovrai usare il sudo comando con lsof.

E perché questa lista sarà molto lunga, lo canalizzeremo less .

sudo lsof | meno

Prima lsof L'output appare Gli utenti di GNOME possono vedere un messaggio di avviso nella finestra del terminale.

lsof: AVVERTIMENTO: non può essere() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

lsof tenta di elaborare tutti i file system montati. Questo messaggio di avviso viene generato perché lsof ha trovato un File system virtuale GNOME (GVFS ·). Questo è un caso speciale di file system nello spazio utente (FUSIBILE). Funge da ponte tra GNOME, le TUE API e il tuo kernel. Nessuno, nemmeno la radice, È possibile accedere a uno di questi file system, a parte il proprietario che lo ha allestito (per questo caso, GNOMO). Puoi ignorare questo avviso.

L'uscita di lsof è molto ampio. Le colonne a sinistra sono:

Le colonne a destra sono:

Le colonne lsof

Non tutte le colonne si applicano a tutti i tipi di file aperti. È normale che alcuni di essi siano vuoti.

  • Comando: Il nome del comando associato alla procedura che ha aperto il file.
  • PID: Numero identificativo della procedura che ha aperto il file.
  • TEMPO: Numero di identificazione dell'attività (ciao). Una colonna vuota significa che non è un'attività; è una procedura.
  • Utente: ID utente o nome dell'utente a cui appartiene la procedura, o l'ID utente o il login della persona che possiede la directory in /proc dove lsof trova informazioni sulla procedura.
  • FD: Visualizza il descrittore di file del file. I descrittori di file sono descritti di seguito.
  • scrive: tipo di nodo associato al file. I tipi di note sono descritti di seguito.
  • Dispositivo: Contiene i numeri del dispositivo, separati da virgole, per un personaggio speciale, blocco speciale, regolare, Directory o file NFS, o un indirizzo di riferimento del kernel che identifichi il file. Può anche visualizzare l'indirizzo di base o il nome del dispositivo di un dispositivo socket Linux AX.25..
  • Taglia / Spento: Visualizza la dimensione del file o l'offset del file in byte.
  • Nodo: Visualizza il numero di nodo di un file locale o il numero di inode di un file NFS sull'host del server o sul tipo di protocollo Internet. È possibile visualizzare STR per un flusso o l'IRQ o il numero di inode di un dispositivo socket Linux AX.25.
  • Nome: Visualizza il nome del punto di montaggio e il file system in cui risiede il file.

Colonna FD

Il descrittore di file nella colonna FD può essere una delle tante opzioni; la pagina del manuale elencali tutti.

La voce della colonna FD può essere composta da tre parti: un descrittore di file, un carattere di modalità e un carattere di blocco. Alcuni descrittori di file comuni sono:

  • cwd: Directory di lavoro corrente.
  • err: Errore di informazione FD (vedi la colonna NOME).
  • ltx: Testo della libreria condivisa (codice e dati).
  • m86: File mappato unione DOS.
  • meme: File mappato in memoria.
  • mmap: Dispositivo mappa di memoria.
  • pd: Elenco dei genitori.
  • rtd: Root directory.
  • testo: Testo del programma (codice e dati)
  • Un numero che rappresenta un descrittore di file.

Il carattere della modalità può essere uno dei seguenti:

  • R: Accesso in lettura.
  • w: Accesso in scrittura.
  • tuo: Accesso in lettura e scrittura.
  • ”: Un carattere spaziale, se la modalità è sconosciuta e non è presente alcun carattere di blocco.
  • : Modalità sconosciuta e c'è un carattere di blocco.

Il carattere di blocco può essere uno dei seguenti:

  • R: Leggi il blocco su parte del file.
  • R: Leggi il blocco sull'intero file.
  • w: Blocco scrittura su parte del file.
  • W: Blocco scrittura su intero file.
  • tuo: Leggi e scrivi blocco di qualsiasi lunghezza.
  • tu: Tipo di blocco sconosciuto.
  • ”: Un carattere spaziale. Nessun blocco.

La colonna TIPO

esistere più di 70 Biglietti che può apparire nella colonna TIPO. Alcune voci comuni che vedrai sono:

  • REG: File di file system normale.
  • A TE: directory.
  • FIFO: Primo ad arrivare e primo ad uscire.
  • CHR: File speciale di caratteri.
  • BLK: Blocca file speciale.
  • Internet: Presa Internet.
  • unix: Socket de dominio UNIX

Visualizza i processi che hanno aperto un file

Per vedere i processi che hanno aperto un determinato file, fornire il nome del file come parametro per lsof. Come esempio, per vedere i processi che sono stati aperti kern.log file, usa questo comando:

sudo lsof /var/log/kern.log

lsof risponde mostrando la procedura univoca, rsyslogd che è stato avviato dall'utente syslog.

Visualizza tutti i file aperti da una directory

Per visualizzare i file che sono stati aperti da una directory e i processi che li hanno aperti, passa la directory a lsof come parametro. Devi usare il +D opzione (directory).

Per vedere tutti i file aperti in /var/log/ directory, usa questo comando:

sudo lsof +D /var/log/

lsof risponde con un elenco di tutti i file aperti in quella directory.

Per vedere tutti i file che sono stati aperti dal /home directory, usa il seguente comando:

sudo lsof +D /home

I file sono stati aperti da /home viene mostrata la directory. Nota che con descrizioni più brevi in ​​alcune colonne, l'elenco completo è più limitato.

Elenca i file aperti da una procedura

Per visualizzare i file che sono stati aperti con una procedura particolare, usa el -c (comando) opzione. Tieni presente che puoi fornire più di una definizione di ricerca per lsof al momento.

sudo lsof -c ssh -c init

lsof fornisce un elenco di file che sono stati aperti da uno qualsiasi dei processi forniti sulla riga di comando.

Visualizza i file aperti da un utente

Per limitare la visualizzazione ai file che sono stati aperti da un utente specifico, Utilizzare il -u opzione (Nome utente). In questo esempio, vedremo file che sono stati aperti da processi di proprietà di Mary o avviati per conto di Mary.

sudo lsof -u mary

Tutti i file elencati sono stati aperti per conto dell'utente Mary. Ciò include i file che sono stati aperti dall'ambiente desktop., come esempio, o semplicemente come risultato dell'accesso di Mary.

Escludi file aperti da un utente

Per escludere i file aperti da un utente, Utilizzare il ^ operatore. L'esclusione degli utenti dalla lista rende più facile trovare le informazioni che ti interessano. Devi usare il -u opzione come prima, e aggiungi il ^ carattere all'inizio del nome dell'utente.

sudo lsof +D /home -u ^mary

Questa volta, la lista di /home La directory non include nessuno dei file aperti dall'utente Mary.

Elenco dei file aperti da una procedura

Per elencare i file che sono stati aperti attraverso una procedura specifica, Utilizzare il -p (processi) e fornire l'id della procedura come parametro.

sudo lsof - P 4610

Tutti i file che sono stati aperti con l'ID della procedura che fornisci vengono elencati automaticamente.

Elenco degli ID di procedura che hanno aperto un file

Per visualizzare gli ID di procedura dei processi che hanno aperto un determinato file, usa el -t (conciso) e fornisci il nome del file nella riga di comando.

sudo lsof -t /usr/share/mime/mime.cache

Gli ID delle procedure sono visualizzati in un semplice elenco.

Usa le ricerche AND e OR

Elenchiamo i file che l'utente Mary ha aperto, che sono legati ai processi SSH. Sappiamo che possiamo fornire più di un elemento di ricerca sulla riga di comando, quindi dovrebbe essere facile.

sudo lsof -u mary -c ssh

Ora vediamo l'output di lsof. Non sembra buono; ci sono voci nell'output che sono state avviate da root.

Non è quello che ci aspettavamo. Cosa è successo?

Quando fornisci più termini di ricerca lsof restituirà qualsiasi file che corrisponde al primo termine di ricerca oh il secondo termine di ricerca, e così via. In altre parole, eseguire una ricerca OR.

Produrre lsof eseguire una ricerca AND, Utilizzare il -a (e) opzione. Ciò significa che gli unici file da elencare saranno quelli che corrispondono al primo termine di ricerca, e il secondo termine di ricerca, e così via.

Proviamo di nuovo e usiamo il -a opzione.

sudo lsof -u mary -c ssh -a

Ora, ogni file nell'elenco è uno che è stato aperto da o per conto di Mary, ed è correlato al comando SSH.

Aggiorna automaticamente lo schermo

Possiamo usare il +|-r (ripetere) opzione da mettere lsof in modalità ripetizione. L'opzione di ripetizione può essere applicata in due modi, o +r oh -r. Dobbiamo anche aggiungere il numero di secondi che vogliamo lsof aspetta prima di aggiornare lo schermo.

L'uso dell'opzione di ripetizione in qualsiasi formato rende lsof visualizzare i risultati come al solito, ma aggiungi una linea tratteggiata nella parte inferiore dello schermo. Attendi il numero di secondi fornito sulla riga di comando, quindi aggiorna lo schermo con un nuovo set di risultati.

Con il -r opzione questo continuerà fino a quando non premi Ctrl + C. Con il +r formato, continuerà fino a quando non ci sono risultati da visualizzare, o finché non premi Ctrl + C.

sudo lsof -u mary -c ssh -a -r5

Nota la linea tratteggiata in fondo all'elenco. Questo separa ogni nuova visualizzazione dei dati quando l'output viene aggiornato.

Visualizzazione dei file associati alle connessioni Internet

il -i L'opzione (Internet) consente di visualizzare i file aperti dai processi associati alla rete e alle connessioni Internet.

lsof -i

Vengono visualizzati tutti i file aperti dalla rete e dalle connessioni Internet.

Visualizzazione di file associati a connessioni Internet per ID procedura

Per visualizzare i file aperti da connessioni Internet che sono associati a uno specifico ID di procedura, Aggiungi il -p opzione e -a opzione.

Qui cerchiamo i file aperti tramite una connessione Internet o di rete, attraverso una procedura con un ID di 606.

sudo lsof -i -a -p 606

Tutti i file aperti vengono visualizzati per ID procedura 606 che sono associati a connessioni di rete o Internet.

Visualizzazione di file associati a connessioni e comandi Internet

Possiamo usare il -c (comando) opzione per cercare file aperti da processi specifici. Per cercare file che sono stati aperti su Internet o connessioni di rete associate al ssh processi, usa il seguente comando:

lsof -i -a -c ssh

Tutti i file aperti a causa di processi ssh sono elencati nell'output.

Visualizzazione di file associati a porte e connessioni Internet

possiamo fare lsof Segnala i file che sono stati aperti tramite connessioni di rete o Internet su una porta specifica. Per fare questo, noi usiamo il : carattere seguito dal numero di porta.

Qui stiamo chiedendo lsof per elencare i file che sono stati aperti su connessioni di rete o Internet attraverso la porta 22.

lsof -i :22

Tutti i file elencati sono stati aperti dai processi associati alla porta 22 (quale è la porta predefinita per le connessioni SSH).

Visualizzazione di file associati a connessioni e protocolli Internet

possiamo chiedere lsof per visualizzare i file che sono stati aperti dai processi associati alla rete e alle connessioni Internet, stanno usando un protocollo specifico. Possiamo selezionare da TCP, UDP e SMTP. Usiamo il protocollo TCP e vediamo cosa otteniamo.

sudo lsof -i tcp

Gli unici file elencati sono quelli aperti dai processi che utilizzano il protocollo TCP.

Abbiamo solo scalfito la superficie

Questa è una buona base in alcuni casi d'uso comuni per lsof, Ma c'è molto di più. Quanto di più può essere giudicato dal fatto che la pagina man ha più di 2.800 Linee.

il lsof Il comando può essere utilizzato per scavare sempre più a fondo nei livelli di file aperti e pseudo-file. Abbiamo fornito una mappa schematica; l'atlante è in la pagina del manuale.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.