使ってます
mount -o bind /some/directory/here /foo/bar
/foo/barbashスクリプトで確認して、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出してください。これどうやってするの?
CentOSはオペレーティングシステムです。
使ってます
mount -o bind /some/directory/here /foo/bar
/foo/barbashスクリプトで確認して、マウントされているかどうかを確認したいのですが。そうでない場合は、上記のマウントコマンドを呼び出してください。これどうやってするの?
CentOSはオペレーティングシステムです。
回答:
mount引数なしでコマンドを実行すると、現在のマウントがわかります。シェルスクリプトから、マウントポイントとgrepifステートメントを確認できます。
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"