跟踪 UNIX 主机中的所有文件更改

跟踪 UNIX 主机中的所有文件更改

我正在评估一个工具,我需要识别此应用程序(使用 pip 安装)添加、更改或删除的所有文件(包括系统配置文件)。

在外部主机上安装后,我将跟踪所有更改,以便借助这些跟踪的更改将应用​​程序带到不同的位置。

请注意,我不是在寻找应用程序或安装日志,而是在寻找此安装及其应用程序所做的更改。

这也是审核任何正在评估的应用程序的影响的有用场景。

一种可能的解决方案是使用 fswatch (https://www.ostechnix.com/monitor-file-changes-using-fswatch-linux/),但无法监控根目录。

十年前,有一个适用于 Windows 的工具,名为 Norton CleanSweep(https://en.wikipedia.org/wiki/Norton_CleanSweep),它监视安装应用程序并跟踪此安装添加的所有文件和注册表项,以允许完全删除此跟踪的安装。这正是我正在寻找的,但是对于 unix 盒子(基于 Debian 发行版的将是完美的)

关于什么可以用来跟踪 UNIX 主机中的所有更改,有什么想法吗?

答案1

由于当提供根目录时,fswatch 无法正确处理操作量,inotifywait (https://linux.die.net/man/1/inotifywait)可以使用。

它使用 inotify 等待文件的更改。可以使用以下命令:

sudo inotifywait -m -r --exclude "(/tmp.*|/var/cache.*|/dev/pts/|/var/log.*)"  -e MOVED_TO -e CREATE -e CLOSE_WRITE -e DELETE -e MODIFY -o /tmp/my_tracked_install_files /

在哪里

  • -m:使用监控模式
  • -r:递归路径
  • --exclude 使用正则表达式不监视某些目录(临时目录、日志目录和 /dev/pts,因为这些目录上存在大量不必要的更改)上的事件
  • -e MOVED_TO、CREATE、CLOSE_WRITE、DELETE 和 MODIFY:我们唯一感兴趣的事件(inotifywait 捕获所有类型的文件系统事件,包括列表)
  • -o:输出文件

请注意,inotifywait 不会捕获从其他主机写入的 nfs 文件。

您很可能必须增加 inotifywatches 的数量(如(https://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux

cat /proc/sys/fs/inotify/max_user_watches # default is 8192
sudo sysctl fs.inotify.max_user_watches=1048576 # increase to 1048576

相关内容