跟踪,保存和恢复Linux下的程序所做的文件系统修改

我希望能够在运行诸如安装程序之类的程序时跟踪对我的文件系统所做的修改列表,以便我可以在之后恢复它们。

编辑:这涉及一个非打包的程序。 我尽可能使用apt-get。

理想情况下,我希望能够做到这样的事情:

(sudo) catch-modifs some-installer.bin > fsmodifs.patch

接着:

(sudo) revert-modifs fsmodifs.patch

有没有一个方便的方法来做到这一点?

可能最简单的(?)方法是使用“持久数据分区”从LiveUSB启动。 (或者,在chroot jail中自己复制效果:在ro层上挂载一个rw层。)拍摄一个rw文件系统的快照 – 在全新引导之后应该非常苗条 – 然后运行安装程序。 它改变或创build的每个文件将在rw“持久数据”覆盖分区上。 即使删除的文件也会显示为“魔术点文件”。

也许看看tripwire? Tripwire比你活跃的例子更被动,但它仍然可以为你工作。

http://www.linuxjournal.com/article/8758

Tripwire是一种入侵检测系统(IDS),它可以不断自动地将关键的系统文件和报告保存下来,如果它们被破解者(或者错误的)破坏或修改的话。 它允许系统pipe理员立即知道被盗用的内容并修复它。

使用LD_PRELOAD加载一个拦截open库函数的库,并在打开文件之前更改path名/logging输出/进行备份。

看看strace的源代码。

如果安装程序使用某些打包工具(例如Debian / Ubuntu / …,. .rpm包的RedHat / CentOS / …等.rpm包),那么软件包安装程序应该知道如何安装和删除。 我相信你应该使用现有的包装系统 ,而不是发明自己的包装系统 。 (Linux通常没有像Windows那样的安装程序)。

如果你真的想跟随某些进程所做的文件更改,可以使用straceltrace来捕获系统调用。 你也可以通过inotify和相关的设施。

但是我不知道像你想要catch-modifsrevert-modifs

我build议不要为您的应用程序安装一个安装程序,而是使用软件包pipe理器,因此为您的应用程序提供.deb (和/或.rpm )软件包。 他们会比你自己的安装程序更好地处理依赖问题。

实现您想要的简单方法:在全新的虚拟机实例(VMWare工作站,Oracle VirtualBox等)中安装“不可信”应用程序。

当您决定不再需要应用程序时,请删除虚拟机。

您的其他select – 捕获文件访问系统调用 – 可能会容易出错和不完整。 特别要警惕任何需要dynamic链接才能工作的解决scheme(就像Installwatch似乎这样做)。 安装程序可以非常合理地执行直接系统调用,或静态链接。