【问题标题】:Shell script to know whether a filesystem is already mounted用于了解文件系统是否已挂载的 Shell 脚本
【发布时间】:2011-05-11 21:11:10
【问题描述】:

我在特定目录上安装了一个 tmpfs 文件系统。我想写一个shell脚本来检查tmpfs文件系统是否已经挂载在目录上。

【问题讨论】:

    标签: shell filesystems mount


    【解决方案1】:

    像这样的东西,虽然很老套,但应该可以解决问题:

    FS_TO_CHECK="/dev" # For example... change this to suit your needs.
    
    if grep -F " $FS_TO_CHECK " /proc/mounts > /dev/null; then
        # Filesystem is mounted
    else
        # Filesystem is not mounted
    fi
    

    【讨论】:

      【解决方案2】:

      mountpoint 更加优雅,在 sysvinit-tools CentOS 6+++ 中

      【讨论】:

      • 这个低质量的答案复制了一个现有的答案,其中包含 2010 年的更多细节
      【解决方案3】:

      我知道这个线程已经过时了,但为什么不直接使用 df 和 grep 作为挂载点所需的路径呢?即像这样:

      df /full/path | grep -q /full/path
      

      grep 如果已挂载则返回 true,否则返回 false。所以我们只需要像这样测试它:

      df /mnt/myUSBdisk | grep -q /mnt/myUSBdisk && echo "Mounted" || echo "Not mounted"
      

      简单易懂...

      【讨论】:

      • 我决定投票赞成这个问题,因为虽然 mountpoint 对于提出的问题更容易,但这个答案更灵活。例如,一些 linux 发行版在 /tmp 上挂载共享内存 tmpfs,而另一些则使用 /dev/shm 或两者兼而有之。这个答案让您很容易意识到您可以判断 /tmp 是否是共享内存:df /tmp | grep -q tmpfs && echo "Shared Memory" || echo "Not Shared Memory 或者,更重要的是df /tmp | grep -q tmpfs && tmp=/tmp || tmp=/dev/shm
      【解决方案4】:

      有一个专门用于此的工具:mountpoint(1)

      if mountpoint -q "$directory" ; then
          echo it is a mounted mountpoint
      else
          echo it is not a mounted mountpoint
      fi
      

      而且你甚至不必刮弦就可以做到!

      请注意,我在 Debian 的 initscripts 包中找到了这个工具。我无法评论它在其他地方的可用性。

      【讨论】:

      • 我看到 mountpoint 是 Gentoo Linux sys-apps/util-linux 软件包的一部分,还有更多、mount、umount、dmesg 和一堆其他系统工具。我会说这是最干净的解决方案。
      • @cvolny:事实证明,mountpoint 是 util-linux 的一部分(特别是 sys-utils 部分),并且在大多数 Linux 发行版中可能以一种或另一种方式可用。然而,它不是 GNU 的一部分,也不太可能在非 Linux 系统上可用。
      • 看起来它与 RHEL 7.1 一起提供(错误。好的,我在这里安装了一些东西。所以我不能确定)
      【解决方案5】:

      您可以检查文件系统的类型。

      $ stat -f -c '%T' / xfs $ stat -f -c '%T' /dev/shm tmpfs

      您还可以通过将其设备与其父设备进行比较来检查目录是否为挂载点。

      $ stat -c '%D' / 901 $ stat -c '%D' /home fe01 $ stat -c '%D' /home/$USER fe01

      【讨论】:

        【解决方案6】:
        if mount -l -t tmpfs | grep "on $directory "
        then
            echo "it's mounted"
        fi
        

        【讨论】:

          【解决方案7】:

          你可以使用df,试试man df

          df 'directory' | awk '{print $1, $6}'
          

          会给你一些喜欢的东西:

          Filesystem Mounted
          /dev/sda5  'some_dir'
          

          然后您可以添加检查目录 'some_dir' 是否与 'your_dir' 相同,文件系统是否与您的相同。

          【讨论】:

            【解决方案8】:

            检查 /proc/mounts。如果您对文件系统名称和要挂载的路径(甚至可能包含所有选项的特定行)进行 grep,您可以判断文件系统是否已挂载。

            if [ "`grep "tmpfs /lib/init/rw tmpfs rw,nosuid,mode=755 0 0" /proc/mounts`" != "" ]
            then
              echo Mounted.
            else
              echo Not mounted.
            fi
            

            【讨论】:

            • 虚拟 -1 用于在重要位置使用反引号。
            • if grep ... - 也不需要括号。
            猜你喜欢
            • 1970-01-01
            • 2010-09-06
            • 2017-02-20
            • 2022-01-21
            • 2020-06-28
            • 2017-06-14
            • 1970-01-01
            • 2015-03-03
            • 1970-01-01
            相关资源
            最近更新 更多