Вступ до Лсоф

У 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вашої системи.

Залишити коментар

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

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

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

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. Прочитайте цю статтю, щоб дізнатися більше