Jak używać Strace na Linux

Jak używać Strace na Linux
Podczas pracy z systemami Linux często musisz sprawdzić i zrozumieć działania wykonywane przez procesy i połączenia systemowe przeprowadzone przez ich wykonanie.

Jeśli chodzi o wykonywanie takich zadań, jądro Linux zapewnia takie funkcje, jak PTRACE do debugowania i diagnozowania procesów.

W tym artykule omówiono, jak używać narzędzia Strace do śledzenia, monitorowania i debugowania procesów interakcji z jądrem.

Jakie są wywołania systemowe?

Zanim omówimy, jak używać Strace, musisz zrozumieć, czego szukamy i jak działają. Oznacza to, że powinniśmy przejść przez podstawy połączeń systemowych Linux.

Połączenie systemowe jest Metoda programowa, za pomocą której program może żądać usługi z jądra systemu. To jest proces, którego użyjemy do sprawdzenia działań między procesami użytkownika a jądrem Linux.

Za każdym razem, gdy użytkownik wykonuje program, który czyta, pisze, zabijanie, wychodzenie, wiązanie itp., żądanie, wykonują połączenie systemowe. Istnieje szeroki zakres połączeń systemowych używanych przez programy do wykonywania różnych zadań, takich jak sieć, czytanie i pisanie do plików, inicjowanie i kończenie procesów oraz wiele więcej.

Pomyśl o wywołań systemowych jako o funkcjach-zachowują się podobnie, ponieważ mogą one akceptować argumenty i zwracać wartości. Główną różnicą między wywołaniami systemowymi a normalnym działaniem jest to, że wywołania systemowe mogą bezpośrednio oddziaływać z jądrem. Połączenia systemowe Użyj mechanizmu pułapki do nawigacji między przestrzenią użytkownika a jądrem.

W systemie Linux mechanizm ten jest dobrze ukryty przed użytkownikami przez biblioteki takie jak Glibc.

NOTATKA: Jest o wiele więcej do połączeń systemowych i interakcji jądra niż to, co rozmawialiśmy w tym samouczku. Więcej informacji można znaleźć na stronach ręcznych.

https: // linkfy.do/syscalls

https: // linkfy.do/Trapmanual

Jak zainstalować Strace na Linux

Chociaż narzędzia Strace nie są wstępnie zainstalowane domyślnie w głównych dystrybucjach Linux, jest ono dostępne w większości oficjalnych repozytoriów tych dystrybucji; Możesz go łatwo zainstalować za pomocą domyślnych menedżerów pakietów.

NOTATKA: Chociaż nie będziemy omawiać, jak zainstalować Strace na wszystkich systemach, omówimy to, jak to zrobić z głównymi menedżerami pakietów, takimi jak APT, DNF, Pacman i Yum

1: Instalacja Debian (APT)

Zainstaluj Strace za pomocą polecenia:

apt -get install Strace -y

2: Redhat Family (DNF i Yum)

Aby zainstalować Strace za pomocą menedżera pakietu Yum, wprowadź polecenie:

Yum Instaluj Strace

W przypadku menedżera pakietów DNF wprowadź polecenie:

DNF Instaluj Strace

3: Arch Linux (Pacman)

W przypadku użytkowników Arch Linux możesz zainstalować Strage za pomocą polecenia:

Pacman -s Strace

Teraz, gdy masz zainstalowany i uruchomiony Strace, możemy przejść dalej i nauczyć się używać

Podstawowe użycie strace: instruktaż

Omówmy podstawowe wykorzystanie strate i zrozumiemy podstawowe dane wyjściowe polecenia i sposób, w jaki możemy z niego korzystać.

NOTATKA: Wyjście Strace, takie jak nazwy wywołań systemowych, odpowiednie argumenty i wartości zwrotne są obsługiwane przez standardowy deskryptor pliku błędu (STDERR).

Podstawowym sposobem korzystania z Strage jest wywołanie narzędzia Strace, a następnie nazwa programu, którego zachowanie chcemy zrozumieć.

Oto przykład tego za pomocą polecenia LS:

Wow! To dużo wyjściowego dla prostego polecenia, takiego jak LS.

Chociaż nie możemy omawiać wszystkich danych wyjściowych z polecenia Strace, możemy destylować i zrozumieć jego znaczenie.

Jeśli weźmiesz pod uwagę pierwszy wiersz na powyższym wyjściu, zauważysz następujące funkcje.

  • Nazwa połączenia systemowego
  • Argumenty przekazane do połączenia systemowego zamknięte w nawiasach.
  • Wartość zwracana z wywołania systemu

