在 Bourne shell 脚本 (#!/bin/sh) 中,如何检查远程 NFS 共享是否已安装,如果未安装,则安装它?目前,我有一组使用“mount”输出的丑陋的 cat、greps 和 ifs,但它似乎不能可靠地完成工作。
答案1
如果可能的话,设置自动挂载 ( autofs ) 将是执行此操作的标准方法。它可能已经包含在您的发行版中(随 CentOS / Redhat 默认安装)。 这是一个教程。
为什么要使用 Automount?
自动挂载是指由守护进程自动挂载和卸载某些文件系统的过程。如果文件系统已卸载,而用户尝试访问它,它将被自动(重新)挂载。这在大型网络环境中以及在几台机器(尤其是不总是在线的机器)之间交叉挂载文件系统时特别有用。
答案2
您能 grep/etc/mtab
该设备吗? grep -c '/mnt/foo' /etc/mtab
如果 grep 输出“1”,则 /mnt/foo 已挂载。
答案3
使用mountpoint
。
mountpoint -q /path/to/nfs/share || mount -t nfs server:/nfs/share /path/to/nfs/share
(我不知道它mountpoint
的普及程度或可移植性如何;它是由我的 Debian 服务器上的 initscripts 包提供的。)
答案4
您可能能够使用 stat 执行某些操作。不同文件系统的“设备”字段会有所不同。因此,假设您想查看是否已安装,则可以将/mnt/foo
的输出与 进行比较。如果设备不同,则表示已安装某些设备。stat -c%d /mnt/
stat -c%d /mnt/foo/
if [ `stat -c%d /mnt/` -eq `stat -c%d /mnt/foo/` ]; then
mount /mnt/foo
fi