1. 序章
この記事では、ディレクトリがマウントされているかどうかを判断するさまざまな方法について説明します。 これを行うには、コマンド mount 、 mountpoint 、および findmnt を使用し、 / proc /mountsを読み取ります。
次に、bashで小さなスクリプトも作成します。 例として、 / mnt / backup がマウントされているかどうかを確認し、マウントされていない場合はマウントします。
2. mountコマンドの使用
ディレクトリがマウントされているかどうかを判断する1つの方法は、mountコマンドを実行して出力をフィルタリングすることによりです。
現在マウントされているファイルシステムのリストが出力されるため、 awk を使用して、列番号3にあるディレクトリを検索できます。
$ mount | awk '{if ($3 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}'
/ mnt / backup がマウントポイントの場合、上記の行は0(成功)で終了します。 それ以外の場合は、-1(エラー)を返します。
このアプローチの欠点は、フォルダーの名前に空白がある場合、これが正しく機能しないことです。
/ mnt / backup がすでにマウントされていない限り、マウントする例を書いてみましょう。
$ {
if mount | awk '{if ($3 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}'; then
echo "/mnt/backup already mounted"
else
mount /dev/sdc1 /mnt/backup
fi
}
チェックするパスをパラメーターとして取る関数を作成することで、これをより移植性の高いものにすることができます。
$ is_mounted() {
mount | awk -v DIR="$1" '{if ($3 == DIR) { exit 0}} ENDFILE{exit -1}'
}
これで、その関数を使用して、if-elseをより明確にすることができます。
$ {
if is_mounted "/mnt/backup"; then
echo "/mnt/backup already mounted"
else
mount /dev/sdc1 /mnt/backup
fi
}
そして最後に、1つの結果のみに関心がある場合は、ワンライナーを作成できます。 ||を使用して行を書きましょうマウントされていない場合にディレクトリをマウントするには:
$ mount | awk '{if ($3 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' || mount /dev/sdc1 /mnt/backup
または、 && ディレクトリが実際にマウントされている場合にのみタスクを実行する場合:
$ mount | awk '{if ($3 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' && echo "/mnt/backup already mounted"
3. mountpointコマンドの使用
ディレクトリを引数として受け入れ、マウントされている場合は出力するmountpointコマンドを使用することもできます。このように、awkなしでmountpointを直接使用できます。
$ mountpoint /mnt/backup
mountpoint を使用して、前のセクションの例を繰り返してみましょう。 また、パラメータ -q を受け入れて静かにするため、出力を / dev /nullにリダイレクトする必要はありません。
$ {
if mountpoint -q /mnt/backup; then
echo "/mnt/backup already mounted"
else
mount /dev/sdc1 /mnt/backup
fi
}
コードは明確ですが、 mount の場合と同じように、ディレクトリをパラメータ化して関数を記述できます。
$ is_mounted() {
mountpoint -q "$1"
}
繰り返しになりますが、すべてを1行で書き込むことができます。 2つの選択肢があります。1つはフォルダがマウントされていない場合、もう1つはマウントされている場合です。
$ mountpoint -q /mnt/backup || mount /dev/sdc1 /mnt/backup
$ mountpoint -q /mnt/backup && echo "/mnt/backup already mounted"
4. findmntコマンドの使用
ディレクトリがマウントされているかどうかを判断する別の方法は、 findmntを使用し、そのディレクトリをパラメータとして指定することです。
findmnt は、マウントされているすべてのファイルシステムのツリーを表示します。
ただし、ディレクトリをパラメータとして指定すると、そのディレクトリに関する情報のみが出力されます。
$ findmnt /mnt/backup
if-else内でfindmntを使用して例を繰り返しましょう。
$ {
if findmnt /mnt/backup >/dev/null; then
echo "/mnt/backup already mounted"
else
mount /dev/sdc1 /mnt/backup
fi
}
is_ Mounted()関数を書き直すこともできます。
$ is_mounted() {
findmnt "$1" >/dev/null
}
繰り返しになりますが、どちらの場合にも便利なワンライナーを用意できます。
$ findmnt /mnt/backup >/dev/null || mount /dev/sdc1 /mnt/backup
$ findmnt /mnt/backup >/dev/null && echo "/mnt/backup already mounted"
5. / proc /mountsを読み取ります
最後に、/ proc / mountsファイルのコンテンツをフィルタリングすると、ディレクトリがマウントされているかどうかを確認できます。 このファイルにはmountおよびfindmntと同様の情報があるため、 awk を使用して、目的のディレクトリを検索します。
$ awk '{if ($2 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' < /proc/mounts
これで、if-elseの例をやり直すことができます。
$ {
if awk '{if ($2 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' < /proc/mounts; then
echo "/mnt/backup already mounted"
else
mount /dev/sdc1 /mnt/backup
fi
}
関数内に条件を記述して、コードをより明確にしましょう。
$ is_mounted() {
awk -v DIR="$1" '{if ($2 == DIR) { exit 0}} ENDFILE{exit -1}' < /proc/mounts
}
そして最後に、ワンライナーの代替案を使用できます。
$ awk '{if ($2 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' < /proc/mounts || mount /dev/sdc1 /mnt/backup
$ awk '{if ($2 == "/mnt/backup") { exit 0}} ENDFILE{exit -1}' < /proc/mounts && echo "/mnt/backup already mounted"
mount の例で説明したように、ディレクトリ名に空白がある場合、このメソッドはうまく機能しません。
6. 結論
この記事では、ディレクトリがマウントされているかどうかを確認する4つの異なる方法を確認し、それを支援するためにいくつかの小さなbashユーティリティを作成しました。