Dlatego w pierwszym wierszu wywołanie systemowe jest wykonane (program wykonania przy użyciu określonej tablicy argumentów), argumenty wywołania systemowego to („/bin/ls”, [„ls”, „/”], 0x7fffc4b2777a8/// * 13 vars */) i wartość zwracana 0.

https: // linkfy.do/execve

System Execve wywołuje binarny, którego chcemy użyć, w tym przypadku znajdują się w (/bin/ls), a tablica argumentów jest ścieżką, którą chcemy wymienić zawartość.

Zauważysz również notację zamkniętą ze ukośnikiem do przodu i gwiazdką. W naszym przykładzie:

/ * 13 vars */

Powyższe wyjście wskazuje liczbę zmiennych dodanych w wyniku wywołania procesu. Do środowiska wewnątrz funkcji EXECV jest dostępny za pomocą zmiennej zewnętrznej Environ zdefiniowanej jako:

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

Ostateczne wyjście to wartość zwracana, która wynosi 0 w tym przypadku.

Zauważysz również, że większość linii wyjściowej stracy jest zgodna z podobnym wzorem, który omówiliśmy powyżej.

Jak śledzić określone wywołania systemowe

Chociaż Strace podaje wiele informacji dotyczących połączeń systemowych, większość wystąpień będzie się zawierać, aby filtrować określone połączenia systemowe. Aby to zrobić, przekazujemy flagę -e do polecenia Strace, a następnie nazwa wywołania systemu, którego potrzebujemy.

Co powiesz na spojrzenie na system odczytu wywołuje polecenie LS. Na przykład:

strace -e czytaj ls

Zauważysz, że to wyświetla tylko odczytane połączenia systemowe.

Call System Read System akceptuje trzy argumenty: deskryptor pliku, bufor i liczba bajtów. Połączenie systemowe odczytuje się do bajtów hrabia z argumentu Descriptora plik w buforze.

https: // linkfy.do/ReadSyscall

Podsumowanie połączeń systemowych

Strace pozwala nam również uzyskać podsumowanie połączeń systemowych wykonanych przez proces. Przekazując argument -c lub -summary, możemy uzyskać dane wyjściowe, takie jak ten pokazany poniżej:

Polecenie filtruje i układa wyjście bardziej wydajnie niż normalne wyjście straterem. Aby uzyskać zarówno podsumowanie, jak i normalne wyjście stracy, przekazaj argument -C.

Jak używać Strage z uruchamianymi procesami

Innym razem będziesz potrzebować śladu procesu uruchamiania. Do tego momentu użyliśmy tylko jednego polecenia. Aby prześledzić proces uruchamiania, możemy użyć argumentu -P, a następnie procesu procesu (PID), aby przymocować do niego Strace.

Możesz uzyskać PID procesu działającego za pomocą górnej i GREP, PS, HTOP, PIDOF lub innych narzędzi do monitorowania systemu.

Na przykład, aby uzyskać PID procesu Apache, możemy użyć:

PS -ax | grep -i apache2

To powinno dać ci PID procesu APACHE2 (PID 3514 w tym przypadku) i możemy użyć go do przymocowania go do Strace.

Które powinno wyświetlić wyjście podobne do tego pokazanego poniżej.

Strace będzie stale śledzić załączony proces i wyświetla wyjście, ponieważ załączony proces wykonuje wywołania systemowe. Aby zakończyć ślad, naciśnij Ctrl + C, który odłącza proces od stratego.

Jak zapisać wyjście Strage na plikach

Możemy również przekierować dane wyjściowe Strace do pliku jako argument. Korzystając z flagi -O, a następnie ścieżki pliku jako argumentu, możemy zapisać dzienniki Strage.

Na przykład:

Strace -p 3514 -O ~/Desktop/apache_trace

Po zapisaniu pliku możesz później go monitorować i przeanalizować.

Wniosek

W tym przewodniku nauczyliśmy się instalować i używać Strage w głównych dystrybucjach Linux. Teraz, gdy rozumiesz wywołania systemowe i sposób, w jaki działają procesy, możesz używać Strage do monitorowania i debugowania uruchomionego procesu systemowego.

Pojęcia wyuczone w tym samouczku są bardzo przydatne, głównie dlatego, że możesz użyć tego, czego nauczyłeś się monitorować, jeśli ktoś manipuluje procesami systemowymi.