Hoe openstaande bestanden voor een proces op Linux weer te geven?

Handleiding voor het gebruik van de opdracht 'lsof' voor een proces

Als je een frequente gebruiker bent van Linux- of Unix-systemen, heb je vast de uitdrukking "In Linux is alles een bestand" gehoord. Dit kan worden gecategoriseerd als de oversimplificatie van het concept, maar het blijkt zeer nuttig te zijn om te begrijpen hoe bestanden in het Linux-systeem werken.

Niet alles wat in de Linux-omgeving verschijnt, hoeft een bestand te zijn. Soms kan het een proces zijn, het kan een speciaal bestand zijn dat de hardware-informatie, mappen en andere dingen vertegenwoordigt.

Deze tutorial helpt je bij het vinden van alle bestanden die open staan ​​voor een bepaald proces in Linux.

Inleiding tot lsof Opdracht

Het mooie van het Linux-systeem is dat je je hele systeem via de terminal kunt besturen en beheren, op voorwaarde dat je de commando's goed kent. Zodra de opdrachten bekend zijn, worden alle taken op de terminal een fluitje van een cent.

lsof betekent 'Lijst met geopende bestanden‘. Als u eenmaal de lange versie van de opdracht kent, wordt het voor u heel gemakkelijk om de opdracht op een productieve manier te begrijpen en te gebruiken.

De lsof commando toont de lijsten met geopende bestanden, sockets en pijpen. Met deze opdracht kunt u eenvoudig naar de geopende bestanden zoeken. Wanneer de lsof commando zonder enige optie wordt gebruikt, toont het alle geopende bestanden met betrekking tot de actieve processen die worden uitgevoerd.

Opmerking: Zorg ervoor dat u sudo tijdens het uitvoeren van de commando's.

De ... gebruiken lsof Opdracht

We zullen de output van de bestuderen lsof opdracht in detail. Bestudeer de volgende opdracht.

sudo lsof | minder

Opmerking: Als we rechtstreeks de lsof commando, zal de uitvoer erg groot zijn en kan er verwarring ontstaan ​​om verder te gaan. Daarom heb ik hier gebruikt lsof | minder commando voor het gemak van de zelfstudie.

Uitgang:

gaurav@ubuntu:~$ sudo lsof | minder COMMANDO PID TID GEBRUIKER FD TYPE APPARAAT GROOTTE/UIT KNOOPNAAM kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt onbekend /proc/31/exe netns 32 root cwd DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt onbekend /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR 8,8 4096 2 / rcu_tasks 33 root txt onbekend /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 onbekend /proc/34/exe 

Hieronder volgen de attributen die worden weergegeven met de lsof opdracht.

ParameterBeschrijving
OpdrachtToont de naam van de opdracht waarmee het bestand wordt geopend.
PIDProcesidentificatienummer van het proces dat het bestand opent.
TIDDraadidentificatienummer. Het kan een thread of een taaknummer zijn.
GebruikerGebruikers-ID of naam van de gebruiker die de eigenaar is van het proces.
FDToont de bestandsdescriptor van het bestand.
TypeType knooppunt dat aan het bestand is gekoppeld.
ApparaatToont apparaatnummers.
Maat/UitToont de grootte van het bestand in bytes.
KnooppuntToont het inodenummer van de directory of de bovenliggende directory.
NaamToont de naam van het bestandssysteem waar het proces zich bevindt.

Opsomming van de processen

Eerst en vooral is het belangrijk voor u om de processen te verkrijgen die worden uitgevoerd en hun respectieve proces-ID's. Linux biedt verschillende commando's om de processen samen met hun attributen zoals PID, gebruiker, directory, enz.

U kunt de commando's gebruiken zoals bovenkant, ps, htop, pstree om de processen op de terminal weer te geven.

Gedurende de hele tutorial zal ik de . gebruiken bovenkant opdracht om dit te doen. De bovenkant commando biedt een dynamische realtime weergave van een draaiend systeem. Het toont ook alle processen en threads die momenteel worden beheerd door de Linux-kernel. Bestudeer het onderstaande blok om de uitvoer van de te controleren bovenkant opdracht.

Syntaxis:

sudo top

Uitgang:

gaurav@ubuntu:~$sudo top PID GEBRUIKER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMANDO 2703 gaurav 20 0 4286124 1.142g 103584 R 88,2 30,5 87:48.08 Webinhoud 1173 mongodb 20 0 288536 6776 3428 S 5,9 0,2 2: 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1:42.34 Webinhoud 1 root 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 root 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 0:01.89 ksoftirqd/0 8 root 20 0 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.13 migratie/0 

In het bovenstaande blok kunnen we alle procesgerelateerde informatie op één plek zien. Vanaf hier kunnen we de vinden PID van het proces waarvan we de geopende bestanden moeten weergeven met de lsof opdracht.

