当前位置:  开发笔记 > 编程语言 > 正文

如何测试给定路径是否为挂载点

如何解决《如何测试给定路径是否为挂载点》经验,为你挑选了3个好方法。

假设你想要测试/ mnt/disk是否是shell脚本中的挂载点.你怎么做到这一点?



1> Andrea Franc..:

我发现在我的Fedora 7上有一个mountpoint命令.

从man mountpoint:

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       /bin/mountpoint [-q] [-d] /path/to/directory
       /bin/mountpoint -x /dev/device

显然它带有sysvinit包,我不知道这个命令是否可用于其他系统.

[root@myhost~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17


请注意,`mountpoint`命令当前只是将`stat(dir)`的设备号与`lstat(dir/..)`(类似于其他答案)进行比较,如果挂载点是使用`mount挂载的话 - 它会失败 - -bind`到同一文件系统的另一部分.
解析输出/ etc/mtab的解决方案可以提供错误的答案:根文件系统可以以只读方式挂载,并且/ etc/mtab自上次启动后可能尚未更新.mount(8)通常只是打印/ etc/mtab的内容,并且出于同样的原因会给出错误的答案.

2> ephemient..:

不依靠mount,/etc/mtab,/proc/mounts,等:

if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
    echo "$dir is mounted"
else
    echo "$dir is not mounted"
fi

何时$dir是挂载点,它的设备编号与其父目录不同.

到目前为止列出的替代方案的好处是你不必解析任何东西,并且它做正确的事情dir=/some//path/../with///extra/components.

缺点是它没有标记/为挂载点.嗯,这对于特殊情况来说很容易,但仍然如此.


这似乎不适用于mount -bind挂载点.安装或未安装_if_始终为false._即使使用stat -c%d_也不起作用 - 这也在RHEL上.
+1 ...仅供参考我不得不使用'stat -c%d"/ path"'而不是你描述的选项来比较设备号.它可能只是我们系统中的一个不同; 我在RHEL 5.5上.此外,对于其他人,如果您想在程序中执行此操作,请参阅man stat(2).

3> 小智..:

使用GNU find

find  -maxdepth 0 -printf "%D" 

将给出目录的设备号。如果目录和它的父目录之间不同,则您有一个安装点。

加/。如果您希望链接到不同文件系统的符号链接计入挂载点(您始终希望将其用作父目录),则将其添加到目录名上。

缺点:使用GNU find的便携性较差

优点:报告未记录在/ etc / mtab中的安装点。

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有