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

Команда 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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство