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 package manager, въведете командата:

yum инсталирате strace

За мениджър на пакети dnf въведете командата:

dnf инсталиране strace

3: Arch Linux (pacman)

За потребителите на Arch Linux можете да инсталирате strace с командата:

pacman -S strace

След като вече сте инсталирали и стартирате strace, можем да продължим напред и да се научим как да го използваме

Основна употреба на Strace: Ръководство за ръководство

Нека обсъдим основното използване на strace и да разберем основните изходи на командата и как можем да я използваме.

ЗАБЕЛЕЖКА: Изходът на Strace като имена на системни повиквания, съответстващи аргументи и връщани стойности се обработват стандартният дескриптор на файл за грешка (stderr).

Основният начин за използване на strace е чрез извикване на помощната програма strace, последвана от името на програмата, чието поведение искаме да разберем.

Ето пример за това с помощта на командата ls:

Еха! Това е много резултат за проста команда като ls.

Въпреки че не можем да обсъдим целия изход от командата strace, можем да дестилираме и разберем значението му.

Ако разгледате първия ред в изхода по-горе, ще забележите следните характеристики.

Следователно, в първия ред системното повикване е execve (изпълнява програма, използвайки посочения масив от аргументи), аргументите на системното повикване са (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 vars * /) и върната стойност 0.

https: // linkfy.към / execve

Системните повиквания на execve изпълняват двоичния файл, който искаме да използваме, в този случай се намира в (/ bin / ls) и масивът от аргументи е пътят, който искаме да изброим съдържанието.

Също така ще забележите нотация, затворена с наклонена черта и звездичка. За нашия пример:

/ * 13 варианта * /

Горният изход показва броя на променливите, добавени в резултат на извикване на процеса. Достъпът до средата във функцията execv се извършва чрез използване на външната променлива на околната среда, определена като:

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

Крайният изход е връщаната стойност, която в този случай е 0.

Също така ще забележите, че повечето редове от изхода на Strace следват подобен модел, който обсъдихме по-горе.

Как да проследите специфични системни повиквания

Въпреки че strace дава много информация относно системните повиквания на програмите, повечето инстанции ще ви призовават да филтрирате конкретни системни повиквания. За да направим това, предаваме флага -e на командата strace, последвано от името на системното повикване, от което се нуждаем.

Какво ще кажете да разгледате системните повиквания за четене за командата ls. Например:

strace -e прочетете ls

Ще забележите, че това показва само прочетени системни обаждания.

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

https: // linkfy.към / readyscall

Обобщение на системните разговори

Strace също ни позволява да получим обобщение на системните повиквания, извършени от даден процес. Чрез предаване на аргумента -c или -summary-only, можем да получим изход като този, показан по-долу:

Командата филтрира и подрежда изхода по-ефективно от нормалния изход на строка. За да получите както резюме, така и нормален изход на страйс, предайте аргумента -C.

Как да използвам Strace с работещи процеси

В други случаи ще ви е необходима следа от работещ процес. До този момент използвахме strace само една команда. За да проследим работещ процес, можем да използваме аргумента -p, последван от процеса ID на процеса (PID), за да прикачим страцес към него.

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

Например, за да получим PID на процеса на apache, можем да използваме:

ps -ax | grep -i apache2

Това трябва да ви даде PID на процеса apache2 (в този случай PID 3514) и ние можем да го използваме, за да го прикрепим към strace.

Това трябва да показва изход, подобен на показания по-долу.

Strace непрекъснато ще проследява прикачения процес и ще показва изхода, докато прикаченият процес изпълнява системни повиквания. За да прекратите проследяването, натиснете CTRL + C, което отделя процеса от направлението.

Как да запазите Strace Output във файлове

Също така можем да пренасочим изхода на strace към файл като аргумент. Използвайки флага -o, последван от пътя на файла като аргумент, можем да запазим страйс дневници.

Например:

strace -p 3514 -o ~ / Desktop / apache_trace

След като файлът бъде запазен, можете по-късно да го наблюдавате и анализирате.

Заключение

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

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

Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...
Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...
Как да изтеглите и пуснете Civilization VI на Сид Майер на Linux
Въведение в играта Civilization 6 е модерен поглед върху класическата концепция, въведена в поредицата от игрите Age of Empires. Идеята беше доста про...