Kako prikazati seznam odprtih datotek za proces v Linuxu

Vodnik za uporabo ukaza 'lsof' za proces

Če ste pogost uporabnik sistemov Linux ali Unix, ste zagotovo slišali stavek: »V Linuxu je vse datoteka«. To lahko označimo kot pretirano poenostavitev koncepta, vendar se izkaže, da je zelo koristno razumeti, kako delujejo datoteke v sistemu Linux.

Ni nujno, da je vse, kar se pojavi v okolju Linux, datoteka. Včasih je lahko proces, lahko je posebna datoteka, ki predstavlja informacije o strojni opremi, imenike in druge stvari.

Ta vadnica vas bo vodila skozi iskanje vseh datotek, ki so odprte za določen proces v Linuxu.

Uvod v lsof Ukaz

Lepota sistema Linux je v tem, da lahko nadzorujete in upravljate svoj celoten sistem prek terminala, pod pogojem, da dobro poznate ukaze. Ko so ukazi znani, potem vse naloge na terminalu postanejo cakewalk.

lsof pomeni 'Seznam odprtih datotek‘. Ko poznate dolgo različico ukaza, vam postane zelo enostavno razumeti in uporabljati ukaz na produktiven način.

The lsof ukaz prikaže sezname odprtih datotek, vtičnic in cevi. S tem ukazom lahko preprosto iščete odprte datoteke. Ko lsof ukaz se uporablja brez možnosti in prikaže vse odprte datoteke glede na aktivne procese, ki se izvajajo.

Opomba: Prepričajte se, da uporabljate sudo med izvajanjem ukazov.

Uporabljati lsof Ukaz

Preučili bomo izhod lsof povejte podrobno. Preučite naslednji ukaz.

sudo lsof | manj

Opomba: Če neposredno vodimo lsof ukaz, bo rezultat zelo velik in bi lahko povzročil zmedo za nadaljevanje. Zato sem tukaj uporabil lsof | manj ukaz za udobje vadnice.

Izhod:

gaurav@ubuntu:~$ sudo lsof | manj UKAZ PID TID UPORABNIK VRSTA FD VELIKOST NAPRAVE/IZKLOP IME VOZLIŠČA kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 / kdevtmpfs 31 / root txt / unknown DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt neznano /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 8, rcu_tasks 8 IR 3 3 / rcu_tasks 33 root txt neznano /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 neznan /proc/34/ 

Sledijo atributi, ki so prikazani z uporabo lsof ukaz.

ParameterOpis
UkazPrikaže ime ukaza, ki odpre datoteko.
PIDŠtevilka identifikatorja procesa procesa, ki odpre datoteko.
TIDŠtevilka identifikatorja niti. Lahko je nit ali številka opravila.
UporabnikID uporabnika ali ime uporabnika, ki je lastnik procesa.
FDPrikaže deskriptor datoteke datoteke.
VrstaVrsta vozlišča, povezanega z datoteko.
NapravaPrikazuje številke naprav.
Velikost/IzklopPrikazuje velikost datoteke v bajtih.
vozliščePrikazuje številko inode imenika ali nadrejenega imenika.
imePrikaže ime datotečnega sistema, v katerem se nahaja proces.

Seznam procesov

Najprej in predvsem je pomembno, da pridobite procese, ki se izvajajo, in njihove ustrezne ID-je procesov. Linux ponuja različne ukaze za seznam procesov skupaj z njihovimi atributi, kot so PID, uporabnik, imenik itd.

Uporabite lahko ukaze, kot so vrh, ps, htop, pstree za seznam procesov na terminalu.

Skozi celotno vadnico bom uporabljal vrh ukaz, da to storijo. The vrh ukaz zagotavlja dinamičen prikaz delujočega sistema v realnem času. Prav tako prikazuje vse procese in niti, ki jih trenutno upravlja jedro Linuxa. Preučite spodnji blok, da preverite izhod vrh ukaz.

sintaksa:

sudo top

Izhod:

gaurav@ubuntu:~$sudo top PID UPORABNIK PR NI VIRT RES SHR S %CPU %MEM ČAS+ UKAZ 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.017 87:48.018 Web Content 38.017 Splet 38.162 06.017 Splet 38.162 Splet 38.162 34,41 mongod 13.765 Gaurav 20 0 2.931.568 131.408 47.496 S 5,9 3,3 1: 42,34 spletne vsebine 1 koren 20 0 225.904 6824 4900 N 0,0 0,2 0: 27,25 systemd 2 koren 20 0 0 0 0 S 0.0 0.0 0: 00,05 KThreadd 4 korensko 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 q 0:0 k soft 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 koren 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 koren rt 0 0 0 0 S 0,0 0,0 0:03,03 mig. 

V zgornjem bloku lahko na enem mestu vidimo vse informacije, povezane s procesom. Od tu lahko najdemo PID procesa, katerega odprte datoteke moramo prikazati z uporabo lsof ukaz.

Če pa želite izvedeti ID procesa samo določenega procesa in se izogniti drugim neželenim procesom, uporabite naslednji ukaz.

sintaksa:

sudo top | grep [ime_procesa]

