Guia per utilitzar l'ordre 'lsof' per a un procés
Si sou un usuari freqüent de sistemes Linux o Unix segurament haureu d'haver sentit la frase: "A Linux, tot és un fitxer". Això es pot classificar com la simplificació excessiva del concepte, però resulta ser molt útil per entendre com funcionen els fitxers del sistema Linux.
No tot el que apareix a l'entorn Linux ha de ser un fitxer. De vegades pot ser un procés, pot ser un fitxer especial que representa la informació de maquinari, directoris i altres coses.
Aquest tutorial us guiarà per trobar tots els fitxers oberts per a un procés concret a Linux.
Introducció a lsof
Comandament
La bellesa del sistema Linux és que podeu controlar i gestionar tot el vostre sistema a través del terminal, sempre que conegueu bé les ordres. Un cop es coneixen les ordres, totes les tasques del terminal es converteixen en un passeig.
lsof
significa 'Llista de fitxers oberts‘. Un cop coneixeu la versió llarga de l'ordre, us serà molt fàcil entendre i utilitzar l'ordre d'una manera productiva.
El lsof
L'ordre mostra les llistes de fitxers oberts, sòcols i canonades. Podeu cercar fàcilment els fitxers oberts mitjançant aquesta ordre. Quan el lsof
L'ordre s'utilitza sense cap opció, mostra tots els fitxers oberts respecte als processos actius que s'estan executant.
Nota: Assegureu-vos que feu servir sudo
mentre executeu les ordres.
Utilitzant el lsof
Comandament
Estudiarem la sortida del lsof
comanda amb detall. Estudieu la següent comanda.
sudo lsof | menys
Nota: Si executem directament el lsof
comanda, la sortida serà molt gran i pot crear confusió per continuar més endavant. Per tant, aquí he utilitzat lsof | menys
comanda per a la comoditat del tutorial.
Sortida:
gaurav@ubuntu:~$ sudo lsof | menys COMANDA PID TID USUARI TIPUS FD DISPOSITIU MIDA/DESACTIVAT NOM DEL NODE kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root cwd desconegut / root txns32 desconegut DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt desconegut /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 4096 2 / rcu_tasks 30 8, 8 root DIR 339 / rcu_tasks 33 root txt desconegut /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 desconegut /proc/34/exe
A continuació es mostren els atributs que es mostren amb el lsof
comandament.
Paràmetre | Descripció |
---|---|
Comandament | Mostra el nom de l'ordre que obre el fitxer. |
PID | Número d'identificador de procés del procés que obre el fitxer. |
TID | Número d'identificador del fil. Pot ser un fil o un número de tasca. |
Usuari | ID d'usuari o nom de l'usuari que és el propietari del procés. |
FD | Mostra el descriptor del fitxer. |
Tipus | Tipus de node associat al fitxer. |
Dispositiu | Mostra els números de dispositiu. |
Talla/Desactivat | Mostra la mida del fitxer en bytes. |
Node | Mostra el número d'inode del directori o el directori principal. |
Nom | Mostra el nom del sistema de fitxers on es troba el procés. |
Llistat dels processos
En primer lloc, és important que obtingueu els processos que s'estan executant i els seus respectius ID de procés. Linux ofereix varietat d'ordres per enumerar els processos juntament amb els seus atributs com ara PID, usuari, directori, etc.
Podeu utilitzar les ordres com superior
, ps
, htop
, pstree
per llistar els processos al terminal.
Al llarg del tutorial, faré servir el superior
ordre de fer-ho. El superior
L'ordre proporciona una vista dinàmica en temps real d'un sistema en execució. També mostra tots els processos i fils que gestiona actualment el nucli de Linux. Estudieu el bloc indicat a continuació per comprovar la sortida del fitxer superior
comandament.
Sintaxi:
sudo top
Sortida:
gaurav@ubuntu:~$sudo top PID USER 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 Web Content mongo 12 82 62 5 0 6 7 3 34,41 mongod 13765 Gaurav 20 0 2.931.568 131408 47.496 S 5,9 3,3 1: 42,34 contingut web 1 arran 20 0.225.904 6824 4900 S 0,0 0,2 0: 27,25 systemd 2 arran 20 0 0 0 0 S 0,0 0,0 0: 00,05 KThreadd 4 arrel 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.0 0.0 0.0 0.0 0.0 0.0 0.01 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 migració
Al bloc anterior, podem veure tota la informació relacionada amb el procés en un sol lloc. Des d'aquí podem trobar el PID
del procés del qual hem de mostrar els fitxers oberts mitjançant el lsof
comandament.
Però si voleu esbrinar l'ID del procés només d'un procés concret i evitar altres processos no desitjats, feu servir l'ordre següent.
Sintaxi:
sudo top | grep [Nom_procés]
Exemple:
gaurav@ubuntu:~$ superior | grep terminal de 13.819 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 GNOME -terminal- gaurav@ubuntu:~$
Aquí hem mostrat específicament l'ID del procés que té la cadena "terminal" al nom del procés. Aquest mètode és útil quan no coneixeu el nom complet del procés o el PID.
Mostrar els fitxers oberts relacionats amb un procés mitjançant el PID
Al bloc anterior, vam aprendre a obtenir informació relacionada amb el procés amb l'ajuda de l'ordre superior. Ara farem servir el PID
corresponent a qualsevol procés del sistema i proveu de mostrar la llista dels fitxers oberts relacionats amb aquest procés mitjançant el lsof
comandament.
A partir de la sortida anterior, prenem el procés corresponent al PID 1173 que es destaca. Farem servir el lsof -p [PID]
ordre de fer-ho.
Sintaxi:
sudo lsof -p [PID]
Aquesta ordre pren el PID del procés com a entrada i enumera tots els fitxers corresponents a aquest PID.
Sortida:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: ADVERTIMENT: no es pot stat() sistema de fitxers fuse.gvfsd-fuse /run/user/1000/gvfs La informació de sortida pot ser incompleta. COMANDA PID USUARI TIPUS FD MIDA DEL DISPOSITIU/DESACTIVAT NOM DEL NODE mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb 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_mongodb17. 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-linux4_dns-2.27.so 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-archive / archive memo34 mongo4 802 117 mongod4 8,8 3004224 2909671 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 mem9648,68/lib96 6468 /lib/lib964 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-linux-gnu/libm-32gnud2 71 memb. 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-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-2.27.so :~$
Els fitxers que estan oberts per al procés amb l'ID de procés 1713 es mostren amb l' lsof
comandament.
Nota: Els usuaris de GNOME poden trobar l'avís següent. Pots ignorar-ho amb seguretat.
lsof: ADVERTÈNCIA: no es pot stat() sistema de fitxers fuse.gvfsd-fuse /run/user/1000/gvfs La informació de sortida pot ser incompleta.
Llista de fitxers oberts relacionats amb un procés mitjançant el nom del procés
El lsof
L'ordre també us ofereix una opció per llistar els fitxers oberts utilitzant els noms dels processos. Els noms s'han de proporcionar a l'ordre com a cadena d'entrada. Consulteu la sintaxi següent per utilitzar aquesta opció.
Sintaxi:
sudo lsof -c [Nom del procés]
Exemple:
sudo lsof -c mysql
Sortida:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: ADVERTÈNCIA: no es pot stat() sistema de fitxers fuse.gvfsd-fuse /run/user/1000/gvfs La informació de sortida pot ser incompleta. COMANDA PID USUARI TIPUS FD MIDA DEL DISPOSITIU/DESACTIVAT NOM DEL NODE mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 mysqlds 2,8 4096 mysqld 2154135 mysql 2154135 /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] DEL6 mysqlds, 818126 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 2.27.so 6 mysqld 6 2.27.so 4 mems 6 myqlds 7. 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
La sortida serà com la d'aquella en què s'utilitza l'ID de procés en lloc del nom del procés.
Llista de fitxers oberts per connexions de xarxa
A Linux, els fitxers també poden tenir forma d'informació sobre les vostres connexions de xarxa, connexions de maquinari, etc. Podem utilitzar lsof
comanda per llistar els fitxers oberts per la connexió de xarxa. Utilitzeu el següent mètode.
sudo lsof -i
Sortida:
gaurav@ubuntu:~$ sudo lsof -i COMANDA PID USUARI FD TIPUS MIDA DEL DISPOSITIU/DESACTIVAT NOM DEL NODE systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u TCP 13u localhost:1703 domini (ESCOLTA) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:himd81av302: IPv4 23811 avahi-dae 1028 avahi 14U IPv4 23812 0T0 UDP *: 58999 avahi-dae 1028 avahi 15u IPv6 23.813 0T0 UDP *: 37512 mongod 1173 MongoDB 6u IPv4 28149 0T0 TCP localhost: 27017 (ESCOLTAR) mysqld 1266 mysql 19u IPv4 25992 0T0 TCP localhost: mysql (ESCOLTA) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (ESCOLTA) gaurav@ubuntu:~$
Aquí podem veure la informació sobre els fitxers que s'obren per la connexió de xarxa mitjançant el lsof -i
comandament.
Conclusió
En aquest senzill tutorial, hem après a llistar fitxers oberts per a un procés a Linux mitjançant diversos mètodes fàcils d'utilitzar. Per a més usos del lsof
comanda, vegeu el lsof
pàgina de manual.