Polecenia Linuksa

Jak korzystać ze Strace w systemie Linux

Jak korzystać ze Strace w systemie Linux
Podczas pracy z systemami Linux często będziesz musiał sprawdzać i rozumieć akcje wykonywane przez procesy oraz wywołania systemowe wykonywane przez ich wykonanie.

Jeśli chodzi o wykonywanie takich zadań, jądro Linuksa 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 współdziałających z jądrem.

Co to są wywołania systemowe?

Zanim porozmawiamy o tym, jak używać strace, musisz zrozumieć, czego szukamy i jak one działają. Oznacza to, że powinniśmy przejść przez podstawy wywołań systemu Linux.

Wywołanie systemowe to metoda programowa, dzięki której program może zażą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 Linuksa.

Za każdym razem, gdy użytkownik wykonuje program, który wykonuje odczyt, zapis, zabicie, wyjście, powiązanie itp., żądanie, wykonują wywołanie systemowe. Istnieje szeroki zakres wywołań systemowych używanych przez programy do wykonywania różnych zadań, takich jak praca w sieci, odczytywanie i zapisywanie plików, inicjowanie i kończenie procesów oraz wiele innych.

Pomyśl o wywołaniach systemowych jak o funkcjach — zachowują się podobnie — ponieważ mogą przyjmować argumenty i zwracać wartości. Główna różnica między wywołaniami systemowymi a normalnym działaniem polega na tym, że wywołania systemowe mogą bezpośrednio wchodzić w interakcje z jądrem. Wywołania systemowe używają a mechanizm pułapki nawigować między przestrzenią użytkownika a jądrem.

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

UWAGA: Wywołania systemowe i interakcje jądra to znacznie więcej niż to, o czym mówiliśmy w tym samouczku. Więcej informacji można znaleźć na stronach podręcznika.

https://linkfy.do/wywołania systemowe

https://linkfy.do/trapmanual

Jak zainstalować strace w systemie Linux

Chociaż narzędzia strace nie są domyślnie preinstalowane w głównych dystrybucjach Linuksa, są one 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.

UWAGA: Chociaż nie będziemy omawiać, jak zainstalować strace na wszystkich systemach, omówimy, jak to zrobić z głównymi menedżerami pakietów, takimi jak apt, dnf, pacman i yum

1: Instalacja Debiana (apt)

Zainstaluj strace za pomocą polecenia:

apt-get install strace -y

2: Rodzina RedHat (dnf i mniam)

Aby zainstalować strace za pomocą menedżera pakietów yum, wpisz polecenie:

mniam zainstaluj strace

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

dnf zainstalować strace

3: Arch Linux (pacman)

Dla użytkowników Arch Linux możesz zainstalować strace za pomocą polecenia:

pacman -S strace

Teraz, gdy masz już zainstalowane i uruchomione strace, możemy przejść dalej i nauczyć się, jak używać

Podstawowe użycie Strace: poradnik

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

UWAGA: Dane wyjściowe strace, takie jak nazwy wywołań systemowych, odpowiadające im argumenty i wartości zwracane, są obsługiwane przez standardowy deskryptor pliku błędów (stderr).

Podstawowym sposobem użycia strace jest wywołanie narzędzia strace, po którym następuje nazwa programu, którego zachowanie chcemy zrozumieć.

Oto przykład tego przy użyciu polecenia ls:

łał! To dużo danych wyjściowych dla prostego polecenia, takiego jak ls.

Chociaż nie możemy omówić wszystkich danych wyjściowych z polecenia strace, możemy destylować i rozumieć jego znaczenie.

Jeśli weźmiesz pod uwagę pierwszą linię w powyższym wyjściu, zauważysz następujące cechy:.

Stąd w pierwszym wierszu wywołanie systemowe to execve (wykonaj program przy użyciu określonej tablicy argumentów), argumenty wywołania systemowego to („/bin/ls”, [„ls”, „/”], 0x7fffc4b277a8 / * 13 vars */) i zwracana wartość 0.