Primer:

gaurav@ubuntu:~$ vrh | grep terminalni 13.819 Gaurav 20 0 803.336 19.728 9160 S 0,3 0,5 0: 53,63 gnome-priključnih 13.819 Gaurav 20 0 803.336 19.728 9160 S 1,0 0,5 0: 53,66 gnome-priključnih 13.819 Gaurav 20 0 803.336 19.728 9160 S 0,3 0,5 0: 53,67 GNOME -terminal- gaurav@ubuntu:~$

Tukaj smo izrecno prikazali ID procesa procesa, ki ima v imenu procesa niz 'terminal'. Ta metoda je priročna, če ne poznate celotnega imena procesa ali PID.

Prikaz odprtih datotek, povezanih s procesom, z uporabo PID

V zgornjem bloku smo se naučili, kako pridobiti informacije, povezane s procesom, s pomočjo ukaza top. Zdaj bomo uporabili PID ki ustreza kateremu koli procesu v sistemu in poskusite prikazati seznam odprtih datotek, povezanih s tem procesom, z uporabo lsof ukaz.

Iz zgoraj podanega rezultata vzemimo postopek, ki ustreza označenemu PID 1173. Uporabljali bomo lsof -p [PID] ukaz, da to storijo.

sintaksa:

sudo lsof -p [PID]

Ta ukaz vzame PID procesa kot vhod in navede vse datoteke, ki ustrezajo temu PID.

Izhod:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: OPOZORILO: ne morem stat() fuse.gvfsd-fuse datotečni sistem /run/user/1000/gvfs Izhodne informacije so morda nepopolne. UPORABNIK PID UPORABNIK FD VRSTA VELIKOST NAPRAVE/IZKLOP IME VOZLIŠČA mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb mongodb6t898x mongodb63t898x mongodb63t898 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 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 /lib/x86_64-linux-gnu/libnss_myhostname.su. 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/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnu/libnss_dns-2.27.so 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/locale201200000000000000000000000000000 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 mongodb mem REG 8.8 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-linux-gnu/libm-2.27.so mongod. 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_64untso.librt. :~$

Datoteke, ki so odprte za proces z ID procesa 1713, so prikazane z uporabo lsof ukaz.

Opomba: Uporabniki GNOME lahko naletijo na spodnje opozorilo. Lahko ga varno ignorirate.

lsof: OPOZORILO: ne morem stat() fuse.gvfsd-fuse datotečni sistem /run/user/1000/gvfs Izhodne informacije so morda nepopolne.

Seznam odprtih datotek, povezanih s procesom, z uporabo imena procesa

The lsof ukaz vam ponuja tudi možnost seznama odprtih datotek z uporabo imen procesov. Imena morajo biti podana ukazu kot vhodni niz. Za uporabo te možnosti glejte spodnjo sintakso.

sintaksa:

sudo lsof -c [ime procesa]

Primer:

sudo lsof -c mysql

Izhod:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: OPOZORILO: ne morem stat() fuse.gvfsd-fuse datotečni sistem /run/user/1000/gvfs Izhodne informacije so morda nepopolne. UKAZ PID UPORABNIK VRSTA FD VELIKOST NAPRAVE/IZKLOP IME VOZLIŠČA mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4066 mysql 8,8 4061 4068 4069 mysql /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 28128 5505444 mysqld 1266 mysql DEL REG 0,18 28127 mysql 0,18 28127 16sq / aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss27G786 mysqld 1266 mysql mem REG 8.8 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. 

Izhod bo enak tistemu, v katerem se namesto imena procesa uporablja ID procesa.

Seznam datotek, ki jih odprejo omrežne povezave

V Linuxu so lahko datoteke tudi v obliki informacij o vaših omrežnih povezavah, povezavah strojne opreme itd. Lahko uporabimo lsof ukaz za seznam datotek, ki jih je odprla omrežna povezava. Uporabite naslednjo metodo.

sudo lsof -i

Izhod:

gaurav@ubuntu:~$ sudo lsof -i UKAZ PID UPORABNIK TIP FD VELIKOST NAPRAVE/IZKLOP IME VOZLIŠČA systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 local systemd-u3058 TCP/IP domena (POSLUŠAJ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP100m 23810 0t0 UDP100m 12d0 12d0m *-: avahi-dae 1028 avahi 14u IPv4 23.812 0t0 UDP *: 58.999 avahi-dae 1028 avahi 15u IPv6 23.813 0t0 UDP *: 37.512 mongod 1173 mongodb 6U IPv4 28.149 0t0 TCP localhost: 27017 (POSLUŠAJ) mysqld 1266 mysql 19u IPv4 25.992 0t0 TCP localhost: mysql (POSLUSAJ) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (POSLUSAJ) gaurav@ubuntu:~$

Tukaj lahko vidimo informacije o datotekah, ki jih omrežna povezava odpre z uporabo lsof -i ukaz.

Zaključek

V tej preprosti vadnici smo se naučili, kako prikazati seznam odprtih datotek za proces v Linuxu z različnimi metodami, ki so enostavne za uporabo. Za več uporab lsof ukaz, glej lsof man stran.