Гид по технологиям

Команда watch в Linux: как периодически запускать команды и следить за изменениями

5 min read Linux Обновлено 31 Dec 2025
Команда watch в Linux — мониторинг и примеры
Команда watch в Linux — мониторинг и примеры

Мужчина сидит перед открытым ноутбуком, расслабленно откинув руки за голову.

Кратко: команда watch в Linux автоматически повторяет любую команду с заданным интервалом и обновляет её вывод в терминале. Она удобна для наблюдения за процессами, дисковым пространством, сетевыми подключениями и появлением файлов. В статье — синтаксис, часто используемые опции, шаблоны применения, подсказки и альтернативы.

Что такое команда watch?

Команда watch запускает указанную команду или программу повторно через равные интервалы времени и показывает её вывод в терминале. Вы видите изменения в реальном времени: каждые n секунд экран обновляется и перезаписывает предыдущий вывод. По умолчанию интервал — 2 секунды. Остановить наблюдение можно сочетанием клавиш Ctrl+C.

Кому полезна эта команда: системным администраторам, разработчикам, инженерам DevOps и всем, кто отслеживает динамические изменения в системе.

Синтаксис

watch [опции] <команда>

Если не указывать опции, watch повторит команду каждые 2 секунды. Пример простого наблюдения за содержимым домашней директории:

watch ls -l ~/

Это покажет список файлов и будет обновлять вывод каждые 2 секунды, поэтому вы сразу заметите создание, удаление или изменение размера файлов.

Вывод watch для команды ls

Основные опции и примеры использования

Ниже — ключевые опции, которые чаще всего нужны на практике.

  • -n <секунды> — изменить интервал обновления (по умолчанию 2).
  • -d — подсвечивать изменения между обновлениями.
  • -t — убрать заголовок (интервал, команда, дата/время).
  • -b — проигрывать звуковой сигнал при ненулевом коде выхода команды.
  • -g — завершить работу watch при первом изменении вывода.

Интервал обновления (-n)

Чтобы запускать команду, например, каждые 5 секунд:

watch -n 5 <команда>

Пример: обновлять информацию о файловой системе каждые 10 секунд:

watch -n 10 df -h

Изменение интервала обновления watch

Подсветка изменений (-d)

Опция -d подсвечивает разницы между предыдущим и текущим выводом, что помогает быстро заметить изменение значения:

watch -d free -h

Убрать заголовок (-t)

Заголовок по умолчанию показывает интервал, команду и текущее время. Если нужен чистый вывод без этой строки, используйте -t:

watch -t ls -l

Играть звук при ошибке (-b)

Если команда возвращает ненулевой код выхода (ошибку), опция -b проиграет звуковой сигнал. Это удобно для мониторинга сервисов:

watch -b sudo systemctl status sshd.service

Примечание: для звуковой индикации может потребоваться установленный пакет beep или настроенная поддержка звука в терминале.

Выйти при изменении вывода (-g)

Опция -g останавливает watch, как только вывод изменится. Это полезно при ожидании события — прихода файла или входа пользователя:

watch -g "ls -l | grep filename" && echo "file arrived"

watch -g "who | grep username" && echo "username logged in"

Важно: при использовании каналов (pipe) и цепочек команд оборачивайте всю команду в кавычки.

Когда watch удобен: практические сценарии

  • Ожидание появления файла в директории (см. пример выше).
  • Наблюдение за статусом службы systemd, чтобы заметить остановку или падение.
  • Мониторинг использования диска, памяти или нагрузки CPU во время теста.
  • Проверка открытых сокетов и привязанных портов при отладке сервиса.

Шаблоны команд (cheat sheet)

# Обновлять информацию о диске каждые 10 секунд
watch -n 10 df -h

# Показать процессы с подсветкой изменений
watch -d 'ps aux --sort=-%mem | head -n 10'

# Отслеживать слушающие TCP-порты каждую секунду
watch -n 1 ss -tulpn

# Оповещение при падении службы
watch -b sudo systemctl status nginx.service

# Ждать, пока файл появится, затем напечатать сообщение
watch -g "ls -1 /path/to/dir | grep '^important.file$'" && echo "important.file появилcя"

Альтернативы и когда watch не подойдёт

  • cron — подходит для периодических задач, которые должны выполняться независимо от терминала и сохранять результаты в логи; не подходит для интерактивного наблюдения в реальном времени.
  • while loop в shell — можно использовать для тонкой настройки логики между итерациями, для сложной обработки; пример:
while sleep 5; do ls -l ~/; done
  • inotifywait (из пакета inotify-tools) — эффективнее для отслеживания событий файловой системы без постоянных опросов; полезно для долгосрочного слежения за директориями.

  • top/htop — интерактивные визуальные утилиты для мониторинга процессов; не подходят, если нужна автоматическая перезапись вывода внешней команды.

Модель принятия решения: когда выбрать watch

  • Вам нужен быстрый ручной контроль в терминале — используйте watch.
  • Нужны уведомления и автоматизация в фоне — лучше cron + скрипт или systemd timers.
  • Нужно реагировать на события файловой системы — используйте inotifywait.
