Hogyan listázzuk ki a megnyitott fájlokat egy folyamathoz Linuxon

Útmutató az „lsof” parancs használatához egy folyamathoz

Ha Ön gyakran használja a Linux vagy Unix rendszereket, biztosan hallotta a következő mondatot: „Linuxban minden fájl”. Ez a koncepció túlzott leegyszerűsítéseként kategorizálható, mégis nagyon hasznosnak bizonyul a fájlok működésének megértéséhez a Linux rendszerben.

Nem kell mindennek, ami a Linux környezetben megjelenik, fájlnak lennie. Néha ez lehet egy folyamat, lehet egy speciális fájl, amely a hardverinformációkat, könyvtárakat és egyéb dolgokat reprezentálja.

Ez az oktatóanyag végigvezeti Önt az összes olyan fájl megtalálásában, amely egy adott folyamathoz nyitva van Linuxban.

Bevezetés a lsof Parancs

A Linux rendszer szépsége abban rejlik, hogy a teljes rendszert a terminálon keresztül irányíthatja és kezelheti, feltéve, hogy jól ismeri a parancsokat. Ha a parancsok ismertek, akkor a terminálon lévő összes feladat tortúra válik.

lsof jelentése „A megnyitott fájlok listája‘. Ha ismeri a parancs hosszú verzióját, nagyon könnyen megértheti és produktív módon használhatja a parancsot.

A lsof parancs megjeleníti a megnyitott fájlok, socketek és csövek listáját. Ezzel a paranccsal könnyen megkeresheti a megnyitott fájlokat. Amikor az lsof A parancsot opció nélkül használjuk, megjeleníti az összes megnyitott fájlt a futó aktív folyamatokkal kapcsolatban.

Jegyzet: Ügyeljen arra, hogy használja sudo a parancsok végrehajtása közben.

Használni a lsof Parancs

Tanulmányozzuk a kimenetét a lsof parancsot részletesen. Tanulmányozza a következő parancsot.

sudo lsof | Kevésbé

Jegyzet: Ha közvetlenül futtatjuk a lsof parancsot, a kimenet nagyon nagy lesz, és zavart okozhat a további folytatáshoz. Ezért itt használtam lsof | Kevésbé parancsot az oktatóanyag kényelme érdekében.

Kimenet:

gaurav@ubuntu:~$ sudo lsof | kevesebb PARANCS PID TID FELHASZNÁLÓ FD TÍPUS ESZKÖZ MÉRETE/KI CSOMÓPONT NÉV kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root/procxtw3/exe root/procxt 3d3 DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt ismeretlen /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks DIR 33 root 8, 8 rt / rcu_tasks 33 root txt ismeretlen /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 ismeretlen /proc/34/exe 

A következő attribútumok jelennek meg a segítségével lsof parancs.

ParaméterLeírás
ParancsA fájlt megnyitó parancs nevét mutatja.
PIDA fájlt megnyitó folyamat folyamatazonosítója.
TIDSzál azonosító száma. Ez lehet egy szál vagy egy feladat száma.
FelhasználóFelhasználói azonosító vagy annak a felhasználónak a neve, aki a folyamat tulajdonosa.
FDMegjeleníti a fájl fájlleíróját.
típusA fájlhoz társított csomópont típusa.
EszközMegjeleníti az eszközszámokat.
Méret/KiA fájl méretét mutatja bájtban.
CsomópontMegmutatja a könyvtár vagy a szülőkönyvtár inode számát.
NévMegmutatja annak a fájlrendszernek a nevét, ahol a folyamat található.

A folyamatok felsorolása

Mindenekelőtt fontos, hogy megszerezze a futó folyamatokat és a megfelelő folyamatazonosítókat. A Linux számos parancsot kínál a folyamatok listázásához az attribútumokkal együtt, mint például a PID, a user, a directory stb.

Használhatja a hasonló parancsokat tetejére, ps, htop, pstree a terminál folyamatainak felsorolásához.

Az oktatóprogram során végig a tetejére parancsot erre. A tetejére parancs dinamikus, valós idejű nézetet biztosít a futó rendszerről. Megjeleníti a Linux kernel által jelenleg kezelt összes folyamatot és szálat is. Tanulmányozza az alábbi blokkot, hogy ellenőrizze a kimenetét tetejére parancs.

Szintaxis:

sudo top

Kimenet:

gaurav@ubuntu:~$sudo top PID FELHASZNÁLÓ PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.2 30.5 87:48.2 30.5 87:48.27 tartalom 34,41 mongod 13765 gaurav 20 0 2.931.568 131.408 47.496 S 5.9 3.3 1: 42.34 Web Content 1 gyökér 20 0 225.904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 gyökér 20 0 0 0 0 S 0.0 0.0 0: 00.05 KThreadd 4 gyökér 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 gyökér 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 gyökér 20 0 0 0 0 S 0,0 0,0 0:001q 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 gyökér 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 gyökér rt 0 0 0 0 S 0,0 0,0 0:03,13 migráció/0 

A fenti blokkban az összes folyamattal kapcsolatos információt egy helyen láthatjuk. Innen megtalálhatjuk a PID amelynek folyamatából meg kell jelenítenünk a megnyitott fájlokat a lsof parancs.

De ha csak egy adott folyamat folyamatazonosítóját szeretné megtudni, és elkerülni a többi nem kívánt folyamatot, használja a következő parancsot.

Szintaxis:

sudo top | grep [folyamat_név]

Példa:

