
Watch – powtarzalna egzekucja komendy

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 […]
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 podlinkować.
A dlaczego w ogóle o tym piszę? Dzisiaj sami będziemy watchmen
ami :)!!!
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:
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 -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.
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.