在日常使用中,我们有时需要重复执行某些命令或程序,以便持续监控系统的状态,例如正在运行的进程、硬盘空间的使用情况或是用户的登录信息。Linux 的 watch
命令就可以帮助我们自动化完成这些任务,而无需手动反复输入命令。
通过 watch
命令,我们可以实时监视系统的各种活动,例如用户的登录、网络状态、内存和 CPU 的使用情况以及磁盘空间等。接下来,让我们深入了解一下如何在 Linux 系统中使用 watch
命令。
什么是 watch
命令?
watch
命令是一个 Linux 实用工具,它可以按照指定的时间间隔重复执行一个命令或程序,并在终端中显示其输出结果。这使得我们可以实时观察输出的变化。每次执行后,watch
命令都会刷新输出,覆盖之前的显示内容。默认情况下,watch
命令每两秒重复执行一次,并且会一直运行,直到我们使用 Ctrl + C
手动停止它。
watch
命令的语法
watch
命令的基本语法如下:
watch [选项] <命令>
watch
命令提供了多种命令行选项。如果不带任何选项运行 watch
命令,它将默认每两秒执行一次指定的命令。例如,以下命令将会显示 ls
命令的输出:
watch ls -l ~/
如果我们在目录中创建、删除文件或者更改文件大小,输出结果将实时显示目录列表的变化,并且每两秒刷新一次。
使用 watch
命令每 X 秒运行一次命令
我们可以自定义 watch
命令的更新间隔。也就是说,我们可以设置 watch
命令在两次执行命令之间等待的时间(以秒为单位)。要更改更新间隔,可以使用 -n
选项,后跟需要的时间间隔(以秒为单位)。
watch -n <间隔时间(秒)> <命令>
例如,如果要每 5 秒运行一次命令,可以执行以下命令:
watch -n 5 <命令>
突出显示更新之间的变化
watch
命令默认会每次刷新时覆盖输出。但是,使用 -d
选项,我们可以高亮显示上一次输出和当前输出之间的差异。
watch -d <命令>
隐藏 watch
命令输出中的标题
默认情况下,watch
命令会在每次输出的顶部显示一个标题,其中包含了更新间隔、命令名称以及系统的当前日期和时间。我们可以使用 -t
选项来隐藏标题:
watch -t <命令>
出错时发出蜂鸣声
当 Linux 进程完成运行时,它会返回一个退出代码。按照惯例,返回值为 0 表示成功,非零值表示错误。如果 watch
命令执行的命令返回非零退出代码,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
命令的输出,who
命令会列出当前已登录的用户。当用户登录后,watch
命令将会停止运行,并在终端上显示一条消息。
类似地,当文件发生特定变化时,我们也可以指示 watch
命令停止运行。请注意,在使用管道命令链时,我们需要将整个命令用引号括起来。
监视 Linux 系统中的活动
如果我们发现自己需要重复执行相同的操作,可以考虑使用 watch
命令来自动化这些操作。这样我们就无需频繁地输入命令来查看更新的内容。
我们还可以将 watch
命令与其他 Linux 命令结合使用,以监视系统资源和活动,并跟踪文件或目录的更改。