GNU/Linux >> Linux Esercitazione >  >> Linux

lsof :esempi più comunemente usati

Il comando lsof elenca file, socket e pipe aperti. Puoi usare il comando lsof per vedere quali file sono tenuti aperti (come librerie o file di registro) e quali porte ascoltano i demoni. Puoi cercare i file aperti usando il comando lsof. lsof dovrebbe essere eseguito come superutente (root) per vedere tutti i file aperti. Se utilizzato senza argomenti/opzioni, lsof elenca tutti i file aperti per i processi attivi correnti.

# lsof
COMMAND     PID   USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
init          1   root  cwd       DIR              253,0        4096          2 /
init          1   root  rtd       DIR              253,0        4096          2 /
init          1   root  txt       REG              253,0      150352    4587561 /sbin/init (deleted)
init          1   root  DEL       REG              253,0                4849693 /lib64/libnss_files-2.12.so
..........

Comprensione dell'output del comando "lsof":

COMMAND: Command using the file.
PID: PID of the file
USER: Owner of the file
FD: File descriptor. Different flags of File descriptor are as below:

#    :  The number in front of flag(s) is the file descriptor number used by the process to associate with the file
u    :  File open with Read and Write permission
r    :  File open with Read permission
w    :  File open with Write permission
W    :  File open with Write permission and with Write Lock on entire file
mem  :   Memory mapped file, usually for shared library

TYPE: File type. Different flags of File type are as below:
REG - Regular file
DIR - Directory

DEVICE: major, minor number of the device where file resides.
SIZE/OFF: File size
NODE: inode number
NAME: File name

Trova i file aperti sotto un punto di montaggio

I file aperti in una directory particolare possono essere trovati usando lsof. Ad esempio, apri un file di testo (non chiuderlo, tienilo aperto) in una directory per la modifica utilizzando vi e controlla l'output lsof in quella directory in un'altra sessione.

# cd /test
# vi a.txt

In un'altra sessione controlla l'output di lsof in quella directory:

# lsof /test
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2972 root  cwd    DIR  253,0     4096 262145 /test
vi      3012 root  cwd    DIR  253,0     4096 262145 /test

Questo può essere utilizzato anche per smontare il punto di montaggio occupato. I processi che tengono occupato il punto di montaggio possono essere trovati utilizzando lsof.

Trovare informazioni su un processo particolare

Per ulteriori informazioni su un particolare processo, utilizzare l'opzione -p per lsof:

# lsof -p 8797

Mostra indirizzi di ascolto

I demoni possono collegarsi all'indirizzo IPv4 globale 0.0.0.0 oa indirizzi specifici, come 127.0.0.1 (localhost). Un demone legato all'indirizzo localhost sarà raggiungibile solo dal sistema stesso. Utilizzare le opzioni -i e -nP per lsof per mostrare le porte in ascolto senza ricerche su nomi host e servizi. Ad esempio, quanto segue mostra il demone httpd di Apache in esecuzione su localhost alla porta non standard di 7777. Altri sistemi non saranno in grado di connettersi a questi processi httpd:buono per la sicurezza, cattivo per la connettività remota.

Esempio:

# lsof -i -nP | grep httpd
httpd 8616 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8614 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8623 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)

Esempio:
Al contrario, il seguente processo OpenSSH sshd accetterà connessioni da altri sistemi, poiché è legato all'indirizzo 0.0.0.0, come indicato dal * che precede il numero di porta.

# lsof -i -P | grep sshd
sshd 4341 root 3u IPv4 46438 TCP *:22 (LISTEN)

Alcune applicazioni sono in ascolto su molte porte diverse, come il Berkeley Internet Name Daemon (BIND) denominato daemon, versione 9.

Esempio:

# lsof -i -nP | grep ^named
named 9865 named 5u IPv6 0x03348be0 0t0 UDP *:53
named 9865 named 6u IPv6 0x0566re80 0t0 TCP *:53 (LISTEN)
named 9865 named 7u IPv4 0x03456b10 0t0 UDP 127.0.0.1:53
named 9865 named 8u IPv4 0x01870570 0t0 TCP 127.0.0.1:53 (LISTEN)
named 9865 named 9u IPv4 0x03456a40 0t0 UDP *:49164
named 9865 named 10u IPv6 0x03456970 0t0 UDP *:49165
named 8888 named 11u IPv4 0x0186fd54 0t0 TCP *:953 (LISTEN)
named 8888 named 13u IPv4 0x01387ee0 0t0 UDP 168.1.863.1:67
named 8888 named 14u IPv4 0x099899ce4 0t0 TCP 168.1.863.1:67(LISTEN)

Trova i file aperti da un processo

Un processo potrebbe non funzionare per altri motivi, come un firewall, un controllo del servizio di accesso come tcp_wrappers o qualche altra configurazione errata. Utilizzare ping, telnet o nmap per verificare da un sistema remoto se qualcos'altro potrebbe bloccare la richiesta, oppure eseguire tcpdump per vedere se le connessioni lasciano l'origine o arrivano al sistema di destinazione.

Esempio
Per vedere quali file vengono aperti dai processi i cui nomi iniziano con "t" (telnetd...) e bash. E per vedere quali file vengono aperti da init usa i seguenti comandi:

# lsof -c t
# lsof -c bash
# lsof -c init

Esempio
Per vedere quali file vengono aperti dai processi i cui nomi iniziano per "testuser", ma esclude quelli il cui proprietario è l'utente "tom", usa il comando seguente:

# lsof -c testuser -u ^tom

Trova i processi aperti dagli utenti

Per vedere quali processi vengono aperti dagli utenti myuser e tom, utilizzare il comando seguente:

# lsof -u myuser,tom

Trovare la porta utilizzata dal processo

Per vedere quali processi stanno utilizzando una particolare porta, usa il seguente comando:

# lsof -i TCP:389

Come trovare il numero di file aperti per un nome di processo e il pid di processo ordinato per numero di file aperti?

Questo può essere interessante quando viene visualizzato l'errore "troppi file aperti". Usa lo script seguente che utilizza il comando lsof:

# lsof | perl -lane '$x{"$F[0]:$F[1]"}++;END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'

Trova processi utilizzando il numero massimo di descrittori di file

I limiti dei descrittori di file possono essere impostati utilizzando il seguente comando per una shell:

# ulimit -n 65536

Usa il comando "lsof" per trovare cosa sta usando i descrittori di file sul sistema.

# lsof -g | awk '{print $2}' | sort -u > /tmp/lsof_sort.txt
# for var in `cat /tmp/lsof_sort.txt` 
do 
	echo `echo "$var ---- "``grep -x $var /tmp/lsof.txt | wc -l` 
done

Questo elencherà tutti i processi e il numero corrispondente di file aperti da loro. Puoi scegliere i processi che hanno il maggior numero di file aperti e vedere quali sono.


Linux
  1. [Linux]:15 comandi YUM più utilizzati con esempi

  2. Comando mv in Linux:7 esempi essenziali

  3. Tutorial Subversion:10 comandi SVN più utilizzati con esempi

  4. 25 Esempi di regole IPtables Linux più utilizzate

  5. file Esempi di comandi in Linux

Comando Linux WC con esempi

35 Esempi di script Bash

Esempi di comandi di Linux cat

Esempi di comandi gzip di Linux

Esempi di comandi dumpe2fs in Linux

Esempi di comandi fsck in Linux