Ръководство за използване на командата „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 страница.