在Linux系统文件监控中,inotify机制可以说最常用的解决方案之一,能够高效捕捉文件系统变化,尤其是删除操作。那么,如何利用inotify检测文件删除?关键在于掌握两个核心事件:IN_DELETE(文件被删除)和IN_DELETE_SELF(监控对象自身被删除)。

下面通过一个具体的Python示例,使用inotify-simple库来演示,代码简洁直观。
首先,请确保已安装inotify-simple库,若未安装,可通过pip快速安装:
pip install inotify
然后,创建一个Python脚本(例如inotify_example.py),并粘贴以下代码:
import os
import sys
from inotify_simple import INotify, flags
def main():
# 指定要监控的目录
path_to_watch = "/path/to/your/directory"
# 创建 INotify 实例
inotify = INotify()
# 设置监控的事件类型:创建、删除、自身删除、移动
watch_flags = flags.CREATE | flags.DELETE | flags.DELETE_SELF | flags.MOVED_FROM
wd = inotify.add_watch(path_to_watch, watch_flags)
try:
while True:
# 循环读取事件
for event in inotify.read():
if event.mask & flags.DELETE_SELF:
print(f"文件 {event.name} 被删除")
elif event.mask & flags.DELETE:
print(f"文件 {event.name} 被删除(其他进程)")
except KeyboardInterrupt:
# 退出时移除监控
inotify.rm_watch(wd)
sys.exit(0)
if __name__ == "__main__":
main()
请将/path/to/your/directory替换为实际要监控的目录路径。运行脚本后,一旦有文件被删除,终端会立即输出提示信息。其中,IN_DELETE_SELF事件表示被监控对象自身被删除,而IN_DELETE事件则用于捕获目录内文件的删除动作。
需要特别说明的是,本示例采用了inotify-simple库,它是对inotify的轻量级封装,易于上手。当然,你也可以选择pyinotify或inotify-cpp等替代库,但核心原理与用法基本一致。掌握IN_DELETE和IN_DELETE_SELF这两个事件,以及如何通过add_watch注册它们,即可灵活运用inotify检测文件删除操作。
