GNU/Linux >> Znalost Linux >  >> Linux

lsof :Nejčastěji používané příklady

Příkaz lsof uvádí otevřené soubory, sokety a kanály. Pomocí příkazu lsof můžete zjistit, jaké soubory jsou udržovány otevřené (jako jsou knihovny nebo soubory protokolu) a jaké porty démoni poslouchají. Otevřené soubory můžete vyhledat pomocí příkazu lsof. lsof by měl být spuštěn jako superuživatel (root), aby viděl všechny otevřené soubory. Při použití bez jakýchkoli argumentů/voleb lsof vypíše všechny otevřené soubory pro aktuální aktivní procesy.

# 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
..........

Pochopení výstupu příkazu „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

Najděte otevřené soubory pod bodem připojení

Otevřené soubory v konkrétním adresáři lze najít pomocí lsof. Například otevřete textový soubor (nezavírejte jej – nechte jej otevřený) v adresáři pro úpravy pomocí vi a zkontrolujte výstup lsof v tomto adresáři v jiné relaci.

# cd /test
# vi a.txt

V jiné relaci zkontrolujte výstup lsof v tomto adresáři:

# 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

To lze také použít k odpojení zaneprázdněného přípojného bodu. Procesy udržující přípojný bod zaneprázdněný lze nalézt pomocí lsof.

Vyhledání informací o konkrétním procesu

Pro více informací o konkrétním procesu použijte volbu -p pro lsof:

# lsof -p 8797

Zobrazit adresy pro poslech

Démoni se mohou buď vázat na globální adresu IPv4 0.0.0.0, nebo na konkrétní adresy, jako je 127.0.0.1 (localhost). Démon vázaný na adresu localhost bude dostupný pouze ze samotného systému. Pomocí voleb -i a -nP pro lsof zobrazíte naslouchající porty bez hledání názvů hostitelů a služeb. Následující příklad ukazuje démona Apache httpd běžícího na localhost na nestandardním portu 7777. Ostatní systémy se nebudou moci připojit k tomuto httpd procesům:dobré pro zabezpečení, špatné pro vzdálené připojení.

Příklad:

# 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)

Příklad:
Naproti tomu následující proces OpenSSH sshd bude přijímat připojení z jiných systémů, protože je vázán na adresu 0.0.0.0, jak je označeno * před číslem portu.

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

Některé aplikace naslouchají na mnoha různých portech, jako je Berkeley Internet Name Daemon (BIND) s názvem démon, verze 9.

Příklad:

# 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)

Najít soubory otevřené procesem

Proces nemusí fungovat z jiných důvodů, jako je brána firewall, řízení přístupových služeb, jako je tcp_wrappers, nebo jiná nesprávná konfigurace. Použijte ping, telnet nebo nmap ke kontrole ze vzdáleného systému, zda požadavek nemůže blokovat něco jiného, ​​nebo spusťte tcpdump, abyste zjistili, zda připojení opouštějí zdroj nebo přicházejí do cílového systému.

Příklad
Chcete-li vidět, jaké soubory otevírají procesy, jejichž názvy začínají na „t“ (telnetd…) a bash. A chcete-li zjistit, jaké soubory otevírá init, použijte následující příkazy:

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

Příklad
Chcete-li zjistit, jaké soubory otevírají procesy, jejichž názvy začínají „testuser“, ale vylučují ty, jejichž vlastníkem je uživatel „tom“, použijte následující příkaz:

# lsof -c testuser -u ^tom

Najděte procesy otevřené uživateli

Chcete-li zjistit, jaké procesy otevírají uživatelé myuser a tom, použijte následující příkaz:

# lsof -u myuser,tom

Hledání portu používaného procesem

Chcete-li zjistit, jaké procesy používají konkrétní port, použijte následující příkaz:

# lsof -i TCP:389

Jak zjistit počet otevřených souborů pro název procesu a pid procesu seřazené podle počtu otevřených souborů?

To může být zajímavé, když se objeví chyba „příliš mnoho otevřených souborů“. Použijte níže uvedený skript, který využívá příkaz lsof:

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

Najděte procesy pomocí maximálních deskriptorů souborů

Limity deskriptorů souborů lze nastavit pomocí následujícího příkazu pro shell:

# ulimit -n 65536

Pomocí příkazu „lsof“ vyhledejte, co v systému používá popisy souborů.

# 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

Zobrazí se seznam všech procesů a odpovídající počet jimi otevřených souborů. Můžete si vybrat procesy, které mají nejvíce otevřených souborů, a podívat se, jaké to jsou.


Linux
  1. Příklady příkazů Linux tail

  2. Kurz Subversion:10 nejpoužívanějších příkazů SVN s příklady

  3. V příkladech příkazů v Linuxu

  1. [Linux]:15 nejčastěji používaných příkazů YUM s příklady

  2. Najít N nejfrekventovanějších slov v souboru?

  3. soubor Příklady příkazů v Linuxu

  1. Příkaz mv v Linuxu:7 základních příkladů

  2. 7 Příklady příkazu lsof v Linuxu

  3. 25 Nejčastěji používané příklady pravidel Linux IPTables