AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 40891
Accepted
DrStalker
DrStalker
Asked: 2009-07-15 22:20:30 +0800 CST2009-07-15 22:20:30 +0800 CST 2009-07-15 22:20:30 +0800 CST

sh 脚本:如果未安装远程文件系统,如何安装它?

  • 772

在 bourne shell 脚本 (#!/bin/sh) 中,如何检查远程 NFS 共享是否已挂载,如果未挂载,则挂载它?目前,我有一组丑陋的 cat、greps 和 ifs 使用“mount”的输出,但它似乎并没有做可靠的工作。

nfs shell bourne-shell
  • 9 9 个回答
  • 17047 Views

9 个回答

  • Voted
  1. Best Answer
    Kyle Brandt
    2009-07-16T03:30:49+08:002009-07-16T03:30:49+08:00

    如果可能,设置自动挂载 ( autofs ) 将是执行此操作的标准方法。它可能已经在您的发行版中(CentOS / Redhat 默认安装附带)。 这是一个教程。

    为什么要使用自动挂载?

    自动挂载是由守护进程自动完成特定文件系统的挂载和卸载的过程。如果文件系统被卸载,并且用户尝试访问它,它将自动(重新)安装。这在大型网络环境中以及在几台机器(尤其是不总是在线的机器)之间交叉挂载文件系统时特别有用。

    • 5
  2. beggs
    2009-07-15T22:47:45+08:002009-07-15T22:47:45+08:00

    你能grep/etc/mtab设备吗? grep -c '/mnt/foo' /etc/mtab 如果 grep 输出 '1' 则 /mnt/foo 已安装。

    • 3
  3. Josh Kelley
    2009-07-16T04:45:04+08:002009-07-16T04:45:04+08:00

    使用mountpoint.

    mountpoint -q /path/to/nfs/share || mount -t nfs server:/nfs/share /path/to/nfs/share
    

    (我不知道它有多广泛或可移植mountpoint;它是由我的 Debian 服务器上的 initscripts 包提供的。)

    • 3
  4. Iain
    2009-07-16T04:04:41+08:002009-07-16T04:04:41+08:00

    在 solaris 中

    如果您检查运行脚本的系统是否安装了远程文件系统,那么

    ISMOUNTED=`/usr/sbin/mount | grep "^/path/to/mount "`
    if [ "$ISMOUNTED" = "" ]
    then
        mountcommand*
    fi
    

    *mountcommand 可以是 /usr/sbin/mount /path/to/mount 如果 /etc/vfstab 或 /usr/sbin/mount remotehost:/remote/path /path/to/mount 中有相应的条目

    • 2
  5. derobert
    2009-07-15T22:37:56+08:002009-07-15T22:37:56+08:00

    你也许可以用 stat 做一些事情。“设备”字段在不同的文件系统中会有所不同。因此,假设您想查看是否/mnt/foo已安装,您将比较stat -c%d /mnt/to的输出stat -c%d /mnt/foo/。如果设备不同,则在那里安装了一些东西。

    if [ `stat -c%d /mnt/` -eq `stat -c%d /mnt/foo/` ]; then
        mount /mnt/foo
    fi
    
    • 1
  6. James F
    2009-07-16T00:15:43+08:002009-07-16T00:15:43+08:00

    归根结底,Shell 编程是关于使用管道将小型离散工具插入在一起以产生某种复合实用程序。以“智能”方式完成您所要求的实用程序不会真正符合 Unix 哲学。

    如果您想更智能地执行此操作,您可能需要考虑在 Perl、Python 或 C 中执行此操作,您可以在其中使用库函数与端口映射器通信,以获取有关作为数据结构安装的文件系统的信息。然后,您可以智能地执行任务以将当前状态更改为您想要的状态。

    • 1
  7. Chad Huneycutt
    2009-07-16T05:30:54+08:002009-07-16T05:30:54+08:00

    只是为了抛出另一个想法, df 命令可以告诉您目录的挂载文件系统。如果您输入该-l选项,您将获得一个非常简单的测试,以查看目录是否在本地文件系统上。

    $ cd /net/remoteshare
    $ df -l .
    df: no file systems processed
    $ echo $?
    1

    • 1
  8. Dan Carley
    2009-07-16T00:37:43+08:002009-07-16T00:37:43+08:00

    几点建议:

    • 如果您的发行版有一个 RC 脚本来处理 NFS 挂载,那么谨慎使用或检查它的状态。如果您错误地假设 和 等服务已经启动,您可能会遇到portmap麻烦statd。

    • 它通常更可靠地用于/proc/mounts支持.mount/etc/mtab

    • 使用grep -qs并检查返回代码以确定是否存在安装。

    • 假设/etc/fstab 应该挂载中列出的所有 NFS 挂载,那么您可以使用mount -a -t nfs,nfs4. 任何已经安装的东西都将被忽略。

    • 0
  9. Tanaji Yadav
    2011-09-24T03:08:47+08:002011-09-24T03:08:47+08:00
    #!/bin/bash
    mountpoint='your mountpoint'
    mobileno=""
    smsurl=""
    mntcmd='/bin/mount -a'
    mntchkcmd='/bin/mount'   
    ###Check mount point available or not IF not alert to service own
    ${mntchkcmd} | /bin/grep ${mountpoint} > /dev/null 2>&1
    if [ $? != 0 ]
            then
        ${mntcmd}
        sleep 5
        ${mntchkcmd} | /bin/grep ${mountpoint} > /dev/null 2>&1
        if [ $? != 0 ]
            then
            echo "issue with mount point"
            exit
        fi
    fi
    ###If mount point is available then check it for utilisation.
    warn=90
    critical=95
    disksize=$(/bin/df -k ${mountpoint} | /bin/grep ${mountpoint} | /bin/awk -F% '{print $1}' | /bin/awk '{print $4}')
    if [ ${disksize} -gt ${warn} ]
        then
            echo 'warn'
        elif [ ${disksize} -gt ${critical} ] 
        then
            echo 'critical' 
    fi
    
    • 0

相关问题

  • 分析 Linux NFS 服务器性能

  • NFS 缓存导致间歇性滞后

  • UNIX 中硬挂载与软挂载的优缺点是什么?

  • 如何从 NFS 服务器获得类似 inotify 的事件通知?

  • 如何优化 1GBit 家庭网络上的 NFS 复制速度?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve