使用 Linux watch 命令监视命令和任务

了解 watch 命令如何让您知道任务何时完成或命令何时执行。
49 位读者喜欢这篇文章。
The Opensource.com preview: April

Opensource.com

很多时候您需要等待某些事情完成,例如

  • 文件下载。
  • 创建或解压 tar 文件。
  • Ansible 任务。

其中一些过程会有某种进度指示,但有时该过程通过抽象层运行,衡量进度的唯一方法是通过其副作用。其中一些可能是

  • 正在下载的文件不断增大。
  • 从 tarball 解压的目录逐渐填充文件。
  • Ansible 任务构建一个 容器

您可以使用如下命令查询所有这些内容

$ ls -l downloaded-file
$ find . | wc -l
$ podman ps
$ docker ps

但是一遍又一遍地运行这些命令,即使借助 Bash 历史记录向上箭头 的便利,也很乏味。

另一种方法是编写一个小型的 Bash 脚本来为您自动化这些命令

while :
do
  docker ps
  sleep 2
done

但是,编写这样的脚本也可能变得乏味。您可以编写一个小的通用脚本并将其打包,以便您始终可以使用它。幸运的是,其他开源开发人员已经做过了。

结果就是 watch 命令。

安装 watch

watch 命令是 procps-ng 软件包 的一部分,因此如果您使用的是 Linux,则已经安装了它。

在 macOS 上,使用 MacPortsHomebrew 安装 watch。在 Windows 上,使用 Chocolatey

使用 watch

watch 命令定期运行命令并显示其输出。它具有一些文本终端的优点,因此屏幕上只显示最新的输出。

最简单的用法是:watch <命令>

例如,在 docker ps 命令前加上 watch,就像这样

$ watch docker ps

watch 命令和一些创造性的 Unix 命令行技巧可以生成临时的仪表板。例如,要计数审计事件

$ watch 'grep audit: /var/log/kern.log |wc -l'

在最后一个示例中,如果审计事件的数量发生变化时有视觉指示,则可能很有用。如果预期会发生更改,但您希望看到一些“不同”之处,则 watch --differences 非常有效。它会突出显示与上次运行的任何差异。如果您在多个文件中使用 grep,这将特别有效,因此您可以轻松查看哪个文件发生了更改。

如果预期不会发生更改,您可以要求“永久”突出显示它们,以了解哪些需要调查,方法是使用 watch --differences=permanent。这通常更有用。

控制频率

最后,有时命令可能是资源密集型的,不应运行太频繁。 -n 参数控制频率。 Watch 默认使用两秒,但对于更资源密集型的操作,例如在子目录中的任何文件中 grep 模式,watch -n 10 可能更合适

$ watch -n 10 'find . -type f | xargs grep suspicious-pattern'

使用 watch 监视命令

watch 命令对于许多临时的系统管理任务非常有用,在这些任务中,您需要等待一些耗时的步骤完成(没有进度条),然后才能继续下一步。尽管这种情况不太好,但 watch 可以使其稍微好一些——并让您有时间开始编写回顾会的笔记!下载速查表 ,方便查阅有用的语法和选项。

接下来阅读
标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
自 1998 年以来,Moshe 一直参与 Linux 社区,帮助举办 Linux “安装派对”。自 1999 年以来,他一直在编写 Python 程序,并为核心 Python 解释器做出了贡献。 Moshe 在这些术语出现之前就已经是一名 DevOps/SRE,他非常关心软件可靠性、构建可重现性以及其他此类事情。

评论已关闭。

© . All rights reserved.