Linux文件监控工具——inotify-tools

1. 安装inotify-tools:

sudo apt-get install inotify-tools

2. inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。


inotifywait

语法:inotifywait [-hcmrq] [-e] [-t] [--format] [--timefmt] file1 [file2] [file3] [...]

参数:

-h|--help
Show this help text.
显示帮助信息

@
Exclude the specified file from being watched.
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。

--exclude
Exclude all events on files matching the extended regular expression .
正则匹配需要排除的文件,大小写敏感。

--excludei
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.
跟–-monitor一样,除了是在后台运行,需要指定-–outfile把事件输出到一个文件。也意味着使用了–syslog。

-r|--recursive
Watch directories recursively.
监视一个目录下的所有子目录。

--fromfile
Read files to watch from or '-' for stdin.
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头;'-'表示标准输入。


-o|--outfile
Print events to 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
Print using a specified printf-like format string; read the man page for more details.
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

--timefmt
指定时间格式,用于–-format选项中的%T格式。
strftime-compatible format string for use with %T in --format string.

-c|--csv
Print events in CSV format.
输出csv格式

-t|--timeout
When listening for a single event, time out after waiting for an event for seconds. If is 0, inotifywait will never time out.
设置超时时间,如果为0,则无限期地执行下去。

-e|--event [ -e|--event ... ]
Listen for specific event(s).  If omitted, all events are listened for.
指定监视的事件。


可监听事件:

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


示例:

创建一个临时目录,并监听该目录:

huey2672@huey2672-VM:~$ mkdir tmpdir
huey2672@huey2672-VM:~$ inotifywait -rm tmpdir/
在另一终端,执行以下操作:

huey2672@huey2672-VM:~$ cd tmpdir/
huey2672@huey2672-VM:~/tmpdir$ touch f1.txt
huey2672@huey2672-VM:~/tmpdir$ mv f1.txt f2.txt
输出的监听信息:

Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
tmpdir/ CREATE f1.txt
tmpdir/ OPEN f1.txt
tmpdir/ CLOSE_WRITE,CLOSE f1.txt
tmpdir/ MOVED_FROM f1.txt
tmpdir/ MOVED_TO f2.txt

inotifywatch

语法:inotifywatch [-hvzrqf] [-e] [-t] [-a] [-d] file1 [file2] [file3] [...]
参数:

-h|--help
Show this help text.
输出帮助信息

-v|--verbose
Be verbose.
输出详细信息

@
Exclude the specified file from being watched.
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。

--fromfile
Read files to watch from or `-' for stdin.
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。

--exclude
Exclude all events on files matching the extended regular expression .
正则匹配需要排除的文件,大小写敏感。

--excludei
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
Listen only for specified amount of time in seconds; if omitted or 0, inotifywatch will execute until receiving an interrupt signal.
设置超时时间

-e|--event [ -e|--event ... ]
Listen for specific event(s).  If omitted, all events are listened for.
只监听指定的事件

-a|--ascending
Sort ascending by a particular event, or 'total'.
以指定事件升序排列。

-d|--descending
Sort descending by a particular event, or 'total'.
以指定事件降序排列。


可监听事件:

(于inotifywait一样)


示例:

创建一个目录,再创建一个文件于该目录,并监听该目录:

huey2672@huey2672-VM:~$ mkdir tmpdir
huey2672@huey2672-VM:~$ touch tmpdir/foo.txt
huey2672@huey2672-VM:~$ inotifywatch -v -e access -e modify -t 60 -r tmpdir/
Establishing watches...
Setting up watch(es) on tmpdir/
OK, tmpdir/ is now being watched.
Total of 1 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 60 seconds.
在另一终端,执行一下操作:
huey2672@huey2672-VM:~$ date > tmpdir/foo.txt 
huey2672@huey2672-VM:~$ cat tmpdir/foo.txt
输出的监听信息:

total  access  modify  filename
3      1       2       tmpdir/



你可能感兴趣的:(Unix,&,Linux)