在 Linux 环境中,有时我需要以 root 身份运行脚本,该脚本将添加/修改我的 fs 上的几个文件。
基本上,我想确切地知道哪些文件被修改了以及如何修改,而无需打开脚本并尝试猜测代码。
我正在考虑使用类似 unionfs 的东西:主 fs 可以在只读模式下访问,并且所有更改都写入用作分区的文件中,并以写入模式“挂载”。
还有其他方法可以实现相同的目标吗(即除了 unionfs 之外)?
答案1
前面提到的 LVM 解决方案的一个示例。
警告:您想要差异的文件系统必须位于 lvm 逻辑卷上! (并且您的磁盘上必须有一些可用空间。)
# lvcreate --size 2G --name your-fs-snapshot --snapshot /dev/vg0/your-fs 逻辑卷“your-fs-snapshot”已创建
这将在此时拍摄 /dev/vg0/your-fs 的快照。然后,执行您想要记录的更改。
您可以将快照作为原始状态下的 your-fs 的副本安装,并使用您选择的工具(例如 diff)进行差异比较。
# 挂载 /dev/vg0/your-fs-snapshot /mnt # diff -q /原始/卷/子目录 /mnt/子目录
不要忘记卸载并删除快照,因为在执行此操作时,对原始卷的更改将被记录为快照的反向差异 - 直到填满为止。
# 卸载 /mnt # lvremove /dev/vg0/你的文件系统快照 您确实要删除活动逻辑卷 your-fs-snapshot 吗?[y/n]: y 逻辑卷“your-fs-snapshot”已成功删除
暗示:如果您的逻辑卷包含分区表,则可以通过以下方式添加设备条目:
# kpartx -av /dev/vg0/你的磁盘快照
答案2
您可以创建 LVM 快照,然后挂载该快照,运行脚本,然后在快照和原始快照之间进行比较。
答案3
答案4
您可能还想了解一下 inotify,它允许您在文件系统事件发生时对其进行监控。它类似于 OS X 的 fsevent 框架。大多数发行版都会有一个 inotify-tools 包。