我想在文件在系统中移动时对其进行监视。iNotify 可以在移动时告诉我它的新位置吗?
3 回答
如果您同时查看文件移动的目录和文件移动到的目录,那么您将IN_MOVED_FROM
在源目录和IN_MOVED_TO
目标目录上收到一个事件,两者都具有相同的cookie
. 然后,您可以使用这name
两个事件的字段来找出文件移入和移出的位置。
如果你只看源目录,或者只看目标目录,那么你只会得到其中一个事件,所以你只会得到一半的信息。这是 inotify 的一个限制。
您可以在移动之前获取文件的文件描述符并在以下位置读取符号链接:
'/proc/self/fd/' + $fd
其中 $fd 是您的文件描述符,此文件描述符将指向您的文件。注意我只在 ext4 上测试过,它适用于 LVM2,但不适用于 OverlayFS。此外,打开文件描述符将阻止为文件触发删除事件。
linux内核版本之间也可能存在问题
根据@slightly_toasted那里的回答,您可以使用sudo auditctl -a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE
.
DONT_MOVE
键/标签用于标识您将要监控的文件/文件夹。
您可以为要观看的不同文件/文件夹创建不同的标签。
要确保存储这些规则,请将相同的命令(除了auditctl
)附加-a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE
到/etc/audit/audit.rules
文件中。
为此,您可以使用:(sudo echo "-a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE" >> /etc/audit/audit.rules
它说权限被拒绝,因此需要修复)
然后
文件/文件夹丢失,您想知道它的新路径吗?使用ausearch -k DONT_MOVE
(DONT_MOVE
或您为要监控的每个文件/文件夹单独选择的任何其他标签)