inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数

安装inotify-tools

$ sudo apt install inotify-tools -y

创建数据和日志目录

$ sudo mkdir -p /tmp/inotify/log/ /tmp/inotify/data/

创建日志文件

$ touch /tmp/inotify/log/data.log

假设在 /tmp/inotify/data/ 中不断生成(删除,移动)数据,/tmp/inotify/log/data.log 文件中记录日志

inotifywait -- 用来监控文件或目录的变化

开启监控 (这里简称“会话1”)

$ inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %e %w%f' -e create -e delete -e move -e moved_to -e moved_from -e delete_self  /tmp/inotify/data/

再开一会话终端(这里简称“会话2”),并切换到到 /tmp/inotify/data/ 目录,我们在里面使用 Crunch 创建一些字典文件(或者你在里面随便创建,移动,删除些什么),不清楚 Crunch 是什么,怎么用的请参考《crunch--字典生成工具

$ cd /tmp/inotify/data/
$ crunch -b 20mib -o START

这时,在会话1中会输出

-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/aaaaa-hqwmu.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/hqwmv-phszp.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/phszq-wypmk.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/wypml-zzzzz.txt

后台运行

Ctrl+C 在会话1中退出notifywait,采用后台运行的方式记录日志

# 监控后台运行并输出到文件

$ inotifywait -mrqd --timefmt '%y-%m-%d %H:%M' --format '%T %e %w%f' -e create -e delete -e move -e moved_to -e moved_from -e delete_self -o /tmp/inotify/log/data.log  /tmp/inotify/data/

删除/tmp/inotify/data/目录下的所有文件,重新生成字典文件(过程略)

$ cat  /tmp/inotify/log/data.log

-- : DELETE /tmp/inotify/data/aaaaa-hqwmu.txt
-- : DELETE /tmp/inotify/data/hqwmv-phszp.txt
-- : DELETE /tmp/inotify/data/phszq-wypmk.txt
-- : DELETE /tmp/inotify/data/wypml-zzzzz.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/aaaaa-hqwmu.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/hqwmv-phszp.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/phszq-wypmk.txt
-- : CREATE /tmp/inotify/data/START
-- : MOVED_FROM /tmp/inotify/data/START
-- : MOVED_TO /tmp/inotify/data/wypml-zzzzz.txt

inotifywatch -- 用来统计文件系统访问的次数

我们依旧在 /tmp/inotify/data/ 目录下执行 先删除所有字典文件,再重新创建字典文件的操作。然后开启 inotifywatch 统计该目录下各事件的调用次数。

$ inotifywatch -v  -e create -e delete -e move -e moved_to -e moved_from -e delete_self -t  -r /tmp/inotify/data/

Establishing watches...
Setting up watch(es) on /tmp/inotify/data/
OK, /tmp/inotify/data/ is now being watched.
Total of watches.
Finished establishing watches, now collecting statistics.
Will listen for events for seconds.
total moved_from moved_to create delete filename
/tmp/inotify/data/

参数说明

inotifywait

语法:

inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]

参数:

-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt
指定时间格式,用于–format选项中的%T格式。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

inotifywatch

语法:

inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ … ]

参数:

-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout
设置超时时间
-e , –event
只监听指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。

可监听事件

access 文件读取
modify 文件更改。
attrib 文件属性更改,如权限,时间戳等。
close_write 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。
close_nowrite 以只读模式打开的文件被关闭。
close 文件被关闭,不管它是如何打开的。
open 文件打开。
moved_to 一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。
moved_from 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。
move 包括moved_to和 moved_from
move_self 文件或目录被移除,之后不再监听此文件或目录。
create 文件或目录创建
delete 文件或目录删除
delete_self 文件或目录移除,之后不再监听此文件或目录
unmount 文件系统取消挂载,之后不再监听此文件系统。

linux怎么实时查看目录下是否有文件生成的更多相关文章

  1. python实现查看目录下重复的文件

    该python 脚本有以下三个功能: 1. 实现查看目录下重复的文件,输出文件按修改时间升序排列 2. 将按修改时间排列比较旧的.可删除的文件列出来 3. 按目录对重复文件进行统计,比如,目录/tmp ...

  2. Linux递归解压缩一个目录下的全部文件

    gunzip -r hongchangfirst/data 怎样递归删除那些剩余的非log结尾的文件? 先列出确认一下: find hongchangfirst/data -type f ! -nam ...

  3. Linux:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件 [root@oldboy xx]# touc ...

  4. Linux系统/etc/sysconfig目录下没有iptables文件

    在新安装的linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件. 解决办法: 1.键入以下命令,新建文件 2.复制以下 ...

  5. PHP查看目录下的所有文件

    [1].[代码] [PHP]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  6. linux中在某个目录下多个文件中搜索关键字

    有四种方法: find 文件目录 -name '*.*' -exec grep 'xxx' {} + -n 或是 find 文件目录 -name '*.*' | xargs grep 'xxx' -n ...

  7. shell 搜索指定目录下所有 jar 文件生成csv文件

    虽说比较简单,但希望分享给大家.按需求改成想找的:例如txt,xls 等. 脚本名 扫描的路径 文件名 testFind.sh /  testFind.txt (如果未配置环境变量  ./testFi ...

  8. linux-删除一个目录下的所有文件,但保留某个或者多个指定文件

    Linux:删除一个目录下的所有文件,但保留一个指定文件 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 ...

  9. linux查看目录下各个文件大小的命令

    linux查看目录下各个文件大小的命令 由于需要经常查看各个文件的具体大小 ,所以这里记一下. 命令如下: du -h --max-depth=1

随机推荐

  1. element-ui <el-input> 注册keyup事件,即键盘enter.

    <template> <!-- 需求:keyup事件一般用在input中,在input框中输入内容,用户点击键盘的enter,执行搜索 --> <div class=&q ...

  2. Hive 外部表的练习(多表关联查询,以及分组,子查询)

    Hive 外部表的练习 hive创建库和表操作 hive加载数据,4种发放 1.数据放在Linux创建表结构 进行加载 2.先定义表结构.将一个查询select语句结果插入到表中 3.数据先放在hdf ...

  3. 2015-112 ado.net2

    CRUD:create read update delete 七. 数据绑定数据列的转换 在gridview中添加<OnRowDataBound="GridView1_RowDataB ...

  4. MySQL— pymysql模块(防止sql注入),可视化软件Navicat

    一.Pymysql import pymysql #python2.X 中是 mysqldb 和 pythonmysql 用法是一模一样的 #pymysql可以伪装成上面这两个模块 user = in ...

  5. 9ci

  6. tensorflow (七) k-means

    tensorflow基础暂不介绍 Python 相关库的安装 在进入正式聚类实验之前,我们还需要配置计算及画图需要用到相关支持包. 安装 seaborn: pip install seaborn 安装 ...

  7. java中引用的概念

    强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: 1 2 Object object = new Object(); ...

  8. python中文件读写

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  9. 浅谈java 之 Map

    先来一张Map的类继承图 Map :Hashtable .HashMap .LinkedHashMap .TreeMap 的比较   1.Hashtable的方法实现了synchronized 是线程 ...

  10. wc.exe

    1 /* 2 * 没能实现的功能:wc.exe -s递归处理目录下符合条件的文件 3 * wc.exe -x 显示图形界面 4 * 5 * 6 * 实现的功能: wc.exe -c显示文件的字符数. ...