Sprievodca používaním príkazu „lsof“ pre proces
Ak ste častým používateľom systémov Linux alebo Unix, určite ste už počuli frázu: „V Linuxe je všetko súbor“. Toto môže byť kategorizované ako prílišné zjednodušenie konceptu, ale ukázalo sa, že je veľmi užitočné pochopiť, ako fungujú súbory v systéme Linux.
Nie všetko, čo sa objaví v prostredí Linuxu, musí byť súbor. Niekedy to môže byť proces, môže to byť špeciálny súbor predstavujúci informácie o hardvéri, adresáre a iné veci.
Tento tutoriál vás prevedie hľadaním všetkých súborov, ktoré sú otvorené pre konkrétny proces v systéme Linux.
Úvod do lsof
Príkaz
Krása systému Linux je v tom, že môžete ovládať a spravovať celý váš systém prostredníctvom terminálu, za predpokladu, že dobre poznáte príkazy. Akonáhle sú príkazy známe, potom sa všetky úlohy na termináli stanú prechádzkou.
lsof
znamenať 'Zoznam otvorených súborov‘. Keď poznáte dlhú verziu príkazu, bude pre vás veľmi jednoduché príkaz pochopiť a produktívne ho používať.
The lsof
zobrazí zoznamy otvorených súborov, soketov a kanálov. Pomocou tohto príkazu môžete ľahko vyhľadať otvorené súbory. Keď lsof
príkaz sa používa bez možnosti, zobrazuje všetky otvorené súbory s ohľadom na aktívne procesy, ktoré sú spustené.
Poznámka: Uistite sa, že používate sudo
pri vykonávaní príkazov.
Pomocou The lsof
Príkaz
Budeme študovať výstup z lsof
podrobne príkazy. Preštudujte si nasledujúci príkaz.
sudo lsof | menej
Poznámka: Ak priamo spustíme lsof
výstup bude veľmi veľký a môže spôsobiť zmätok pri ďalšom postupe. Preto som tu použil lsof | menej
príkaz pre pohodlie tutoriálu.
Výkon:
gaurav@ubuntu:~$ sudo lsof | menej COMMAND PID TID UŽÍVATEĽ FD TYP VEĽKOSŤ/VYP. NÁZOV UZLA kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31/cw31 root neznámy /proc DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt neznámy /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR2049 root rtd DIR / rcu_tasks 33 root txt neznámy /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt neznámy /proc/34/exe
Nasledujú atribúty, ktoré sú zobrazené pomocou lsof
príkaz.
Parameter | Popis |
---|---|
Príkaz | Zobrazuje názov príkazu, ktorý otvára súbor. |
PID | Identifikátor procesu číslo procesu, ktorý otvára súbor. |
TID | Číslo identifikátora vlákna. Môže to byť vlákno alebo číslo úlohy. |
Používateľ | ID používateľa alebo meno používateľa, ktorý je vlastníkom procesu. |
FD | Zobrazuje deskriptor súboru. |
Typ | Typ uzla priradeného k súboru. |
Zariadenie | Zobrazuje čísla zariadení. |
Veľkosť/Vyp | Zobrazuje veľkosť súboru v bajtoch. |
Uzol | Zobrazuje číslo inodu adresára alebo nadradeného adresára. |
názov | Zobrazuje názov systému súborov, kde sa proces nachádza. |
Zoznam procesov
V prvom rade je dôležité, aby ste získali procesy, ktoré sú spustené, a ich príslušné ID procesov. Linux poskytuje rôzne príkazy na zoznam procesov spolu s ich atribútmi, ako je PID, používateľ, adresár atď.
Môžete použiť príkazy ako top
, ps
, htop
, pstree
na zoznam procesov na termináli.
V priebehu tutoriálu budem používať top
príkaz tak urobiť. The top
poskytuje dynamický pohľad na spustený systém v reálnom čase. Zobrazuje tiež všetky procesy a vlákna, ktoré momentálne spravuje jadro Linuxu. Preštudujte si nižšie uvedený blok a skontrolujte výstup top
príkaz.
Syntax:
sudo top
Výkon:
gaurav@ubuntu:~$sudo top PID UŽÍVATEĽ PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1,142g 103584 R 88,2 30,5 87:41,088 Web Content 208 30,5 27 27 27 285 203 27 27 088 Web 34,41 mongod 13765 Gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1: 42,34 webového obsahu 1 koreň 20 0 225904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 koreň 20 0 0 0 0 S 0,0 0,0 0: 00,05 KThreadd 4 koreňový 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 koreň 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 koreň 20 0 0 0 0 S 0,0 0,8 d 0,0ir 0:0ir 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 koreň 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 koreň rt 0 0 0 0 S 0,0 0,0 0:03,13 migrácia
Vo vyššie uvedenom bloku môžeme vidieť všetky informácie súvisiace s procesom na jednom mieste. Odtiaľ môžeme nájsť PID
procesu, ktorého musíme zobraziť otvorené súbory pomocou lsof
príkaz.
Ak však chcete zistiť ID procesu iba konkrétneho procesu a vyhnúť sa iným nežiaducim procesom, použite nasledujúci príkaz.
Syntax:
sudo top | grep [Process_Name]
Príklad:
gaurav@ubuntu:~$ hore | grep terminál 13819 Gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53,63 gnome-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 1.0 0.5 0: 53,66 gnome-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53,67 gnome -terminál- gaurav@ubuntu:~$
Tu sme konkrétne zobrazili ID procesu procesu, ktorý má v názve procesu reťazec „terminál“. Táto metóda je užitočná, keď nepoznáte úplný názov procesu alebo PID.
Zobrazenie otvorených súborov súvisiacich s procesom pomocou PID
Vo vyššie uvedenom bloku sme sa naučili, ako získať informácie súvisiace s procesom pomocou príkazu top. Teraz použijeme PID
zodpovedajúce akémukoľvek procesu v systéme a pokúste sa zobraziť zoznam otvorených súborov súvisiacich s týmto procesom pomocou lsof
príkaz.
Z vyššie uvedeného výstupu zoberme proces zodpovedajúci PID 1173, ktorý je zvýraznený. Budeme používať lsof -p [PID]
príkaz tak urobiť.
Syntax:
sudo lsof -p [PID]
Tento príkaz vezme PID procesu ako vstup a zobrazí zoznam všetkých súborov zodpovedajúcich tomuto PID.
Výkon:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: VAROVANIE: nemôže stat() fuse.gvfsd-fuse súborový systém /run/user/1000/gvfs Výstupné informácie môžu byť neúplné. COMMAND PID UŽÍVATEĽ FD TYP ZARIADENIA VEĽKOSŤ/VYPNUTIE NÁZOV UZLA mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb, mongodb, mongodb TXT753608 REG 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 2624643 /624643 monsolv-2dbglin. mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86002 /lib/x864slib_64-linunsx mongmini_64-linuns 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/localem mongod117076ve lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod,861 mem 29lib29 x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb me m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64_64 mongoddb21-REGm 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64/[email protected]. :~$
Súbory, ktoré sú otvorené pre proces s ID procesu 1713, sa zobrazia pomocou lsof
príkaz.
Poznámka: Používatelia GNOME sa môžu stretnúť s nižšie uvedeným varovaním. Pokojne to môžete ignorovať.
lsof: VAROVANIE: can't stat() fuse.gvfsd-fuse súborový systém /run/user/1000/gvfs Výstupné informácie môžu byť neúplné.
Zoznam otvorených súborov súvisiacich s procesom pomocou názvu procesu
The lsof
príkaz vám tiež poskytuje možnosť zobraziť zoznam otvorených súborov pomocou názvov procesov. Názvy by mali byť poskytnuté príkazu ako vstupný reťazec. Ak chcete použiť túto možnosť, pozrite si nižšie uvedenú syntax.
Syntax:
sudo lsof -c [názov procesu]
Príklad:
sudo lsof -c mysql
Výkon:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: VAROVANIE: nemôže stat() fuse.gvfsd-fuse súborový systém /run/user/1000/gvfs Výstupné informácie môžu byť neúplné. COMMAND PID POUŽÍVATEĽ FD TYP ZARIADENIA VEĽKOSŤ/VYP. NÁZOV UZLA mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 /81894 myREG9txt /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 28127sqldio 0,18 28127sqldio 0,18 28127sqldio 0,18 28127sqldio /[01 mysql1 /[auth_socket. aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss272sfiles meq51m /2726ldso myq81m lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so
Výstup bude rovnaký ako ten, v ktorom sa namiesto názvu procesu použije ID procesu.
Zoznam súborov otvorených sieťovými pripojeniami
V Linuxe môžu byť súbory aj vo forme informácií o vašich sieťových pripojeniach, hardvérových pripojeniach atď lsof
na zoznam súborov otvorených sieťovým pripojením. Použite nasledujúcu metódu.
sudo lsof -i
Výkon:
gaurav@ubuntu:~$ sudo lsof -i PRÍKAZ PID POUŽÍVATEĽ FD TYP ZARIADENIA VEĽKOSŤ/VYPNUTÝ NÁZOV UZLA systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-t-resolve TCP54 localhost:1 doména (POČÚVAŤ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP 21201 adens IPv4 0vahi21mdns 0t0 UDP 21201 avens1 avahi avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *: 58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *: 37512 mongod 1173 MongoDB 6U IPv4 28149 0t0 TCP localhost: 27017 (POČÚVAJTE) mysqld 1266 mySQL 19u IPv4 25992 0t0 TCP localhost: mysql (POČÚVAŤ) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (POČÚVAŤ) gaurav@ubuntu:~$
Tu môžeme vidieť informácie o súboroch, ktoré sú otvorené sieťovým pripojením pomocou lsof -i
príkaz.
Záver
V tomto jednoduchom návode sme sa naučili, ako zobraziť zoznam otvorených súborov pre proces v systéme Linux pomocou rôznych metód, ktoré sa ľahko používajú. Pre viac použití lsof
príkaz, pozri lsof
manuálová stránka.