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ユーティリティを作成しました。