Blog » Analizy i porady » Linux

Watch – powtarzalna egzekucja komendy

Watch

Quis custodiet ipsos custodes?

Jest to łacińska sentencja znanego rzymskiego satyryka – Juwenalisa – szerszej znanego za swoje słynne powiedzenia, takie jak „chleba i igrzysk”, „w zdrowym ciele zdrowy duch” czy „gdy teściowa wyzdrowiała, nie ma dla ciebie nadziei na spokój”. „quis custodiet ipsos custodes?” tłumaczone jest z reguły na język angielski jako „who watches the watchmen?”. Z kolei w naszym ojczystym języku oznacza to „kto pilnować będzie samych strażników?”. Co więcej, sentencja ta jest także tytułem jednego z odcinków „Star Trek” i występuje w filmie The Watchmen, którego intro ze względów estetycznych pozwoliłem sobie zamieścić poniżej.

A dlaczego w ogóle o tym piszę? Dzisiaj sami będziemy watchmenami :)!!!

Czym jest watch?

Watch jest programem należącym do pakietu procps-ng będącego częścią minimalnej grupy pakietów. Nie wymaga więc dodatkowej instalacji. Sam program wywołuje komendę w określonych interwałach czasowych, stąd też złowrogi tytuł.

Przykładowe wywołanie watch może wyglądać następująco:

watch uptime

Dla czasu pisania artykułu wydawało następujące wyjście:

watch1

Jak każda porządna komenda, watch także posiada szereg przydatnych opcji, przełączników.

  • -n, --interval <secs> Zmienia interwał między wywołaniami.
  • -t, --no-title Nie pokazuje górnego paska statusu.
  • -e, --errexit Wychodzi, jeśli wywołana komenda zwróciła niezerowy status. Wyjście jest interaktywne.
  • -d, --differences[=<permanent>] Pokazuje różnicę między obecnym wyjściem a poprzednim. Jeśli użyjemy --difference=true, to różnice będą się kumulować (będą permanentne).
  • -g, --chgexit Wychodzi, jeśli pojawiła się różnica w wyjściu komendy. Wyjście nie jest interaktywne.

Pozostałe opcje można uzyskać z watch -h lub wywołując komendę watch bez argumentów.

Poniżej pozwolę sobie przedstawić kilka przykładowych użyć.

watch -d date

Pokaże nam datę. Co każde odświeżenie różnica będzie występować co najmniej w liczbie sekund.

watch

watch -n 10 "dmesg | tail -20"

Co 10 sekund będzie odpytywał się o wyjście dmesg, a następnie przy pomocy potoku będzie przekazywał dane do komendy tail, który wyświetli nam tylko ostatnie 20 linii.

watch

Zupełnie innym przykładem może być użycie watch jako „triggera” (wyzwalacza).

watch -g pgrep my_long_process && echo "skonczone"

W tym wypadku watch będzie obserwował, czy wyjście pgrep na nazwie procesu „my_long_process” się nie zmieniło. Jeśli tak się stanie, to watch wyjdzie z zerowym statusem, uruchamiając echo "skonczone".

Podsumowanie

Tym razem artykuł jest krótszy jak na standard naszego bloga. Jest więc idealny do krótkiej przerwy kawowej. Nic dziwnego, watch to przecież przydatna, ale bardzo uboga komenda.

Na sam koniec pozwolę sobie umieścić małą ciekawostkę – komenda watch w systemach FreeBSD i innych Unixach z reguły służy do czegoś zupełnie innego. Mianowicie pozwala na obserwowanie (podglądanie) tego, co się dzieje na innej sesji terminalowej.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *