Příkazy pro Linux

Jak používat Strace v systému Linux

Jak používat Strace v systému Linux
Při práci se systémy Linux budete často muset zkontrolovat a porozumět akcím prováděným procesy a systémovým voláním prováděným jejich spuštěním.

Pokud jde o provádění těchto úkolů, linuxové jádro poskytuje funkce, jako je ptrace k ladění a diagnostice procesů.

Tento článek pojednává o tom, jak pomocí nástroje pro trasování sledovat, monitorovat a ladit procesy interagující s jádrem.

Co jsou to systémová volání?

Než budeme diskutovat o tom, jak používat strace, musíte pochopit, co hledáme a jak fungují. To znamená, že bychom si měli projít základy volání systému Linux.

Systémové volání je programová metoda, jejímž prostřednictvím může program požadovat službu z jádra systému. To je proces, který použijeme ke kontrole akcí mezi uživatelskými procesy a jádrem Linuxu.

Kdykoli uživatel provede program, který umožňuje čtení, zápis, zabíjení, ukončení, svázání atd., na žádost, uskutečňují systémové volání. Programy používají širokou škálu systémových volání k provádění různých úkolů, jako je síťové připojení, čtení a zápis do souborů, inicializace a ukončení procesů a mnoho dalšího.

Představte si systémová volání jako funkce - chovají se podobně - protože mohou přijímat argumenty a vracet hodnoty. Hlavní rozdíl mezi systémovými voláními a běžným provozem spočívá v tom, že systémová volání mohou přímo komunikovat s jádrem. Systémová volání používají a mechanismus pasti procházet mezi uživatelským prostorem a jádrem.

V systému Linux je tento mechanismus před uživateli dobře skrytý knihovnami, jako je Glibc.

POZNÁMKA: Systémových volání a interakcí s jádrem je mnohem víc, než o čem jsme diskutovali v tomto kurzu. Další informace najdete na stránkách příručky.

https: // linkfy.do / syscalls

https: // linkfy.do / trapmanual

Jak nainstalovat trasování v systému Linux

Ačkoli nástroje pro trasování nejsou ve výchozím nastavení ve velkých distribucích Linuxu předinstalovány, jsou k dispozici ve většině oficiálních úložišť těchto distribucí; můžete jej snadno nainstalovat pomocí výchozích správců balíků.

POZNÁMKA: Ačkoli se nebudeme zabývat tím, jak nainstalovat trasování na všech systémech, probereme to s hlavními správci balíků, jako jsou apt, dnf, pacman a yum

1: Instalace Debianu (apt)

Nainstalujte trasování pomocí příkazu:

apt-get install strace -y

2: RedHat Family (dnf a yum)

Chcete-li nainstalovat trasování pomocí správce balíčků yum, zadejte příkaz:

yum nainstalovat trasování

Pro správce balíčků dnf zadejte příkaz:

dnf nainstalovat trasování

3: Arch Linux (pacman)

Pro uživatele Arch Linuxu můžete nainstalovat trasování pomocí příkazu:

pacman -S strace

Nyní, když máte nainstalované a spuštěné trasování, můžeme pokračovat a naučit se používat

Basic Strace Usage: A How-to Guide

Pojďme diskutovat o základním použití trasování a pochopit základní výstup příkazu a jak ho můžeme použít.

POZNÁMKA: Výstup trasování, jako jsou názvy systémových volání, odpovídající argumenty a návratové hodnoty, jsou zpracovány standardní popisovač chybových souborů (stderr).

Základní způsob použití strace je vyvoláním obslužného programu strace následovaného názvem programu, jehož chování chceme pochopit.

Zde je příklad použití příkazu ls:

Wow! To je spousta výstupu pro jednoduchý příkaz, jako je ls.

Ačkoli nemůžeme diskutovat o všech výstupech z příkazu strace, můžeme destilovat a pochopit jeho význam.

Pokud vezmete v úvahu první řádek ve výše uvedeném výstupu, všimnete si následujících funkcí.

Proto je v prvním řádku spuštěno systémové volání (spusťte program pomocí zadaného pole argumentů), argumenty systémového volání jsou („/ bin / ls“, [„ls“, „/“], 0x7fffc4b277a8 / * 13 vars * /) a návratová hodnota 0.

https: // linkfy./ provést

Systémová volání execve provádějí binární soubor, který chceme použít, v tomto případě umístěný v (/ bin / ls) a pole argumentů je cesta, kterou chceme vypsat obsah.

