Посібник із використання команди «lsof» для процесу
Якщо ви часто користуєтеся системами Linux або Unix, то напевно чули фразу «У Linux все є файлом». Це можна класифікувати як надмірне спрощення концепції, але це виявляється дуже корисним для розуміння того, як працюють файли в системі Linux.
Не все, що з’являється в середовищі Linux, має бути файлом. Іноді це може бути процес, це може бути спеціальний файл, що представляє інформацію про обладнання, каталоги та інші речі.
Цей підручник допоможе вам знайти всі файли, які відкриті для певного процесу в Linux.
Вступ до lsof
Команда
Принадність системи Linux полягає в тому, що ви можете контролювати і керувати всією системою через термінал, за умови, що ви добре знаєте команди. Після того, як команди відомі, усі завдання на терміналі стають звичайними.
lsof
виступає за 'Список відкритих файлів‘. Коли ви дізнаєтеся про довгу версію команди, вам стане дуже легко зрозуміти та продуктивно використовувати команду.
The lsof
Команда відображає списки відкритих файлів, сокетів і каналів. Ви можете легко шукати відкриті файли за допомогою цієї команди. Коли lsof
Команда використовується без будь-яких параметрів, вона відображає всі відкриті файли щодо активних процесів, які запущені.
Примітка: Переконайтеся, що ви використовуєте sudo
під час виконання команд.
Використання The 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 / root tcn c un31 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 2 IR 33 root 20 / 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 | Показує дескриптор файлу. |
Тип | Тип вузла, пов’язаного з файлом. |
Пристрій | Показує номери пристроїв. |
Розмір/Викл | Показує розмір файлу в байтах. |
Вузол | Показує номер індексу каталогу або батьківського каталогу. |
Ім'я | Показує ім'я файлової системи, де розташований процес. |
Перелік процесів
Перш за все, вам важливо отримати запущені процеси та їх відповідні ідентифікатори процесів. Linux надає різноманітні команди для переліку процесів разом з їхніми атрибутами, такими як PID, користувач, каталог тощо.
Ви можете використовувати такі команди, як зверху
, пс
, htop
, pstree
щоб перерахувати процеси на терміналі.
Протягом усього підручника я буду використовувати зверху
наказ зробити це. The зверху
Команда забезпечує динамічний перегляд запущеної системи в режимі реального часу. Він також відображає всі процеси та потоки, якими зараз управляє ядро Linux. Вивчіть поданий нижче блок, щоб перевірити вихід зверху
команда.
Синтаксис:
sudo top
Вихід:
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.018 87:48.018 87:48.018 87:48.017 87:48.017 87:48.017 87:48.017 87:48.017 Web 382 602 602 602 82 82 82 82 82 82 34.41 mongod 13765 Gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1: 42.34 Web Content 1 корінь 20 0 225 904 6824 4900 S 0,0 0,2 0: 27.25 Systemd 2 кореня 20 0 0 0 0 0,0 0,0 S 0: 00,05 kthreadd 4 кореня 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 q 0.0 k 0.0 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 top | grep [Назва_процесу]
приклад:
gaurav@ubuntu:~$ вгору | ГРЕП термінал 13819 Gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53.63 гнома-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 1,0 0,5 0: 53.66 гнома-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 0,3 0,5 0: 53.67 гнома -terminal- 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 REV63888 / mongod 1173 mongodb63t888 / 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 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 26244-2643 26244-2643 26244-2643 26244-2643 mongod. 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_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux 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/locale2012000000000000000000000000000000000000 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 mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod2617 mongod26b61684 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-1173 mongod. 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_gubsou0. :~$
Файли, відкриті для процесу з ідентифікатором процесу 1713, відображаються за допомогою lsof
команда.
Примітка: Користувачі GNOME можуть зіткнутися з наведеним нижче попередженням. Ви можете сміливо ігнорувати це.
lsof: ПОПЕРЕДЖЕННЯ: не вдається stat() fuse.gvfsd-fuse файлова система /run/user/1000/gvfs Вихідна інформація може бути неповною.
Перелік відкритих файлів, пов’язаних із процесом, за допомогою імені процесу
The 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 4068 4068 4068 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 REG 0,18 28127 mysql /[aio]26s16 /[aio]26sq / aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss27files26 /libnss2786 /libnss2786 /libnss2788 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 localhost:domain systemd-r 969 local systemd-u3058 TCP/IP домен (СЛУХАТИ) 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 UDP 1685575 0t0 UDP1018m *-:m Avahi-Де 1028 Avahi 14U IPv4 23812 0t0 UDP *: 58999 Avahi-Де 1028 Avahi 15U IPv6 23813 0t0 UDP *: 37512 mongod 1173 MongoDB 6U IPv4 28149 0t0 TCP локальний: 27017 (СЛУХАТИ) MYSQLD 1266 MySQL 19U IPv4 25992 0t0 TCP локальний: mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$
Тут ми можемо побачити інформацію про файли, які відкриваються мережевим підключенням за допомогою lsof -i
команда.
Висновок
У цьому простому підручнику ми навчилися складати список відкритих файлів для процесу в Linux, використовуючи різні прості у використанні методи. Для більшого використання lsof
команда, див lsof
сторінка людини.