inotify 是 Linux 内核提供的一种文件系统事件监控机制,可以用来监控文件或目录的变化,如创建、删除、修改等。以下是使用 inotify 实现文件系统监控的基本步骤:
在大多数 Linux 发行版中,inotify 工具和相关库已经预装。如果没有,可以使用包管理器安装:
sudo apt-get install inotify-tools # Debian/Ubuntu
sudo yum install inotify-tools # CentOS/RHEL
以下是一个简单的 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()
将上述脚本保存为 inotify_monitor.py,然后在终端中运行:
python inotify_monitor.py
inotify.adapters.Inotify() 创建一个 inotify 适配器实例。add_watch(path) 方法添加要监控的路径。event_gen(yield_nones=False) 方法生成事件流,每次有文件系统事件发生时,都会生成一个事件元组。在脚本中,可以根据不同的事件类型执行相应的操作。例如,当检测到文件创建事件时,可以记录日志或触发其他操作。
inotify 有监控数量的限制,可以通过调整内核参数来增加监控数量。通过以上步骤,你可以使用 inotify 实现对文件系统的实时监控。