Команди Linux

Як використовувати Strace в Linux

Як використовувати Strace в Linux
Під час роботи з системами Linux вам часто доведеться перевіряти та розуміти дії, що виконуються процесами, та системні виклики, здійснені під час їх виконання.

Що стосується виконання таких завдань, ядро ​​Linux надає такі функції, як ptrace для налагодження та діагностики процесів.

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

Що таке системні дзвінки?

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

Системний виклик - це програмний метод, за допомогою якого програма може запитувати послугу з ядра системи. Це процес, який ми будемо використовувати для перевірки дій між процесами користувача та ядром Linux.

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

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

У системі Linux цей механізм добре приховується від користувачів бібліотеками, такими як Glibc.

ПРИМІТКА: Системні виклики та взаємодія ядра набагато більше, ніж те, що ми обговорювали в цьому посібнику. Будь ласка, зверніться до сторінок керівництва для отримання додаткової інформації.

https: // linkfy.до / syscalls

https: // linkfy.до / trapmanual

Як встановити strace на Linux

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

ПРИМІТКА: Незважаючи на те, що ми не будемо розповідати про те, як встановити strace на всі системи, ми обговоримо, як це зробити, з основними менеджерами пакетів, такими як apt, dnf, pacman та yum

1: Встановлення Debian (apt)

Встановіть strace за допомогою команди:

apt-get встановити strace -y

2: Сімейство RedHat (dnf та yum)

Щоб встановити strace за допомогою диспетчера пакунків yum, введіть команду:

ням встановити страце

Для менеджера пакетів dnf введіть команду:

dnf встановити strace

3: Arch Linux (pacman)

Для користувачів Arch Linux ви можете встановити strace за допомогою команди:

pacman -S страза

Тепер, коли у вас встановлено і запущено стратегію, ми можемо рухатись далі і вчитися користуватися

Основне використання Strace: Посібник

Давайте обговоримо базове використання strace і зрозуміємо базовий результат команди та те, як ми можемо ним користуватися.

ПРИМІТКА: Виводиться Strace, такий як імена системних викликів, відповідні аргументи та повернені значення стандартний дескриптор файлу помилок (stderr).

Основний спосіб використання strace - це виклик утиліти strace, за якою йде назва програми, поведінку якої ми хочемо зрозуміти.

Ось приклад того, як використовувати команду ls:

Ого! Це багато результату для простої команди, такої як ls.

Хоча ми не можемо обговорити всі результати команди strace, ми можемо перегнати і зрозуміти її значення.

Якщо ви розглянете перший рядок у вихідних даних вище, ви помітите наступні особливості.

Отже, у першому рядку системний виклик виконується (виконується програма, використовуючи вказаний масив аргументів), аргументи системного виклику (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 вар. * /) І повернене значення 0.

https: // linkfy.до / виконувати

Системні виклики execve виконують двійковий файл, який ми хочемо використовувати, в даному випадку, розташований у (/ bin / ls), а масив аргументів - це шлях, до якого ми хочемо перерахувати вміст.

Ви також помітите позначення, укладене косою рискою та зірочкою. Для нашого прикладу:

/ * 13 вар. * /

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

int main (int argc, char * argv [], char * envp [])

Кінцевим результатом є повернене значення, яке в цьому випадку дорівнює 0.

Ви також помітите, що більшість рядків вихідного сигналу виконують аналогічну схему, яку ми обговорювали вище.

Як відстежити конкретні системні дзвінки

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

Як щодо перегляду системних викликів читання для команди ls. Наприклад:

strace -e читати ls

Ви помітите, що тут відображаються лише прочитані системні дзвінки.

Системний виклик читання приймає три аргументи: дескриптор файлу, буфер та кількість байтів. Потім системний виклик зчитує до байтів підрахунку з переданого аргументу дескриптора файлу в буфер.

https: // linkfy.до / readyscall

Підсумок системних дзвінків

Strace також дозволяє отримати огляд системних викликів, здійснених процесом. Передаючи аргумент -c або -summary-only, ми можемо отримати результат, такий як показано нижче:

Команда фільтрує та впорядковує висновок ефективніше, ніж звичайний вивід стрічки. Щоб отримати як зведення, так і звичайний вивід strace, передайте аргумент -C.

Як використовувати Strace з запущеними процесами

В інший час вам знадобиться слід запущеного процесу. До цього моменту ми використовували лише одну команду strace. Щоб простежити запущений процес, ми можемо використовувати аргумент -p, за яким іде процес Process ID (PID), щоб приєднати до нього strace.

Ви можете отримати PID запущеного процесу, використовуючи верхні та grep, ps, htop, pidof або інші інструменти моніторингу системи.

Наприклад, щоб отримати PID процесу apache, ми можемо використовувати:

ps -ось | grep -i apache2

Це має дати вам PID процесу apache2 (у цьому випадку PID 3514), і ми можемо використовувати його, щоб прикріпити до strace.

Це повинно відображати результат, подібний до наведеного нижче.

Strace буде постійно відстежувати вкладений процес і показувати вихідні дані, коли приєднаний процес виконує системні виклики. Щоб завершити трасування, натисніть CTRL + C, що від'єднує процес від деформації.

Як зберегти вихідний файл у файли

Ми також можемо перенаправити висновок strace у файл як аргумент. Використовуючи прапорець -o, за яким слідує шлях до файлу, як аргумент, ми можемо зберігати журнали strace.

Наприклад:

strace -p 3514 -o ~ / Робочий стіл / apache_trace

Після збереження файлу ви зможете пізніше відстежувати та аналізувати його.

Висновок

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

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

Кращі емулятори ігрової консолі для Linux
У цій статті буде перелічено популярне програмне забезпечення для емуляції ігрової консолі, доступне для Linux. Емуляція - це рівень сумісності програ...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...
Як зафіксувати та транслювати ігровий сеанс на Linux
Раніше грати в ігри вважалося лише хобі, але з часом ігрова індустрія спостерігала величезний ріст з точки зору технологій та кількості гравців. Аудит...