watch 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
watch——日志、时间与计划任务命令族(见日志与时间命令族)。它让你"周期性地重复跑一条命令看变化"。
watch 按固定间隔重复执行你给的命令,并清屏刷新显示最新结果。它适合"盯着一个指标的变化"——连接数、磁盘剩余、某个进程状态,每隔几秒自动刷新,不用手动反复敲。
一、基本用法
watch -n 1 'date' # 每秒显示当前时间
watch -n 2 'free -h' # 每 2 秒看内存
watch -n 5 'df -h /' # 每 5 秒看根分区空间默认间隔 2 秒,
-n指定间隔(秒)。命令用单引号包起来,避免 shell 提前展开变量。watch 会清屏再显示,形成"实时仪表盘"效果。和 top 不同,watch 能跑任意命令,不限于进程列表。
二、高亮变化:-d
watch -d -n 1 'ps aux --sort=-%cpu | head' # 高亮 CPU 占用变化的进程
watch -d 'cat /proc/loadavg' # 高亮负载变化
-d(differences)让"相比上次输出变化的部分"高亮,一眼看出哪个数字在动。盯动态指标时极有用——比如看哪个进程的 CPU 在波动、负载在涨。-d默认高亮"自上次以来的差异",加-d=cumulative可累高亮。
三、与 tail -f 的取舍
watch -n 1 'tail -n 5 app.log' # 周期看日志末 5 行(非实时)
tail -F app.log # 实时跟(更即时,见 [tail](/linux/cmd/tail.md))
watch 'tail ...'是"每隔 N 秒看一眼末尾",有间隔、不实时;tail -F是真正实时推送。要"秒级刷新但内容可被 watch 的 -d 高亮变化"用 watch;要"事件一发生就看到"用 tail -F。两者用途不同,watch 胜在能跑任意命令并高亮 diff。
四、管道与复杂命令
watch -n 1 "ss -tunlp | grep :8080" # 盯某端口监听状态
watch -n 2 "ps -e --no-headers | wc -l" # 盯进程总数变化(见 [wc](/linux/cmd/wc.md))watch 里可以放任意管道组合,等于"定期重跑整条流水线"。注意引号:推荐单引号;若命令内含单引号或需要变量展开,改用双引号并谨慎转义。复杂监控逻辑写成脚本、再用
watch ./monitor.sh更清晰。
五、实战:实时盯服务健康
# 每 2 秒看 nginx 进程数与连接数
watch -d -n 2 'echo "procs:"; ps -C nginx | wc -l; echo "conns:"; ss -tn state established | wc -l'
# 每 1 秒高亮磁盘剩余变化
watch -d -n 1 'df -h /var'第一条把进程数、连接数组合在一个 watch 面板里、
-d高亮变化,是"服务健康仪表盘"的轻量实现。不需要监控系统的重活,watch 一行搞定临时盯盘。配合 ss/ps/df 等任意指标。
六、watch vs top / cron
| 工具 | 用途 |
|---|---|
watch | 交互式临时盯任意命令的输出变化 |
| top | 专看进程/资源实时面板(见 top) |
cron | 后台周期性执行(非交互,见 crontab) |
watch 是"人盯着看"的临时监控;cron 是"后台自动跑、不用人守";top 是进程专用面板。临时排查时 watch 最灵活——什么命令都能包。
一句话总结
watch = 周期重跑命令并刷新:-n 间隔(默认 2s)、-d 高亮变化部分;命令用单引号包防提前展开;能跑任意命令+管道,比 top 灵活、比 tail -F 有间隔但能 diff 高亮;临时盯指标(连接数/磁盘/进程)的轻量仪表盘。后台自动跑用 crontab,实时跟日志用 tail -F。