Jak zobrazit seznam otevřených souborů pro proces v systému Linux

Průvodce používáním příkazu „lsof“ pro proces

Pokud jste častým uživatelem linuxových nebo unixových systémů, jistě jste již slyšeli větu: „V Linuxu je všechno soubor“. To může být kategorizováno jako přílišné zjednodušení konceptu, ale ukázalo se, že je velmi užitečné pochopit, jak soubory v systému Linux fungují.

Ne vše, co se objeví v prostředí Linuxu, musí být soubor. Někdy to může být proces, může to být speciální soubor představující informace o hardwaru, adresáře a další věci.

Tento tutoriál vás provede hledáním všech souborů, které jsou v Linuxu otevřené pro konkrétní proces.

Úvod do lsof Příkaz

Krása systému Linux spočívá v tom, že můžete ovládat a spravovat celý svůj systém prostřednictvím terminálu, pokud dobře znáte příkazy. Jakmile jsou příkazy známé, pak se všechny úkoly na terminálu stanou procházkou.

lsof znamená ‚Seznam otevřených souborů‘. Jakmile budete znát dlouhou verzi příkazu, bude pro vás velmi snadné příkazu porozumět a používat jej produktivním způsobem.

The lsof zobrazí seznam otevřených souborů, soketů a kanálů. Pomocí tohoto příkazu můžete snadno vyhledat otevřené soubory. Když lsof příkaz se používá bez možnosti, zobrazí všechny otevřené soubory s ohledem na aktivní procesy, které běží.

Poznámka: Ujistěte se, že používáte sudo při provádění příkazů.

Za použití lsof Příkaz

Budeme studovat výstup lsof podrobně rozkazovat. Prostudujte si následující příkaz.

sudo lsof | méně

Poznámka: Pokud přímo spustíme lsof výstup bude velmi velký a mohl by způsobit zmatek při dalším postupu. Proto jsem zde použil lsof | méně příkaz pro pohodlí výukového programu.

Výstup:

gaurav@ubuntu:~$ sudo lsof | méně COMMAND PID TID UŽIVATELE FD TYP VELIKOST/VYP. NÁZEV UZLU kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31/cwdns txt/exe neznámý /proc DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt neznámý /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ámý /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ámý /proc/34/exe 

Následují atributy, které se zobrazují pomocí lsof příkaz.

ParametrPopis
PříkazZobrazuje název příkazu, který otevře soubor.
PIDIdentifikátor procesu číslo procesu, který otevírá soubor.
TIDČíslo identifikátoru vlákna. Může to být buď vlákno, nebo číslo úkolu.
UživatelID uživatele nebo jméno uživatele, který je vlastníkem procesu.
FDZobrazuje deskriptor souboru souboru.
TypTyp uzlu přidruženého k souboru.
přístrojZobrazuje čísla zařízení.
Velikost/VypnutoZobrazuje velikost souboru v bajtech.
UzelZobrazuje číslo inodu adresáře nebo nadřazeného adresáře.
názevZobrazuje název systému souborů, kde se proces nachází.

Výpis procesů

V první řadě je pro vás důležité získat procesy, které běží, a jejich příslušná ID procesů. Linux poskytuje různé příkazy pro seznam procesů spolu s jejich atributy, jako je PID, uživatel, adresář atd.

Můžete použít příkazy jako horní, ps, htop, pstree pro výpis procesů na terminálu.

V průběhu tutoriálu budu používat horní příkaz k tomu. The horní poskytuje dynamický pohled na běžící systém v reálném čase. Zobrazuje také všechny procesy a vlákna aktuálně spravované jádrem Linuxu. Prostudujte si níže uvedený blok a zkontrolujte výstup horní příkaz.

Syntax:

sudo top

Výstup:

gaurav@ubuntu:~$sudo top PID UŽIVATELE PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1,142g 103584 R 88,2 30,5 87 30,5 87: 251,088 Web 203 203 251,088 203 203 251,088 203 203 251 088 285 Web 34,41 mongod 13765 Gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1: 42,34 webového obsahu 1 kořen 20 0 225904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 kořen 20 0 0 0 0 S 0,0 0,0 0: 00,05 kthreadd 4 kořenový 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 kořen 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 kořen 20 0 0 0 0 S 0,0 0,8 d 0:0ir 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 kořen 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 kořen rt 0 0 0 0 S 0,0 0,0 0:03,13 migrace 

Ve výše uvedeném bloku můžeme vidět všechny informace související s procesem na jednom místě. Odtud můžeme najít PID procesu, při kterém musíme zobrazit otevřené soubory pomocí lsof příkaz.

