Вступ до Лсоф

У Linux багато об’єктів вважаються файлами, незалежно від того, чи є об’єкт насправді файлом, пристроєм, каталогом чи сокетом. Перерахувати файл легко, для цього є вбудована оболонка ls. Але що, якщо користувач хоче побачити, які файли в даний момент відкриває процес веб-сервера? Або якщо цей користувач хоче дізнатися, які файли відкриті в певному каталозі? Ось де lsofвступає в гру. Уявіть собі lsofяк lsз додаванням «відкритих файлів».

Зверніть увагу, що хоча BSD мають іншу утиліту для цієї роботи fstat, кілька інших різновидів Unix (наприклад, Solaris) також мають lsof. Параметри та прапорці відрізняються на інших платформах, а також вигляд виводу, але загалом знання, наведені в цій статті, мають бути застосовні і для них.

По-перше, давайте подивимося на формат lsofвиводу та як його потрібно читати. Звичайний вихід lsofбез параметрів буде нагадувати наступне. Це було вирізано для читабельності.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Ці стовпці означають наступне:

  • КОМАНД – процес, якому належить відкритий файл, у цьому прикладі все пов’язано з init.
  • PID – ідентифікаційний номер процесу.
  • КОРИСТУВАЧ – користувач, під яким виконується процес. Бо initце майже завжди root.
  • FD - дескриптор файлу, найпоширенішим є:
    • cwd- Поточний робочий каталог (ви можете помітити схожість з pwdкомандою, яка друкує поточний робочий каталог).
    • rtd - Кореневий каталог процесу.
    • txt- A text file, це може означати файл конфігурації, пов'язаний з процесом, або "вихідний код", пов'язаний з процесом (або належний до нього).
    • mem – Так званий «файл із відображенням пам’яті», що означає сегмент віртуальної пам’яті (читання: RAM), який був призначений файлу.
    • Число - число представляє фактичний дескриптор файлу, символ після числа - це режим, в якому відкривається файл:
    • r - Прочитайте.
    • w - Пишіть.
    • u - Читати і писати.
  • TYPE - вказує фактичний тип файлу, найпоширенішими є:
    • REG - Звичайний файл.
    • DIR - Довідник.
    • FIFO - Першим увійшов, першим вийшов.
  • ПРИСТРІЙ – головне та другорядне номери пристрою, на якому зберігається файл.
  • SIZE - Розмір файлу в байтах.
  • NODE – номер індексу файлу.
  • NAME - Ім'я файлу.

Наразі це може бути трохи приголомшливим, але якщо ви попрацюєте lsofкілька разів, це швидко зануриться у ваш мозок.

Як згадувалося вище, lsofтут було скорочено вихід . Без жодних аргументів чи фільтрів lsofвидає сотні рядків виводу, які лише збентежать вас.

Існує два основних підходи до вирішення цієї проблеми:

  • Використовуйте один або кілька параметрів lsofкомандного рядка, щоб звузити результати.
  • Передайте вихід через, наприклад, grep.

Хоча останній варіант може здатися більш зручним, оскільки вам не доведеться запам’ятовувати параметри lsofкомандного рядка, він зазвичай не такий гнучкий та ефективний, тому ми зупинимося на першому.

Уявімо, що ви хочете відкрити файл за допомогою свого улюбленого текстового редактора, і що текстовий редактор повідомляє вам, що його можна відкрити лише в режимі лише для читання, оскільки інша програма вже має доступ до нього. lsofдопоможе вам дізнатися, хто є злочинцем:

lsof /path/to/your/file

Це дасть результат, подібний до цього:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Мабуть, ви забули закрити і старішу сесію! Дуже подібна проблема виникає, коли ви намагаєтеся відключити спільну umountпапку NFS і повідомляє вам, що це не можна, оскільки щось все ще отримує доступ до підключеної папки. Знову ж таки, lsofможе допомогти вам визначити винного:

lsof +D /path/to/your/directory/

Зверніть увагу на кінцеву косу риску, це важливо. Інакше lsofбуде вважатися, що ви маєте на увазі звичайний файл. Нехай вас не бентежить +прапорець попереду – у lsofнього стільки параметрів командного рядка, що він потребує +на додаток до більш поширених -. Вихід буде виглядати так:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Це означає, що процес mocpіз PID 5637, що належить користувачеві music, відкрив файл під назвою RMS_GNU_SONG.ogg. Однак навіть після закриття цього процесу все ще існує проблема — том NFS не можна відмонтувати.

lsofмає -cпрапорець, який відображає відкриті файли з довільною назвою процесу.

lsof -c mocp

Це дасть результат, який буде виглядати так:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

У цьому прикладі є ще один екземпляр mocpзапуску, який заважає вам відключити спільний ресурс. Після завершення цього процесу ви хочете переконатися, що користувач musicне має відкритих інших потенційно проблемних файлів. lsofмає -uпрапорець для відображення файлів, відкритих певним користувачем. Пам’ятайте, що файл – це не завжди звичайний файл на вашому жорсткому диску!

