【发布时间】:2011-05-11 21:11:10
【问题描述】:
我在特定目录上安装了一个 tmpfs 文件系统。我想写一个shell脚本来检查tmpfs文件系统是否已经挂载在目录上。
【问题讨论】:
标签: shell filesystems mount
我在特定目录上安装了一个 tmpfs 文件系统。我想写一个shell脚本来检查tmpfs文件系统是否已经挂载在目录上。
【问题讨论】:
标签: shell filesystems mount
像这样的东西,虽然很老套,但应该可以解决问题:
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
【讨论】:
mountpoint 更加优雅,在 sysvinit-tools CentOS 6+++ 中
【讨论】:
我知道这个线程已经过时了,但为什么不直接使用 df 和 grep 作为挂载点所需的路径呢?即像这样:
df /full/path | grep -q /full/path
grep 如果已挂载则返回 true,否则返回 false。所以我们只需要像这样测试它:
df /mnt/myUSBdisk | grep -q /mnt/myUSBdisk && echo "Mounted" || echo "Not mounted"
简单易懂...
【讨论】:
df /tmp | grep -q tmpfs && echo "Shared Memory" || echo "Not Shared Memory 或者,更重要的是df /tmp | grep -q tmpfs && tmp=/tmp || tmp=/dev/shm
有一个专门用于此的工具: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 是 util-linux 的一部分(特别是 sys-utils 部分),并且在大多数 Linux 发行版中可能以一种或另一种方式可用。然而,它不是 GNU 的一部分,也不太可能在非 Linux 系统上可用。
您可以检查文件系统的类型。
$ 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【讨论】:
if mount -l -t tmpfs | grep "on $directory "
then
echo "it's mounted"
fi
【讨论】:
你可以使用df,试试man df。
df 'directory' | awk '{print $1, $6}'
会给你一些喜欢的东西:
Filesystem Mounted
/dev/sda5 'some_dir'
然后您可以添加检查目录 'some_dir' 是否与 'your_dir' 相同,文件系统是否与您的相同。
【讨论】:
检查 /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
【讨论】:
if grep ... - 也不需要括号。