特定のディレクトリを確認する方法は、Linuxマシンにマウントされています。たとえば、testという名前のフォルダーがあります。マウントされているかどうかを確認したいと思います。
ファイルシステムのマウントポイントであることを確認する場合は、(ほとんどのLinuxベースのシステムで)mountpoint
コマンドを使用します。
_if mountpoint -q -- "$dir"; then
printf '%s\n' "$dir is a mount point"
fi
_
これは、_.
_と_..
_が同じデバイス番号(stat()
結果の_st_dev
_)を持っているかどうかを確認することで行われます。したがって、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"
_
mountpoint
と同様に、_/
_がマウントポイントではない場合でも_/
_に対してtrueを返します(chroot
jail内にある場合など)、またはbindのマウントポイントに対してfalse
を返します。同じファイルシステムをそれ自体の中にマウントします。
mountpoint
とは逆に、シンボリックリンクの場合、シンボリックリンクのターゲットがマウントポイントであるかどうかをチェックします。
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列目は、ファイルシステム内のシステムのどこにマウントされているかを示しています。
まあ、他の人が言ったように、あなたはあなたの質問を編集して、あなたが達成しようとしていることを明確にするべきです。私が理解している限り、ディレクトリが特定のデバイスにマウントされているかどうかを確認する必要があります。以下のようなものも試すことができます。
df -P /test | tail -1 | cut -d' ' -f 1
したがって、基本的に、上記のコマンドは、デバイスがディレクトリにマウントされている場合、ディレクトリのマウントポイントを通知します。
新しいXFSファイルシステムのマウントを確認したいときに、同じ質問を探していました。
コマンド findmnt が見つかりました:findmnt /directoryname
[root@CentOS7-Server /]# findmnt /mnt
TARGET SOURCE FSTYPE OPTIONS
/mnt /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,noquota
[root@CentOS7-Server /]#
素晴らしくて短いPythonワンライナーは Gillesの答え に基づいて構築できます:
$ 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
/proc/self/mounts
ファイルを解析するmountpoint
コマンドのカスタム実装をPythonで作成しました。コマンドが/proc/self/mountinfo
を解析することを除いて、ステファンの回答のmount
と同じような動作です。使い方は非常に簡単です: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
あなたの質問は少し混乱しますが、それを確認する方法の1つであると思います:mount |awk '{print $3}'| grep -w <your_directory>
。出力が空の場合、デバイスはディレクトリにマウントされていません。空でない場合は、一部のデバイスがディレクトリにマウントされています。他の方法はdf <your_directory>
を使用することです。最後のフィールドがディレクトリ名と等しい場合-一部のデバイスがそれにマウントされています。