检查目录是否使用bash挂载

Jus*_*tin 88 linux bash mount centos

我在用

mount -o bind /some/directory/here /foo/bar
Run Code Online (Sandbox Code Playgroud)

我想/foo/bar用bash脚本检查一下,看看它是否已经挂载?如果没有,则调用上面的mount命令,否则执行其他操作.我怎样才能做到这一点?

CentOS是操作系统.

Mar*_*bak 168

你没有提到O/S.

Ubuntu Linux 11.10(可能是最新的Linux版本)都有这个mountpoint命令.

这是我的一台服务器上的示例:

$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Run Code Online (Sandbox Code Playgroud)

实际上,在您的情况下,您应该能够使用该-q选项,如下所示:

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 在运行'mountpoint'命令时,你实际安装了什么东西?即使它打算成为一个挂载点,除非它*实际上已经安装了一些东西,它只是一个目录. (7认同)
  • 正如[另一条评论](http://stackoverflow.com/questions/479226/how-to-test-if-a-given-path-is-a-mount-point#comment15969742_483472)中所述,mountpoint无法使用绑定坐骑.该片段将多次挂载dir (7认同)
  • mountpoint也存在于RHEL 6.3中(可能甚至在早期版本中) (3认同)
  • +1,也适用于Ubuntu 10.10.[自8.04以来一直在Ubuntu中](http://packages.ubuntu.com/hardy/i386/initscripts/filelist). (2认同)
  • mountpoint存在并且完美地适用于Debian 7("Wheezy")和UCS 4 (2认同)

Chr*_*lan 63

mount不带参数运行命令将告诉您当前的安装.在shell脚本中,您可以grep使用if语句检查挂载点:

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi
Run Code Online (Sandbox Code Playgroud)

在我的例子中,if语句检查退出代码grep,表示是否匹配.由于我不希望在匹配时显示输出,因此我将其重定向到/dev/null.

  • **这不适用于mount bind,因此不应接受为答案.这个答案应该被拒绝.**你不能依赖于`mount | grep ...`显示你的mount绑定仍处于活动状态.如果底层设备已卸载并重新安装,则mount绑定实际上将不再连接两个文件/目录,即使`mount`仍然显示它已连接.如果你"卸载......",它甚至会告诉你它没有安装,虽然`mount`说它是.Linux文件系统中的巨大缺陷. (31认同)
  • 您无需检查它是否返回字符串.如果没有匹配,`grep`返回非零退出状态.不需要测试,也不需要$()创建的子shell.`if命令| grep -q'stuff'; 然后......` (4认同)
  • 如果有一个名为`/ mnt/md0xxx`的挂载,那么该命令将指示挂载的`/ mnt/md0`,而不必是... (2认同)

She*_*ohn 35

手册mountpoint说它:

检查/ proc/self/mountinfo文件中是否提到了给定的目录或文件.

手册mount说:

维护列表模式仅用于向后兼容.要获得更强大和可自定义的输出,请使用findmnt(8),尤其是在脚本中.

所以正确使用的命令是findmnt,它本身就是util-linux包的一部分,根据手册:

能够在/ etc/fstab,/ etc/mtab或/ proc/self/mountinfo中搜索

所以它实际上搜索的东西比mountpoint.它还提供了方便的选择:

-M, - mountpoint 路径

明确定义mountpoint文件或目录.另见--target.

总之,要检查目录是否使用bash挂载,您可以使用:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi
Run Code Online (Sandbox Code Playgroud)

例:

mkdir -p /tmp/foo/{a,b}
cd /tmp/foo

sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing

[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
Run Code Online (Sandbox Code Playgroud)