如何检查特定目录是否是挂载点?例如,存在一个名为/test
that 的文件夹,我想检查它是否是挂载点。
答案1
如果您想检查它是文件系统的挂载点,则可以mountpoint
使用以下命令(在大多数基于 Linux 的系统上):
if mountpoint -q -- "$dir"; then
printf '%s\n' "$dir is a mount point"
fi
它通过检查.
和是否..
具有相同的设备编号(st_dev
在stat()
结果中)来实现这一点。因此,如果您没有该mountpoint
命令,您可以执行以下操作:
perl -le '$dir = shift; exit(1) unless
(@a = stat "$dir/." and @b = stat "$dir/.." and
($a[0] != $b[0] || $a[1] == $b[1]))' "$dir"
就像 一样,即使不是挂载点(例如在监狱中),或者对于 a 的挂载点mountpoint
,它也会返回 true/
/
chroot
false
绑定在其自身内安装相同的文件系统。
与 相反mountpoint
,对于符号链接,它将检查符号链接的目标是否是挂载点。
答案2
正如 HalosGhost 在评论中提到的,目录本身不一定是挂载的。相反,它们存在于已安装的设备上。要检查这一点,您可以使用df
如下命令:
$ df -h /boot/
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 99M 55M 40M 59% /boot
在这里我们可以看到该目录/boot
是文件系统的一部分/dev/hda1
。这是系统上的物理设备,即 HDD。
mount
您还可以通过使用命令查询系统以查看当前安装的设备来稍微不同地解决这个问题:
$ mount | column -t
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/lvm--raid-lvm0 on /export/raid1 type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
在这里您可以看到系统上当前安装的设备类型和文件系统类型。第三列显示它们在系统文件系统中的安装位置。
答案3
当我想检查安装新的 XFS 文件系统时,我正在寻找同样的问题。
我找到了命令发现:findmnt /directoryname
[root@CentOS7-Server /]# findmnt /mnt
TARGET SOURCE FSTYPE OPTIONS
/mnt /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,noquota
[root@CentOS7-Server /]#
答案4
可以基于以下构建漂亮而简短的Python单行代码吉尔斯的回答:
$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /mnt/HDD
True
$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /etc
False
mountpoint
我已经在 Python 中自定义了命令的实现,它解析/proc/self/mounts
文件。与 Stephane 的答案中的行为类似mount
,除了命令 parses /proc/self/mountinfo
。用法非常简单:is_mountpoint.py /path/to/dir
。
#!/usr/bin/env python3
from os import path
import sys
def main():
if not sys.argv[1]:
print('Missing a path')
sys.exit(1)
full_path = path.realpath(sys.argv[1])
with open('/proc/self/mounts') as mounts:
print
for line in mounts:
if full_path in line:
print(full_path,' is mountpoint')
sys.exit(0)
print(full_path,' is not a mountpoint')
sys.exit(1)
if __name__ == '__main__':
main()
测试运行:
$ python3 ./is_mountpoint.py /mnt/HDD
/mnt/HDD is mountpoint
$ lsblk | grep HDD
└─sdb6 8:22 0 405.3G 0 part /mnt/HDD
$ python3 ./is_mountpoint.py $HOME
/home/xieerqi is not a mountpoint