ディレクトリがbashでマウントされているかどうかを確認する


94

使ってます

mount -o bind /some/directory/here /foo/bar

/foo/barbashスクリプトで確認して、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出してください。これどうやってするの?

CentOSはオペレーティングシステムです。


「[[$(mount -l ... | fgrep ... | wc -l)]]; then ...」のようなもの
bobah

サーバー障害スタックオーバーフローUnixおよびLinuxスタック交換についても同様の質問があります
サーシャ

回答:


70

mount引数なしでコマンドを実行すると、現在のマウントがわかります。シェルスクリプトから、マウントポイントとgrepifステートメントを確認できます。

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

私の例では、ifステートメントはの終了コードをチェックしてgrepいます。これは、一致があったかどうかを示します。一致した場合に出力を表示したくないので、にリダイレクトしてい/dev/nullます。


4
文字列を返すかどうかを確認する必要はありません。grep一致がない場合、ゼロ以外の終了ステータスを返します。テストや$()で作成されたサブシェルは必要ありません。if command | grep -q 'stuff'; then ...
ヨルダン

31
これはマウントバインドでは機能しないため、回答として受け入れるべきではありません。この回答は否決されるべきです。mount | grep ...マウントバインドがまだアクティブであることを示すことに 依存することはできません。基になるデバイスがマウント解除されて再マウントされた場合、マウントバインドは実際には2つのファイル/ディレクトリを接続しませんが、mount接続されていることを示しています。そうすると、umount ...マウントさmountれていないことも表示されますが、そうだったと言いました。Linuxファイルシステムの大きな欠陥。
Dev Null、

@DevNull:あなたが説明した問題を正確に抱えています。この問題の解決策はありますか?
アイザック

@Isaac、応答が遅れて申し訳ありません。readlink -fパス/ファイルが存在しない場合は何も返さないを使用してみます。基礎となる/ mount / path / to_fileがそこにない場合(readlinkごとに)、基礎となるマウントは壊れています(基礎となるマウントとバインディングを再マウントします)。基礎となるファイルが存在し、そのファイルreadlink -fのbinding-versionが存在しないと表示された場合、バインディングは壊れています。バインディングを再マウントしてください。
Dev Null 2014

2
マウントが呼び出された場合/mnt/md0xxx、コマンドはマウント/mnt/md0されている必要はないがマウントされていることを示します...
David L.

178

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

お役に立てば幸いです。


7
「mountpoint」コマンドを実行したときに実際に何かがマウントされていますか?マウントポイントを意図している場合でも、実際に何かがマウントされていない限り、それは単なるディレクトリです。
Mark J. Bobak

2
+ 1、Ubuntu 10.10でも動作します。8.04以降、Ubuntuで使用されています。
l0b0

3
マウントポイントはRHEL 6.3にも存在します(おそらく以前のバージョンでも)
Joril

2
mountpointが存在し、Debian 7( "Wheezy")とUCS 4でも完全に動作します
Lahmizzar

7
別のコメントで述べたように、マウントポイントはバインドマウントでは機能しません。スニペットはディレクトリを複数回マウントします
csanchez

39

のマニュアルはmountpointそれを言う:

指定されたディレクトリまたはファイルが/ proc / self / mountinfoファイルに記述されているかどうかを確認します。

のマニュアルにmountよると:

リストモードは、下位互換性のためにのみ維持されています。より堅牢でカスタマイズ可能な出力については、特にスクリプトでfindmnt(8)を使用してください。

したがって、使用する正しいコマンドはfindmnt、それ自体がutil-linuxパッケージの一部であり、マニュアルによると、

/ etc / fstab、/ etc / mtabまたは/ proc / self / mountinfoを検索できます

したがって、実際にはを超えるものを検索しますmountpoint。また、便利なオプションも提供します。

-M、-mountpoint path

マウントポイントファイルまたはディレクトリを明示的に定義します。--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"

2

を使用する答え/proc/mountsは好きですが、単純なgrepをするのは好きではありません。それはあなたに偽陽性を与える可能性があります。あなたが本当に知りたいのは、「どの行にもフィールド番号2のこの正確な文字列があるか」です。だから、その質問をしてください。(この場合はチェックしています/opt

awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts

# and you can use it in and if like so:

if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then
  echo "yes"
else
  echo "no"
fi

1
これは素敵です!正確にあなたがいない派手なツールのような小規模な組み込みシステム用に欲しいものmountpointfindmnt存在します。非常に単純な返事、大喜び、UNIXなど:)
troglobit

1

私の解決策:

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の答えmountpointでマウントする場合は動作しませbind異なるファイルシステム内のオプション。

クリストファーNeylanの答え、それだけで使用は、/ dev / nullにリダイレクトのgrepの出力に必要ないですgrep -q代わりに。

最も重要なのは、次を使用してパスを正規化することreadlink -f $mypathです。

  • /path/to/dir/バックスラッシュで終了するなどのパスをチェックすると、パス/proc/mountsまたはmount出力は/path/to/dir
  • ほとんどのLinuxリリースで/var/run/ははのシンボリックリンクで/run/あるため、バインドをマウントしてマウントされ/var/run/mypathているかどうかを確認すると、のように表示さ/run/mypath/proc/mountsます。

2
"grep -q" $ path "/ proc / mounts"(スペースあり)の方が良いと思います...そうでない場合、abcがマウントされている場合、is_mount abはtrueを返しますか?
alfonx 2018年

0

別のクリーンなソリューションはそのようなものです:

$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted

確かに、「エコー何か」は、それぞれのケースで必要なことで置き換えることができます。


これは、@ ChristopherNeylanの回答とまったく同じことを行っています。
ジョナサンH

0

ここでの答えは複雑すぎるので、マウントが存在するかどうかを確認してください:

cat /proc/mounts | tail -n 1

これは、最後にマウントされたフォルダーのみを出力します。すべてを表示したい場合は、tailコマンドを削除してください。


-4

私の.bashrcで、次のエイリアスを作成しました。

alias disk-list="sudo fdisk -l"

リクエストはスクリプトに関するものであり、「ディスクパーティションの操作」を目的とするsudoおよびプログラムを回避するのが最善です
bcag2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.