Linux文件系统监控:inotify

1 介绍与安装

inotify tools基本介绍:

  • Inotify是一种强大的、细粒度的、异步文件系统监控机制
  • 可以监控文件系统的一切变化(增删改查、权限、移动复制等)
  • Linux内核从2.6.13开始引入了inotify机制
  • inotify-tools在命令行下提供对Inotify的调用,实现了文件系统事件的监控

inotify tools的安装:

2 基本用法

inotify tools基本命令:

  • inotify-tools主要包括inotifywait和inotifywatch这两条命令
  • inotifywait命令可以用来收集有关文件访问信息
  • inotifywatch命令用于收集关于被监视的文件系统的统计数据

inotify tools使用示例:

  1. 实时监控/home的所有事件(包括文件的访问,写入,修改,删除等)
inotifywait -rm /home
  1. 监控/var/log/messeges中有关httpd的日志
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
 if tail -n1 /var/log/messages | grep httpd; then
   kdialog --msgbox "Apache needs love!"
 fi
done
  1. 统计/home文件系统的事件
inotifywatch -v -e access -e modify -t 60 -r /home
  1. 监控 /opt文件下所有子目录的文件系统,仅考虑指定事件
inotifywait -dmrq -e 'delete,moved_to,moved_to' -o '/inotifywait.log' --timefmt '%Y-%m-%d %H:%M' --format '%T %W%f %e' /opt

3 参数详情

参数详情-英文完整版

3.1 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定义的时间格式

3.2 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 文件系统取消挂载,之后不再监听此文件系统。

参考

使用inotify-tools监控文件夹或文件的变动 inotify-tools使用方法介绍

往年同期文章