Opas lsof-komennon käyttämiseen prosessissa
Jos olet usein Linux- tai Unix-järjestelmien käyttäjä, olet varmasti kuullut lauseen "Linuxissa kaikki on tiedostoa". Tämä voidaan luokitella käsitteen liialliseksi yksinkertaistamiseksi, mutta se osoittautuu erittäin hyödylliseksi ymmärtääksesi, kuinka tiedostot Linux-järjestelmässä toimivat.
Kaiken Linux-ympäristössä näkyvän ei tarvitse olla tiedostoa. Joskus se voi olla prosessi, se voi olla erityinen tiedosto, joka edustaa laitteistotietoja, hakemistoja ja muita asioita.
Tämä opetusohjelma opastaa sinua löytämään kaikki tiedostot, jotka ovat avoinna tietylle prosessille Linuxissa.
Esittely lsof
Komento
Linux-järjestelmän kauneus on, että voit ohjata ja hallita koko järjestelmääsi päätteen kautta, jos tiedät komennot hyvin. Kun komennot ovat tiedossa, kaikki päätteen tehtävät muuttuvat kakkukävelyksi.
lsof
tarkoittaa 'Luettelo avoimista tiedostoista‘. Kun tiedät komennon pitkän version, sinun on helppo ymmärtää ja käyttää komentoa tuottavalla tavalla.
The lsof
-komento näyttää luettelot avoimista tiedostoista, pistokkeista ja putkista. Voit helposti etsiä avoimia tiedostoja tällä komennolla. Kun lsof
komentoa käytetään ilman vaihtoehtoja, se näyttää kaikki avoimet tiedostot käynnissä olevien aktiivisten prosessien suhteen.
merkintä: Varmista, että käytät sudo
komentoja suorittaessaan.
Käyttämällä lsof
Komento
Tutkimme tuotos lsof
komento yksityiskohtaisesti. Tutustu seuraavaan komentoon.
sudo lsof | Vähemmän
merkintä: Jos suoritamme suoraan lsof
komento, tulos on erittäin suuri ja saattaa aiheuttaa sekaannusta jatkaaksesi eteenpäin. Eli tässä olen käyttänyt lsof | Vähemmän
komento opetusohjelman mukavuuden vuoksi.
Lähtö:
gaurav@ubuntu:~$ sudo lsof | vähemmän KOMENTO PID TID KÄYTTÄJÄ FD-TYYPPI LAITTEEN KOKO/POIS SOLMUN NIMI kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root / procxns1 / exe root / procxt 3 tuntematon DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt unknown /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks DIR 33 root 8, 8 d / rcu_tasks 33 root txt unknown /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 unknown /proc/34/exe
Seuraavat ovat attribuutit, jotka näytetään käyttämällä lsof
komento.
Parametri | Kuvaus |
---|---|
Komento | Näyttää tiedoston avaavan komennon nimen. |
PID | Prosessin tunnusnumero prosessille, joka avaa tiedoston. |
TID | Ketjun tunnistenumero. Se voi olla joko säikeen tai tehtävän numero. |
Käyttäjä | Käyttäjätunnus tai sen käyttäjän nimi, joka on prosessin omistaja. |
FD | Näyttää tiedoston tiedostokuvaajan. |
Tyyppi | Tiedostoon liittyvän solmun tyyppi. |
Laite | Näyttää laitenumerot. |
Koko/pois | Näyttää tiedoston koon tavuina. |
Solmu | Näyttää hakemiston tai päähakemiston inode-numeron. |
Nimi | Näyttää sen tiedostojärjestelmän nimen, jossa prosessi sijaitsee. |
Prosessien listaus
Ensinnäkin on tärkeää, että hankit käynnissä olevat prosessit ja niiden vastaavat prosessitunnukset. Linux tarjoaa erilaisia komentoja prosessien luetteloimiseksi sekä niiden attribuutit, kuten PID, käyttäjä, hakemisto jne.
Voit käyttää komentoja kuten alkuun
, ps
, htop
, pstree
listataksesi päätteen prosessit.
Käytän koko opetusohjelman ajan alkuun
käsky tehdä niin. The alkuun
komento tarjoaa dynaamisen reaaliaikaisen näkymän käynnissä olevasta järjestelmästä. Se näyttää myös kaikki prosessit ja säikeet, joita tällä hetkellä hallitsee Linux-ydin. Tutki alla olevaa lohkoa tarkistaaksesi tulosteen alkuun
komento.
Syntaksi:
sudo top
Lähtö:
gaurav@ubuntu:~$sudo top PID KÄYTTÄJÄ PR NI VIRT RES SHR S %CPU %MEM AIKA+ KOMENTO 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.2 30.5 87:48.2 30.5 87.2 30.5 87:48.27 Sisältö 34,41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1: 42,34 Web-sisällön 1 juuri 20 0 225904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0: 00,05 KThreadd 4 juuri 0 -20 0 0 0 I 0,0 0,0 0:00,00 ktyöntekijä/0:0H 6 juuri 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 juuri 20 0 0 0 0 0 S 0,0 0,0 0:001qd 0,0 0:01q d 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 juuri 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 juuri rt 0 0 0 0 S 0.0 0.0 0:03.13 migraatio/0
Yllä olevassa lohkossa näemme kaikki prosessiin liittyvät tiedot yhdessä paikassa. Täältä voimme löytää PID
jonka prosessista meidän on näytettävä avoimet tiedostot käyttämällä lsof
komento.
Mutta jos haluat selvittää vain tietyn prosessin prosessitunnuksen ja välttää muita ei-toivottuja prosesseja, käytä seuraavaa komentoa.
Syntaksi:
sudo top | grep [prosessin_nimi]
Esimerkki:
gaurav@ubuntu:~$ alkuun | grep pääte 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53,63 gnome-terminaali- 13819 gaurav 20 0 803336 19728 9160 S 1,0 0,5 0: 53,66 gnome-terminaali- 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53,67 gnome -pääte- gaurav@ubuntu:~$
Tässä olemme erityisesti näyttäneet sen prosessin prosessitunnuksen, jonka prosessin nimessä on merkkijono "pääte". Tämä menetelmä on kätevä, kun et tiedä koko prosessin nimeä tai PID-tunnusta.
Prosessiin liittyvien avoimien tiedostojen näyttäminen PID-tunnuksella
Yllä olevassa lohkossa opimme saamaan prosessiin liittyviä tietoja top-komennon avulla. Nyt käytämme PID
vastaa mitä tahansa järjestelmän prosessia ja yritä näyttää luettelo kyseiseen prosessiin liittyvistä avoimista tiedostoista käyttämällä lsof
komento.
Otetaan yllä annetusta lähdöstä korostettua PID:tä 1173 vastaava prosessi. Tulemme käyttämään lsof -p [PID]
käsky tehdä niin.
Syntaksi:
sudo lsof -p [PID]
Tämä komento ottaa prosessin PID:n syötteeksi ja listaa kaikki tätä PID:tä vastaavat tiedostot.
Lähtö:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: VAROITUS: can't stat() fuse.gvfsd-fuse tiedostojärjestelmä /run/user/1000/gvfs Tulostustiedot voivat olla epätäydellisiä. KOMENTO-PID-KÄYTTÄJÄ FD-TYYPPI LAITTEEN KOKO/POIS SOLMU NIMI mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongod/mongodb /mongod 1173 mongodb 8bingod8d8 tx9r8d3 1173 mongodb-muisti REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb-muisti REG 8,8 101168 26246846 mongodb7-101168 26246446-7-lib-2-libro-6-lib-2-libro-1-gnu/ 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 mongodb monsnns2626002 /lib/3b2626002 /lib/3b1nnns12x86_gnummd. 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 /usr/lib/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 2.27.3 mongod 118 616, 93 EG 117, 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 /lib/x86_64-linuxl-egogod27b. 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-linux-gnu/librt-0.ub/x86_64-librt.0.ub. :~$
Tiedostot, jotka ovat avoinna prosessille prosessitunnuksella 1713, näytetään käyttämällä lsof
komento.
merkintä: GNOME-käyttäjät voivat kohdata alla olevan varoituksen. Voit turvallisesti jättää sen huomioimatta.
lsof: VAROITUS: can't stat() fuse.gvfsd-fuse tiedostojärjestelmä /run/user/1000/gvfs Tulostustiedot voivat olla puutteellisia.
Prosessiin liittyvien avointen tiedostojen luettelointi käyttämällä prosessin nimeä
The lsof
-komento tarjoaa myös mahdollisuuden listata avoimet tiedostot prosessien nimillä. Nimet tulee antaa komennolle syötemerkkijonona. Katso alla olevaa syntaksia käyttääksesi tätä vaihtoehtoa.
Syntaksi:
sudo lsof -c [Prosessin nimi]
Esimerkki:
sudo lsof -c mysql
Lähtö:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: VAROITUS: can't stat() fuse.gvfsd-fuse tiedostojärjestelmä /run/user/1000/gvfs Tulostustiedot voivat olla puutteellisia. KOMENTO PID KÄYTTÄJÄ FD-TYYPPI LAITTEEN KOKO/POIS SOMU NIMI mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql Rtd DIR 8,8 /209618tl mysql214td 8,8 mysql2618d /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 R26 DEL REG 0,18 R26 86 myql, 2812 8 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_64-57m/72m/72m/56m/2m/5-6/7-2/7/2/7/2/7/201/2016_2017_201_201_201_0_2____files-8_______________files. 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
Tulos on sama kuin se, jossa prosessitunnusta käytetään prosessin nimen sijaan.
Verkkoyhteyksien avaamat tiedostot
Linuxissa tiedostot voivat olla myös tietoja verkkoyhteyksistäsi, laitteistoyhteyksistäsi jne. Voimme käyttää lsof
-komento listataksesi verkkoyhteyden avaamat tiedostot. Käytä seuraavaa menetelmää.
sudo lsof -i
Lähtö:
gaurav@ubuntu:~$ sudo lsof -i KOMENTO PID KÄYTTÄJÄ FD-TYYPPI LAITTEEN KOKO/POIS SOLMUN NIMI systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 4 17t3 130 domain (KUUNTELU) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDPnt 23810 0t0 UDP nt 23810 0t0 UDP *: avahi 10 DPhi2m2010 dp8 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 (LISTEN) mysqld 1266 mysql 19u IPv4-25992 0t0 TCP localhost: mysql (KUUNTELU) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (KUUNTELU) gaurav@ubuntu:~$
Täällä näemme tiedot tiedostoista, jotka verkkoyhteys avaa käyttämällä lsof -i
komento.
Johtopäätös
Tässä yksinkertaisessa opetusohjelmassa olemme oppineet listaamaan avoimet tiedostot prosessia varten Linuxissa käyttämällä erilaisia helppokäyttöisiä menetelmiä. Lisää käyttötarkoituksia varten lsof
komento, katso lsof
miessivu.