3

我正在使用如下代码来监控整个文件系统:

fanotify_mark(fd,
          FAN_MARK_ADD | FAN_MARK_MOUNT,
          FAN_OPEN | FAN_EVENT_ON_CHILD,
          AT_FDCWD, "/"
)

但是我需要编写一些测试,所以,我只想监控一个特定的目录,比如说“/tmp/test_dir”。问题是当我以这种方式更改代码时:

fanotify_mark(fd,
          FAN_MARK_ADD,
          FAN_OPEN | FAN_EVENT_ON_CHILD,
          AT_FDCWD, "/tmp/test_dir"
)

fanotify 只监视“/tmp/test_dir”上的事件,而忽略更深的文件夹中发生的任何事情。

例如:如果我打开“/tmp/test_dir/aa/bb/cc/test_file.txt” fanotify 什么也没检测到。

我错过了一些标志?

4

2 回答 2

5

问题解决了。

fanotify 不是递归的。它仅在处理已挂载的目录时才有效。我做了以下测试:

mkdir /tmp/parent
mkdir -p /tmp/other/aa/bb/cc/dd
touch /tmp/other/aa/bb/cc/dd/test.txt
mount --bind /tmp/other /tmp/parent

然后在代码中:

fanotify_mark(fd,
      FAN_MARK_ADD | FAN_MARK_MOUNT,
      FAN_OPEN | FAN_EVENT_ON_CHILD,
      AT_FDCWD, "/tmp/parent"
)

它完成了。现在 fanotify 启动 test.txt 文件的事件。

于 2013-10-23T13:29:31.170 回答
1

使用 fanotify,可以监控指定路径的整个挂载点(使用 FAN_MARK_MOUNT),或者监控目录(不是其子目录,不指定 FAN_MARK_MOUNT)中的文件。您可以为子目录设置单独的监视器来实现此目的。见https://stackoverflow.com/a/20965660/2706918

于 2014-01-07T13:46:53.093 回答