Skip to content

watch 命令详解:每隔几秒自动重复执行一个命令 ​

本文是 Linux 命令速查 中 watch 的从 0 到 1 详解。 目标:把 watch -n/-d/-t 的用法讲清楚,多看几遍后,你在服务器上敲 watch -n 1 命令 就知道怎么实时盯一个命令的输出。 环境依据:procps-ng 3.3.17(Ubuntu 22.04 自带;RHEL/Rocky 同属 procps-ng,用法一致)。

一、命令是干什么的 ​

watch 帮你每隔几秒自动重新执行同一个命令,并把输出全屏刷新出来。你不用手敲一遍又一遍,它会像监控屏一样持续更新。

典型场景:

  • 盯磁盘空间:watch -d df -h;
  • 盯某个目录文件数变化:watch -d ls -l /var/log;
  • 盯网络连接数:watch -d ss -s;
  • 盯容器/进程是否起来:watch -n 1 docker ps。

类比:watch 像给你的命令装了个"自动重放器",默认每 2 秒刷一次,还能把和上次不一样的地方高亮出来。

按 Ctrl+C 退出。

二、命令语法 ​

bash
watch [选项] 要重复执行的命令
  • 后面跟一个完整命令(可以带它自己的选项);
  • watch 会把命令交给 shell 反复执行;
  • 默认每 2 秒刷新一次。

最简单的用法:

bash
watch date

三、选项全表(对照 watch --help) ​

选项中文含义什么场景用
-n 秒,--interval=秒刷新间隔(默认 2 秒)watch -n 1 每秒刷
-d,--differences高亮与上次不同的部分看变化(最常用)
-d=cumulative高亮从开始到现在所有变动过的地方一直标红变化过的区域
-t,--no-title关闭顶部的标题(间隔/命令/时间)只看输出内容
-c,--color解析 ANSI 颜色码命令本身带颜色时
-b,--beep命令返回非 0 时响铃出错提醒
-e,--errexit命令返回非 0 就停下失败即停
-g,--chgexit输出一旦变化就退出等某个状态出现
-p,--precise尽量精确按间隔执行对时间精度要求高
-w,--no-wrap不折行输出宽时
-x,--exec直接 exec 命令,不经过 shell复杂命令传参时

四、由浅入深的典型示例 ​

示例 1:基本用法——每秒看时间 ​

bash
watch -n 1 date

顶部显示命令和刷新间隔,下面 date 的输出每秒刷新一次;Ctrl+C 退出。

示例 2:高亮变化(最常用) ​

bash
watch -n 1 -d df -h

每隔 1 秒刷一次 df -h,并把和上次数字不同的地方反白高亮。磁盘用量在哪涨,一眼就能看到。

示例 3:盯日志目录文件数 ​

bash
watch -d 'ls -l /var/log | wc -l'

命令里有管道/引号时,整个命令用引号包起来,否则 watch 会把 |、wc 当成自己的参数。

示例 4:关闭顶部标题 ​

bash
watch -n 1 -t 'ss -s'

-t 去掉顶部的 Every 1.0s: ss -s ... 标题,只留命令输出。

示例 5:盯进程是否起来 ​

bash
watch -n 1 'ps aux | grep nginx | grep -v grep'

部署后等进程起来时,用 watch 反复看 grep 结果,比手敲方便。

示例 6:输出一变就退出 ​

bash
watch -g -n 2 'cat /var/log/app.log | tail -1'

-g 模式:一旦命令输出和上次不一样就自动退出。适合"等某个文件出现新行再继续"的脚本场景。

示例 7:命令带颜色时保留颜色 ​

bash
watch -c 'ls --color'

-c 让 watch 解析 ANSI 颜色码,否则颜色会变成一堆乱码字符。

示例 8:盯磁盘 I/O ​

bash
watch -n 1 -d 'cat /proc/diskstats | grep vda'

实时看某个盘的统计计数变化。

五、高频组合速记 ​

命令用途
watch -d 命令默认每 2 秒刷并高亮变化(最常用)
watch -n 1 -d 命令每秒刷新并高亮
watch -n 2 -t 命令不显示标题
watch -n 1 '命令1 | 命令2'带管道的命令要加引号
watch -g -n 2 命令输出一变就退出

六、RHEL 系与 Debian 系差异 ​

watch 属于 procps-ng,两系用法完全一致。个别老系统(BusyBox 环境)的 watch 选项较少,没有 -d/-c 等,以本机 watch --help 为准。

七、新手易错点 ​

  1. 带管道/引号的命令没加引号:watch ls -l | wc -l 会被解析成"watch 跑 ls -l,然后管道给 wc -l",不是你想要的;要写成 watch 'ls -l | wc -l'。
  2. -n 间隔别设太小:比如 watch -n 0.1 会疯狂刷命令,加重系统负担;一般 1~2 秒足够。
  3. watch 是全屏界面,记得 Ctrl+C 退出:不是输入新命令的地方。
  4. 高亮只标"和上次不同":配合 -d 时,数字在两个值之间来回跳会反复高亮,别误读。
  5. -g 立即退出:如果命令输出本身一直在变(如 date),-g 会立刻退出,不是它坏了。
  6. watch 是只读的监控工具:它只是反复跑你给的命令;但如果你给的命令本身会写文件/改系统,它也会反复执行,注意别给危险命令。

八、相关命令与文档 ​