如何跳过两次安装的目录?

时间:2010-08-27 09:45:15

标签: linux

我需要递归列出一个目录,但我想跳过已经挂载的子目录。 有两种情况:

a)文件系统已挂载两次,如下例所示:

  • “/ dev / sda2”已安装在“/ mnt / mnt_point1”
  • “/ dev / sda2”已安装在“/ mnt / mnt_point2”上 我想列出“/ mnt”,但只在“/ mnt / mnt_point1”
  • 中下载

b)文件层次结构的一部分在其他地方重新安装,使用“mount --bind”:

  • “mount --bind / home / user / tmp / test / home / user / tmp / mounted_test”

我想列出“/ home / user / tmp”,但只在“test”中下载

“statfs”和“statvfs”不提供任何信息来辨别目录是否已安装两次。

一个解决方案是读取“/ etc / mtab”(作为“find”命令执行)并执行一些检查,但我认为这非常昂贵(每次遇到时都必须读取/ etc / mtab)一个目录;如果只在程序启动时读取该文件,则读取之间可能会发生挂载,因此程序将不准确)。

另一种解决方案是过滤内核事件(通过libudev或Netlink)并仅在发出MOUNT事件时读取/ etc / mtab。

你还有其他建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

首先阅读mtab并不像你想象的那么昂贵,如果它没有改变,如果你经常访问它,linux可能会把它保存在内存中。

但出于您的目的,mtab可能不会包含您要查找的信息。而是解析/proc/mounts