主题
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 为准。
七、新手易错点
- 带管道/引号的命令没加引号:
watch ls -l | wc -l会被解析成"watch 跑ls -l,然后管道给wc -l",不是你想要的;要写成watch 'ls -l | wc -l'。 -n间隔别设太小:比如watch -n 0.1会疯狂刷命令,加重系统负担;一般 1~2 秒足够。watch是全屏界面,记得Ctrl+C退出:不是输入新命令的地方。- 高亮只标"和上次不同":配合
-d时,数字在两个值之间来回跳会反复高亮,别误读。 -g立即退出:如果命令输出本身一直在变(如date),-g会立刻退出,不是它坏了。watch是只读的监控工具:它只是反复跑你给的命令;但如果你给的命令本身会写文件/改系统,它也会反复执行,注意别给危险命令。
八、相关命令与文档
- 速查页:Linux 命令速查
- 实时盯内存/CPU:
vmstat(详解见 vmstat)、free(详解见 free) - 盯磁盘:
df(详解见 df) - 性能排查思路:见 Linux 性能专题