/ mnt/diskがシェルスクリプトのマウントポイントであるかどうかをテストするとします。これはどうやるんですか?
私の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パッケージに付属しているようですが、このコマンドが他のシステムで使用できるかどうかはわかりません。
[root@myhost~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17
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
であれば正しいことを行います。
欠点は、それが/
をマウントポイントとしてマークしないことです。まあ、それは特別な場合には十分簡単ですが、それでもまだです。
GNU findを使用する
find <directory> -maxdepth 0 -printf "%D"
ディレクトリのデバイス番号が表示されます。ディレクトリとその親の間で異なる場合は、マウントポイントがあります。
追加 /。異なるファイルシステムへのシンボリックリンクをマウントポイントとしてカウントする場合は、ディレクトリ名に追加します(常に親に使用する必要があります)。
短所:GNUを使用しているため、移植性が低い
利点:/ etc/mtabに記録されていないマウントポイントをレポートします。
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
...
fi
編集:カットを使用するボンベのアイデアを使用しました。
残念ながら、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」は、「パブリック」共有のマウントポイントです。
df $path_in_question | grep " $path_in_question$"
これは$?
完了時に。
for mountedPath in `mount | cut -d ' ' -f 3`; do
if [ "${mountedPath}" == "${wantedPath}" ]; then
exit 0
fi
done
exit 1
mount | awk '$3 == "/pa/th" {print $1}'
がマウントポイントでない場合は空です^^
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
以下は、移植性があると想定されている "df -P"のバリアントです。
mat@owiowi:/tmp$ f(){ df -P | awk '{ if($6 == "'$1'")print }' ; }
mat@owiowi:/tmp$ f /
/dev/mapper/lvm0-vol1 20642428 17141492 2452360 88% /
mat@owiowi:/tmp$ f /mnt
mat@owiowi:/tmp$ f /mnt/media
/dev/mapper/lvm0-media 41954040 34509868 7444172 83% /mnt/media