GNU/Linux >> Znalost Linux >  >> Linux

Jak používat příkazy strace a ltrace v Linuxu

Příkaz strace

Příkaz strace lze použít k zachycení a záznamu provedených systémových volání a signálů přijatých procesem. To umožňuje prozkoumat hraniční vrstvu mezi uživatelem a prostorem jádra, což může být velmi užitečné pro identifikaci toho, proč proces selhává.

Použití strace k analýze toho, jak program interaguje se systémem, je zvláště užitečné, když zdrojový kód není snadno dostupný. Kromě
jeho důležitosti při odstraňování problémů může strace poskytnout hluboký přehled o tom, jak systém funguje. Každý uživatel může sledovat své vlastní běžící procesy; kromě toho může uživatel root sledovat všechny běžící procesy. K připojení a sledování běžícího démona rsyslogd lze například použít následující:

# strace -p $(pgrep rsyslogd)
Process 819 attached
select(1, NULL, NULL, NULL, {83009, 275934}
...

výstup strace

Výstup ze strace bude odpovídat systémovému volání nebo signálu. Výstup ze systémového volání se skládá ze tří komponent:
1. Systémové volání
2. Jakékoli argumenty v závorkách
3. Výsledek volání za rovnítkem

Návratový stav -1 obvykle označuje chybu. Například:

# strace ls file1
execve("/bin/ls", ["ls", "file1"], [/* 21 vars */]) = 0
brk(0)                                  = 0xadb000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f516bb79000
.....
close(1)                                = 0
munmap(0x7f516bb78000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Složené závorky se používají k označení dereferencovaných C struktur. Čtvercové závorky se používají k označení jednoduchých ukazatelů nebo pole hodnot.

Příklady příkazu strace

Přesměrování trasování do souboru

Protože strace často vytváří velké množství výstupu, je často vhodné jej přesměrovat do souboru. Ke spuštění shellu bash, sledování všech rozvětvených podřízených procesů a zaznamenání všech přístupů k souborům do souboru files.trace lze například použít následující:

# strace -f -o files.trace -e trace=file bash

Počítání počtu systémových volání

Spusťte příkaz ls, který spočítá, kolikrát bylo uskutečněno každé systémové volání, a vytiskněte součty ukazující počet a čas strávený v každém volání (užitečné pro základní profilování nebo izolaci úzkých míst):

# strace -c ls

Zobrazení souborů otevřených procesem/démonem

Následující příklad ukazuje tři konfigurační soubory, které sshd OpenSSH čte při spuštění. Všimněte si, že strace ve výchozím nastavení odesílá svůj výstup do STDERR, takže pokud jej chcete převést pomocí kanálu na jiné příkazy, jako je grep pro další úpravy, musíte výstup vhodně přesměrovat:

# strace -f -eopen /usr/sbin/sshd 2>&1 | grep ssh

Sledování pouze systémových volání souvisejících se sítí

Sledujte pouze systémová volání související se sítí, když se Netcat pokouší připojit k místní službě telnetd:

# strace -e trace=network nc localhost 23

Příkaz ltrace

Příkaz ltrace lze použít k zachycení a záznamu dynamických volání sdílených knihoven. Množství výstupu generovaného příkazem ltrace může být u některých příkazů zahlcující (zejména pokud je volba -S použita také k zobrazení systémových volání). Výstup můžete zaměřit pouze na interakci mezi programem a některým seznamem knihoven. Chcete-li například provést příkaz id -Z a zobrazit volání modulu libselinux.so, proveďte:

$ ltrace -l /lib/libselinux.so.1 id -Z
is_selinux_enabled(0xc1c7a0, 0x9f291e8, 0xc1affc, 0, -1)a
       =1	
getcon(0x804c2c8, 0xfee80ff4, 0x804b179, 0x804c020, 0)a
       =0
user_u:system_r:unconfined_t

Nezapomeňte, že pomocí příkazu ldd můžete vidět, s jakými knihovnami je program propojen.


Linux
  1. Jak používat příkazy Najít a najít v Linuxu:Průvodce pro začátečníky

  2. Jak uložit příkazy Linuxu a používat je na vyžádání

  3. Jak nainstalovat a používat Glances k monitorování systémů Linux

  1. Jak používat příkazy Pbcopy a Pbpaste v systému Linux

  2. Jak nainstalovat a používat Git v systému Linux

  3. Jak nainstalovat a používat TeamViewer v systému Linux [Kompletní průvodce]

  1. Jak používat Linux Strace Command

  2. Jak nainstalovat a používat příkaz Ack v systému Linux

  3. Jak vygenerovat a používat klíč SSH v systému Linux?