https://linkfy.do/wykonać

Wywołania systemowe execve wykonują plik binarny, którego chcemy użyć, w tym przypadku znajdujący się w (/bin/ls), a tablica argumentów jest ścieżką, którą chcemy wyświetlić zawartość.

Zauważysz również notację z ukośnikiem i gwiazdką. Dla naszego przykładu:

/* 13 wars */

Powyższe dane wyjściowe wskazują liczbę zmiennych dodanych w wyniku wywołania procesu. Dostęp do środowiska wewnątrz funkcji execv uzyskuje się za pomocą zmiennej zewnętrznej environ zdefiniowanej jako:

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

Ostatecznym wynikiem jest wartość zwracana, która w tym przypadku wynosi 0.

Zauważysz również, że większość linii wyjścia strace ma podobny wzorzec, który omówiliśmy powyżej.

Jak śledzić określone wywołania systemowe

Chociaż strace podaje wiele informacji dotyczących wywołań systemowych programów, większość instancji będzie prosić o filtrowanie określonych wywołań systemowych. Aby to zrobić, przekazujemy flagę -e do polecenia strace, po której następuje nazwa wywołania systemowego, którego potrzebujemy.

Co powiesz na odczytywanie wywołań systemowych dla polecenia ls?. Na przykład:

strace -e przeczytaj ls

Zauważysz, że wyświetla tylko odczytane wywołania systemowe.

Wywołanie systemowe read przyjmuje trzy argumenty: deskryptor pliku, bufor i liczbę bajtów. Wywołanie systemowe odczytuje następnie liczbę bajtów z przekazanego argumentu deskryptora pliku do bufora.

https://linkfy.do/odczytaj wywołanie systemowe

Podsumowanie wywołań systemowych

Strace pozwala nam również uzyskać podsumowanie wywołań systemowych wykonanych przez proces. Przekazując argument -c lub -summary-only, możemy uzyskać wynik taki jak ten pokazany poniżej:

Polecenie filtruje i porządkuje dane wyjściowe wydajniej niż normalne dane wyjściowe strace. Aby uzyskać zarówno podsumowanie, jak i normalne wyjście strace, przekaż argument -C.

Jak korzystać ze Strace w uruchomionych procesach

Innym razem będziesz potrzebować śladu trwającego procesu. Do tego momentu używaliśmy tylko jednego polecenia strace. Aby prześledzić działający proces, możemy użyć argumentu -p, po którym następuje proces o identyfikatorze procesu (PID), aby dołączyć do niego strace.

Możesz uzyskać PID działającego procesu, używając top 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

Powinno to dać PID procesu apache2 (w tym przypadku PID 3514) i możemy go użyć do dołączenia go do strace.

Powinno to wyświetlić wynik podobny do pokazanego poniżej.

Strace będzie stale śledzić dołączony proces i wyświetlać dane wyjściowe, gdy dołączony proces wykonuje wywołania systemowe. Aby zakończyć śledzenie, naciśnij CTRL + C, co odłącza proces od strace.

Jak zapisać wyjście strace w plikach

Możemy również przekierować wyjście strace do pliku jako argument. Używając flagi -o, a następnie ścieżki pliku jako argumentu, możemy zapisać logi strace.

Na przykład:

strace -p 3514 -o ~/Desktop/apache_trace

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

Wniosek

W tym przewodniku dowiedzieliśmy się, jak zainstalować i używać strace w głównych dystrybucjach Linuksa. Teraz, gdy rozumiesz już wywołania systemowe i sposób działania procesów, możesz użyć strace do monitorowania i debugowania uruchomionego procesu systemowego.

Koncepcje poznane w tym samouczku są bardzo przydatne, głównie dlatego, że możesz wykorzystać to, czego się nauczyłeś, do monitorowania, czy ktoś manipuluje procesami systemowymi.

Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...