Maar als u de proces-ID van alleen een bepaald proces wilt weten en andere ongewenste processen wilt vermijden, gebruik dan de volgende opdracht.

Syntaxis:

sudo top | grep [Procesnaam]

Voorbeeld:

gaurav@ubuntu:~$ top | grep terminal 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0:53.63 kabouter-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1,0 0,5 0:53.66 kabouter-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0,3 0,5 0:53,67 kabouter -terminal- gaurav@ubuntu:~$

Hier hebben we specifiek de proces-ID van het proces weergegeven met de tekenreeks 'terminal' in de procesnaam. Deze methode is handig als u niet op de hoogte bent van de volledige procesnaam of de PID.

De geopende bestanden met betrekking tot een proces weergeven met behulp van de PID

In het bovenstaande blok hebben we geleerd hoe we de procesgerelateerde informatie kunnen verkrijgen met behulp van het top-commando. Nu zullen we de . gebruiken PID overeenkomen met elk proces op het systeem en probeer de lijst met geopende bestanden met betrekking tot dat proces weer te geven met behulp van de lsof opdracht.

Laten we van de hierboven gegeven uitvoer het proces nemen dat overeenkomt met de PID 1173 die is gemarkeerd. We zullen de gebruiken lsof -p [PID] opdracht om dit te doen.

Syntaxis:

sudo lsof -p [PID]

Deze opdracht neemt de PID van het proces als invoer en geeft alle bestanden weer die overeenkomen met deze PID.

Uitgang:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: WAARSCHUWING: can't stat() fuse.gvfsd-fuse bestandssysteem /run/user/1000/gvfs De uitvoerinformatie is mogelijk onvolledig. COMMANDO PID GEBRUIKER FD TYPE APPARAAT GROOTTE/UIT NAAM NODE mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 38379496 2885608 /usr/bin/mongod 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 2624643 /lib/x86_64-linux-gnu/libresolv-2.27.so mongod 1173 mongodb 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_mdns4_minimal.so.2 mongod 1173 mongod 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-archief mongod 1173 mongodb mem REG 8,8 2030544 2621501 / 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 mongodb mem REG 8,8 96616 2624649 /lib/ x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb mij 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-2.27.so mongod 1173 mongodb mem REG 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/libcrypto.so.1.0.0 gaurav@ubuntu :~$

De bestanden die geopend zijn voor het proces met proces-ID 1713 worden weergegeven met de lsof opdracht.

Opmerking: GNOME-gebruikers kunnen de onderstaande waarschuwing tegenkomen. Je kunt het gerust negeren.

lsof: WAARSCHUWING: can't stat() fuse.gvfsd-fuse bestandssysteem /run/user/1000/gvfs De uitvoerinformatie is mogelijk onvolledig.

Lijst van geopende bestanden gerelateerd aan een proces met behulp van de procesnaam

De lsof commando biedt u ook een optie om de geopende bestanden weer te geven met behulp van de namen van de processen. De namen moeten als invoerreeks aan de opdracht worden verstrekt. Zie de syntaxis hieronder om deze optie te gebruiken.

Syntaxis:

sudo lsof -c [Procesnaam]

Voorbeeld:

sudo lsof -c mysql

Uitgang:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: WAARSCHUWING: can't stat() fuse.gvfsd-fuse bestandssysteem /run/user/1000/gvfs De uitvoerinformatie is mogelijk onvolledig. COMMANDO PID GEBRUIKER FD TYPE APPARAAT GROOTTE/UIT KNOOPNAAM mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt 2469 REG 8,894 /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] mysqld 1266 mysql DEL REG 0,18 28126 /[ 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.so mysqld 1266 mysql mem REG 8,8 47576 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 

De uitvoer zal zijn zoals die waarin de proces-ID wordt gebruikt in plaats van de procesnaam.

Lijst van bestanden geopend door netwerkverbindingen

In Linux kunnen bestanden ook de vorm hebben van informatie over uw netwerkverbindingen, hardwareverbindingen enz. We kunnen gebruik maken van lsof opdracht om de bestanden weer te geven die door de netwerkverbinding zijn geopend. Gebruik de volgende methode.

sudo lsof -i

Uitgang:

gaurav@ubuntu:~$ sudo lsof -i COMMANDO PID GEBRUIKER FD TYPE APPARAAT GROOTTE/UIT NAAM KNOOPPUNT systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost: domein (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domein avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 U3811 0tmds 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 19ut0 mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$

Hier kunnen we de informatie zien over de bestanden die geopend zijn door de netwerkverbinding met behulp van de lsof -i opdracht.

Gevolgtrekking

In deze eenvoudige zelfstudie hebben we geleerd hoe we open bestanden voor een proces in Linux kunnen weergeven met behulp van verschillende methoden die gemakkelijk te gebruiken zijn. Voor meer gebruik van de lsof commando, zie de lsof man pagina.