Všimnete si také notace uzavřené lomítkem a hvězdičkou. Pro náš příklad:

/ * 13 vars * /

Výše uvedený výstup označuje počet proměnných přidaných v důsledku volání procesu. Prostředí uvnitř funkce execv je přístupné pomocí externí proměnné prostředí definované jako:

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

Konečným výstupem je návratová hodnota, která je v tomto případě 0.

Také si všimnete, že většina řádků výstupu trasování se řídí podobným vzorem, který jsme diskutovali výše.

Jak sledovat konkrétní systémová volání

Ačkoli strace poskytuje mnoho informací o systémových voláních programů, většina instancí vás vyzve k filtrování konkrétních systémových volání. Za tímto účelem předáme příznak -e příkazu strace následovaný názvem systémového volání, které potřebujeme.

Co takhle podívat se na přečtená systémová volání příkazu ls. Například:

strace -e číst ls

Zjistíte, že toto zobrazuje pouze pouze přečtená systémová volání.

Přečtené systémové volání přijímá tři argumenty: deskriptor souboru, vyrovnávací paměť a počet bajtů. Systémové volání pak načte až počet bajtů z předaného argumentu deskriptoru souboru do vyrovnávací paměti.

https: // linkfy.do / readsyscall

Souhrn systémových volání

Strace nám také umožňuje získat souhrn systémových volání provedených procesem. Předáním argumentu -c nebo -summary-only můžeme získat výstup, jako je ten, který je uveden níže:

Příkaz filtruje a uspořádá výstup efektivněji než normální výstup trasování. Chcete-li získat souhrnný i normální výstup trasování, předejte argument -C.

Jak používat trasování s běžícími procesy

Jindy budete potřebovat stopu běžícího procesu. Až do tohoto okamžiku jsme použili pouze strace jednoho příkazu. K trasování běžícího procesu můžeme použít argument -p následovaný procesem ID procesu (PID), abychom k němu připojili trasování.

PID běžícího procesu můžete získat pomocí nástrojů nahoře a grep, ps, htop, pidof nebo jiných nástrojů pro monitorování systému.

Například pro získání PID procesu apache můžeme použít:

ps -ax | grep -i apache2

To by vám mělo dát PID procesu apache2 (v tomto případě PID 3514) a můžeme jej použít k jeho připojení.

To by mělo zobrazit výstup podobný tomu, který je zobrazen níže.

Strace bude nepřetržitě sledovat připojený proces a zobrazit výstup, jak připojený proces provádí systémová volání. Chcete-li trasování ukončit, stiskněte kombinaci kláves CTRL + C, čímž se proces odpojí od trasování.

Jak uložit výstup trasování do souborů

Můžeme také přesměrovat výstup trasování do souboru jako argument. Pomocí argumentu -o následovaného cestou souboru jako argumentem můžeme uložit protokoly trasování.

Například:

strace -p 3514 -o ~ / Desktop / apache_trace

Jakmile je soubor uložen, můžete jej později sledovat a analyzovat.

Závěr

V této příručce jsme se naučili, jak nainstalovat a používat trasování na hlavních distribucích Linuxu. Nyní, když rozumíte systémovým voláním a tomu, jak procesy fungují, můžete pomocí trasování sledovat a ladit běžící systémový proces spuštěný.

Koncepty naučené v tomto tutoriálu jsou velmi užitečné, hlavně proto, že to, co jste se naučili, můžete použít ke sledování, zda někdo manipuluje se systémovými procesy.

Hry Top 5 karet pro zachycení hry
Top 5 karet pro zachycení hry
Všichni jsme viděli a milovali streamování her na YouTube. PewDiePie, Jakesepticye a Markiplier jsou jen někteří z nejlepších hráčů, kteří vydělali mi...
Hry Jak vyvíjet hru na Linuxu
Jak vyvíjet hru na Linuxu
Před deseti lety by jen málo uživatelů Linuxu předpovídalo, že jejich oblíbený operační systém bude jednoho dne populární herní platformou pro komerčn...
Hry Porty komerčních her s otevřeným zdrojovým kódem
Porty komerčních her s otevřeným zdrojovým kódem
Zdarma, s otevřeným zdrojovým kódem a multiplatformní herní enginy lze hrát staré i některé z poměrně nedávných herních titulů. Tento článek uvede sez...