• inotifywait的安装及基本使用


    一、inotifywait介绍

         Inotify 一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。

         inotify-tools 是一个C库和一组命令行的工作,提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:

        inotifywait命令 可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
        inotifywatch命令 用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

    二、安装

    apt-get install inotify-tools

    三、参数说明

    inotifywait使用
    
    语法:inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]
    -m:一直监控指定的目录,接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
    @:排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
    -o, –outfile :输出事情到一个文件而不是标准输出。
    -s, –syslog:输出错误信息到系统日志
    -d, –daemon:跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
    –exclude :正则匹配需要排除的文件,大小写敏感。
    –excludei :正则匹配需要排除的文件,忽略大小写。
    -t , –timeout :设置超时时间,如果为0,则无限期地执行下去。
    -r:递归监控所监控目录的子目录。
    -q:指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
    –timefmt:指定时间格式。
    –format:
    %w 表示发生事件的目录
    %f 表示发生事件的文件
    %e 表示发生的事件
    %Xe 事件以“X”分隔
    %T 使用由–timefmt定义的时间格式
    -e:指定监控事件项
    
        open   打开文件
        access 访问文件
        modify 修改文件
        delete 删除文件
        create 新建文件
        attrib 属性变更
     
    --exclude <pattern> 指定要排除监控的文件/目录

    例子1:命令监听log.txt文件

    $ inotifywait -m log.txt
    # 这里 -m 参数指明持续监听,不加的话会在一个事件后退出
    
    Setting up watches.
    Watches established.
    # 此时持续监听,有事件出发会输出到屏幕
    

     例子2:指定监听事件

    inotifywait -m -e create,delete,close_write log.txt

     例子3:inotifywait和rsync结合

    #!/bin/bash
    
    source=/home/kms/Desktop/inotifywait_shell/source/
    target=/home/kms/Desktop/inotifywait_shell/target/
    
    log_path=/home/kms/Desktop/inotifywait_shell/inotifywait.log
    
    inotifywait -mrq ${source} --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' -e create,modify,attrib,move,delete,close_write | while read files;
    do
        echo "$files" >> ${log_path}
        INO_EVENT=$(echo $files | awk '{print $5}')
        # 增改查类型
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] || [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
            rsync -avzc ${source} ${target}
        fi
        # 删除&移出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
            rsync -avz --delete ${source} ${target}
        fi
    done

    备注:

    利用 inotifywait 对文件系统事件实时监控, 触发事件调用 rsync 同步指定目录 (缺点: 每次触发都要扫描整个目录进行文件差异对比, 文件越多越耗时长)

    其他参考

    https://www.cnblogs.com/clsn/p/8022625.html

  • 相关阅读:
    设计克制
    高性能动画的
    点选日历控件
    adobe工具软件应用
    Visual Studio 2022 性能增强:更快的 C++、优化 Git 分支切换
    省市县的字典表
    Hype 4.0(Mac系统)的布局功能
    RN相关的文章超过100篇高质量文章
    前端格局
    移动端关于平方字体的适配
  • 原文地址:https://www.cnblogs.com/libra13179/p/15930481.html
Copyright © 2020-2023  润新知