Answers:
可能最简单的方法(?)是从具有“持久数据分区”的LiveUSB引导。(或者,为了自己复制效果,请在chroot监狱中:在ro层上安装一个rw层。)拍摄rw文件系统的快照(在重新启动后应该很小),然后运行安装程序。它更改或创建的每个文件都将位于rw“持久数据”覆盖分区上。甚至删除的文件也将显示为“魔术点文件”。
unionfs
-基本上,RW文件系统接受所有写操作,但是RO文件系统在其下面仍然可见。如果文件已更改,它将“迁移”到RW fs。如果将其删除,则RW fs上实际上存在一个“魔术点文件”以对其进行“屏蔽”。设置unionfs
可能会有些麻烦,这就是为什么我建议使用LiveUSB(它为您完成了这一部分,并且您可以从中获得“干净”的系统映像)的原因
也许看看tripwire?Tripwire比您的主动示例更被动,但它可能仍对您有用。
http://www.linuxjournal.com/article/8758
Tripwire是入侵检测系统(IDS),如果您的关键系统文件和报告被破解者(或错误地)破坏或修改,它会不断自动地对其进行控制。它使系统管理员可以立即知道有什么漏洞并进行修复。
看看Installwatch:
http://en.wikipedia.org/wiki/Installwatch#功能
http://asic-linux.com.mx/~izto/checkinstall/installwatch.html
使用LD_PRELOAD
加载库截获open
库函数和改变路径/日志输出/做一个备份打开文件之前。
看一下的源代码strace
。
如果安装程序使用某种打包工具(例如,.deb
用于Debian / Ubuntu / ...的.rpm
软件包,用于RedHat / CentOS / ...的软件包),则软件包安装程序应知道在安装和删除时该怎么做。而且我相信您应该使用现有的包装系统,而不是发明自己的包装系统。(Linux通常没有Windows那样的安装程序)。
如果您确实希望遵循某些过程所做的文件更改,则可以使用strace
或ltrace
捕获系统调用。您还可以赋予和相关的设施。
但我不知道您想要的catch-modifs
&revert-modifs
。
我建议不要为您的应用程序制作安装程序,而应使用软件包管理器,从而为您的应用程序提供.deb
(和/或.rpm
)软件包。他们将比您自己的安装程序更好地处理依赖性问题。
实现所需目标的简单方法:在全新的虚拟机实例(VMWare工作站,Oracle VirtualBox等)中安装“不受信任”的应用程序。
当您决定不再需要该应用程序时,请删除虚拟机。
您的其他替代方案-捕获文件访问系统调用-可能容易出错且不完整。特别警惕任何需要动态链接才能起作用的解决方案(就像Installwatch那样)。安装程序可以相当合法地执行直接系统调用,也可以进行静态链接。