8.8 对文件及目录访问进行记录

记录文件及目录访问对于跟踪文件和目录的变化很有帮助。这则攻略将讲解如何记录用户访问。

8.8.1 新手上路

inotifywait命令可以用来收集有关文件访问的信息。Linux发行版并没有默认包含这个命令,你得用软件包管理器自行安装inotify-tools。这个命令还需要将inotify支持编译入Linux内核,好在大多数新的GNU/Linux发行版都在内核中启用了inotify

8.8.2 实战演练

来看看用来监视目录访问的shell脚本:

  1. #/bin/bash
  2. #文件名: watchdir.sh
  3. #用途:监视目录访问
  4. path=$1
  5. #将目录或文件路径作为脚本参数
  6. inotifywait -m -r -e create,move,delete $path -q

输出样例如下:

  1. $ ./watchdir.sh .
  2. ./ CREATE new
  3. ./ MOVED_FROM new
  4. ./ MOVED_TO news
  5. ./ DELETE news

8.8.3 工作原理

上面的脚本记录给定了路径中文件或目录的创建、移动以及删除。选项 -m表明要持续监视变化,而不是在事件发生之后退出。-r允许采用递归形式监视目录。-e 指定需要监视的事件列表。-q 用于减少冗余信息,只打印出所需要的信息。命令输出可以被重定向到日志文件。

我们可以从事件列表中添加或删除事件。一些重要的事件如表8-2所示。

表 8-2

事  件 描  述
访问(access 读取文件
修改(modify 文件内容被修改
属性(attrib 文件元数据被修改
移动(move 对文件进行移动操作
创建(create 生成新文件
打开(open 对文件进行打开操作
关闭(close 对文件进行关闭操作
删除(delete 文件被删除