watch
watch用于周期性执行命令并全屏显示输出,是命令行下的"实时监控"工具。适合观察文件、进程、网络等状态的变化,替代手动反复执行命令。
# macOS 注意
macOS 系统自带的是 BSD 版本的 watch,功能较少(不支持 -d 高亮差异等)。通过 brew install watch 安装的是 GNU 版本(procps-ng),功能更全。以下选项以 GNU 版本为准。
# base
watch [选项] 命令
1
默认每 2 秒执行一次命令,全屏显示输出。按 Ctrl+C 退出。
# common options
-n, --interval <秒>:指定执行间隔(默认 2 秒)-d, --differences:高亮本次与上次输出的差异;-d=permanent永久高亮所有变化过的位置-t, --no-title:不显示顶部标题栏(时间、间隔、命令)-g, --chgexit:输出发生变化时自动退出(适合等待某个状态出现)-b, --beep:命令返回非零退出码时蜂鸣提示-e, --errexit:命令返回非零退出码时停止并显示错误-c, --color:解释 ANSI 颜色序列(让命令的彩色输出正常显示)-x, --exec:通过exec执行命令而非sh -c,减少引号转义问题
# case
监控目录文件变化
watch -d ls -la
watch -d 'ls -lt | head -10'
1
2
2
监控进程
watch -n 1 'ps aux | grep python'
watch -n 1 'ps aux --sort=-%mem | head -10'
1
2
2
监控磁盘和内存
watch df -h
watch -n 5 free -h
1
2
2
监控网络连接
watch -n 1 'netstat -an | grep ESTABLISHED | wc -l'
watch -n 1 'lsof -i :8080'
1
2
2
监控 Git 状态
watch -d git status
watch -d 'git log --oneline -5'
1
2
2
监控文件大小变化
watch -d 'ls -lh large-file.iso'
watch -d 'du -sh /tmp'
1
2
2
等待某个状态出现后自动退出
# 等文件出现后退出
watch -g 'ls myfile.txt'
# 等端口被监听后退出
watch -g 'lsof -i :3000'
1
2
3
4
5
2
3
4
5
# 注意事项
- 复杂命令(含管道、通配符)必须用单引号包裹,否则 watch 启动前就会被当前 shell 解析
- 示例:
watch -n 1 'ls *.log'正确;watch -n 1 ls *.log会在启动时展开*.log,之后不会重新匹配 - 间隔时间不要设太短(如 0.1 秒),高频执行可能增加系统负载
- 与
tail -f的区别:tail -f只追踪单个文件的追加内容,watch可以周期性执行任意命令
上次更新: 2026/09/10, 14:32:04