一、基础语法与核心选项
watch的基础用法很简单:watch [选项] 命令。它默认每2秒刷新一次输出,通过选项可灵活调整行为:
-n 5:自定义刷新间隔(单位:秒);-d:高亮显示两次刷新间的差异(新增/修改内容会标红);-g:当输出内容变化时自动退出监控;-t:隐藏顶部标题(间隔时间、命令、当前时间);-c:支持ANSI颜色与样式(如ls --color=always的输出会被正确渲染);-x:直接通过exec执行命令(减少引号转义的麻烦)。
二、实战示例:从简单到复杂
watch的魅力在于能适配各种监控场景,以下是更贴近实际需求的示例:
1. 基础监控:时间、资源、进程
-
每5秒刷新系统时间:
Bashwatch -n 5 date -
高亮显示内存变化(默认2秒刷新):
Bashwatch -d free -h -
监控Nginx进程是否存活(无匹配时输出空):
Bashwatch pgrep nginx
2. 复杂命令:管道、变量与过滤
当需要组合多个命令(如ps排序、grep过滤)时,需注意引号的正确嵌套——外层用单引号包裹整体逻辑,内层用双引号传递参数或模式,避免Shell提前解析导致错误。
-
监控CPU占用最高的5个进程(带标题隐藏):
Bashwatch -t -n 1 "ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6"这里双引号确保
ps命令的完整参数被传递,head -n 6保留表头+前5进程。 -
监控特定用户的进程(如用户"bob") (高亮差异):
Bashwatch -d 'ps aux | grep "bob" | grep -v grep'外层单引号包裹整个管道命令,内层双引号限定
grep的匹配模式(避免Shell将"bob"提前展开)。grep -v grep用于排除自身进程。 -
带颜色的日志监控(高亮ERROR级别) :
Bashwatch -c -d 'grep --color=always "ERROR\|WARN" /var/log/app.log | tail -n 20'--color=always强制grep输出带颜色,外层单引号确保颜色指令不被Shell破坏,-c选项让watch识别并渲染颜色。
3. 特殊场景:长行截断与精确执行
-
关闭自动换行(适合长输出):
Bashwatch -w "ls -l /usr/local | awk '{print \$9}'"-w选项关闭长行换行,配合awk提取文件名,避免输出混乱。 -
精确控制执行间隔(避免任务延迟累积):
Bashwatch -p -n 1 'echo "当前时间:$(date +%s)"'-p选项确保命令严格每隔1秒执行(而非累计延迟),适合对时效性要求高的场景。
三、注意事项
- 若需终止监控,按
Ctrl+C即可; - 动态日志(如持续写入的
access.log)建议用tail -f替代watch,因为watch会固定间隔清屏,可能丢失中间内容; - 复杂命令优先用单引号包裹,减少Shell对特殊字符(如
$、*)的提前解析。
watch虽小,却能大幅提升运维效率。掌握引号嵌套、选项组合等技巧后,你可以用它轻松监控服务器的“一举一动”,让问题无处遁形!
