【超解説】Linux Bash でスペースを含むファイルシステムのマウントポイントをフルパス取得する高度なテクニック
Linux Bash でスペースを含むファイルシステムのマウントポイントのフルパスを取得する方法
このチュートリアルでは、Bash でスペースを含むファイルシステムのマウントポイントのフルパスを取得する方法について説明します。
要件
- Linux システム
- Bash シェル
方法
readlink -f
コマンドを使用する
readlink -f
コマンドは、シンボリックリンクを辿り、そのリンク先のファイルまたはディレクトリの絶対パスを取得します。 このコマンドを使用して、マウントポイントのシンボリックリンクを辿り、そのフルパスを取得できます。
mountpoint=$(readlink -f "$mountpoint")
例:
mountpoint="/mnt/ my data"
full_path=$(readlink -f "$mountpoint")
echo "Full path: $full_path"
この例では、$mountpoint
変数にスペースを含むマウントポイント /mnt/ my data
が設定されています。 readlink -f
コマンドを使用して、このシンボリックリンクを辿り、そのフルパスを取得します。 取得したフルパスは full_path
変数に格納されます。
proc/mounts
ファイルを使用する
/proc/mounts
ファイルには、現在システムにマウントされているすべてのファイルシステムに関する情報が格納されています。 このファイルを使用して、マウントポイントとデバイス名の両方に基づいてマウントポイントのフルパスを取得できます。
while IFS= read -r device mountpoint type options _; do
if [ "$mountpoint" = "$target_mountpoint" ]; then
full_path="$device"
break
fi
done < /proc/mounts
target_mountpoint="/mnt/ my data"
full_path=""
while IFS= read -r device mountpoint type options _; do
if [ "$mountpoint" = "$target_mountpoint" ]; then
full_path="$device"
break
fi
done < /proc/mounts
echo "Full path: $full_path"
この例では、target_mountpoint
変数にスペースを含むマウントポイント /mnt/ my data
が設定されています。 /proc/mounts
ファイルをループ処理し、各エントリのマウントポイントとデバイス名を比較します。 マウントポイントが一致した場合、デバイス名が full_path
変数に格納されます。
注意事項
- 上記の方法は、ルート権限で実行する必要があります。
- スペースを含むマウントポイントを使用する場合は、引用符で囲む必要があります。
#!/bin/bash
# スペースを含むマウントポイント
mountpoint="/mnt/ my data"
# フルパスを取得
full_path=$(readlink -f "$mountpoint")
# フルパスを表示
echo "Full path: $full_path"
#!/bin/bash
# スペースを含むマウントポイント
target_mountpoint="/mnt/ my data"
# フルパスを初期化
full_path=""
# /proc/mounts ファイルをループ処理
while IFS= read -r device mountpoint type options _; do
if [ "$mountpoint" = "$target_mountpoint" ]; then
full_path="$device"
break
fi
done < /proc/mounts
# フルパスを表示
echo "Full path: $full_path"
説明
サンプル 1:
readlink -f
コマンドは、シンボリックリンクを辿り、そのリンク先のファイルまたはディレクトリの絶対パスを取得します。- 取得したフルパスは
full_path
変数に格納されます。
/proc/mounts
ファイルには、現在システムにマウントされているすべてのファイルシステムに関する情報が格納されています。- ファイルをループ処理し、各エントリのマウントポイントとデバイス名を比較します。
- マウントポイントが一致した場合、デバイス名が
full_path
変数に格納されます。
実行方法
- 上記のコードをテキストエディタで保存します。
- ファイル名を
get_full_path.sh
などに変更します。 - 以下のコマンドを実行して、スクリプトを実行します。
chmod +x get_full_path.sh
./get_full_path.sh
出力例
Full path: /dev/sda1
他の方法
findmnt コマンドを使用する
findmnt
コマンドは、マウントされたファイルシステムに関する情報を表示するために使用されるユーティリティです。 このコマンドを使用して、マウントポイントとファイルシステムラベルの両方に基づいてマウントポイントのフルパスを取得できます。
full_path=$(findmnt -o "source" -n -l -f --label="$label")
label="my data"
full_path=$(findmnt -o "source" -n -l -f --label="$label")
echo "Full path: $full_path"
この例では、label
変数にファイルシステムラベル "my data" が設定されています。 findmnt
コマンドを使用して、このラベルを持つマウントポイントのエントリを検索します。 検索結果の最初のエントリの "source" フィールド (デバイス名) が full_path
変数に格納されます。
df コマンドと awk ユーティリティを使用する
df
コマンドは、ファイルシステムのディスク使用量を表示するために使用されるユーティリティです。 このコマンドと awk
ユーティリティを組み合わせて使用することで、マウントポイントとファイルシステムタイプに基づいてマウントポイントのフルパスを取得できます。
full_path=$(df -T "$fstype" | grep "$mountpoint" | awk '{print $1}')
fstype="ext4"
mountpoint="/mnt/ my data"
full_path=$(df -T "$fstype" | grep "$mountpoint" | awk '{print $1}')
echo "Full path: $full_path"
この例では、fstype
変数にファイルシステムタイプ "ext4"、mountpoint
変数にスペースを含むマウントポイント /mnt/ my data
が設定されています。 df
コマンドを使用して、指定されたファイルシステムタイプのファイルシステムのエントリを一覧表示します。 そして、grep
コマンドを使用して、出力結果をマウントポイントでフィルター処理します。 最後に、awk
ユーティリティを使用して、最初のエントリの最初のフィールド (デバイス名) を取得します。 取得したデバイス名が full_path
変数に格納されます。
- 上記の方法で使用されるコマンドは、システムによって異なる場合があります。
linux bash filesystems