PV090: Když něco nefunguje

Některé z těchto postupů nejspíš znáte, ale možná jste na ně pozapomněli. Pro jistotu zmiňujeme i notoricky známé věci. Detaily najdete v příslušných manuálových stránkách.

Zjistěte, si co je co

Typ souboru, tedy i to, zda se jedná o binárku či například shellovský skript vám řekne program file(1). Pokud chcete vědět, jaké sdílené knihovny používá nějaká binárka, prozkoumejte ji programem ldd(1). Nevíte-li, v jaké knihovně (programu, .o souboru) je který symbol (funkce), vypíše vám je program nm(1).

Sledujte, co vám program říká

Většina programů buď sama od sebe vypisuje údaje o svém běhu, nebo se dá spouštět s přepínači (-d, -v, -i, …), které tuto možnost zapnou, případně i nastaví obsažnost těchto hlášek. Ty lze sledovat a odchytávat buď z chybového výstupu, nebo zejména v případě daemonů ze souboru, do kterého je zapsal syslog nebo journal. Najdete je většinou v adresáři /var/log, nejčastěji jde o soubor messages. Vhodným nástrojem ke sledování přicházejících hlášek je tail(1) (-f puštěný na další konzole, třeba i přes grep(1) s vhodným vzorkem pro výběr toho, co vás zajímá).

Sledujte, co program dělá

Chcete-li vědět, co se děje při spuštění nějaké binárky, nemusíte používat hned gdb(1) – většinu problémů s provozem odzkoušených programů vám pomůže odhalit strace(1). Sleduje systémová volání, takže snadno zjistíte např. s jakými soubory se program snaží pracovat, jak končí pokusy o síťové spojení a podobné věci. Můžete ho napojit i na běžící procesy (-p), sledovat i potomky původního procesu (-f), můžete omezovat, co vám bude hlásit (-e), a mnoho dalších věcí.

Podobným programem je ltrace(1) – sleduje volání knihovních funkcí.

Sledujte, s čím program pracuje

Vidět, jaké soubory (včetně síťových spojení) daný proces používá vám umožní program lsof(1), duální k němu je fuser(1), o síti na vašem počítači vám asi nejvíc řekne netstat(1).

Sledujte, co se děje na síti

Chcete-li vidět, co běhá po síti, kdo s kým komunikuje, použijte tcpdump(1). Pokud chcete přímo otestovat chování nějakého serveru, máte v případě textových protokolů nad TCP možnost připojit se programem telnet(1) na konkrétní port testované služby a dráždit ji ručně. Mocnějším nástrojem je nc(1) (nikoliv Norton Commander, ale netcat) – umí na specifikovaném portu i naslouchat a pracuje i nad UDP (kromě jiného). Ke službě zabezpečené protokolem SSL/TLS se obdobně připojíte pomocí openssl s_client.

Sledujte, co se děje na vašem počítači

Nezapomínejte ani na notoricky známé (doufejme) prográmky top(1) a ps(1), ze kterých vidíte, co a jak intenzivně běží. Zátěž na discích posoudíte programem iostat(1).