Pyinotify依赖于Linux内核的功能—inotify(内核2.6.13合并)。是一个事件驱动的通知器,其通知接口通过三个系统调用,从内核空间到用户空间 pyinotify结合这些系统调用,并提供一个顶级的抽象和一个通用的方式来处理这些功能。
我们使用pyinotify 实现对文件修改的监控,防止我们的文件在我们不知情的情况下被修改破坏。当然这个例子除了基本的代码编写,我们也提供了代码优化的几个思路,希望可以给大家带来帮助。
import pyinotify
wm = pyinotify.WatchManager()
class MyEventHandler(pyinotify.ProcessEvent): #继承父类
def process_IN_DELETE(self,event): #只可以检测本地系统里的操作
pathname=event.pathname #文件路径和名称
path=event.path #路径
name =event.name #文件名称
print("删除文件!",event.name)
def process_IN_MODIFY(self,event):
print("修改文件!",event.name)
handler = MyEventHandler()
notifier = pyinotify.Notifier(wm,handler)
mask = pyinotify.IN_DELETE | pyinotify.IN_MODIFY #条件规则
wm.add_watch("/tmp",mask)
#wm.add_watch("/opt/lampp",mask) #同时监控多个目录
notifier.loop()
注释:执行该脚本时候,当tmp目录下有文件被删除,或者是被修改的时候,就会直接弹出提示
IN_ACCESS 文件访问
IN_MODIFY 文件被写入
IN_ATTRIB,文件属性被修改,如chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被close
IN_CLOSE_NOWRITE,不可写文件被close
IN_OPEN,文件被open
IN_MOVED_FROM,文件被移走,如mv
IN_MOVED_TO,文件被移来,如mv、cp (可以用来检测应用类的文件上传)
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)