Linux运维利器:watch命令详解——实时监控的「眼睛」

发布于 阅读 58未分类

一、基础语法与核心选项

watch的基础用法很简单:watch [选项] 命令。它默认每2秒刷新一次输出,通过选项可灵活调整行为:

  • -n 5:自定义刷新间隔(单位:秒);
  • -d:高亮显示两次刷新间的差异(新增/修改内容会标红);
  • -g:当输出内容变化时自动退出监控;
  • -t:隐藏顶部标题(间隔时间、命令、当前时间);
  • -c:支持ANSI颜色与样式(如ls --color=always的输出会被正确渲染);
  • -x:直接通过exec执行命令(减少引号转义的麻烦)。

二、实战示例:从简单到复杂

watch的魅力在于能适配各种监控场景,以下是更贴近实际需求的示例:

1. 基础监控:时间、资源、进程
  • 每5秒刷新系统时间:

    Bash
    watch -n 5 date
  • 高亮显示内存变化(默认2秒刷新):

    Bash
    watch -d free -h
  • 监控Nginx进程是否存活(无匹配时输出空):

    Bash
    watch pgrep nginx
2. 复杂命令:管道、变量与过滤

当需要组合多个命令(如ps排序、grep过滤)时,需注意引号的正确嵌套——外层用单引号包裹整体逻辑,内层用双引号传递参数或模式,避免Shell提前解析导致错误。

  • 监控CPU占用最高的5个进程(带标题隐藏):

    Bash
    watch -t -n 1 "ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6"

    这里双引号确保ps命令的完整参数被传递,head -n 6保留表头+前5进程。

  • 监控特定用户的进程(如用户"bob") (高亮差异):

    Bash
    watch -d 'ps aux | grep "bob" | grep -v grep'

    外层单引号包裹整个管道命令,内层双引号限定grep的匹配模式(避免Shell将"bob"提前展开)。grep -v grep用于排除自身进程。

  • 带颜色的日志监控(高亮ERROR级别)

    Bash
    watch -c -d 'grep --color=always "ERROR\|WARN" /var/log/app.log | tail -n 20'

    --color=always强制grep输出带颜色,外层单引号确保颜色指令不被Shell破坏,-c选项让watch识别并渲染颜色。

3. 特殊场景:长行截断与精确执行
  • 关闭自动换行(适合长输出):

    Bash
    watch -w "ls -l /usr/local | awk '{print \$9}'"

    -w选项关闭长行换行,配合awk提取文件名,避免输出混乱。

  • 精确控制执行间隔(避免任务延迟累积):

    Bash
    watch -p -n 1 'echo "当前时间:$(date +%s)"'

    -p选项确保命令严格每隔1秒执行(而非累计延迟),适合对时效性要求高的场景。


三、注意事项

  • 若需终止监控,按Ctrl+C即可;
  • 动态日志(如持续写入的access.log)建议用tail -f替代watch,因为watch会固定间隔清屏,可能丢失中间内容;
  • 复杂命令优先用单引号包裹,减少Shell对特殊字符(如$*)的提前解析。

watch虽小,却能大幅提升运维效率。掌握引号嵌套、选项组合等技巧后,你可以用它轻松监控服务器的“一举一动”,让问题无处遁形!

评论 (0)
0 / 500
暂无评论,快来抢沙发~