Linux watch command
Zweck
watch führt einen Befehl wiederholt aus, zeigt die Ausgabe im Vollbild an und aktualisiert sie in festen Intervallen. Es eignet sich zum Monitoring von Systemzuständen, Metriken und kurzlebigen Änderungen.
Grundlagen
Syntax:
- watch [Optionen] Befehl
- Standardintervall: 2 Sekunden
- Standardverhalten: Bildschirm wird bei jedem Lauf gelöscht, Kopfzeile zeigt Intervall, Befehl und Zeitstempel.
Beispiel:
watch -n 1 -d 'df -h'Wichtige Optionen (procps-ng watch)
- -n, —interval SECONDS: Intervall (z. B. 0.5 für 500 ms; Dezimalwerte möglich).
- -p, —precise: Zeitdrift kompensieren (Takte an realen Sekundenraster ausrichten).
- -d, —differences[=permanent]: Unterschiede zwischen Läufen hervorheben; mit =permanent bleiben Markierungen sichtbar.
- -t, —no-title: Kopfzeile ausblenden.
- -c, —color: ANSI-Farben der Befehlsausgabe erlauben.
- -g, —chgexit: Beenden, sobald sich die Ausgabe ändert (Exit-Code 0 bei Änderung).
- -e, —errexit: Beenden, wenn der Befehl mit Fehlercode endet (Exit-Code des Befehls).
- -b, —beep: Terminal-Bell bei Änderungen.
- -x, —exec: Befehl direkt ausführen (ohne /bin/sh -c), vermeidet Shell-Parsing und ist geringfügig effizienter.
Hinweis: BusyBox watch hat eine reduzierte Optionsmenge; prüfen Sie Ihre Implementierung mit watch —help.
Shell-Parsing und Quoting
Standardmäßig ruft watch den Befehl via /bin/sh -c auf (außer mit -x). Dadurch:
- Shell-Metazeichen (| ; > *) müssen gegenüber der aufrufenden Shell gequotet werden.
- Verwenden Sie einfache Quotes, um Expansion durch Ihre interaktive Shell zu verhindern.
- Nutzen Sie -x, wenn Sie bewusst ohne Shell laufen wollen (keine Pipes/Globs, nur direkter Befehl).
Beispiele:
# Shell-Features → komplett quoten
watch -n 1 'ps aux | grep nginx --color=never'
# Ohne Shell → direkte Ausführung
watch -x -n 1 ssPraxisbeispiele
Ressourcen/Prozesse
# Dateisystemauslastung mit Diff-Highlight
watch -n 1 --differences=permanent 'df -h'
# Speicher und Top-Prozesse
watch -n 1 'echo === free ===; free -h; echo; echo === top-5 by RSS ===; ps aux --sort=-rss | head -n 6'Netzwerk
# Socket-Zusammenfassung
watch -n 1 -p 'ss -s'
# Interface-Statistiken mit permanenter Diff-Markierung
watch --differences=permanent -n 1 'ip -s link'Services/Logs
# Systemd-Unit-Status
watch -n 2 'systemctl --no-pager --full status nginx | sed -n "1,25p"'
# Journal-Head (kein Follow, nur wiederholte Abfrage)
watch -n 1 'journalctl -u nginx -n 20 --no-pager'Metriken aus /proc und /sys
# CPU-Statistiken
watch -n 0.5 'grep "cpu " /proc/stat'
# Thermalsensor (in °C)
watch -n 1 'awk "{printf \"%.1f°C\n\", \$1/1000}" /sys/class/thermal/thermal_zone0/temp'Mit Zeitstempel in der Ausgabe
watch -n 1 'printf "%(%F %T)T\n"; vmstat 1 2 | tail -n 1'Farbige Ausgabe
Viele Tools deaktivieren Farben in nicht-interaktiven Umgebungen. Mit -c erlaubt watch ANSI-Farben; das überwachte Programm muss Farben erzwingen:
# ls mit erzwungenen Farben
watch -c -n 1 'ls --color=always -l --human-readable'
# git-Status farbig
watch -c -n 2 'git -C /pfad/zum/repo status --color=always'
# JSON farbig mit jq
watch -c -n 1 'curl -sS http://localhost:8080/metrics | jq -C .'Änderungen und Alarme
- Unterschiede: —differences oder —differences=permanent
- Beenden bei Änderung: -g (Exit 0 bei erster Änderung)
- Beenden bei Fehler: -e (Exit = Exit-Code des Befehls)
- Akustisches Signal: -b (Terminal-Bell; erfordert Terminal-Unterstützung)
Beispiele:
# Erfolgt Änderung? (nützlich in Skripten/CI)
watch -g -n 1 'ss -s'
# Abbruch, falls das Kommando fehlschlägt
watch -e -n 5 'systemctl is-active nginx'Präzision und Performance
- -p kompensiert Drift bei kurzen Intervallen.
- Zu kleine Intervalle (<0.2s) können CPU-Last und Flackern erhöhen.
- -x spart das /bin/sh -c-Overhead, wenn keine Shell-Features nötig sind.
- Teure Kommandos möglichst lokal filtern/aggregieren (z. B. awk, head), um Ausgabemenge zu minimieren.
Interaktive Programme
Interaktive Tools (fzf, top im Vollmodus, Editoren) funktionieren unter watch nicht sinnvoll. Nutzen Sie nicht-interaktive Modi oder Schnappschuss-Ausgaben:
# top-Snapshot (ein Durchlauf), dann Ende
watch -n 1 'COLUMNS=200 top -b -n1 | head -n 30'Häufige Stolpersteine
- Fehlendes Quoting führt dazu, dass die aktuelle Shell Pipes/Globs vor watch verarbeitet.
- Farbige Ausgabe braucht -c und Farberzwingung im Unterbefehl (z. B. —color=always, -C).
- Sehr breite Ausgaben werden abgeschnitten; ggf. COLUMNS setzen oder Ausgaben begrenzen.
- BusyBox-Varianten unterstützen nicht alle Optionen.
Alternativen
- while-Schleife mit sleep für freie Formatierung/Seiteneffekte:
while true; do clear; date; df -h | sed -n '1,20p'; sleep 1; done- watch -x in Kombination mit Skripten für komplexere Checks:
watch -x -n 5 /usr/local/bin/healthcheck.shSicherheitshinweise
- Vermeiden Sie unkontrollierte Eingaben in Shell-Kommandos. Nutzen Sie -x, wenn Benutzer-Input beteiligt ist.
- Lange laufende watch-Sessions können Dienste belasten (APIs, Datenbanken). Setzen Sie konservative Intervalle.
Kompatibilität
- Dieses Dokument bezieht sich auf procps-ng watch (Linux). Die Optionen können je nach Distribution/Version variieren.
- Prüfen: watch —version und watch —help.
Tags
linuxwatchclishellmonitoringobservabilityprocpsperformancesredevops