Fswatch属于跨平台的文件更改监视器,出现指定文件被更改时它会受到警报。在不同曹组系统上执行四种类型的监视器。如基于apple OS X文件系统事件API构建的监视器,基于kqueue监视器,FreeBSD 4.1中存在的通知接口也得到许多*BSD系统含OSX支持。基于Solaris内核的文件事件通知API及衍生产品的监视器。基于inotify的监视器,inotify是一款内核子系统,能显示应用程序文件系统修改。基于ReadDirectoryChangesW 监视器,ReadDirectoryChangesW 是一种记录目录更改的Windows API。监视其会定期检查文件系统状态,在内存中保存文件修改时间并手动确定文件系统的变化。
Fswatch还支持多种操作系统指定API,可递归目录监控,用包含和排除正则表达式执行路径过滤,支持自定义记录格式,支持空闲事件。
在Linux系统中安装fswatch:
sudo apt install fswatch [在Debian、Ubuntu 和 Mint上]
sudo yum install fswatch [在RHEL/CentOS/Fedora和Rocky/AlmaLinux上]
sudo emerge -a sys-apps/fswatch [在Gentoo Linux上]
sudo apk add fswatch [在Alpine Linux上]
sudo pacman -S fswatch [在Arch Linux上]
sudo zypper install fswatch [在OpenSUSE上]
sudo pkg install fswatch [在 FreeBSD 上]
如果无法默认从系统存储库安装,可以使用源代码进行构建。使用git命令克隆最新的fswatch git存储库按照以下方式进行安装:
git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh
./configure
make
sudo make install
如果以上方式还是不适合,需要在对应Linux版本中使用以下命令安装:
sudo dnf group install 'Development Tools' [在RHEL/CentOS/Fedora和Rocky/AlmaLinux上]
sudo apt-get install build-essential [在Debian、Ubuntu 和 Mint上]
在Debian/Ubuntu发行版上,执行fswatch命令时可能会出现以下错误。
fswatch:加载共享库时出错:libfswatch.so.13:无法打开共享对象文件:没有此文件或目录
要修复此问题,您需要执行以下命令,这将有助于刷新动态库的链接和缓存,然后您才能开始使用 fswatch。
sudo ldconfig
fswatch 监视 Linux 上的文件更改:
fswatch [选项] [路径]
在Linux上,建议您使用默认的inotify监视器,您可以使用-M或- list-monitors选项列出可用的监视器:
fswatch -M
fswatch --列表监视器
每4/home/tecmint秒将事件传送到标准输出。l或latency允许以秒为单位设置延迟,默认为1秒。用来观察当前目录的变化。
fswatch -l 4 .
下一个命令每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