Команда watch: использование, интервал -n, подсветка -d и выход при изменении вывода
Команда watch — это команда Linux, которая каждые 2 секунды заново выполняет указанную команду и перерисовывает её вывод на весь экран терминала. При наблюдении через watch за файлами на сервере AlmaLinux 9, которые менялись из другого окна, опция -d подсветила изменившиеся символы, а опция -g завершила watch после изменения вывода.
Вывод ниже получен в рабочей папке на сервере AlmaLinux 9.8 от имени root; на сервере Debian 12 проверялась только версия. Имя хоста в строке заголовка вверху экрана заменено примером server1, время указано в UTC.
1️⃣ Как пользоваться командой watch
Если после watch указать команду для повтора, то без опций watch выполняет её каждые 2 секунды и заменяет экран новым выводом. При наблюдении за date вверху экрана появилась строка заголовка, а после пустой строки — вывод date.
watch dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026Слева в строке заголовка показаны интервал обновления и выполняемая команда, справа — имя хоста и время последнего запуска. Когда тот же экран проверили снова через 2 секунды, время в заголовке и вывод date изменились вместе.
Every 2.0s: date server1: Thu Oct 29 02:28:09 2026
Thu Oct 29 02:28:09 UTC 2026watch работает, пока вы сами его не остановите, поэтому его завершают через Ctrl+C. После нажатия Ctrl+C экран watch исчез и вернулось приглашение. Код выхода, проверенный сразу после этого, был 0.
echo $?0watch нужен для повторного запуска команд, которые выводят результат один раз и завершаются. Чтобы видеть, как меняется загрузка CPU и памяти по процессам, используйте команду top, которая сама перерисовывает свой экран.
watch входит в пакет procps-ng. Версию проверяют через [watch -v]: на сервере AlmaLinux 9.8 это 3.3.17, на сервере Debian 12 — 4.0.2.
watch -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ Опции интервала и подсветки watch
Число секунд после -n меняет интервал обновления. После запуска [watch -n 1 date] левая часть заголовка сменилась на Every 1.0s.
watch -n 1 dateEvery 1.0s: date server1: Thu Oct 29 02:28:15 2026
Thu Oct 29 02:28:15 UTC 2026Согласно man-странице, интервал нельзя сделать короче 0,1 секунды, а меньшие значения заменяются на 0,1 секунды. Десятичным разделителем может быть как точка, так и запятая.
-d подсвечивает символы, которые отличаются от предыдущего обновления. Пока за size.log в рабочей папке наблюдали через [ls -l], из другого окна в этот файл добавили строку.
watch -d -n 1 ls -l size.logEvery 1.0s: ls -l size.log server1: Thu Oct 29 02:28:53 2026
-rw-r--r-- 1 root root 7 Oct 29 02:28 size.logprintf 'line 2\n' >> size.logКогда размер файла изменился с 7 на 14, подсветилось всё от столбца размера до конца строки. Число стало на одну цифру длиннее, поэтому все символы после него сдвинулись на одну позицию. При следующем обновлении значение не изменилось, и подсветка исчезла.
Every 1.0s: ls -l size.log server1: Thu Oct 29 02:28:54 2026
-rw-r--r-- 1 root root 14 Oct 29 02:28 size.logЧтобы постоянно подсвечивать всё, что изменилось с первого запуска, используйте [--differences=permanent] (согласно man-странице).
-t убирает строку заголовка и пустую строку под ней, оставляя только вывод команды.
watch -t -n 1 dateThu Oct 29 02:28:19 UTC 20263️⃣ Условия завершения и опции команды watch
-g завершает watch, когда меняется вывод команды. Это удобно, чтобы дождаться изменения содержимого файла состояния и перейти к следующей задаче.
watch -g -n 1 cat status.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
runningИз другого окна командой ниже содержимое status.txt заменили на done.
printf 'done\n' > status.txtПосле этого watch завершился, вернулось приглашение, а код выхода был 0.
echo $?0-e останавливает обновление экрана, когда команда завершается с ненулевым кодом выхода. При наблюдении через ls за файлом, которого нет в рабочей папке, появился вывод ошибки ls, а в нижней строке экрана — сообщение о том, что нажатие клавиши завершит работу.
watch -e -n 1 ls nofile.txtEvery 1.0s: ls nofile.txt server1: Thu Oct 29 02:29:18 2026
ls: cannot access 'nofile.txt': No such file or directory
command exit with a non-zero status, press a key to exitВремя в заголовке застыло на моменте сразу после запуска, а нажатие одной клавиши завершило watch. Код выхода в этот раз был 8.
echo $?8man-страница описывает код выхода 8 как значение, которое включает случай, когда команда завершилась с ошибкой.
📌 Основные опции: результаты из этой статьи
| Опция | Назначение | Результат в этой статье | |
|---|---|---|---|
| -n секунды | Меняет интервал обновления (по умолчанию 2 секунды) | Заголовок сменился на Every 1.0s | |
| -d | Подсвечивает символы, отличающиеся от предыдущего обновления | При размере 7 → 14 подсветка от этого столбца до конца строки, исчезла при следующем обновлении | |
| -t | Скрывает строку заголовка и пустую строку под ней | Осталась только одна строка вывода date | |
| -g | Завершает watch при изменении вывода | Завершилось после running → done, код выхода 0 | |
| -e | Останавливает экран, если команда завершилась с ошибкой | Завершилось после нажатия клавиши, код выхода 8 | |
| -v | Выводит сведения о версии | Сервер AlmaLinux 9.8: watch from procps-ng 3.3.17, сервер Debian 12: watch from procps-ng 4.0.2 |
📎 Другие опции: по официальному руководству
| Опция | Назначение | |
|---|---|---|
| -b | Подаёт звуковой сигнал, когда команда завершается с ненулевым кодом выхода | |
| -c | Интерпретирует ANSI-коды цвета и стиля, чтобы вывод команды сохранял цвета | |
| -p | Запускает строго по интервалу, чтобы время обновления не сдвигалось | |
| -x | Запускает команду через exec вместо sh -c, поэтому нужно меньше кавычек | |
| -w | Обрезает длинные строки вместо переноса на следующую строку | |
| --differences=permanent | Постоянно подсвечивает всё, что изменилось с первого запуска | |
| -h | Выводит справку |
4️⃣ Кавычки и конвейеры в команде watch
watch выполняет полученную команду через sh -c, поэтому команду, в которой есть конвейер(|) или $, целиком заключают в одинарные кавычки. При наблюдении за числом файлов в рабочей папке через [ls | wc -l] в заголовке была видна вся команда вместе с конвейером.
watch -n 1 'ls | wc -l'Every 1.0s: ls | wc -l server1: Thu Oct 29 02:30:22 2026
6Когда из другого окна создали ещё один файл, при следующем обновлении число изменилось с 6 на 7.
printf 'c\n' > q3.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7Если ввести [watch -n 1 ls | wc -l] без кавычек, оболочка сначала разделит конвейер, и весь экранный вывод watch уйдёт в wc. Поэтому, если в отслеживаемой команде есть конвейер, всю команду заключают в кавычки.
$ подчиняется тому же правилу. При запуске [watch -n 1 echo $$] без кавычек текущая оболочка сначала заменила $$ числом, и это число появилось и в команде в заголовке.
watch -n 1 echo $$Every 1.0s: echo 3755802 server1: Thu Oct 29 02:29:37 2026
3755802В одинарных кавычках $$ передаётся без изменений, поэтому в заголовке было видно echo $$, а при каждом обновлении выводился PID только что запущенного sh.
watch -n 1 'echo $$'Every 1.0s: echo $$ server1: Thu Oct 29 02:29:40 2026
3756270Every 1.0s: echo $$ server1: Thu Oct 29 02:29:41 2026
3756333PID текущей оболочки, проверенный через [echo $$], совпал с числом, которое было зафиксировано при запуске без кавычек.
echo $$3755802За медленно меняющимися значениями, например использованием диска, наблюдают с интервалом в несколько секунд. Команда du: -s выводит только итог, а -h — размеры в единицах вроде K и M. Пока за рабочей папкой наблюдали через [du -sh .], из другого окна в файл журнала добавили 8001 байт, и при следующем обновлении 28K сменилось на 36K.
watch -n 2 du -sh .Every 2.0s: du -sh . server1: Thu Oct 29 02:30:34 2026
28K .printf '000d\n' 0 >> grow.logEvery 2.0s: du -sh . server1: Thu Oct 29 02:30:36 2026
36K .🔲 Симулятор команды watch
В симуляторе ниже запустите watch и меняйте файлы чипами [🖊 Другое окно], чтобы своими глазами увидеть, как меняется экран.
🔢 FAQ & рекомендуемые материалы
Состояние системы
Команда uptime в Linux (проверка времени работы сервера&средней нагрузки за 1, 5, 15 минут)
Команда uptime в одной строке показывает, сколько времени работает сервер, и среднюю нагрузку за 1, 5 и 15 минут.
Текст
Команды head и tail в Linux
Команды head и tail выводят начало и конец файла. Чтобы следить за концом растущего журнала, используйте [tail -f].
Диск
Команда df
Команда df выводит для каждой файловой системы общий размер, занятое и свободное место.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.