我们在执行linux命令的时候,有时候需要持续查看结果,此时需要反复执行某一个命令。
比如查看k8s pod 是否拉起,或者查看进程是否删除。一般就通过
⬆+回车 的组合不断的点,直到具体的结果。
但是这太麻烦了,而且太low,作为一个成熟的操作系统,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )linux早已有相应的命令。
watch 命令
watch 在英语中的的本意是 持续监视/站岗/守望/观察的意思
watch 命令也很简单:
watch + <要持续观察的命令>
举个例子
watch ps -ef
输出:
Every 2.0s: ps -ef kcs-m-b8hn9: Fri Oct 9 17:57:46 2026
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2025 ? 08:14:30 /usr/lib/systemd/systemd --system --deserialize 20
root 2 0 0 2025 ? 00:00:45 [kthreadd]
root 3 2 0 2025 ? 00:00:00 [rcu_gp]
root 4 2 0 2025 ? 00:00:00 [rcu_par_gp]
root 6 2 0 2025 ? 00:00:00 [kworker/0:0H-kblockd]
root 8 2 0 2025 ? 00:00:00 [mm_percpu_wq]
....
红色不部分是标题行,
左上角表示持续监视的周期,默认是每两秒执行一次。
右上角是当前监视的时间点。下边就是执行命令的结果了。
如果我们想要执行管道命令,可以通过单/双引号,包裹要执行的命令。如下:
[root@kcs ~]# watch "ps -ef | grep java"
[root@kcs ~]# watch 'ps -ef | grep java'
除此之外,watch 还提供了一些高级参数,来提升watch的能力:
-n 调整watch命令的监视周期,单位是s
如下:
watch -n 0.1 'ps -ef |grep java'
这种就是每0.1秒执行一次
-d d是difference的意思,作用是高亮本次执行的结果和上一次执行结果的差异
效果如下图:

-t 不显示标题行,就是屏蔽红色字体写的 周期/当前时间点这些数据,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )平常很少用,会在写复杂脚本的时候,去掉头部数据
-g 当发生变化时退出watch监控,也就是当发现本次监控和上一次监控存在不同时,直接立刻退出监控界面
-e 当执行的命令返回错误状态(非0)时,退出,
啥时候会返回错误状态呢,比如我们进入一个不存在的路径
watch -n 0.1 -e 'cd abc'
效果如下图,此时不是立刻退出监控界面,而是按任意键
