python监控文件变化-----pyinotify

概述

Pyinotify可以用来监测文件系统的变化, 它依赖于Linux内核的功能—inotify(内核2.6.13合并)。 inotify的是一个事件驱动的通知器,其通知接口通过三个系统调用从内核空间到用户空间。

inotify有以下特点

  1. 通知配置文件的改变
  2. 跟踪某些关键的系统文件的变化
  3. 监控某个分区磁盘的整体使用情况
  4. 系统崩溃时进行自动清理
  5. 自动触发备份进程
  6. 向服务器上传文件结束时发出通知

安装

# 方式一 
pip install pyinotify

# 方式二

git clone https://github.com/seb-m/pyinotify.git
cd pyinotify/
python setup.py install


事件说明

 --IN_ACCESS,即文件被访问 
--IN_MODIFY,文件被write 
--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) 

代码实现

import pyinotify


class MyEventHandler(pyinotify.ProcessEvent):

    def process_IN_ACCESS(self, event):
        """
        文件被访问
        :param event:
       :return:
        """
        print("件被访问:  ", event.pathname)

    def process_IN_ATTRIB(self, event):
        """
        文件属性被修改,如chmod、chown、touch等
        :param event:
        :return:
        """
        print("文件属性被修改:", event.pathname)

    def process_IN_CLOSE_NOWRITE(self, event):
        """
        不可写文件被close
        :param event:
        :return:
        """
        print("不可写文件被close event:", event.pathname)


    def process_IN_CLOSE_WRITE(self, event):
        """
        可写文件被close
        :param event:
        :return: rsync -av /etc/passwd  192.168.204.168:/tmp/passwd.txt
        """
        print("可写文件被close:", event.pathname)


    def process_IN_CREATE(self, event):
        """
        创建新文件
        :param event:
        :return:
        """
        print("创建新文件:", event.pathname)


    def process_IN_DELETE(self, event):
        """
        文件被删除
        :param event:
        :return:
        """
        print("文件被删除:", event.pathname)


    def process_IN_MODIFY(self, event):
        """
        文件被修改
        :param event:
        :return:
        """
        print("文件被修改:", event.pathname)


    def process_IN_OPEN(self, event):
        """
         文件被打开
        :param event:
        :return:
        """
        print("OPEN event:", event.pathname)

if __name__ == '__main__':
    monitor_obj = pyinotify.WatchManager()
    # path监控的目录
    monitor_obj.add_watch(path, pyinotify.ALL_EVENTS, rec=True)
    
    # event handler
    event_handler= MyEventHandler()

    # notifier
    monitor_loop= pyinotify.Notifier(monitor_obj, event_handler)
    monitor_loop.loop()

 

 

学习链接

pyinotify----Github

Shell 监控文件变化

pyinotify源码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子林_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值