piątek, 28 sierpnia 2009

Polecenie watch - jak go używać?

Polecenie watch okazuje się często bardzo przydatnym narzędziem w codziennej praktyce administratorskiej. Pozwala nam ono wykonywać cyklicznie komendę podaną jako parametr w wywołaniu watch wyświetlając jej wynik za każdym razem na nowym ekranie:

watch [opcje] polecenie

Pozwala to w dość skuteczny sposób śledzić zmiany zachodzące pomiędzy kolejnymi wykonaniami polecenia.

Przejdźmy do praktyki. Prześledźmy zmiany pamięci dostępnej w systemie:

# watch -n 1 free


Co 1 sekundę wykonujemy polecenie free (wyświetla statystyki pamięci dostępnej w systemie - o tym innym razem).
Polecenie watch pozwala nam na więcej - możemy śledzić zmiany zachodzące w wyniku wykonania między dwoma kolejnymi wywołaniami (opcja -d):

# watch -n 1 -d free


Możemy też użyć wartości =cumulative przy opcji -d - zaznaczone będą wszystkie zmiany jakie zachodzą między wywołaniami polecenia - zmiany te będą kumulowane - nie zostaną skasowane jak w wypadku użycia samej opcji -d

# watch -n 2 free -d=cumulative free


Inne przykłady zastosowania komendy watch:

- śledzenie liczby przerwań (o przerwaniach innym razem)
# watch -n1 -d 'cat /proc/interrupts'


- śledzenie procesów ZOMBIE w systemie - no tak nie całkiem do końca ale powinno zadziałać (o procesach innym razem)

# watch -n2 "ps auxw | grep 'defunct' | grep -v 'grep' | grep -v 'watch'"


grep -v odfiltrowuje linie zawierające tekst pasujący do wzorca - stosuje się to często przy wyszukiwaniu konkretnego procesu w systemie gdy chcemy odfiltrować proces grep w zwróconym wyniku:

# ps ax|grep cron|grep -v grep

Zadanie - Jak inaczej można odfiltrować grep z listy procesów?

- śledzenie nawiązanych połączeń:

# watch -n 1 -d "netstat -tpanl | grep ESTABLISHED"


Zastosowań znajdzie się pewnie mnóstwo - ja często używam watch przy poleceniu dd w celu sprawdzenia ile danych zostało skopiowanych za jego pomocą. Polecenie dd wyświetla aktualny stan kopiowania tylko w momencie gdy proces dd otrzyma sygnał SIGUSR1 (polecam man dd):

# watch -n 2 'kill -SIGUSR1 $pid


$pid określa numer procesu dd w systemie (trzeba go wcześniej zidentyfikować).

Brak komentarzy:

Prześlij komentarz