我怎样才能“隐藏”Linux上的文件系统?

在Linux环境中,有时我需要以root用户身份运行脚本,这会在我的fs上添加/修改多个文件。

基本上我想知道哪些文件被修改,以及如何不打开脚本,并试图猜测代码。

我正在考虑使用像unionfs这样的东西:主要的fs只能在只读模式下访问,所有的修改都写在一个用作分区的文件上,在写入模式下“挂载”。

还有其他方法可以达到同样的目标吗(即工会除外)?

前面提到的LVM解决scheme的一个例子。

警告:你想要比较的文件系统必须在逻辑卷上! (你必须在磁盘上有一些空闲空间。)

 #lvcreate --size 2G  - 为您的-fs-snapshot命名--snapshot / dev / vg0 / your-fs 
  创build逻辑卷“your-fs-snapshot”

这个时候会获取/ dev / vg0 / your-fs的快照。 然后,做你想logging的变化。

您可以将您的快照安装为原始状态下的fs副本,并使用您select的工具比较diff。

 #mount / dev / vg0 / your-fs-snapshot / mnt
 #diff -q / original / volume / subdir / mnt / subdir

不要忘记卸载和删除快照,因为在这样做时,对原始音量的更改会被logging为快照的反向差异 – 直到填满为止。

 #umount / mnt
 #lvremove / dev / vg0 / your-fs-snapshot 
你真的想删除活跃的逻辑卷你的快照?  [y / n]:y
  逻辑卷“your-fs-snapshot”已成功删除

提示:如果您的逻辑卷包含分区表,则可以通过以下方式添加设备条目:

 #kpartx -av / dev / vg0 / your-disk-snapshot

您可以创buildLVM快照,然后装载快照,运行脚本,然后在快照和原始文件之间进行区别。

在今天的精彩快照和跟踪技术之前,人们通过巧妙地使用LD_PRELOAD环境variables来解决这个问题,这个环境variables允许你用你自己的replace(称为函数插入 )重载C库函数。 在这种情况下,你会open()系统调用,当打开文件写入时,你可以:

  • 保留原始文件(例如,扩展名为.bak或其他内容)
  • 允许安装程序replace它
  • 产生原始版本与修改版本的差异。

installwatch程序就是这类事情的一个例子。 这种解决scheme还有很多其他的例子,还有很多使用LD_PRELOAD来修改二进制程序行为的其他方法。

这听起来像systemtap可能擅长的东西。 这里有一个博客文章 ,有人写了一个systemtap脚本,将打印出用户打开的每个文件。 有一件事要记住,它不是一个特定的过程,所以如果你正在做脚本作为一个正在做很多其他事情的用户,这可能是非常嘈杂; 可能需要一些修改。 虽然,这是一个开始。

您可能还想研究inotify,这将允许您监视发生的文件系统事件。 它与OS X的fsevent框架类似。 大多数发行版都会有一个inotify-tools包。