使用 Linux watch 命令监视命令和任务
了解 watch 命令如何让您知道任务何时完成或命令何时执行。
很多时候你需要等待某件事完成,例如:
- 文件下载。
- 创建或提取 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
命令是 procps-ng
软件包的一部分,因此如果您使用的是 Linux,则已经安装了它。
在 macOS 上,使用 MacPorts 或 Homebrew 安装 watch
。在 Windows 上,使用 Chocolatey。
使用手表
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 默认使用两秒,但 watch -n 10 可能适合资源密集型的情况,例如在子目录中的任何文件中 grep 查找模式:
$ watch -n 10 'find . -type f | xargs grep suspicious-pattern'
使用 watch 观看命令
watch
命令对于许多临时系统管理任务非常有用,在这些任务中,您需要等待一些耗时的步骤(没有进度条),然后才能继续下一个任务。虽然这不是一个很好的情况,watch
可以让它稍微好一点,并让您有时间开始处理这些笔记以进行回顾!下载备忘单以随时掌握有用的语法和选项。