webdevqa.jp.net

特定のパスがマウントポイントかどうかをテストする方法

/ mnt/diskがシェルスクリプトのマウントポイントであるかどうかをテストするとします。これはどうやるんですか?

35
Andrea Francia

私のFedora 7には、mountpointコマンドがあることがわかりました。

Manマウントポイントから:

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       /bin/mountpoint [-q] [-d] /path/to/directory
       /bin/mountpoint -x /dev/device

どうやらsysvinitパッケージに付属しているようですが、このコマンドが他のシステムで使用できるかどうかはわかりません。

[[email protected]~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17
53
Andrea Francia

mount/etc/mtab/proc/mountsなどに依存しない:

if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
    echo "$dir is mounted"
else
    echo "$dir is not mounted"
fi

$dirがマウントポイントの場合、その親ディレクトリとは異なるデバイス番号を持ちます。

これまでにリストされた代替方法よりも優れている点は、何も解析する必要がないことであり、dir=/some//path/../with///extra/componentsであれば正しいことを行います。

欠点は、それが/をマウントポイントとしてマークしないことです。まあ、それは特別な場合には十分簡単ですが、それでもまだです。

22
ephemient

GNU findを使用する

find <directory> -maxdepth 0 -printf "%D" 

ディレクトリのデバイス番号が表示されます。ディレクトリとその親の間で異なる場合は、マウントポイントがあります。

追加 /。異なるファイルシステムへのシンボリックリンクをマウントポイントとしてカウントする場合は、ディレクトリ名に追加します(常に親に使用する必要があります)。

短所:GNUを使用しているため、移植性が低い

利点:/ etc/mtabに記録されていないマウントポイントをレポートします。

5
William Hay
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
   ...
fi

編集:カットを使用するボンベのアイデアを使用しました。

3
haggai_e

残念ながら、mountpointとstatの両方に[〜#〜] mounting [〜#〜]の副作用があり、自動マウントを使用している場合にテストしているディレクトリになります。または、少なくとも、Debianでは、WD MyBookLiveネットワークディスクに自動CIFSを使用してそれを行います。実際にはマウントされていなくても、各[〜#〜] potential [〜#〜]マウントがすでに/ proc/mountsにあるため、/ proc/mountsのバリアントがより複雑になりました!

cut -d ' ' -f 1 < /proc/mounts | grep -q '^//disk/Public$' && umount /tmp/cifs/disk/Public
ここで、
 'disk'は/ etc/hosts内のサーバー(ネットワークディスク)の名前です。
 '// disk/Public'はCIFS共有名です。
 '/ tmp/cifs 'は自動マウントの場所です(/ tmpがRAM diskで、/は読み取り専用です)
'/tmp/cifs/disk 'は作成された通常のディレクトリですサーバー(「ディスク」と呼ばれます)が稼働しているとき。
「/ tmp/cifs/disk/Public」は、「パブリック」共有のマウントポイントです。
3
Howard
df $path_in_question | grep " $path_in_question$"

これは$? 完了時に。

3
chaz
for mountedPath in `mount | cut -d ' ' -f 3`; do
    if [ "${mountedPath}" == "${wantedPath}" ]; then
        exit 0
    fi
done
exit 1
2
Bombe
mount | awk '$3 == "/pa/th" {print $1}'

がマウントポイントでない場合は空です^^

0
user933161

stat --printf '%m' 特定のファイルまたはディレクトリのマウントポイントを表示します。

リアルパス 相対パスを直接に変換します。

2つの結果を比較すると、ディレクトリがマウントポイントかどうかがわかります。 stat 非常にポータブルです。 リアルパス はそれほどではありませんが、相対パスを確認する場合にのみ必要です。

持ち運びに困る マウントポイント です。

if [ "$(stat --printf '%m' "${DIR}")" = "$(realpath "${DIR}")" ]; then
    echo "This directory is a mount point."
else
    echo "This is not a mount point."
fi

なし リアルパス

if [  "${DIR}" = "$(stat --printf '%m' "${DIR}")" ]; then
    echo "This directory is a mount point."
else
    echo "This is not a mount point."
fi
0
Pedro

以下は、移植性があると想定されている "df -P"のバリアントです。

[email protected]:/tmp$ f(){ df -P  | awk '{ if($6 == "'$1'")print   }' ; }
[email protected]:/tmp$ f /
/dev/mapper/lvm0-vol1  20642428  17141492   2452360      88% /
[email protected]:/tmp$ f /mnt
[email protected]:/tmp$ f /mnt/media
/dev/mapper/lvm0-media  41954040  34509868   7444172      83% /mnt/media
0
MatthieuP