Как да изброите отворени файлове за процес в Linux

Ръководство за използване на командата „lsof“ за процес

Ако често използвате Linux или Unix системи, със сигурност сте чували фразата „В Linux всичко е файл“. Това може да се категоризира като прекомерно опростяване на концепцията, но се оказва много полезно да се разбере как работят файловете в системата Linux.

Не всичко, което се появява в средата на Linux, трябва да бъде файл. Понякога това може да бъде процес, може да бъде специален файл, представящ хардуерната информация, директории и други неща.

Този урок ще ви преведе в намирането на всички файлове, които са отворени за конкретен процес в Linux.

Представяне на lsof Команда

Красотата на Linux системата е, че можете да контролирате и управлявате цялата си система чрез терминала, при условие че познавате добре командите. След като командите са известни, тогава всички задачи на терминала се превръщат в обикновена пътека.

lsof означава "Списък с отворени файлове‘. След като знаете дългата версия на командата, за вас става много лесно да разберете и използвате командата по продуктивен начин.

В lsof командата показва списъците с отворени файлове, гнезда и канали. Можете лесно да търсите отворените файлове с помощта на тази команда. Когато lsof командата се използва без опция, тя показва всички отворени файлове по отношение на активните процеси, които се изпълняват.

Забележка: Уверете се, че използвате sudo докато изпълнявате командите.

Използвайки lsof Команда

Ще проучим изхода на lsof команда в детайли. Проучете следната команда.

sudo lsof | по-малко

Забележка: Ако стартираме директно lsof команда, изходът ще бъде много голям и може да създаде объркване, за да продължите по-нататък. Следователно, тук използвах lsof | по-малко команда за удобство на урока.

Изход:

gaurav@ubuntu:~$ sudo lsof | по-малко КОМАНД PID TID ПОТРЕБИТЕЛ FD ТИП РАЗМЕР НА УСТРОЙСТВО/ИЗКЛ. ИМЕ НА ВОЗЕЛА kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 / kdevtmpfs 31 / exe root tcw c un cd1 DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt неизвестен /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 8, rcu_tasks 8 D 3 IR / rcu_tasks 33 root txt неизвестен /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 неизвестен /proc/34/ 

Следват атрибутите, които се показват с помощта на lsof команда.

ПараметърОписание
КомандаПоказва името на командата, която отваря файла.
PIDИдентификационният номер на процеса на процеса, който отваря файла.
TIDНомер на идентификатор на нишка. Може да бъде или нишка, или номер на задача.
потребителПотребителски идентификатор или име на потребителя, който е собственик на процеса.
FDПоказва файловия дескриптор на файла.
ТипТип възел, свързан с файла.
устройствоПоказва номерата на устройствата.
Размер/ИзклПоказва размера на файла в байтове.
възелПоказва номера на inode директорията или родителската директория.
имеПоказва името на файловата система, където се намира процесът.

Изброяване на процесите

Първо и преди всичко е важно да получите процесите, които се изпълняват, и съответните им идентификатори на процеси. Linux предоставя разнообразие от команди за изброяване на процесите заедно с техните атрибути като PID, потребител, директория и т.н.

Можете да използвате командите като връх, п.с, htop, pstree за да изброите процесите в терминала.

През целия урок ще използвам връх команда за това. В връх командата предоставя динамичен изглед в реално време на работеща система. Той също така показва всички процеси и нишки, които в момента се управляват от ядрото на Linux. Проучете дадения по-долу блок, за да проверите изхода на връх команда.

Синтаксис:

sudo отгоре

Изход:

gaurav@ubuntu:~$sudo top PID ПОТРЕБИТЕЛ PR NI VIRT RES SHR S %CPU %MEM TIME+ КОМАНД 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.017 87:48.162 Web 58.162 Web 58.162 58.162 Web Content 34,41 mongod 13765 Gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1: 42,34 уеб съдържание 1 корен 20 0 225 904 6824 4900 S 0.0 0.2 0: 27,25 systemd 2 корен 20 0 0 0 0 S 0.0 0.0 0: 00,05 kthreadd 4 корен 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 корен 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 корен 20 0 0 0 0 S 0.0 0.0 1 q 0.0 0.8 k 0.0 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 migration 

В горния блок можем да видим цялата информация, свързана с процеса, на едно място. От тук можем да намерим PID от процеса, на който трябва да покажем отворените файлове с помощта на lsof команда.

Но ако искате да разберете идентификатора на процеса само на конкретен процес и да избегнете други нежелани процеси, използвайте следната команда.

Синтаксис:

sudo отгоре | grep [име_на_процеса]

пример:

gaurav@ubuntu:~$ отгоре | Впиши терминал 13819 Gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53,63 гном-Терминал 13819 Gaurav 20 0 803336 19728 9160 S 1.0 0.5 0: 53,66 гном-Терминал 13819 Gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53,67 гном -терминал- gaurav@ubuntu:~$

