Ako zobraziť zoznam otvorených súborov pre proces v systéme Linux

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.

ParameterPopis
PríkazZobrazuje názov príkazu, ktorý otvára súbor.
PIDIdentifiká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.
FDZobrazuje deskriptor súboru.
TypTyp uzla priradeného k súboru.
ZariadenieZobrazuje čísla zariadení.
Veľkosť/VypZobrazuje veľkosť súboru v bajtoch.
UzolZobrazuje číslo inodu adresára alebo nadradeného adresára.
názovZobrazuje 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.