Vodič za korištenje naredbe 'lsof' za proces
Ako ste čest korisnik Linux ili Unix sustava, sigurno ste čuli frazu: "U Linuxu je sve datoteka". Ovo se može kategorizirati kao pretjerano pojednostavljenje koncepta, ali se pokazalo vrlo korisnim za razumijevanje kako datoteke u Linux sustavu rade.
Ne mora sve što se pojavljuje u Linux okruženju biti datoteka. Ponekad to može biti proces, može biti posebna datoteka koja predstavlja informacije o hardveru, direktorije i druge stvari.
Ovaj vodič će vas provesti kroz pronalaženje svih datoteka koje su otvorene za određeni proces u Linuxu.
Uvod u lsof
Naredba
Ljepota Linux sustava je u tome što možete kontrolirati i upravljati cijelim svojim sustavom putem terminala, pod uvjetom da dobro poznajete naredbe. Nakon što su naredbe poznate, onda svi zadaci na terminalu postaju cakewalk.
lsof
stoji za 'Popis otvorenih datoteka‘. Nakon što upoznate dugu verziju naredbe, postaje vam vrlo lako razumjeti i koristiti naredbu na produktivan način.
The lsof
naredba prikazuje popis otvorenih datoteka, utičnica i cijevi. Pomoću ove naredbe možete jednostavno tražiti otvorene datoteke. Kada lsof
naredba se koristi bez ikakve opcije i prikazuje sve otvorene datoteke s obzirom na aktivne procese koji se izvode.
Bilješka: Obavezno koristite sudo
tijekom izvršavanja naredbi.
Koristiti lsof
Naredba
Proučit ćemo rezultate lsof
detaljno zapovijedati. Proučite sljedeću naredbu.
sudo lsof | manje
Bilješka: Ako izravno pokrenemo lsof
naredba, izlaz će biti vrlo velik i mogao bi stvoriti zbrku za daljnji nastavak. Dakle, ovdje sam koristio lsof | manje
naredba za praktičnost tutoriala.
Izlaz:
gaurav@ubuntu:~$ sudo lsof | manje NAREDBA PID TID KORISNIK FD TIP VELIČINA UREĐAJA/ISKLJUČENO NAZIV ČVORA kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 / root tcw un cd1 DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt nepoznat /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 8,8 4096 2 / rcu_tasks 8 IR 3 IR / rcu_tasks 33 root txt nepoznat /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 nepoznat /proc/34/
Slijede atributi koji se prikazuju pomoću lsof
naredba.
Parametar | Opis |
---|---|
Naredba | Prikazuje naziv naredbe koja otvara datoteku. |
PID | Identifikacijski broj procesa procesa koji otvara datoteku. |
TID | Broj identifikatora niti. To može biti niti ili broj zadatka. |
Korisnik | Korisničko ime ili ime korisnika koji je vlasnik procesa. |
F D | Prikazuje deskriptor datoteke. |
Tip | Vrsta čvora povezanog s datotekom. |
Uređaj | Prikazuje brojeve uređaja. |
Veličina/Isključeno | Prikazuje veličinu datoteke u bajtovima. |
Čvor | Prikazuje inode broj imenika ili roditeljskog imenika. |
Ime | Prikazuje naziv datotečnog sustava u kojem se nalazi proces. |
Popis procesa
Prije svega, važno je da dobijete procese koji se izvode i njihove odgovarajuće ID-ove procesa. Linux nudi razne naredbe za popis procesa zajedno s njihovim atributima kao što su PID, korisnik, direktorij itd.
Možete koristiti naredbe poput vrh
, p.s
, htop
, pstree
za popis procesa na terminalu.
Tijekom cijelog vodiča koristit ću vrh
zapovijed da to učini. The vrh
naredba pruža dinamički prikaz u stvarnom vremenu pokrenutog sustava. Također prikazuje sve procese i niti kojima trenutno upravlja Linux kernel. Proučite dolje navedeni blok kako biste provjerili izlaz vrh
naredba.
Sintaksa:
sudo top
Izlaz:
gaurav@ubuntu:~$sudo top PID KORISNIK PR NI VIRT RES SHR S %CPU %MEM VRIJEME+ NAREDBA 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.017 87:48.117 87:48.117 Web 38.162 Web 38.062 38.162 Web sadržaj 38.162 34.41 13.765 mongod Gaurav 20 0 131.408 47.496 2.931.568 S 5.9 3.3 1: 1 42.34 Web sadržaj korijena 20 0 225.904 6824 4900 0,0 0,2 S 0: 27.25 systemd 2 korijena 20 0 0 0 0 0 0.0 0.0 M: 00,05 kthreadd 4 korijen 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 korijen 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 korijen 20 0 0 0 0 S 0,0 0,0 8 q 0:0 k korijen 0 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 root 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 root rt 0 0 0 0 S 0,0 0,0 0:03,0 migration
U gornjem bloku možemo vidjeti sve informacije vezane uz proces na jednom mjestu. Odavde možemo pronaći PID
procesa u kojem moramo prikazati otvorene datoteke pomoću lsof
naredba.
Ali ako želite saznati ID procesa samo određenog procesa i izbjeći druge neželjene procese, upotrijebite sljedeću naredbu.
Sintaksa:
sudo top | grep [Naziv_procesa]
Primjer:
gaurav@ubuntu:~$ vrh | grep terminal 13.819 Gaurav 20 0 803336 19728 9160 M 0,3 0,5 0: 53.63 gnome-terminal- 13.819 Gaurav 20 0 803336 19728 9160 M 1,0 0,5 0: 53.66 gnome-terminal- 13.819 Gaurav 20 0 803336 19728 9160 M 0,3 0,5 0: 53.67 gnome -terminal- gaurav@ubuntu:~$
Ovdje smo posebno prikazali ID procesa procesa koji ima niz 'terminal' u nazivu procesa. Ova metoda je zgodna kada niste svjesni cijelog naziva procesa ili PID-a.
Prikaz otvorenih datoteka povezanih s procesom pomoću PID-a
U gornjem bloku naučili smo kako dobiti informacije vezane za proces uz pomoć naredbe top. Sada ćemo koristiti PID
koji odgovaraju bilo kojem procesu u sustavu i pokušajte prikazati popis otvorenih datoteka povezanih s tim procesom pomoću lsof
naredba.
Iz gore navedenog izlaza, uzmimo proces koji odgovara PID-u 1173 koji je istaknut. Koristit ćemo se lsof -p [PID]
zapovijed da to učini.
Sintaksa:
sudo lsof -p [PID]
Ova naredba uzima PID procesa kao ulaz i navodi sve datoteke koje odgovaraju ovom PID-u.
Izlaz:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: UPOZORENJE: ne mogu stat() fuse.gvfsd-fuse datotečni sustav /run/user/1000/gvfs Izlazne informacije mogu biti nepotpune. NAREDBA PID KORISNIK FD VRSTA UREĐAJA VELIČINA/ISKLJUČENO NAZIV ČVORA mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb mongodb63t898x mongodb63t898 mongod 1173 mongodb 1173 mongodb rtd 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.so.2 mongod 1173 mongodb mem REG 8,8 101168 26244b-2643 26244-2643 mongod. 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. 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/locale2012/lomon201202000000000000000000000000000 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 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. :~$
Datoteke koje su otvorene za proces s ID-om procesa 1713 prikazuju se pomoću lsof
naredba.
Bilješka: Korisnici GNOME-a mogu naići na upozorenje u nastavku. Možete ga sigurno zanemariti.
lsof: UPOZORENJE: ne može stat() fuse.gvfsd-fuse datotečni sustav /run/user/1000/gvfs Izlazne informacije mogu biti nepotpune.
Popis otvorenih datoteka povezanih s procesom pomoću naziva procesa
The lsof
naredba vam također pruža mogućnost popisa otvorenih datoteka koristeći nazive procesa. Imena treba dati naredbi kao ulazni niz. Za korištenje ove opcije pogledajte sintaksu u nastavku.
Sintaksa:
sudo lsof -c [naziv procesa]
Primjer:
sudo lsof -c mysql
Izlaz:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: UPOZORENJE: ne mogu stat() fuse.gvfsd-fuse datotečni sustav /run/user/1000/gvfs Izlazne informacije mogu biti nepotpune. NAREDBA PID KORISNIK FD VRSTA UREĐAJA VELIČINA/ISKLJUČENO NAZIV ČVORA mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4066 mysql 4068 / 4068 / 4068 / 4068 1266 /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 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 mysql 0,18 28127 16 / 28127 / aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss27G75 /libnss2785 mysql 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.
Izlaz će biti kao onaj u kojem se koristi ID procesa umjesto naziva procesa.
Popis datoteka koje otvaraju mrežne veze
U Linuxu datoteke također mogu biti u obliku informacija o vašim mrežnim vezama, hardverskim vezama itd. Možemo koristiti lsof
naredba za popis datoteka otvorenih mrežnom vezom. Koristite sljedeću metodu.
sudo lsof -i
Izlaz:
gaurav@ubuntu:~$ sudo lsof -i NAREDBA PID KORISNIK FD TIP VELIČINA UREĐAJA/ISKLJUČENO NAZIV ČVOVA systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 localhost systemd-r 969 systemd-u30v8 TCP domena (SLUŠAJ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP1023md 0t0 UDP1023m *-: 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 6 U IPv4 28149 0t0 TCP localhost: 27.017 (slušati) mysqld 1266 mysql 19u IPv4 25.992 0t0 TCP localhost: mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$
Ovdje možemo vidjeti informacije o datotekama koje su otvorene mrežnom vezom pomoću lsof -i
naredba.
Zaključak
U ovom jednostavnom vodiču naučili smo kako navesti otvorene datoteke za proces u Linuxu koristeći različite metode koje su jednostavne za korištenje. Za više korištenja lsof
zapovijed, vidi lsof
man stranica.