watch 命令能按设定的时间间隔自动执行命令并全屏刷新输出,非常适合需要持续观察变化、却不想反复手动执行的场景,是实时监控的利器。

⚙️ 基本用法
watch 的工作原理是:在给定的时间间隔后重复运行同一命令,并在终端原地刷新显示最新结果。
它的基本语法非常简单:
watch [选项] 命令
默认每2秒执行一次,顶部会显示执行间隔和当前时间。例如,实时监控磁盘使用情况:
watch df -h
此命令会每2秒自动刷新 df -h 的输出。
✨ 主要功能选项
watch 的真正威力在于它的几个实用选项:
- 设定执行间隔 (
-n): 自定义刷新频率,例如 watch -n 5 free -m 每5秒查看内存。-n 选项支持小数,-n 0.5 可实现每秒刷新2次。 - 高亮差异 (
-d): 这是它最亮眼的功能之一,它会将两次输出中发生变化的部分高亮显示,让你一眼就能发现哪里变了。示例:watch -d free -m。 正确处理管道 (" "): 要监控带管道的命令,必须用引号将整个命令括起来。否则 watch 只会执行管道符前面的部分。例如,监控 Nginx 进程需写成:
watch "ps aux | grep nginx"
- 隐藏标题栏 (
-t): 在分屏窗口(如 tmux)等小空间内,使用 -t 可以隐藏顶部包含间隔和时间的标题栏,让输出更紧凑。 自动退出 (-g): 当命令的输出发生变化时,watch 会自动退出,常用于等待某个特定事件发生。例如,等待主机恢复网络连通: 注意: -g 对任何输出变化(包括空格和时间戳差异)都敏感,使用前请确保待监控命令的输出稳定。
watch -g "ping -c1 192.168.1.50 | grep '1 received'"
💡 实用速查
- 监控端口连接数:
watch "ss -tn | grep ':443' | wc -l" - 监控CPU负载:
watch -n 1 -d "cat /proc/loadavg" - 监控日志行数增长:
watch "wc -l /var/log/syslog"
⚠️ 常见问题
- 命令报错或无输出: 先在
watch 外部单独运行命令,确保其语法正确。此外,有些命令依赖当前Shell的环境变量(如别名),在 watch 的子进程中可能无法直接使用。 - 意外的自动退出: 使用
-g 选项时,若监控的命令输出不稳定(如包含计时器),可能导致 watch 过早退出。务必先手动确认待监控命令的输出在无变化时是稳定的。
如果想深入体验,最佳实践是运行 watch -d -n 1 free -m,然后开启一个消耗内存的程序,亲眼看看高亮变化的效果。