温馨提示×

如何使用inotify实现文件系统监控

小樊
39
2025-12-10 12:27:49
栏目: 编程语言

inotify 是 Linux 内核提供的一种文件系统事件监控机制,可以用来监控文件或目录的变化,如创建、删除、修改等。以下是使用 inotify 实现文件系统监控的基本步骤:

1. 安装必要的库

在大多数 Linux 发行版中,inotify 工具和相关库已经预装。如果没有,可以使用包管理器安装:

sudo apt-get install inotify-tools  # Debian/Ubuntu
sudo yum install inotify-tools      # CentOS/RHEL

2. 编写监控脚本

以下是一个简单的 Python 脚本示例,使用 inotify 监控指定目录的变化:

import os
import inotify.adapters

def main():
    # 监控的目录
    path_to_watch = '/path/to/watch'

    # 创建 inotify 适配器
    i = inotify.adapters.Inotify()

    # 添加监控路径
    i.add_watch(path_to_watch)

    try:
        for event in i.event_gen(yield_nones=False):
            (_, type_names, path, filename) = event

            print(f'PATH=[{path}] FILENAME=[{filename}] EVENT_TYPES={type_names}')

            if 'IN_CREATE' in type_names:
                print(f'File {filename} created in {path}')
            if 'IN_DELETE' in type_names:
                print(f'File {filename} deleted from {path}')
            if 'IN_MODIFY' in type_names:
                print(f'File {filename} modified in {path}')
            if 'IN_CLOSE_WRITE' in type_names:
                print(f'File {filename} closed after writing in {path}')
    except KeyboardInterrupt:
        pass

if __name__ == '__main__':
    main()

3. 运行脚本

将上述脚本保存为 inotify_monitor.py,然后在终端中运行:

python inotify_monitor.py

4. 解释脚本

  • inotify.adapters.Inotify() 创建一个 inotify 适配器实例。
  • add_watch(path) 方法添加要监控的路径。
  • event_gen(yield_nones=False) 方法生成事件流,每次有文件系统事件发生时,都会生成一个事件元组。
  • 事件元组包含四个元素:事件类型、事件名称列表、文件路径和文件名。

5. 处理事件

在脚本中,可以根据不同的事件类型执行相应的操作。例如,当检测到文件创建事件时,可以记录日志或触发其他操作。

6. 注意事项

  • inotify 有监控数量的限制,可以通过调整内核参数来增加监控数量。
  • 监控大量文件或目录时,可能会消耗较多的系统资源,需要合理设计监控策略。

通过以上步骤,你可以使用 inotify 实现对文件系统的实时监控。

0