lsof -u music

Ви також можете передати кількох користувачів, розділених комами:

lsof -u music,moremusic

Важливе зауваження з поведінки за замовчуванням lsof: результати АБО основі, що означає , що ви будете бачити результати файлів , відкритих процесами, які належать або користувачеві music, або користувачеві moremusic. Якщо ви хочете побачити результати, що відповідають процесам, які належать обом користувачам, вам доведеться передати прапорець -a:

lsof -au music, moremusic

Оскільки обидва користувачі знаходяться в групі musicusers, ви також можете перерахувати файли на основі групи:

lsof -g musicusers

Ви також можете комбінувати прапори командного рядка:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

В останньому рядку ми додали ще один спеціальний прапор - ^, що означає логічне НЕ . Якщо після виконання цієї команди вихід порожній, то, швидше за все, розмонтування буде успішним.

У попередніх прикладах ми переважно розглядали звичайні файли. Як щодо розеток і мережевих підключень?

Для переліку всіх поточних мережевих підключень lsofє -iпрапорець:

lsof -i

Результат виглядає схожим на те, що ми бачили досі...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... за винятком однієї відмінності: замість імен файлів або каталогів у стовпці NAMEтепер відображається інформація про підключення. Кожне з'єднання складається з таких частин:

  • протокол.
  • Локальне ім'я хоста.
  • Порт джерела підключення.
  • Ім'я DNS призначення.
  • Порт призначення.
  • Стан підключення.

Як і в багатьох інших інструментах, ви можете відмовитися від розпізнавання імен і портів DNS ( -nі -P, відповідно). Прапор -iприймає додаткові параметри. Ви можете вказати, чи показувати чи ні tcp, udpабо icmpпідключення, чи певні порти:

lsof -i :25
or
lsof -i :smtp

Знову ж таки, параметри можна комбінувати. Наступний приклад...

lsof -i tcp:80

... покаже лише TCP-з'єднання за допомогою порту 80. Ви також можете поєднати його з параметрами, які ви вже знаєте з "класичних" файлів:

lsof -a -u httpd -i tcp

Це покаже вам усі TCP-з'єднання, відкриті користувачем httpd. Зверніть увагу на -aпрапорець, який змінює поведінку за замовчуванням lsof(як згадувалося раніше). Як і більшість інструментів командного рядка, ви можете дуже глибоко заглибитися. Нижче буде показано лише TCP-з’єднання, стан яких «УСТАНОВЛЕНО»:

lsof -i -s TCP:ESTABLISHED

На цьому етапі ви повинні мати базове розуміння того, як lsofпрацює, а також деякі поширені випадки використання. Щоб дізнатися більше, перегляньте сторінку керівництва lsofвашої системи.


Leave a Comment

Встановіть Plesk на CentOS 7

Встановіть Plesk на CentOS 7

Використання іншої системи? Plesk — це власна панель керування веб-хостом, яка дозволяє користувачам адмініструвати свої персональні та/або клієнтські веб-сайти, бази даних

Установіть Lets Encrypt SSL у програму WordPress одним клацанням миші

Установіть Lets Encrypt SSL у програму WordPress одним клацанням миші

Вступ Lets Encrypt — це служба центру сертифікації, яка пропонує безкоштовні сертифікати TLS/SSL. Certbot спрощує процес встановлення,

Як налаштувати сервер Tekkit Classic на Ubuntu 16.10

Як налаштувати сервер Tekkit Classic на Ubuntu 16.10

Використання іншої системи? Що таке Tekkit Classic? Tekkit Classic — це модпак для гри, яку всі знають і люблять; Майнкрафт. Він містить деякі з вер

Як встановити та налаштувати PHP 7.0 або PHP 7.1 на Ubuntu 16.04

Як встановити та налаштувати PHP 7.0 або PHP 7.1 на Ubuntu 16.04

PHP та пов’язані з ним пакети є найбільш часто використовуваними компонентами під час розгортання веб-сервера. У цій статті ми дізнаємося, як налаштувати PHP 7.0 або PHP 7.1 o

Як встановити Lighttpd (LLMP Stack) на CentOS 6

Як встановити Lighttpd (LLMP Stack) на CentOS 6

Вступ Lighttpd — це форк Apache, який має набагато меншу ресурсомісткість. Він легкий, звідси його назва, і досить простий у використанні. Встановити

Три безкоштовні панелі керування сервером (швидке встановлення)

Три безкоштовні панелі керування сервером (швидке встановлення)

1. Virtualmin/Webmin Virtualmin — це потужна та гнучка панель керування веб-хостингом для систем Linux та UNIX на основі відомої веб-бази з відкритим вихідним кодом.

