私は使っている
mount -o bind /some/directory/here /foo/bar
Bashスクリプトを使用して/foo/bar
を確認し、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出します。これどうやってするの?
CentOSはオペレーティングシステムです。
引数なしでmount
コマンドを実行すると、現在のマウントがわかります。シェルスクリプトから、grep
とifステートメントを使用してマウントポイントを確認できます。
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
私の例では、ifステートメントはgrep
の終了コードをチェックしており、一致したかどうかを示しています。一致がある場合に出力を表示したくないので、/dev/null
にリダイレクトしています。
O/Sについて言及する必要はありません。
Ubuntu Linux 11.10(そしておそらく最新のLinux版)にはmountpoint
コマンドがあります。
これが私のサーバーの1つの例です。
$ mountpoint /Oracle
/Oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
実際、あなたの場合、次のように-q
オプションを使用できるはずです。
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
お役に立てば幸いです。
mountpoint
のマニュアルには次のように書かれています:
指定されたディレクトリまたはファイルが/ proc/self/mountinfoファイルで言及されているかどうかを確認します。
mount
のマニュアルには次のように書かれています:
リストモードは、下位互換性のためにのみ維持されています。より堅牢でカスタマイズ可能な出力を得るには、特にスクリプトでfindmnt(8)を使用します。
したがって使用する正しいコマンドはfindmnt
であり、それ自体は util-linux
パッケージの一部であり、マニュアル:
/ etc/fstab、/ etc/mtab、または/ proc/self/mountinfoで検索できる
したがって、実際にはmountpoint
よりも多くのものを検索します。また、便利なオプションも提供します。
-M、-mountpointpath
マウントポイントファイルまたはディレクトリを明示的に定義します。 --targetも参照してください。
要約すると、ディレクトリがbashでマウントされているかどうかを確認するには、次を使用できます。
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
例:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
Sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
Sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
私の解決策:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
例:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Mark J. Bobak's answer の場合、異なるファイルシステムでmountpoint
オプションを指定してマウントすると、bind
は機能しません。
Christopher Neylan's answer の場合、grepの出力を/ dev/nullにリダイレクトする必要はなく、代わりにgrep -q
を使用します。
最も重要なのは、readlink -f $mypath
を使用してパスを正規化することです:
/path/to/dir/
などのパスをバックスラッシュで終了すると、/proc/mounts
またはmount
出力のパスは/path/to/dir
になります/var/run/
は/run/
のシンボリックリンクです。したがって、/var/run/mypath
のバインドをマウントし、マウントされているかどうかを確認すると、/run/mypath
に/proc/mounts
] _。別のクリーンなソリューションは次のようなものです。
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
確かに、「echo something」は、それぞれの場合に必要なものに置き換えることができます。