ファイルシステムの形式を確認する方法

ファイルシステムの形式を確認する方法

Bashスクリプトでディレクトリのファイルシステムタイプを確認したいと思います。

アイデアはこんな感じ

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

答え1

標準のLinuxディストリビューションと同様に、GNU statコマンドがインストールされているシステムでは、構文解析なしで特定のファイルのfsタイプを取得できますstat

stat -f -c %T filename

-fstatファイルではなくファイルシステムに関する情報を提供し、-c %T人間が読み取ることができるファイルシステムタイプのみを含むように出力フォーマットを指定することを示します(%T)。

したがって、これは(bashで)使用できます:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man statより多くの情報が提供されます。

答え2

使用df。パスを渡すと、そのパスに関するファイルシステム情報が提供されます。ファイルシステムタイプが必要な場合は、-T次のスイッチを使用してください。

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

ファイルシステムの種類を抽出するには、それを解析できます(-Pデバイス部分が長すぎる場合は改行を防ぐためにスイッチを使用してください)。df

$ df -PT test | awk 'NR==2 {print $2}'
ext4

したがって、次のように設定に値を使用できますif

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

デバイス列にはスペースを含めることができますが(まれに)、この場合、解析は失敗します。

答え3

findmnt(の一部)とutil-linux

findmnt -no fstype -T /path/to/file

このオプションを使用する場合

-T、-ターゲット
パスがマウントポイントファイルまたはディレクトリでない場合は、マウントfindmntポイントを取得するためにパス要素を逆の順序で確認します。他の2つのオプションはヘッダー行を抑制し、一覧-n, --noheading表示する列を選択します。-o, --output


dffromには、特定のフィールドのみを印刷するcoreutils同様のオプションがあります。たとえば、次のようになります。--output=fstype

df --output=fstype /path/to/file

ただし、ヘッダーを削除するオプションがないため、出力をパイプに接続する必要があります。| sed 1d

関連情報