Тук специално сме показали идентификатора на процеса на процеса, който има низ „терминал“ в името на процеса. Този метод е удобен, когато не знаете пълното име на процеса или PID.

Показване на отворените файлове, свързани с процес с помощта на PID

В горния блок научихме как да получим информация, свързана с процеса с помощта на командата top. Сега ще използваме PID съответстващ на всеки процес в системата и се опитайте да покажете списъка с отворените файлове, свързани с този процес, като използвате lsof команда.

От дадения по-горе изход, нека вземем процеса, съответстващ на PID 1173, който е подчертан. Ние ще използваме lsof -p [PID] команда за това.

Синтаксис:

sudo lsof -p [PID]

Тази команда приема PID на процеса като вход и изброява всички файлове, съответстващи на този PID.

Изход:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: ПРЕДУПРЕЖДЕНИЕ: не мога да stat() fuse.gvfsd-fuse файлова система /run/user/1000/gvfs Изходната информация може да е непълна. КОМАНД PID ПОТРЕБИТЕЛ ТИП FD РАЗМЕР НА УСТРОЙСТВО/ИЗКЛ. ИМЕ НА ВЪЗЛ mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb mongodb63t889 / mongod 1173 mongodb63t898 / mongod 1173 mongodb63t88 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 26244368 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 26244b1-2643 262441-2643 mongod. кор REG 8,8 26 936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 MongoDB кор REG 8,8 10 160 2626002 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 mongod 1173 MongoDB кор REG 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/locale2002/lomon 1173 mongodb/locale200000000000000000000000 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 mongodb/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 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libm-2.27.so mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libm-2.27. 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_64untu. :~$

Файловете, които са отворени за процеса с идентификатор на процес 1713, се показват с помощта на lsof команда.

Забележка: Потребителите на GNOME може да срещнат предупреждението по-долу. Можете спокойно да го игнорирате.

lsof: ПРЕДУПРЕЖДЕНИЕ: не може stat() fuse.gvfsd-fuse файлова система /run/user/1000/gvfs Изходната информация може да е непълна.

Изброяване на отворени файлове, свързани с процес, като се използва името на процеса

В lsof Командата също така ви предоставя опция за изброяване на отворените файлове, използвайки имената на процесите. Имената трябва да бъдат предоставени на командата като входен низ. Вижте синтаксиса по-долу, за да използвате тази опция.

Синтаксис:

sudo lsof -c [име на процеса]

пример:

sudo lsof -c mysql

Изход:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: ПРЕДУПРЕЖДЕНИЕ: не мога да stat() fuse.gvfsd-fuse файлова система /run/user/1000/gvfs Изходната информация може да е непълна. КОМАНД PID ПОТРЕБИТЕЛ ТИП FD РАЗМЕР НА УСТРОЙСТВО/ИЗКЛ. ИМЕ НА ВЪЗЛ mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4066 mysql 8,8 4066 mysql 4068 / 4066 mysql 4068 /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 mysql 0,18 28127 16 / 28127 / 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/libnss27G786 mysqld 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. 

Резултатът ще бъде като този, в който се използва идентификационният номер на процеса вместо името на процеса.

Списък на файлове, отворени от мрежови връзки

В Linux файловете могат да бъдат и под формата на информация за вашите мрежови връзки, хардуерни връзки и т.н. Можем да използваме lsof команда за изброяване на файловете, отворени от мрежовата връзка. Използвайте следния метод.

sudo lsof -i

Изход:

gaurav@ubuntu:~$ sudo lsof -i КОМАНДА PID ПОТРЕБИТЕЛ FD ТИП УСТРОЙСТВО РАЗМЕР/ИЗКЛ. ИМЕ НА ВОЗЕЛ systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP локален хост: домейн systemd-r 969 systemd-u3058 локален systemd130058 домейн (СЛУШАЙ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP16m0d12d100m *: 23810 Avahi-Дей 1028 Avahi 14ф IPv4 23812 0t0 UDP *: 58999 Avahi-Дей 1028 Avahi 15ф IPv6 23813 0t0 UDP *: 37512 mongod 1173 MongoDB 6U IPv4 28149 0t0 TCP Localhost: 27017 (СЛУШАЙ) Mysqld 1266 MySQL 19u IPv4 25992 0t0 TCP Localhost: mysql (СЛУШАЙ) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (СЛУШАЙ) gaurav@ubuntu:~$

Тук можем да видим информацията за файловете, които са отворени от мрежовата връзка с помощта на lsof -i команда.

Заключение

В този прост урок научихме как да изброяваме отворени файлове за процес в Linux, използвайки различни методи, които са лесни за използване. За повече употреби на lsof команда, вижте lsof man страница.

Категория: Linux