【问题标题】:Can iNotify tell me where a monitored file is moved?iNotify 可以告诉我受监控文件的移动位置吗?
【发布时间】:2011-02-15 07:24:51
【问题描述】:

我想在文件在系统中移动时对其进行监控。 iNotify 可以在移动时告诉我它的新位置吗?

【问题讨论】:

    标签: linux inotify


    【解决方案1】:

    如果您同时查看文件从中移动的目录和文件移动到的目录,那么您将在源目录上收到 IN_MOVED_FROM 事件,在目标目录上收到 IN_MOVED_TO 事件,两者都具有相同的cookie。然后,您可以使用这两个事件的 name 字段来找出文件移入和移出的位置。

    如果你只看源目录,或者只看目标目录,那么你只会得到其中一个事件,所以你只会得到一半的信息。这是 inotify 的一个限制。

    【讨论】:

    • 用“IN_MOVE_SELF”监控文件怎么样?我不知道文件将被移动到哪里,所以我需要知道移动时的新文件路径。
    • 不,就像我说的那样,除非您正在观看它移动到的目录,否则您不会获得有关移动目标的任何信息。
    【解决方案2】:

    您可以在移动之前获取文件的文件描述符并在以下位置读取符号链接:

    '/proc/self/fd/' + $fd
    

    $fd 是你的文件描述符,这个文件描述符将指向你的文件。注意我只在 ext4 上测试过,它适用于 LVM2,但不适用于 OverlayFS。打开文件描述符也会阻止为文件触发删除事件。

    linux内核版本之间也可能存在问题

    【讨论】:

    【解决方案3】:

    根据@slightly_toasted 的回答there,可以使用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_MOVEDONT_MOVE 或您为要监控的每个文件/文件夹单独选择的任何其他标签)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2015-12-05
      • 2015-04-15
      • 2011-12-14
      • 2020-12-31
      相关资源
      最近更新 更多