Налаштування програми Yii на Ubuntu 14.04

Налаштування програми Yii на Ubuntu 14.04

Yii — це PHP-фреймворк, який дозволяє розробляти програми швидше та легше. Установка Yii на Ubuntu проста, як ви дізнаєтеся

Використання Screen в Ubuntu 14.04

Використання Screen в Ubuntu 14.04

Screen — це програма, яка дозволяє багаторазово використовувати термінальні сеанси в одному вікні. Це дозволяє моделювати декілька вікон терміналу, де це ma

Використання Logrotate для керування файлами журналу

Використання Logrotate для керування файлами журналу

Вступ Logrotate — це утиліта для Linux, яка спрощує адміністрування файлів журналів. Зазвичай він запускається раз на день через завдання cron і керує базою журналів

Як встановити Apache Cassandra 3.11.x на Ubuntu 16.04 LTS

Як встановити Apache Cassandra 3.11.x на Ubuntu 16.04 LTS

Використання іншої системи? Apache Cassandra — це безкоштовна система керування базами даних NoSQL з відкритим вихідним кодом, яка розроблена для забезпечення масштабованості, високої

Як встановити Vanilla Forum на Ubuntu 16.04

Як встановити Vanilla Forum на Ubuntu 16.04

Використання іншої системи? Vanilla forum — це програма з відкритим вихідним кодом, написана на PHP. Це повністю настроюваний, простий у використанні та підтримує зовнішній вигляд

Як встановити Kanboard на Ubuntu 18.04 LTS

Як встановити Kanboard на Ubuntu 18.04 LTS

Використання іншої системи? Вступ Kanboard — це безкоштовна програма з відкритим вихідним кодом для управління проектами, яка призначена для полегшення та візуалізації

Як встановити Gitea на Ubuntu 18.04

Як встановити Gitea на Ubuntu 18.04

Використання іншої системи? Gitea — це альтернативна система контролю версій із відкритим вихідним кодом, яка працює на базі git. Gitea написана на Голанг і є

Встановлення Docker CE на Ubuntu 16.04

Встановлення Docker CE на Ubuntu 16.04

Використання іншої системи? Docker — це програма, яка дозволяє розгортати програми, які запускаються як контейнери. Це було написано в популярному програмі Go

Виправлення експлойту Dirty Cow на CentOS

Виправлення експлойту Dirty Cow на CentOS

Що таке Dirty Cow (CVE-2016-5195)? Уразливість Dirty Cow використовується через те, як Linux обробляє код. Це дозволяє непривілейованому користувачеві використовувати gai

Налаштуйте користувача без права root за допомогою Sudo Access в Ubuntu

Налаштуйте користувача без права root за допомогою Sudo Access в Ubuntu

Наявність лише одного користувача, який є root, може бути небезпечним. Тож давайте це виправимо. Vultr надає нам свободу робити з нашими користувачами та нашими серверами, що нам заманеться

Встановіть Adminer на Debian/Ubuntu

Встановіть Adminer на Debian/Ubuntu

Adminer — це легка альтернатива phpMyAdmin. Для порівняння, його загальний розмір пакета становить 400 КБ проти 4,2 МБ phpMyAdmin. На відміну від phpMyAdmin, який

Налаштуйте автентифікацію HTTP за допомогою Nginx на CentOS 7

Налаштуйте автентифікацію HTTP за допомогою Nginx на CentOS 7

У цьому посібнику ви дізнаєтеся, як налаштувати автентифікацію HTTP для веб-сервера Nginx, що працює на CentOS 7. Вимоги Щоб почати, вам знадобиться

Як встановити Nextcloud на Ubuntu 17.04

Як встановити Nextcloud на Ubuntu 17.04

У цьому посібнику ви навчитеся інсталювати програмне забезпечення NextCloud. Ми будемо використовувати Caddy для потреб нашого веб-сервера, оскільки це спрощує налаштування

Як встановити GoAccess на Ubuntu 16.04

Як встановити GoAccess на Ubuntu 16.04

Використання іншої системи? GoAccess — це аналізатор веб-журналів з відкритим вихідним кодом. Ви можете використовувати його для аналізу журналів у режимі реального часу в терміналі або

Повстання машин: застосування ШІ в реальному світі

Повстання машин: застосування ШІ в реальному світі

Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.

DDOS-атаки: короткий огляд

DDOS-атаки: короткий огляд

Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.

Революційні винаходи від Google, які полегшать ваше життя.

Революційні винаходи від Google, які полегшать ваше життя.

Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.

Еволюція зберігання даних – інфографіка

Еволюція зберігання даних – інфографіка

Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.

Функціональні можливості шарів еталонної архітектури великих даних

Функціональні можливості шарів еталонної архітектури великих даних

Прочитайте блог, щоб дізнатися про різні шари архітектури великих даних та їх функціональні можливості найпростішим способом.

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше