• CentOS 6.9上inotify-tools 安装及使用方法


    文章目录

    [隐藏]

    Linux内核从2.6.13开始,引入了inotify机制。通过intofity机制,能够对文件系统的变化进行监控,如对文件进行创建、删除、修改等操作,可以及时通知应用程序进行相关事件的处理。这种响应处理机制,避免了频繁的文件轮询任务,提高了任务的处理效率。

    一、检查系统内核版本

    [root@localhost tan]# uname -r
    2.6.32-696.el6.x86_64
    

    二、检查系统是否支持inotify

    [root@localhost tan]# ls -lsart /proc/sys/fs/inotify  
    total 0
    0 dr-xr-xr-x 0 root root 0 Jan 17 08:47 ..
    0 dr-xr-xr-x 0 root root 0 Jan 17 08:53 .
    0 -rw-r--r-- 1 root root 0 Jan 19 13:33 max_user_watches
    0 -rw-r--r-- 1 root root 0 Jan 19 13:33 max_queued_events
    0 -rw-r--r-- 1 root root 0 Jan 19 13:40 max_user_instances
    [root@localhost tan]#
    

    如果出现上面结果说明系统支持inotify。

    三、下载安装(下载有点慢)

    [root@localhost tan]#wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  
    
    [root@localhost tan]# tar -zvxf inotify-tools-3.14.tar.gz  
    [root@localhost tan]# cd inotify-tools-3.14  
    
    [root@localhost inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify  
    [root@localhost inotify-tools-3.14]# make  
    [root@localhost inotify-tools-3.14]# make install
    

    四、查看inotify默认参数

    [root@localhost bin]# sysctl -a | grep max_queued_events  
    fs.inotify.max_queued_events = 16384  
    
    [root@localhost bin]# sysctl -a | grep max_user_watches  
    fs.inotify.max_user_watches = 8192  
    fs.epoll.max_user_watches = 798863  
    
    [root@localhost bin]# sysctl -a | grep max_user_instances  
    fs.inotify.max_user_instances = 128
    

    五、修改inotify参数

    1、命令修改

    [root@localhost bin]# sysctl -w fs.inotify.max_user_instances=130  
    fs.inotify.max_user_instances = 130
    

    2、文件修改

    [root@localhost]# vi /etc/sysctl.conf  
    #添加如下代码  
    fs.inotify.max_user_instances=130
    

    3、参数说明

    • max_user_instances:每个用户创建inotify实例最大值
    • max_queued_events:inotify队列最大长度,如果值太小,会出现错误,导致监控文件不准确
    • max_user_watches:要知道同步的文件包含的目录数,可以用:
      [root@localhost]# find /home/rain -type d|wc -l 统计,必须保证参数值大于统计结果(/home/tan/uploadFile/为同步文件目录)。

    六、创建实时监控脚本 (file 里面放的需要监听的目录)

    [root@localhost shell]# vi inotify.sh
    /usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete --fromfile '/root/shell/file' --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' --outfile '/home/tan/inotify.log'
    
    [root@localhost shell]# vi file 
    
    /home/tan
    @/home/tan/uploadFile
    

    inotifywait常用参数:

    • –timefmt 时间格式
    • %y年 %m月 %d日 %H小时 %M分钟
    • –format 输出格式
    • %T时间 %w路径 %f文件名 %e状态
    • -m 始终保持监听状态,默认触发事件即退出。
    • -r 递归查询目录
    • -q 打印出监控事件
    • -e 定义监控的事件,可用参数:
    • open 打开文件
    • access 访问文件
    • modify 修改文件
    • delete 删除文件
    • create 新建文件
    • attrb 属性变更
    事件  描述
    
    access  访问,读取文件。
    modify  修改,文件内容被修改。
    attrib  属性,文件元数据被修改。
    move    移动,对文件进行移动操作。
    create  创建,生成新文件
    open    打开,对文件进行打开操作。
    close   关闭,对文件进行关闭操作。
    delete  删除,文件被删除。
    

    七:实例操作

    1、首先启动监听脚本,权限问题的话先:chmod 755 inotify.sh

    [root@localhost shell]# ./inotify.sh
    

    我在监听的目录中上传文件,没截图,自己想象吧

    [root@localhost tan]# cat inotify.log 
    18-01-19 15:07 /home/tan/uploadfile/test//ssh.txt CREATE
    18-01-19 15:13 /home/tan/uploadfile/test/QQ20180119143826.png CREATE
    

    这里可以看到打印的日志了。

    八、附

    1、inotifywait

    使用方法和参数说明: 使用命令help就行

    [root@localhost bin]# ./inotifywait -h
    inotifywait 3.14
    Wait for a particular event on a file or set of files.
    Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
    Options:
            -h|--help       Show this help text.
            @<file>         Exclude the specified file from being watched.
            --exclude <pattern>
                            Exclude all events on files matching the
                            extended regular expression <pattern>.
            --excludei <pattern>
                            Like --exclude but case insensitive.
            -m|--monitor    Keep listening for events forever.  Without
                            this option, inotifywait will exit after one
                            event is received.
            -d|--daemon     Same as --monitor, except run in the background
                            logging events to a file specified by --outfile.
                            Implies --syslog.
            -r|--recursive  Watch directories recursively.
            --fromfile <file>
                            Read files to watch from <file> or `-' for stdin.
            -o|--outfile <file>
                            Print events to <file> rather than stdout.
            -s|--syslog     Send errors to syslog rather than stderr.
            -q|--quiet      Print less (only print events).
            -qq             Print nothing (not even events).
            --format <fmt>  Print using a specified printf-like format
                            string; read the man page for more details.
            --timefmt <fmt> strftime-compatible format string for use with
                            %T in --format string.
            -c|--csv        Print events in CSV format.
            -t|--timeout <seconds>
                            When listening for a single event, time out after
                            waiting for an event for <seconds> seconds.
                            If <seconds> is 0, inotifywait will never time out.
            -e|--event <event1> [ -e|--event <event2> ... ]
                    Listen for specific event(s).  If omitted, all events are 
                    listened for.
    
    Exit status:
            0  -  An event you asked to watch for was received.
            1  -  An event you did not ask to watch for was received
                  (usually delete_self or unmount), or some error occurred.
            2  -  The --timeout option was given and no events occurred
                  in the specified interval of time.
    
    Events:
            access          file or directory contents were read
            modify          file or directory contents were written
            attrib          file or directory attributes changed
            close_write     file or directory closed, after being opened in
                            writeable mode
            close_nowrite   file or directory closed, after being opened in
                            read-only mode
            close           file or directory closed, regardless of read/write mode
            open            file or directory opened
            moved_to        file or directory moved to watched directory
            moved_from      file or directory moved from watched directory
            move            file or directory moved to or from watched directory
            create          file or directory created within watched directory
            delete          file or directory deleted within watched directory
            delete_self     file or directory was deleted
            unmount         file system containing file or directory unmounted
    

    2、inotifywatch

    使用方法和参数说明:

    [root@localhost bin]# ./inotifywatch -h
    inotifywatch 3.14
    Gather filesystem usage statistics using inotify.
    Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]
    Options:
            -h|--help       Show this help text.
            -v|--verbose    Be verbose.
            @<file>         Exclude the specified file from being watched.
            --fromfile <file>
                    Read files to watch from <file> or `-' for stdin.
            --exclude <pattern>
                    Exclude all events on files matching the extended regular
                    expression <pattern>.
            --excludei <pattern>
                    Like --exclude but case insensitive.
            -z|--zero
                    In the final table of results, output rows and columns even
                    if they consist only of zeros (the default is to not output
                    these rows and columns).
            -r|--recursive  Watch directories recursively.
            -t|--timeout <seconds>
                    Listen only for specified amount of time in seconds; if
                    omitted or 0, inotifywatch will execute until receiving an
                    interrupt signal.
            -e|--event <event1> [ -e|--event <event2> ... ]
                    Listen for specific event(s).  If omitted, all events are 
                    listened for.
            -a|--ascending <event>
                    Sort ascending by a particular event, or `total'.
            -d|--descending <event>
                    Sort descending by a particular event, or `total'.
    
    Exit status:
            0  -  Exited normally.
            1  -  Some error occurred.
    
    Events:
            access          file or directory contents were read
            modify          file or directory contents were written
            attrib          file or directory attributes changed
            close_write     file or directory closed, after being opened in
                            writeable mode
            close_nowrite   file or directory closed, after being opened in
                            read-only mode
            close           file or directory closed, regardless of read/write mode
            open            file or directory opened
            moved_to        file or directory moved to watched directory
            moved_from      file or directory moved from watched directory
            move            file or directory moved to or from watched directory
            create          file or directory created within watched directory
            delete          file or directory deleted within watched directory
            delete_self     file or directory was deleted
            unmount         file system containing file or directory unmounted

      常用事件
    1. CREATE,创建
    2. MODIFY,修改
    3. CLOSE_WRITE,CLOSE,写入成功

    原文出处:1felse -> http://www.1felse.com/blog/view.do?blogId=ff8080816102bdbb01610d45232d005a

  • 相关阅读:
    Leetcode题目practice
    文件操作
    39个奇葩代码注释,拿走不谢
    Spring Boot 之配置导入,强大到不行!
    Git 的这个神技,学会爽歪歪~
    同事天天写垃圾代码,就没办法?
    for (;;) 与 while (true),哪个更快?
    Spring Boot 怎么打一个可执行 Jar 包?
    程序员真的是太太太太太太太太难了!
    面试官:new一个对象有哪两个过程?
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/10224467.html
Copyright © 2020-2023  润新知