检查目录是否装有bash

我在用

mount -o bind /some/directory/here /foo/bar 

我想用bash脚本检查/foo/bar ,看看它是否被挂载? 如果没有,那么调用上面的安装命令,否则做别的。 我怎样才能做到这一点?

CentOS是操作系统。

不带参数运行mount命令会告诉你当前的挂载。 从shell脚本中,你可以用grep和一个if语句来检查挂载点:

 if mount | grep /mnt/md0 > /dev/null; then echo "yay" else echo "nay" fi 

在我的例子中,if语句是检查grep的退出代码,它表示是否匹配。 由于我不希望在匹配时显示输出,所以我将它redirect到/dev/null

你没有提到一个操作系统。

Ubuntu Linux 11.10(可能是最新版本的Linux)有mountpoint命令。

以下是我的一台服务器的示例:

 $ mountpoint /oracle /oracle is a mountpoint $ mountpoint /bin /bin is not a mountpoint 

其实,在你的情况下,你应该可以使用-q选项,如下所示:

 mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar 

希望有所帮助。

另一个干净的解决scheme是这样的

 $ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted 

当然,“echo something”可以replace为每种情况下你需要做的任何事情。

mountpoint手册说:

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

山的手册说:

列表模式仅保持向后兼容。 为了更强大和可定制的输出使用findmnt(8),特别是在你的脚本。

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

可以在/ etc / fstab,/ etc / mtab或/ proc / self / mountinfo中search

所以它实际上search比mountpoint更多的东西。 它也提供了方便的select:

-M, – 点path

明确定义安装点文件或目录。 另见–target。

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

 if [[ $(findmnt -M "$FOLDER") ]]; then echo "Mounted" else echo "Not mounted" fi 

例:

 mkdir -p /tmp/foo/{a,b} cd /tmp/foo sudo mount -o bind ab touch a/file ls b/ # should show file rm -fb/file ls a/ # should show nothing [[ $(findmnt -M b) ]] && echo "Mounted" sudo umount b [[ $(findmnt -M b) ]] || echo "Unmounted" 

我的解决scheme

 is_mount() { path=$(readlink -f $1) grep -q "$path" /proc/mounts } 

例:

 is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/ 

对于Mark J. Bobak的回答 ,如果在不同的文件系统中使用bind选项进行装载, mountpoint 点将不起作用。

对于Christy Neylan的回答 ,不需要将grep的输出redirect到/ dev / null,而只需要使用grep -q

最重要的是,使用readlink -f $mypath来规范path

  • 如果使用反斜杠检查/path/to/dir/ end等path, /proc/mountsmount输出中的/path/to/dir/path/to/dir
  • 在大多数Linux发行版中, /var/run//var/run/的符号链接,因此如果为/var/run/mypath装入绑定并检查它是否挂载,它将显示为/proc/mounts /run/mypath

在我的.bashrc中,我做了以下别名:

 alias disk-list="sudo fdisk -l"