无需 root 权限即可监视目录树的更改

无需 root 权限即可监视目录树的更改

最近我遇到了一个意外事件,一些文件被意外删除。这些文件位于共享网络托管帐户 (FreeBSD) 上,但目录树很深。

我倾向于用 PHP 或 Python 自己编写一些可以实现以下功能的东西:

  1. 扫描每个目录,查看每个目录中包含的文件数量
  2. 存储该数据,可能在 MySQL 数据库中
  3. 每天运行一份报告,告诉我哪里有活动(因此,我会看到上传目录中有 3 个新文件,或者缩略图目录中的文件减少了 10 个,甚至每个文件都告诉我它已更改(也许它获取每个文件的哈希值并存储它?)。
  4. 运行每日 cron 任务,并根据前一天所做的更改执行任务(或每周 cron 任务,并根据前一周所做的更改执行任务,或以其他合理的间隔执行任务)

但我感觉在我之前有人做过这样的事。这是否真的存在,而我只是不知道?

答案1

如果你只关心文件的添加或删除,你可以结合使用 find 和 diff 来监视更改:-

find /some/dir -print > file-list.expected # baseline

  # Add/remove files

find /some/dir -print > file-list.current
diff file-list.expected file-list.current # look for changes

mv file-list.old file-list.new # update baseline (optional)

但是,如果您需要(或想要)知道文件的内容是否也发生了变化,FreeBSD 附带了一个名为 [mtree][1] 的实用程序,可用于报告目录层次结构与预期基线之间发现的任何变化:-

mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # baseline

  # Add/remove/change files

mtree -f baseline.mtree -p /some/dir # look for changes
mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # update baseline (optional)

对于任何一种方法,明智的做法是使您的基线文件不可变(“chflags uchg baseline.file”),这有助于防止除 root 之外的任何人(包括您自己)意外删除您的文件。

相关内容