再使用Jnotify监控系统文件改名的过程中,高并发下会有遗漏,改用Inotify, 以下为使用方法

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

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

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

开始之前需要检测系统内核是否支持inotify:

使用uname -r命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。

使用ll /proc/sys/fs/inotify命令,是否有以下三条信息输出,如果没有表示不支持。

ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Jan  4 15:41 max_queued_events
-rw-r--r-- 1 root root 0 Jan  4 15:41 max_user_instances
-rw-r--r-- 1 root root 0 Jan  4 15:41 max_user_watches

安装inotify-tools

  • inotify-tools项目地址:https://github.com/rvoicilas/inotify-tools
  • inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
#CentOS release 5.8/64位:
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install

其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting

inotify相关参数

inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小:

  • /proc/sys/fs/inotify/max_queued_evnets表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
  • /proc/sys/fs/inotify/max_user_instances表示每一个real user ID可创建的inotify instatnces的数量上限。
  • /proc/sys/fs/inotify/max_user_watches表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

根据以上在32位或者64位系统都可以执行:

echo 104857600 > /proc/sys/fs/inotify/max_user_watches
echo 'echo 104857600 > /proc/sys/fs/inotify/max_user_watches' >> /etc/rc.local

如果遇到以下错误:

inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory
解决方法:
32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

inotifywait命令使用

#!/bin/bash
#filename watchdir.sh
path=$1
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib $path执行输出:
./watchdir.sh /data/wsdata/tools/
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp
04/01/13/16:35 /data/wsdata/tools/ 4913
04/01/13/16:35 /data/wsdata/tools/ 4913
04/01/13/16:35 /data/wsdata/tools/ 4913
04/01/13/16:35 /data/wsdata/tools/ j.jsp
04/01/13/16:35 /data/wsdata/tools/ j.jsp
04/01/13/16:35 /data/wsdata/tools/ j.jsp
04/01/13/16:35 /data/wsdata/tools/ j.jsp~
04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp

inotifywait命令参数

  • -m是要持续监视变化。
  • -r使用递归形式监视目录。
  • -q减少冗余信息,只打印出需要的信息。
  • -e指定要监视的事件列表。
  • --timefmt是指定时间的输出格式。
  • --format指定文件变化的详细信息。

可监听的事件

from http://www.1987.name/637.html

转载于:https://www.cnblogs.com/jeesezhang/p/4143003.html

安装inotify-tools,用inotifywait命令监听文件或目录的访问信息相关推荐

  1. Linux 用inotify监听文件和目录

    日常应用中,常常会遇到以下场景,监控文件夹A,若文件夹中的B文件发生变化,则执行C命令.Linux下可以通过inotify完成该功能. 自从Linux kernel 2.6.13起,inotify以作 ...

  2. 使用Node.JS监听文件夹变化

    使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应 ...

  3. Hutool操作和监听文件

    目录 1 文件监听简单使用 1.1 WatchMonitor 1.2 内部应用 1.3 监听指定事件 1.4 监听全部事件 1.5 延迟处理监听事件 2 文件的读取 3 文件的写入 4 文件追加 5 ...

  4. Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

    Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 文章目录 Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 前言 一.数据库的安装前准备,前提 ...

  5. 在linux中使用tcpdump命令 – 监听网络流量

    tcpdump命令 – 监听网络流量 tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的 ...

  6. oracle-11g-R2监听文件配置

    客户端连接oracle数据库时出现如下错误: Listener refused the connection with the following error: ORA-12514, TNS:list ...

  7. 监听文件变化并自动运行 npm script

    监听文件变化并自动运行 npm script 软件工程师做的事情基本都是在实现自动化,比如各种业务系统是为了业务运转的自动化,部署系统是为了运维的自动化,对于开发者本身,自动化也是提升效率的关键环节, ...

  8. oracle11gr2配置监听,oracle-11g-R2监听文件配置

    客户端连接oracle数据库时出现如下错误: Listener refused the connection with the following error: ORA-12514, TNS:list ...

  9. gulp构建项目(三):gulp-watch监听文件改变、新增、删除

    一.gulp.watch()功能介绍 举例说明:当'./src/*.html'发生变化时,执行'html'任务,同时刷新浏览器.如下: gulp.task('watch', function(){gu ...

  10. oracle配置的监听文件,配置oracle监听文件

    配置oracle监听文件 如果自己配置的监听文件总是出错,可以复制线面的信息进到自己配置文件中更改主机信息即可 [[email protected] admin]$ cat tnsnames.ora ...

最新文章

  1. Python初学者零碎基础笔记(一)
  2. 【H5】解决ios禁止缩放失效的方法
  3. Alpha 冲刺报告(3/10)
  4. finallshell堡垒机_用lshell+脚本实现堡垒机(跳转机)功能
  5. 【拓扑排序】【DP】旅行计划(luogu 1137)
  6. aix如何查看日志策略_aix的日志的一些操作理解
  7. 模块字体不生效_新版iPhone敬业签便签软件怎么将字体调大?
  8. java复制和上传_java文件上传复制等功能
  9. 湘苗培优|从入门到精通
  10. wps2019无法使用粘贴复制快捷键
  11. html 显示不可见字符,真实用! 一键清除不可见字符
  12. 强制修改.ko文件中的内核版本号与内核对应
  13. 【java毕业设计】基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码)——屏幕截图工具
  14. 如何添加其他网段的打印机
  15. 电视剧《天道》观后感
  16. 如何申请Xilinx评估版本ip核license
  17. CodeCombat代码全记录(Python学习利器)--边地森林(第二章)代码4
  18. element-UI中el-select组件使用拼音进行模糊匹配可选择项
  19. 苹果电脑销量大跌40%,PC市场无战事
  20. 博客英语作文写作技巧_网络写作技巧

热门文章

  1. mysql id 不连续_MySQL中自增主键不连续之解决方案。(20131109)
  2. python visa模块_python – Mac OS X上的NI VISA pyVisa(Snow Leopard)
  3. python用正则表达式提取中文_用正则表达式从Python中的字符串中提取数字
  4. 双一流2020年调整时间_“双一流”调整名单预测,985大学两升一降,两校退出名校阵营...
  5. java提前多久显示,Java当前日期/时间比原始时间提前1小时显示
  6. 基于springboot+vue的汽车销售系统(前后端分离)
  7. java mysql数据库操作_java 操作mysql数据库
  8. Leetcode 207. 课程表(值得一刷的宽搜)
  9. 面向对象分析和设计的几个关键步骤_超市设计中不容忽视的小细节
  10. java基础总结06-常用api类-Arrays