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. 2018 ACM-ICPC青岛现场赛 B题 Kawa Exam 题解 ZOJ 4059

    题意:BaoBao正在进行在线考试(都是选择题),每个题都有唯一的一个正确答案,但是考试系统有m个bug(就是有m个限制),每个bug表示为第u个问题和第v个问题你必须选择相同的选项,题目问你,如果你 ...

  2. vue-计算属性和侦听器

    1.计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> { ...

  3. Linux getopt/getopts解析命令行参数教程

    一.说明 shell中获取参数可以直接使用$1.$2等形式来获取,但这种方式有明显的限制:每个参数的位置是固定的.比如如果在设计上$1是ip地址$2是端口,那在执行时就必须第一个参数是ip第二个参数是 ...

  4. 在Postman中使用不受信任的SSL证书

    阅读目录 第一种方案——临时添加到受信任的证书颁发机构: 第二种方案——永久添加到受信任的证书颁发机构: add by zhj: 在http://www.cnblogs.com/ajianbeyour ...

  5. php遍历数组7种方式(严格说是五种)

    数组: $arr = array(1,2,3,4,5); 第一种:foreach (最常见的) foreach ($arr as $v){ echo $v;} 第二种:for for($i=0;$i& ...

  6. 一个简单的windows勒索软件分析

    根据分析,此病毒是一个勒索软件,通过修改登录用户密码,留下勒索QQ号码向用户索要金钱. 它调用了Kernel32.dll里的WinExec来执行更改用户密码的cmd命令,密码为107289,更改完密码 ...

  7. [linux-脚本]shebang(shabang #!)

    使用Linux或者unix系统的人们对#!这个符号都不陌生,但要说出个具体的所以然来,很多人估计还真不行,我们有必要就此整理一下.Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指 ...

  8. Excel 使用单元格的值 查询MySQL数据库并返回数据给相应的单元格

    Dim MyConn As ObjectPrivate Sub ConnectDB()Set MyConn = CreateObject("ADODB.Connection")   ...

  9. memge和saveOrUpdate的区别

    今天做hibernate开发的时候遇到这样一个错误: a different object with the same identifier value was already associated ...

  10. Jenkins 随笔

    window是 随笔 修改端口 :  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsService ...