我正在评估一个工具,我需要识别此应用程序(使用 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