inotifywait 手册页上的“未明确被监听”是什么意思?

inotifywait 手册页上的“未明确被监听”是什么意思?

男人inotify等待:

delete_self 监视的文件或目录已被删除。在此事件之后,将不再监视文件或目录。请注意,即使没有显式侦听此事件,也可能会发生该事件。

unmount 被监视的文件或目录所在的文件系统已被卸载。在此事件之后,将不再监视文件或目录。请注意,即使没有显式侦听此事件,也可能会发生该事件。

如何理解该手册页上“即使没有明确监听该事件也可能发生”的含义?

https://manpages.debian.org/stretch/inotify-tools/inotifywait.1.en.html

答案1

当您要求 inotifywait 等待事件(即不在--monitor模式中),并且指定一种或多种事件类型(使用选项--event)时,它通常不会退出,直到该特定事件发生。例如:

$ touch foo
                                    $ inotifywait -e access foo
                                    Setting up watches.
                                    Watches established.
$ echo >>foo

$ cat foo
                                    foo ACCESS 
$                                   $ echo $?
                                    0
                                    $

(两列代表单独的终端,插入空行以使事件按时间顺序显示。)这里,建立监视后foo,有一个 MODIFY 事件,但由于 on 的事件过滤器inotifywait不包括 MODIFY,什么都没发生。该inotifywait命令仅在 ACCESS 事件发生后返回。

现在假设该文件在监视访问时被删除。

                                    $ inotifywait -e access foo
                                    Setting up watches.
                                    Watches established.
$ rm foo
$                                   $ echo $?
                                    1
                                    $

删除 foo 会触发 DELETE_SELF 事件。该inotifywait命令看到此事件。它不会打印它,因为它被告知只报告 ACCESS 事件。但inotifywait退出:它确实对事件进行了计数,即使它不在过滤器中。该命令以状态 1 退出,表示“发生了未侦听的事件”(并且不像大多数未监视事件那样被忽略)。

答案2

这意味着即使您使用了该-e选项但未指定它们,您也可以获得这些事件。例如,如果您使用

inotifywait -e modify filename

并且文件被删除,您将收到一个delete_self事件,即使您只请求modify事件。

这意味着您需要检查输出中的事件类型,即使您只请求了特定事件。

相关内容