Slik viser du åpne filer for en prosess på Linux

Veiledning for bruk av 'lsof'-kommandoen for en prosess

Hvis du er en hyppig bruker av Linux- eller Unix-systemer, må du sikkert ha hørt uttrykket "I Linux er alt en fil". Dette kan kategoriseres som en forenkling av konseptet, men det viser seg å være svært nyttig å forstå hvordan filer i Linux-systemet fungerer.

Ikke alt som vises i Linux-miljøet trenger å være en fil. Noen ganger kan det være en prosess, det kan være en spesiell fil som representerer maskinvareinformasjon, kataloger og andre ting.

Denne opplæringen vil lede deg gjennom å finne alle filene som er åpne for en bestemt prosess i Linux.

Introduksjon til lsof Kommando

Det fine med Linux-systemet er at du kan kontrollere og administrere hele systemet ditt gjennom terminalen, forutsatt at du kjenner kommandoene godt. Når kommandoene er kjent, blir alle oppgavene på terminalen en cakewalk.

lsof står for 'Liste over åpne filer'. Når du kjenner den lange versjonen av kommandoen, blir det veldig enkelt for deg å forstå og bruke kommandoen på en produktiv måte.

De lsof kommandoen viser listene over åpne filer, sockets og pipes. Du kan enkelt søke etter de åpne filene ved å bruke denne kommandoen. Når lsof kommandoen brukes uten noe alternativ, den viser alle åpne filer med hensyn til de aktive prosessene som kjører.

Merk: Pass på at du bruker sudo mens du utfører kommandoene.

Bruker lsof Kommando

Vi vil studere resultatet av lsof kommando i detalj. Studer følgende kommando.

sudo lsof | mindre

Merk: Hvis vi direkte kjører lsof kommandoen, kommer utgangen til å bli veldig stor og kan skape forvirring for å fortsette videre. Derfor, her har jeg brukt lsof | mindre kommando for enkelhets skyld i opplæringen.

Produksjon:

gaurav@ubuntu:~$ sudo lsof | mindre COMMAND PID TID BRUKER FD TYPE ENHET STØRRELSE/AV NODENAVN kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs unknown /procns31 ukjent /procns31 root 31 root 31 DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt ukjent /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root 06rtd 33 root 8rtd / rcu_tasks 33 root txt ukjent /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 ukjent /proc/34/exe 

Følgende er attributtene som vises ved hjelp av lsof kommando.

ParameterBeskrivelse
KommandoViser navnet på kommandoen som åpner filen.
PIDProsessidentifikasjonsnummer for prosessen som åpner filen.
TIDTrådidentifikatornummer. Det kan enten være en tråd eller et oppgavenummer.
BrukerBruker-ID eller navn på brukeren som er eier av prosessen.
FDViser filbeskrivelsen til filen.
TypeType node knyttet til filen.
EnhetViser enhetsnummer.
Størrelse/AvViser størrelsen på filen i byte.
NodeViser inodenummeret katalogen eller overordnet katalog.
NavnViser navnet på filsystemet der prosessen er plassert.

Liste over prosessene

Først og fremst er det viktig for deg å få tak i prosessene som kjører og deres respektive prosess-IDer. Linux tilbyr en rekke kommandoer for å liste prosessene sammen med deres attributter som PID, bruker, katalog, etc.

Du kan bruke kommandoene som topp, ps, htop, pstree for å liste opp prosessene på terminalen.

Gjennom veiledningen vil jeg bruke topp kommando for å gjøre det. De topp kommando gir en dynamisk sanntidsvisning av et kjørende system. Den viser også alle prosessene og trådene som for øyeblikket administreres av Linux-kjernen. Studer blokken nedenfor for å sjekke utdataene til topp kommando.

Syntaks:

sudo topp

Produksjon:

gaurav@ubuntu:~$sudo top PID BRUKER 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.08 Nettinnhold 3 48.08 5 2 0 6 7 2 0 7 2 0 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1: 42,34 webinnhold en rot 20 0 225 904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 rot 20 0 0 0 0 S 0.0 0.0 0: 00.05 KThreadd 4 rot 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 rot 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 rot 20 0 0 0 0 S 0,0 0,0 0 0 0,0 0,0 9:0 myk rot 0,0 9:0 d 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 rot 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 rot rt 0 0 0 0 S 0,0 0,0 0:03/03,13 migrasjon 

I blokken ovenfor kan vi se all prosessrelatert informasjon på ett sted. Herfra kan vi finne PID av prosessen som vi må vise de åpne filene ved å bruke lsof kommando.

Men hvis du vil finne ut prosess-IDen til bare en bestemt prosess og unngå andre uønskede prosesser, bruk følgende kommando.

