watch是Linux系统中用于周期性执行指定命令并全屏显示输出结果的工具,默认每2秒刷新一次输出。它非常适合监控系统状态的变化,如内存使用、磁盘空间、进程状态等动态信息。
watch的核心价值在于:无需手动重复输入命令,自动刷新显示;支持高亮显示输出变化,便于快速识别变化内容;可设置不同的刷新间隔;当命令输出发生变化时可触发退出或报警。掌握watch是进行系统监控和实时状态跟踪的实用技能。
1. 基本语法
| 命令 | 说明 |
|---|
watch command | |
watch -n 5 command | |
watch -n 1 date | |
watch -t command | |
watch --help | |
2. 常见监控任务
| 命令 | 说明 |
|---|
watch free -h | |
watch df -h | |
watch uptime | |
watch -n 1 "ps -ef | grep nginx" | |
watch "ss -tulpn" | |
watch "ls -la" | |
watch "cat /proc/loadavg" | |
watch "dmesg | tail -20" | |
3. 刷新间隔控制
| 命令 | 说明 |
|---|
watch -n 0.5 command | |
watch -n 10 command | |
watch -t command | |
watch -p command | |
watch -x command arg1 arg2 | |
注意: 刷新间隔不宜过短,尤其是对系统资源消耗较大的命令,建议根据实际需要设置合理间隔。
4. 高亮变化
使用-d选项可以高亮显示不同刷新周期之间的输出差异:
| 命令 | 说明 |
|---|
watch -d command | |
watch -d free -h | |
watch -d "ip -brief address" | |
watch -d -n 1 "cat /proc/loadavg" | |
watch -d=permanent command | |
5. 管道与引号处理
watch执行的命令会通过sh -c解析,因此管道、重定向等需要使用引号:
| 命令 | 说明 |
|---|
watch "ps -ef | grep apache" | |
watch "ls -lh /var/log | tail" | |
watch "grep -c error /var/log/syslog" | |
watch -x ls -lh /var/log | |
watch "find /tmp -maxdepth 1 -type f | wc -l" | |
watch "cat /proc/meminfo | grep MemAvailable" | |
6. 退出条件与提示
| 命令 | 说明 |
|---|
watch -g command | |
watch -b command | |
watch -b -n 5 "systemctl is-active nginx" | |
watch -g "cat /tmp/status.txt" | |
watch -g "pgrep firefox" | |
watch -b "ping -c 1 8.8.8.8" | |
7. 实用监控场景
| 命令 | 说明 |
|---|
watch -n 1 "ps -eo pid,%cpu,%mem,cmd --sort=-%cpu | head -20" | |
watch -n 2 "netstat -i" | |
watch -d "iotop -b -n 1 | head -20" | |
watch "ls -la | wc -l" | |
watch -n 10 "date >> ~/monitor.log" | |
watch "echo 'scale=2; $(cat /proc/loadavg | cut -d" " -f1) / $(nproc) * 100' | bc" | |
watch "tail -n 5 /var/log/syslog" | |
8. 实用组合模式
| 命令 | 说明 |
|---|
watch -n 1 -d "free -m && echo && df -h" | |
watch -n 1 "curl -s -o /dev/null -w '%{http_code}' http://localhost" | |
watch -g -n 1 "cat /sys/class/net/eth0/operstate" | |
watch -b -n 5 "systemctl status sshd | grep Active" | |
watch -n 2 "ifconfig eth0 | grep -e 'RX packets' -e 'TX packets'" | |
watch -n 60 "sudo journalctl -u nginx --since '1 minute ago' | tail -10" | |
watch -d "ps aux | sort -nrk 3 | head -5" | |
9. 常用选项速查
10. 输出格式说明
watch输出通常包含以下几部分:
Every 2.0s: date hostname: Wed Apr 27 10:30:00 2026
[命令的输出内容...]
11. 故障排查
| 问题 | 解决方法 |
|---|
| 管道或重定向不生效 | 将整个命令用引号括起来;或使用sh -c "command" |
| 屏幕闪烁太频繁 | 增加刷新间隔(-n);使用-t隐藏标题减少视觉干扰 |
| 输出变化难以察觉 | |
| 命令立即退出 | |
| 需要shell扩展和变量 | |
| 长输出换行难以阅读 | |
| 颜色输出丢失 | |
| watch: command not found | 安装procps包:apt install procps 或 yum install procps |
温馨提示: watch是轻量级监控工具,适合实时观察系统状态变化。建议掌握以下技巧:1)监控日志变化时,使用watch -n 1 "tail -n 10 /var/log/syslog"实时查看最新条目;2)使用-d高亮变化,快速定位异常;3)在脚本中结合-g实现条件触发;4)监控生产环境时,避免用过短的间隔(建议≥2秒)减少系统开销;5)使用-t隐藏标题,输出更简洁;6)需要持久化记录时,watch更适合观察而非日志收集。对于复杂的监控需求,建议结合Prometheus、Grafana等专业监控工具。