gaurav@ubuntu:~$ top | grep terminális 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53,63 gnome-terminál- 13819 gaurav 20 0 803336 19728 9160 s 1.0 0.5 0: 53,66 gnome-terminál- 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53.67 gnome -terminál- gaurav@ubuntu:~$

Itt kifejezetten megjelenítettük annak a folyamatnak a folyamatazonosítóját, amelynek a folyamat nevében a „terminál” karakterlánc szerepel. Ez a módszer akkor hasznos, ha nincs tisztában a teljes folyamatnévvel vagy a PID-vel.

A folyamathoz kapcsolódó megnyitott fájlok megjelenítése a PID használatával

A fenti blokkban megtanultuk, hogyan szerezhetjük be a folyamattal kapcsolatos információkat a top parancs segítségével. Most a PID megfelel a rendszer bármely folyamatának, és próbálja meg megjeleníteni az adott folyamathoz kapcsolódó megnyitott fájlok listáját a segítségével lsof parancs.

A fent megadott kimenetből vegyük ki a kiemelt PID 1173-nak megfelelő folyamatot. Használni fogjuk a lsof -p [PID] parancsot erre.

Szintaxis:

sudo lsof -p [PID]

Ez a parancs a folyamat PID-jét veszi be bemenetként, és felsorolja az ennek a PID-nek megfelelő fájlokat.

Kimenet:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: FIGYELMEZTETÉS: can't stat() fuse.gvfsd-fuse fájlrendszer /run/user/1000/gvfs Lehet, hogy a kimeneti információ hiányos. COMMAND PID FELHASZNÁLÓ FD TÍPUSÚ ESZKÖZ MÉRETE/KI CSOMÓPONT NÉVE mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb / mongod 1173 mongodb /mongod 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 262/46468 mongodb7-101168 26246846-10116-2624646-1-6-lib. 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 monnynsdb 2626002 /lib/2626002 /lib/2626002/ 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/locale/locale/ 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 R mongod 2.27.so mongod 18lib 616, 96/3 EG 18, 6, 9 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 REG 8,8 14560 R 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-librt. :~$

A 1713-as folyamatazonosítójú folyamat számára megnyitott fájlok a következővel jelennek meg lsof parancs.

Jegyzet: A GNOME-felhasználók az alábbi figyelmeztetéssel találkozhatnak. Nyugodtan figyelmen kívül hagyhatod.

lsof: FIGYELMEZTETÉS: can't stat() fuse.gvfsd-fuse fájlrendszer /run/user/1000/gvfs Lehet, hogy a kimeneti információ hiányos.

Folyamathoz kapcsolódó nyitott fájlok listázása a folyamatnév használatával

A lsof A parancs lehetőséget biztosít a megnyitott fájlok listázására is a folyamatok nevével. A neveket bemeneti karakterláncként kell megadni a parancsnak. Az opció használatához tekintse meg az alábbi szintaxist.

Szintaxis:

sudo lsof -c [folyamat neve]

Példa:

sudo lsof -c mysql

Kimenet:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: FIGYELMEZTETÉS: nem lehet stat() fuse.gvfsd-fuse fájlrendszer /run/user/1000/gvfs Lehet, hogy a kimeneti információ hiányos. PARANCS PID FELHASZNÁLÓ FD TÍPUS ESZKÖZ MÉRETE/KI CSOMÓPONT NÉVE mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 / mysql rtd DIR 8,8 /209648tl mysql216t8r /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 REG 0,18 R / 2 6 6 myq1, 2812 8 q1 8 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_64-linux-gnu/libnss_ql68/472m/72m/72m/72m/726-26-28-2-4 mysql-6-28-2-4 mysql-6-2-4 mysql-6-8-26-2-6-2-4 mysql-28-28-28-28-2-4 mysql. 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 

A kimenet ugyanaz lesz, mint azé, amelyben a folyamatazonosítót használják a folyamatnév helyett.

A hálózati kapcsolatok által megnyitott fájlok listázása

Linuxban a fájlok a hálózati kapcsolatokra, hardverkapcsolatokra stb. vonatkozó információk formájában is megjelenhetnek. Használhatjuk lsof parancsot a hálózati kapcsolat által megnyitott fájlok listázásához. Használja a következő módszert.

sudo lsof -i

Kimenet:

gaurav@ubuntu:~$ sudo lsof -i PARANCS PID FELHASZNÁLÓ FD TÍPUS ESZKÖZ MÉRETE/KI CSOMÓPONT NÉV systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve IP8 117t3 domain (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *: avahi 23810 0t0 UDP *: avahi 10 DPhi8u IPv1010 Avahi-dae 1028 Avahi 14u IPv4 23812 0t0 UDP *: 58.999 Avahi-dae 1028 Avahi 15u IPv6 23813 0t0 UDP *: 37.512 mongod 1173 MongoDB 6u IPv4 28149 0t0 TCP localhost: 27017 (hallgatni) mysqld 1266 mysql 19U IPv4 25.992 0t0 TCP localhost: mysql (HALLGATÁS) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (HALLGAT) gaurav@ubuntu:~$

Itt láthatjuk az információkat azokról a fájlokról, amelyeket a hálózati kapcsolat segítségével nyit meg lsof -i parancs.

Következtetés

Ebben az egyszerű oktatóanyagban megtanultuk, hogyan listázzuk ki a megnyitott fájlokat egy folyamathoz Linuxban különféle, könnyen használható módszerekkel. A további felhasználásokhoz a lsof parancsot, lásd a lsof man oldal.