Syntaks:

sudo topp | grep [Process_Name]

Eksempel:

gaurav@ubuntu:~$ topp | grep'e terminal 13819 gaurav 20 0 803 336 19 728 9160 S 0,3 0,5 0: 53,63 gnome-terminal- 13819 gaurav 20 0 803 336 19 728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13819 gaurav 20 0 803 336 19 728 9160 S 0,3 0,5 0: 53,67 friluftsliv -terminal- gaurav@ubuntu:~$

Her har vi spesifikt vist prosess-IDen til prosessen som har strengen 'terminal' i prosessnavnet. Denne metoden er nyttig når du ikke er klar over det fullstendige prosessnavnet eller PID.

Viser de åpne filene relatert til en prosess som bruker PID

I blokken ovenfor lærte vi hvordan du får frem prosessrelatert informasjon ved hjelp av toppkommandoen. Nå skal vi bruke PID som tilsvarer en hvilken som helst prosess på systemet og prøv å vise listen over åpne filer relatert til den prosessen ved å bruke lsof kommando.

La oss ta prosessen som tilsvarer PID 1173 som er uthevet fra den ovenfor gitte utgangen. Vi vil bruke lsof -p [PID] kommando for å gjøre det.

Syntaks:

sudo lsof -p [PID]

Denne kommandoen tar PID-en til prosessen som inngang og viser alle filene som tilsvarer denne PID-en.

Produksjon:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: ADVARSEL: kan ikke stat() fuse.gvfsd-fuse filsystem /run/user/1000/gvfs Utdatainformasjon kan være ufullstendig. COMMAND PID USER FD TYPE ENHET STØRRELSE/AV NODE NAVN mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb 8,849 mongodb 8,849 8 txt mongodb 8. 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 /lib/x86_6-2g 4god/x86-2g 3 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.godb 3 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/godale-1720mon 1720mon 5 REG 1720mon 1720mon 5 REG 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 REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mem 9 REG 6,48b 6,48b 6,48b x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb meg 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/libdl. 7 memgod-gnu/libdl 1. 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. :~$

Filene som er åpne for prosessen med prosess-ID 1713, vises ved hjelp av lsof kommando.

Merk: GNOME-brukere kan støte på advarselen nedenfor. Du kan trygt ignorere det.

lsof: ADVARSEL: kan ikke stat() fuse.gvfsd-fuse filsystem /run/user/1000/gvfs Utdatainformasjon kan være ufullstendig.

Liste over åpne filer relatert til en prosess som bruker prosessnavnet

De lsof kommandoen gir deg også en mulighet til å liste de åpne filene ved å bruke navnene på prosessene. Navnene skal gis til kommandoen som en inndatastreng. Se syntaksen nedenfor for å bruke dette alternativet.

Syntaks:

sudo lsof -c [Prosessnavn]

Eksempel:

sudo lsof -c mysql

Produksjon:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: ADVARSEL: kan ikke stat() fuse.gvfsd-fuse filsystem /run/user/1000/gvfs Utdatainformasjon kan være ufullstendig. COMMAND PID BRUKER FD TYPE ENHET STØRRELSE/AV NODENAVN mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 2061 9,8216 9,821 9,8216 9,8216 9,8261 9 /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 /[aio] mysql 26q /[aio] mysql 26q /[aio] 1 26q 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_files-2.27. 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 

Utgangen vil være som den der prosess-IDen brukes i stedet for prosessnavnet.

Listefiler åpnet av nettverkstilkoblinger

I Linux kan filer også være i form av informasjon om dine nettverkstilkoblinger, maskinvaretilkoblinger etc. Vi kan bruke lsof kommandoen for å vise filene som åpnes av nettverkstilkoblingen. Bruk følgende metode.

sudo lsof -i

Produksjon:

gaurav@ubuntu:~$ sudo lsof -i KOMMANDO PID BRUKER FD TYPE ENHETSSTØRRELSE/AV NODENAVN systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domene systemd-r 969 systemd-resolve 4:07Tu localhost 4:07 T domene (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 avaDP2-8mdu IP 1mdu 0 md 0 1 DP 2-2 *: 0 md 0 0 md 0 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 (Lytt) mysqld 1266 mysql 19u IPv4 25992 0T0 TCP localhost: mysql (LYTTE) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LYTTE) gaurav@ubuntu:~$

Her kan vi se informasjonen om filene som åpnes av nettverkstilkoblingen ved hjelp av lsof -i kommando.

Konklusjon

I denne enkle opplæringen har vi lært hvordan du kan liste åpne filer for en prosess i Linux ved å bruke ulike metoder som er enkle å bruke. For mer bruk av lsof kommando, se lsof mannside.