Pokud však chcete zjistit ID procesu pouze konkrétního procesu a vyhnout se dalším nežádoucím procesům, použijte následující příkaz.

Syntax:

sudo top | grep [Název_procesu]

Příklad:

gaurav@ubuntu:~$ nahoru | 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:~$

Zde jsme konkrétně zobrazili ID procesu procesu, který má v názvu procesu řetězec ‚terminál‘. Tato metoda se hodí, když neznáte úplný název procesu nebo PID.

Zobrazení otevřených souborů souvisejících s procesem pomocí PID

Ve výše uvedeném bloku jsme se naučili, jak získat informace související s procesem pomocí příkazu top. Nyní použijeme PID odpovídající libovolnému procesu v systému a pokuste se zobrazit seznam otevřených souborů souvisejících s tímto procesem pomocí lsof příkaz.

Z výše uvedeného výstupu vezměme proces odpovídající PID 1173, který je zvýrazněn. Budeme používat lsof -p [PID] příkaz k tomu.

Syntax:

sudo lsof -p [PID]

Tento příkaz vezme PID procesu jako vstup a vypíše všechny soubory odpovídající tomuto PID.

Výstup:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: VAROVÁNÍ: nelze stat() fuse.gvfsd-fuse souborový systém /run/user/1000/gvfs Výstupní informace mohou být neúplné. COMMAND PID UŽIVATELE FD TYP ZAŘÍZENÍ VELIKOST/VYP. NÁZEV UZLU mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb, mongodb, mongodb 2889bin39608 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-libdglin. 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/x864slib2lib_64-linsonsdbx mongmininu_dns1. 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/locale 2REGm mongod1817db6ve 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 1173 mem 1173 REG 861 mem 2926 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-mongod21-REGmdlso 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/liburavso.guntnu.linusocrypto.linux0.guntnu. :~$

Soubory, které jsou otevřené pro proces s ID procesu 1713, se zobrazí pomocí lsof příkaz.

Poznámka: Uživatelé GNOME se mohou setkat s níže uvedeným varováním. Můžete to klidně ignorovat.

lsof: VAROVÁNÍ: can't stat() fuse.gvfsd-fuse souborový systém /run/user/1000/gvfs Výstupní informace mohou být neúplné.

Výpis otevřených souborů souvisejících s procesem pomocí názvu procesu

The lsof příkaz také poskytuje možnost zobrazit seznam otevřených souborů pomocí názvů procesů. Názvy by měly být zadány příkazu jako vstupní řetězec. Chcete-li tuto možnost použít, přečtěte si níže uvedenou syntaxi.

Syntax:

sudo lsof -c [název procesu]

Příklad:

sudo lsof -c mysql

Výstup:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: VAROVÁNÍ: nelze stat() fuse.gvfsd-fuse souborový systém /run/user/1000/gvfs Výstupní informace mohou být neúplné. COMMAND PID UŽIVATELE FD TYP ZAŘÍZENÍ VELIKOST/VYP. NÁZEV UZLU mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 /82894 myREG22 /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 /[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/libnss_REG.2soubory meq51m 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 stejný jako ten, ve kterém je místo názvu procesu použito ID procesu.

Výpis souborů otevřených síťovými připojeními

V Linuxu mohou být soubory také ve formě informací o vašich síťových připojeních, hardwarových připojeních atd. Můžeme použít lsof příkaz k zobrazení seznamu souborů otevřených síťovým připojením. Použijte následující metodu.

sudo lsof -i

Výstup:

gaurav@ubuntu:~$ sudo lsof -i PŘÍKAZ PID UŽIVATEL FD TYP ZAŘÍZENÍ VELIKOST/VYPNUTÍ NÁZEV UZLU systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve TCP54 localhost:1 doména (POSLECHNUTÍ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP 21010t0 UDP *:mddns IPv6 *:mddns ubuntu 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 (POSLOUCHEJTE) mysqld 1266 mySQL 19u IPv4 25992 0t0 TCP localhost: mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (POSLECHNUTÍ) gaurav@ubuntu:~$

Zde můžeme vidět informace o souborech, které jsou otevřeny síťovým připojením pomocí lsof -i příkaz.

Závěr

V tomto jednoduchém tutoriálu jsme se naučili, jak vypsat otevřené soubory pro proces v Linuxu pomocí různých metod, které se snadno používají. Pro více použití lsof příkaz, viz lsof manuálová stránka.