Команды Linux

Как использовать Strace в Linux

Как использовать Strace в Linux
При работе с системами Linux вам часто нужно проверять и понимать действия, выполняемые процессами, и системные вызовы, выполняемые при их выполнении.

Когда дело доходит до выполнения таких задач, ядро ​​Linux предоставляет такие функции, как ptrace отлаживать и диагностировать процессы.

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

Что такое системные вызовы?

Прежде чем мы обсудим, как использовать strace, вам нужно понять, что мы ищем и как они работают. Это означает, что мы должны изучить основы системных вызовов Linux.

Системный вызов программный метод, с помощью которого программа может запрашивать службу у ядра системы. Это процесс, который мы будем использовать для проверки действий между пользовательскими процессами и ядром Linux.

Каждый раз, когда пользователь выполняет программу, которая выполняет чтение, запись, уничтожение, выход, привязку и т. Д., запрос, они делают системный вызов. Существует широкий спектр системных вызовов, используемых программами для выполнения различных задач, таких как работа в сети, чтение и запись в файлы, инициализация и завершение процессов и многое другое.

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

В системе Linux этот механизм хорошо скрыт от пользователей такими библиотеками, как Glibc.

ПРИМЕЧАНИЕ: Системные вызовы и взаимодействия с ядром - это гораздо больше, чем то, что мы обсуждали в этом руководстве. Пожалуйста, обратитесь к страницам руководства для получения дополнительной информации.

https: // linkfy.к / syscalls

https: // linkfy.к / trapmanual

Как установить strace в Linux

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

ПРИМЕЧАНИЕ: Хотя мы не будем рассказывать, как установить strace во всех системах, мы обсудим, как это сделать, с основными менеджерами пакетов, такими как apt, dnf, pacman и yum

1: Установка Debian (apt)

Установите strace с помощью команды:

apt-get install strace -y

2. Семейство RedHat (dnf и yum)

Чтобы установить strace с помощью диспетчера пакетов 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 дает много информации о системных вызовах программ, большинство экземпляров обратятся к вам для фильтрации определенных системных вызовов. Для этого мы передаем команде strace флаг -e, за которым следует имя нужного нам системного вызова.

Как насчет просмотра системных вызовов read для команды ls. Например:

strace -e читать ls

Вы заметите, что здесь отображаются только системные вызовы чтения.

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

https: // linkfy.к / readsyscall

Сводка системных вызовов

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

Команда фильтрует и упорядочивает вывод более эффективно, чем обычный вывод strace. Чтобы получить как сводку, так и обычный вывод strace, передайте аргумент -C.

Как использовать Strace с запущенными процессами

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

Вы можете получить PID запущенного процесса, используя top и grep, ps, htop, pidof или другие инструменты системного мониторинга.

Например, чтобы получить PID процесса apache, мы можем использовать:

ps -ax | grep -i apache2

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

Это должно отобразить вывод, аналогичный показанному ниже.

Strace будет постоянно отслеживать присоединенный процесс и показывать вывод, когда присоединенный процесс выполняет системные вызовы. Чтобы завершить трассировку, нажмите CTRL + C, что отключает процесс от strace.

Как сохранить выходные данные Strace в файлы

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

Например:

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

После сохранения файла вы можете позже отслеживать и анализировать его.

Заключение

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

Концепции, изученные в этом руководстве, очень полезны, в основном потому, что вы можете использовать то, что вы узнали, для отслеживания, если кто-то вмешивается в системные процессы.

Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...
Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...