watch
命令的语法
有各种可用于watch
命令的命令行选项。如果您运行watch
命令而没有任何选项,它将每隔两秒运行一次指定的命令。例如,以下命令将显示ls
命令的输出:
输出将显示目录列表中的更改,如果创建了文件、删除了文件或文件大小发生变化,它将每两秒刷新一次输出。
使用watch命令每隔X秒运行一个命令
您可以更改watch命令的更新间隔。这意味着您可以告诉watch命令在重复命令之前等待X秒。要更改更新间隔,请使用-n选项,后面跟随以秒为单位的时间间隔。
突出显示更新之间的变化
watch命令会在每次刷新时覆盖其输出。使用-d选项,您还可以突出显示先前输出和更新后输出之间的变化。
隐藏watch命令输出中的标题
默认情况下,watch命令在每个输出的顶部显示一个标题,其中包含更新间隔、命令名称以及系统的当前日期和时间。您可以使用-t选项从输出中删除标题:
在错误时播放蜂鸣声
当Linux进程完成运行时,它会返回一个退出代码。按照惯例,成功时该值为0,非零表示错误。watch命令的-b选项会在命令返回非零退出代码时播放蜂鸣声。
假设您想要监视sshd.service,并在服务停止时收到通知,您可以使用:
watch -b sudo systemctl status sshd.service
该命令将在服务停止时发出蜂鸣声。当服务恢复运行时,蜂鸣声将停止。要使用此功能,您必须在系统上安装了beep软件包。
在输出更改时退出watch命令
您还可以告诉watch命令在命令的输出更改时停止运行并退出。您可以使用-g选项来实现这一点。在等待输出中的某些变化时,此选项非常有用。
一旦输出发生变化,watch命令将停止。您可以将此用法与echo命令结合使用,以在屏幕上显示消息。
例如,考虑一个场景,您正在等待一个文件出现在您的目录中。以下命令将监视指定文件的目录。一旦出现,watch命令将停止运行,并且终端上将显示消息"file arrived"。
watch -g "ls -l | grep filename" && echo "file arrived"
另一个有用的示例是在特定用户登录到系统时进行通知:
watch -g "who | grep username" && echo "username logged in"
此命令将监视who命令的输出,该命令列出已登录的用户。一旦用户登录,watch命令将停止并在终端上显示消息。
类似地,您可以告诉watch命令在文件中进行更改时停止服务。请注意,在使用一系列命令的管道链时,您需要将整个命令括在引号内。
监视Linux系统中的活动
如果您发现自己反复执行相同的流程,请考虑使用watch命令来自动化它。这可以使您免于频繁键入命令以查看发生了什么变化。
您还可以将watch命令与其他Linux命令一起使用,以监视系统资源和活动,并跟踪文件或目录中的更改。