使ってます
mount -o bind /some/directory/here /foo/bar
/foo/bar
bashスクリプトで確認して、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出してください。これどうやってするの?
CentOSはオペレーティングシステムです。
使ってます
mount -o bind /some/directory/here /foo/bar
/foo/bar
bashスクリプトで確認して、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出してください。これどうやってするの?
CentOSはオペレーティングシステムです。
回答:
mount
引数なしでコマンドを実行すると、現在のマウントがわかります。シェルスクリプトから、マウントポイントとgrep
ifステートメントを確認できます。
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
私の例では、ifステートメントはの終了コードをチェックしてgrep
います。これは、一致があったかどうかを示します。一致した場合に出力を表示したくないので、にリダイレクトしてい/dev/null
ます。
grep
一致がない場合、ゼロ以外の終了ステータスを返します。テストや$()で作成されたサブシェルは必要ありません。if command | grep -q 'stuff'; then ...
mount | grep ...
マウントバインドがまだアクティブであることを示すことに 依存することはできません。基になるデバイスがマウント解除されて再マウントされた場合、マウントバインドは実際には2つのファイル/ディレクトリを接続しませんが、mount
接続されていることを示しています。そうすると、umount ...
マウントさmount
れていないことも表示されますが、そうだったと言いました。Linuxファイルシステムの大きな欠陥。
readlink -f
パス/ファイルが存在しない場合は何も返さないを使用してみます。基礎となる/ mount / path / to_fileがそこにない場合(readlinkごとに)、基礎となるマウントは壊れています(基礎となるマウントとバインディングを再マウントします)。基礎となるファイルが存在し、そのファイルreadlink -f
のbinding-versionが存在しないと表示された場合、バインディングは壊れています。バインディングを再マウントしてください。
/mnt/md0xxx
、コマンドはマウント/mnt/md0
されている必要はないがマウントされていることを示します...
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、-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"
を使用する答え/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
mountpoint
かfindmnt
存在します。非常に単純な返事、大喜び、UNIXなど:)
私の解決策:
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
/var/run/
ははのシンボリックリンクで/run/
あるため、バインドをマウントしてマウントされ/var/run/mypath
ているかどうかを確認すると、のように表示さ/run/mypath
れ/proc/mounts
ます。私の.bashrcで、次のエイリアスを作成しました。
alias disk-list="sudo fdisk -l"