Občas se stane, že potřebujete opakovaně spouštět určitý příkaz či program, abyste mohli monitorovat různé aspekty vašeho systému. Může jít o sledování běžících procesů, využití diskového prostoru nebo přihlášené uživatele. V takových situacích se hodí příkaz `watch`, který je součástí Linuxu. Ten vám umožní tyto úlohy automatizovat, takže se vyhnete jejich manuálnímu opakovanému spouštění.
S jeho pomocí můžete v reálném čase sledovat dění v systému, a to například přihlašování uživatelů, stav sítě, využití paměti a procesoru, zaplnění disku a další. Pojďme se podívat, jak se s příkazem `watch` v Linuxu pracuje.
Co je to příkaz Watch?
Příkaz `watch` v Linuxu funguje tak, že opakovaně spouští zadaný příkaz nebo program v pravidelných intervalech a zobrazuje jeho výstup v terminálu. Díky tomu můžete sledovat změny ve výstupu v reálném čase. Výstup je v každém intervalu obnovován a předchozí zobrazení příkazu je přepsáno. Ve výchozím nastavení se příkaz opakuje každé dvě sekundy, dokud jej ručně nezastavíte pomocí klávesové zkratky Ctrl + C.
Syntaxe příkazu watch
Základní syntaxe příkazu `watch` je následující:
watch [volby] <příkaz>
K dispozici je celá řada voleb příkazového řádku, které lze s příkazem `watch` používat. Pokud příkaz `watch` spustíte bez jakýchkoli voleb, zadaný příkaz se bude opakovat každé dvě sekundy. Například následující příkaz vám zobrazí výstup příkazu `ls`:
watch ls -l ~/
Tento výstup vám bude ukazovat změny v obsahu adresáře. Pokud například vytvoříte, smažete nebo změníte velikost souboru, výstup se aktualizuje každé dvě sekundy a zobrazí nejnovější stav adresáře.
Spouštění příkazu v intervalu X sekund pomocí watch
Interval aktualizace příkazu `watch` si můžete sami nastavit. To znamená, že můžete příkazu `watch` říct, aby počkal zadaný počet sekund, než příkaz znovu spustí. Pro změnu intervalu aktualizace použijte volbu `-n` následovanou časovým intervalem v sekundách.
watch -n <sekundy> <příkaz>
Pokud například chcete spustit příkaz každých 5 sekund, zadejte:
watch -n 5 <příkaz>
Zvýraznění změn mezi aktualizacemi
Příkaz `watch` při každé aktualizaci svůj výstup přepíše. Nicméně, můžete si také nechat zvýraznit změny mezi předchozím a aktualizovaným výstupem pomocí volby `-d`.
watch -d <příkaz>
Skrytí záhlaví ve výstupu příkazu watch
Ve výchozím nastavení příkaz `watch` zobrazuje v horní části každého výstupu záhlaví, které obsahuje informaci o intervalu aktualizace, název příkazu a aktuální datum a čas systému. Toto záhlaví můžete ze zobrazení odstranit pomocí volby `-t`:
watch -t <příkaz>
Přehrávání pípnutí při chybě
Když proces v Linuxu skončí, vrátí tzv. návratový kód. Podle konvence je hodnota 0 považována za úspěch a jakákoliv jiná hodnota (nenulová) značí chybu. Volba `-b` příkazu `watch` zajistí, že se přehraje pípnutí, pokud příkaz vrátí nenulový návratový kód.
Řekněme, že chcete monitorovat službu sshd.service a dostávat upozornění, když se tato služba zastaví. V takovém případě byste použili následující příkaz:
watch -b sudo systemctl status sshd.service
Tento příkaz spustí pípnutí v okamžiku, kdy se služba zastaví. Pípání přestane, jakmile se služba znovu spustí. Pro otestování tohoto chování můžete v jiném okně terminálu zastavit tuto službu. Pípání bude pokračovat, dokud službu opět nespustíte. Pro využití této funkce je však potřeba mít v systému nainstalovaný balíček pro pípnutí.
Ukončení příkazu watch při změně výstupu
Příkazu `watch` můžete také dát pokyn, aby se zastavil a skončil, jakmile se výstup příkazu změní. To provedete pomocí volby `-g`. Tato možnost se hodí ve scénářích, kde čekáte na konkrétní změny ve výstupu.
Jakmile se výstup změní, příkaz `watch` se ukončí. Můžete ji kombinovat s příkazem `echo` pro zobrazení zprávy na obrazovce.
Například, pokud čekáte, až se v adresáři objeví určitý soubor, následující příkaz bude sledovat adresář a jakmile se soubor objeví, příkaz `watch` se zastaví a na terminálu se zobrazí hláška „file arrived“:
watch -g "ls -l | grep filename" && echo "file arrived"
Dalším užitečným příkladem může být upozornění na přihlášení konkrétního uživatele do systému:
watch -g "who | grep username" && echo "username logged in"
Tento příkaz bude monitorovat výstup příkazu `who`, který vypisuje seznam přihlášených uživatelů. Jakmile se zadaný uživatel přihlásí, příkaz `watch` se zastaví a na terminálu se objeví zpráva.
Podobně můžete dát příkazu `watch` instrukci, aby se ukončil, pokud dojde k nějakým změnám v souboru. Mějte na paměti, že v případě řetězení příkazů musíte celý příkaz uzavřít do uvozovek.
Sledování aktivit ve vašem systému Linux
Pokud zjistíte, že opakovaně provádíte stejný proces, zvažte jeho automatizaci pomocí příkazu `watch`. Ušetříte si tak neustálé vypisování příkazů a zároveň budete mít přehled o změnách.
Příkaz `watch` můžete také kombinovat s dalšími příkazy Linuxu pro sledování systémových zdrojů a aktivit, a také pro monitorování změn v souborech či adresářích.