Linux Tools --- inotify-tools
一、概念
1. 环境
(1) Rocky Linux 9.1
(2) inotify-tools 3.22.1.0
2. 概念
inotify用于监控文件或目录的改变,当文件或目录发生改变时inotify将触发通知。
3. 承上启下
二、安装与命令
1. 安装
(1) 安装epel库
sudo dnf install -y epel-release
sudo dnf update -y
(2) 安装inotify
sudo dnf install inotify-tools -y
2. inotifywait
inotifywait使用inotify接口有效的等待文件的改变。
(1) 格式
inotifywait [-hcmrq] [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ] <file>
-h: 输出帮助信息;
-c: 以CSV格式(逗号分割)的方式进行信息输出;
-m: 进行持续监控而不退出,默认情况下当inotifywait收到一个事件之后会退出;
-r: 递归的监控所有子目录。注意inotifywait会针对每一个子目录创建一个监视器,默认情况下它最大的限制是8192个监视器;
-q: 安静模式,如果该参数被指定一次,则输出信息会减少;如果该参数被指定两次,程序仅会输出严重错误信息;
-e: 指定需要监控的事件,inotifywait支持以下事件:
access: 被监视的文件或被监视的目录中的文件被读取;
modify: 被监视的文件或被监视的目录中的文件被修改;
attrib: 被监视的文件或被监视的目录中的文件的metadata被修改。包含:timestamp,file permission,扩展的属性等;
close_write: 被监视的文件或被监视的目录中的文件从打开写入模式变为关闭时的事件;
close_nowrite: 被监视的文件或被监视的目录中的文件从打开只读模式变为关闭的事件;
close: 被监视的文件或被监视的目录中的文件从打开模式(无论是可写入状态还是只读模式)变为关闭时的事件;
open: 被监视的文件或被监视的目录中的文件被打开时的事件;
moved_to: 把一个文件或者目录移动到被监视的目录中时的事件,当文件在被监视的目录中移动时也会触发该事件;
moved_from: 把一个存在于被监视的目录中的文件或者目录移动时的事件,当文件在被监视的目录中移动时也会触发该事件;
move: 该事件是moved_to和moved_from两个事件的上层调用;
move_self: 被监视的文件或被监视的目录中的文件被移动的事件,当该事件被触发后,该文件或目录将不会再被监视;
create: 在被监视的目录中有文件或目录被创建时触发的事件;
delete: 在被监视的目录中有文件或目录被删除时触发的事件;
delete_self: 在被监视的目录中有文件或目录被删除时触发的事件,当该事件被触发后,该文件或目录将不会再被监视;
unmount: 当被监视的文件或目录所在的文件系统被卸载时所触发的事件,当该事件被触发后,该文件或目录将不会再被监视。
(2) 应用
a. 监视目录/tmp
inotifywait -m /tmp
当/tmp有文件变动时:
touch /tmp/hello cp /etc/passwd /tmp rm /tmp/passwd touch /tmp/goodbye rm /tmp/hello /tmp/goodbye
inotifywait会打印提示:
b. 监视目录及其子目录的create, delete, modify事件:
inotifywait -r -e modify,create,delete /home/userDir/Documents
c. inotifywait的事件回调参数
watched_filename: 如果监控的是文件,则这里是文件路径。如果监控的是目录,则这里是目录的全称,末尾会携带反斜杠;
EVENT_NAMES: 触发事件的名称,多个事件使用逗号分割;
event_filename: 该参数仅在监控对象是目录时出现,它是被监控目录下发生变动的文件名称。
三、参考
1. 命令
https://linux.die.net/man/7/inotify
https://linux.die.net/man/1/inotifywait
2. 其他
https://linuxhint.com/inotofy-rsync-bash-live-backups/
https://bartsimons.me/sync-folders-and-files-on-linux-with-rsync-and-inotify/
https://www.linuxjournal.com/content/linux-filesystem-events-inotify