flowchart TD
  A[Нужно наблюдать за изменениями?] -->|Да, в терминале| B[watch]
  A -->|Да, но в фоне| C[cron / systemd timer]
  A -->|Отслеживание файловой системы| D[inotifywait]
  B --> E{Команда интерактивна?}
  E -->|Да| F[Не использовать watch]
  E -->|Нет| G[Использовать watch с -n/-d]

Роли и чеклист для быстрого запуска наблюдения

  • Системный админ:

    1. Выбрать команду для наблюдения (systemctl, df, ss).
    2. Определить интервал (-n).
    3. Добавить -b для звуковых оповещений при ошибках.
    4. Запустить в отдельной вкладке терминала.
  • Разработчик:

    1. Проверить, не конфликтует ли команда с интерактивными режимами.
    2. Использовать -d для подсветки изменений логов или вывода тестов.
    3. Закомментировать лишние опции при скриншотах/записи видео.
  • DevOps/автоматизация:

    1. Для долговременных проверок применять systemd timer или alerting.
    2. Для кратковременных тестов — watch в CI-терминале при отладке.

Критерии приёмки

  • Команда корректно повторяется через заданный интервал (-n).
  • При изменении вывода опция -g завершает наблюдение и возвращает управление.
  • При ненулевом коде выхода с -b слышен/функционирует сигнал (если присутствует поддержка звука).
  • Подсветка -d выделяет изменённые строки между обновлениями.

Тестовые сценарии

  1. Тест интервала: запустите watch -n 3 date. Вывод должен обновляться каждые ~3 секунды.
  2. Тест -d: запустите watch -d ‘echo $RANDOM’. Изменения должны подсвечиваться.
  3. Тест -g: создайте файл в пустой директории, запустите watch -g “ls | grep testfile”; затем создайте testfile — watch должен завершиться.
  4. Тест -b: запустите watch -b false. Поскольку команда возвращает код 1, при наличии звуковой поддержки должен сработать сигнал.

Инцидентный план и откат

Если watch вызывает ненужный шум или загружает систему:

  • Остановить наблюдение: нажать Ctrl+C в том же терминале.
  • Если watch запущен в фоне: найти PID и завершить процесс: pkill -f “\bwatch\b” или ps aux | grep watch и kill .
  • Если громкие звуковые сигналы мешают: выключить или перенастроить пакет beep, или запускать без -b.

Важно: не используйте watch для команд, которые запускают интерактивный UI (например, full-screen ncurses-приложения) — результат будет некорректным.

Подсказки по производительности и безопасности

  • Частое опрашивание (например, интервал 0.1 с) может повышать нагрузку; выбирайте разумный интервал.
  • Команды, требующие ввода пароля (sudo), не подходят для длительного запуска без предварительной настройки NOPASSWD в sudoers.
  • Для долгосрочного мониторинга предпочтительнее инструменты с событийной моделью (inotify, systemd) или системы мониторинга (Prometheus, Zabbix).

Советы по локализации вывода и форматированию

  • При использовании фильтров (grep, awk) учитывайте локаль и кодировку файлов.
  • Если команда выводит много служебных ANSI-последовательностей, можно попытаться очистить цвет (например, использовать –no-color), чтобы подсветка -d работала корректно.

Краткое резюме

Команда watch — простой и быстрый инструмент для наблюдения за изменяющимися выводами команд в терминале. Она полезна для ручного мониторинга и отладки в реальном времени. Для автоматизации, долговременного мониторинга и событийной реакции стоит рассмотреть альтернативы: cron, systemd timers и inotifywait.

Полезные примеры на одном экране

# Наблюдать процессы (каждую секунду) и подсвечивать изменения
watch -n 1 -d 'ps aux --sort=-%cpu | head -n 15'

# Ожидать появления файла и вывести сообщение
watch -g "ls /tmp | grep '^ready.txt$'" && echo "ready.txt появилcя"

# Мониторить сокеты с подробностями
watch -n 2 ss -tulpn

Заключение

Используйте watch для быстрых ручных проверок и отладки. Для постоянного мониторинга и срабатываний на события выбирайте инструменты с событийной архитектурой или интегрируйте оповещения в существующую систему мониторинга.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Устранение ошибок загрузчика GRUB
Linux

Устранение ошибок загрузчика GRUB

Как посмотреть старые плейлисты Spotify Wrapped
Музыка

Как посмотреть старые плейлисты Spotify Wrapped

Калибровка экструдера 3D‑принтера — подробный гайд
3D-печать

Калибровка экструдера 3D‑принтера — подробный гайд

Как использовать цикл for в Python
Python

Как использовать цикл for в Python

Рабочие пространства в Ubuntu — создание и настройка
Ubuntu

Рабочие пространства в Ubuntu — создание и настройка

Создать загрузочный Live CD Linux
Linux

Создать загрузочный Live CD Linux