监控 Linux 中的文件和目录更改

fswatch 是一个跨平台的文件更改监视器,当指定文件或目录的内容被更改或修改时,它会收到通知警报。

它在不同的操作系统上执行四种类型的监视器,例如:

  • 基于 Apple OS X 的文件系统事件 API 构建的监视器。
  • 基于 kqueue 的监视器(FreeBSD 4.1 中存在的通知接口)也支持许多 *BSD 系统(包括 OS X)。
  • 基于 Solaris 内核的文件事件通知 API 及其衍生产品的监视器。
  • 基于 inotify 的监视器,inotify 是一个内核子系统,可显示应用程序的文件系统修改。
  • 基于 ReadDirectoryChangesW 的监视器,这是一种记录目录更改的 Windows API。
  • 定期检查文件系统状态的监视器,将文件修改时间保存在内存中并手动确定文件系统更改(可以在任何可以使用 stat 的地方工作)。

fswatch的特点

  • 支持多种特定于操作系统的 API
  • 允许递归目录监控
  • 使用包含和排除正则表达式执行路径过滤
  • 支持自定义记录格式
  • 此外,它还支持周期性空闲事件

如何在 Linux 系统中安装 fswatch

要在 Linux 上安装 fswatch,请使用以下适合您的特定 Linux 发行版的命令。

sudo apt install fswatch [On Debian, Ubuntu and Mint]
sudo yum install fswatch [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/fswatch [On Gentoo Linux]
sudo apk add fswatch [On Alpine Linux]
sudo pacman -S fswatch [On Arch Linux]
sudo zypper install fswatch [On OpenSUSE]
sudo pkg install fswatch [On FreeBSD]

如果 fswatch 无法从默认系统存储库安装,您可以从源构建,如以下安装说明所示。

首先,使用以下 git 命令克隆最新的 fswatch git 存储库并安装它,如下所示:

git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh
./configure
make
sudo make install

重要提示:在从源代码编译 fswatch 之前,请确保系统上安装了 GNU GCC(C 和 C++ 编译器)和开发工具(在 Debian/Ubuntu 上是必需的)。

如果没有,请在各自的 Linux 发行版上使用以下命令安装它。

sudo dnf group install 'Development Tools' [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt-get install build-essential [On Debian, Ubuntu and Mint]

在 Debian/Ubuntu 发行版上,执行 fswatch 命令时可能会出现以下错误。

fswatch: error while loading shared libraries: libfswatch.so.13: cannot open shared object file: No such file or directory

要修复此问题,您需要执行以下命令,这将有助于刷新动态库的链接和缓存,然后才能开始使用 fswatch。

sudo ldconfig

如何使用 fswatch 监控 Linux 上的文件更改

运行 fswatch 的一般语法是:

fswatch [option] [path]

在 Linux 上,建议您使用默认的 inotify 监视器,您可以通过使用 -M 或者 - list-monitors 选项:

fswatch -M
fswatch --list-monitors

fswatch - 列出监视器fswatch – 列表监视器

下面的命令使您可以查看当前目录中的更改(/home/tecmint),事件每 4 秒传送到标准输出。

-l 或者 –-latency 选项允许您设置延迟(以秒为单位),默认值为 1 秒。

fswatch -l 4 .

fswatch - 监视主目录更改

下一个命令每 5 秒监视 /var/log/auth.log 文件的更改:

fswatch -l 5 /var/log/auth.log

使用 -t 或者 --timestamp 选项打印每个事件的时间戳,要以 UTC 格式打印时间,请使用 -u 或者 --utf-time 选项。 您还可以使用格式化时间 -f 或者 --format-time 格式选项:

fswatch --timestamp /var/log/auth.log

下一个, -x 或者 --event-flags 告诉 fswatch 在事件路径旁边打印事件标志。 您可以使用 –event-field-seperator 选项来使用特定分隔符打印事件。

fswatch --events-flags ~ /var/log/auth.log

要打印指示主目录和 /var/log/auth.log 文件中更改的事件的数值,请使用 -n 或者 --numeric 选项如下:

fswatch --numeric ~ /var/log/auth.log

也许您可以查看 fswatch 手册页以获取详细的使用选项和信息:

man fswatch

有关更多信息和使用方法,请访问 fswatch Github 存储库:https://github.com/emcrisostomo/fswatch

在这篇文章中,我们介绍了一个简单的命令行实用程序,可以帮助 Linux 用户在指定文件或目录层次结构的内容被修改时收到通知。

我希望安装一切顺利,如果您的情况并非如此,请通过下面的反馈表与我们联系。 此外,如果您以前使用过它,您可能想向我们提供一些关于您使用 fswatch 的体验的想法。

资讯来源:由0x资讯编译自TECMINT。版权归作者Aaron Kili所有,未经许可,不得转载

资讯来源:由a0资讯编译自THECOINREPUBLIC。版权归作者A0资讯所有,未经许可,不得转载

上一篇 2024年 5月 31日
下一篇 2024年 5月 31日

相关推荐