ウェブサイト検索

Findmnt コマンド: Linux でのファイルシステムのクエリを簡単にする


findmntは、通常すべての主要なLinuxディストリビューションのコアパッケージに含まれている無料でオープンソースのユーティリティです。これは、すべてのマウントされたファイルシステムをリスト表示するか、指定したファイルシステムのデータのみを取得することができます。このチュートリアルでは、findmntの使用方法と、タイプ、マウントオプション、およびその他のパラメータによるファイルシステムのクエリ方法を学びます。

このチュートリアルでは、あなたは学びます:

  • マウントされたファイルシステムに関する情報を取得するために findmnt を使用する方法
  • LABEL、UUID、名前、およびマウントポイントでファイルシステムを検索する方法
  • タイプとマウントオプションによるファイルシステムの検索方法

カテゴリー使用された要件、規約、またはソフトウェアのバージョン
システム配布非依存
ソフトウェアfindmnt
他のNone
協定# – ルートユーザーとして直接、または sudo コマンドを使用して実行される必要があるLinuxコマンド
$ – 権限のない通常のユーザーとして実行される必要があるLinuxコマンド

findmntの基本的な使い方

findmntを使う最も簡単な方法は、オプションや引数なしに呼び出すことです。その場合、ユーティリティはすべてのマウントされたファイルシステムに関する情報を表示し、4つの列に整理されます:

  • ターゲット
  • ソース
  • FSTYPE
  • オプション

最初の列「TARGET」には、ファイルシステムのマウントポイントに関する情報が含まれています。2番目の列「SOURCE」には、ファイルシステムをホストするソースデバイスのパスが含まれています。3番目の列「FSTYPE」には、ファイルシステムの種類に関する情報(例:ext4またはXFS)が報告されます。そして最後の4番目の列には、ファイルシステムに使用されるマウントオプションが表示されます。

上記のものは、findmnt の出力に使用されるデフォルトの列です。利用可能なすべての列のリストを、簡単な説明とともに取得するには、-H オプションを付けてユーティリティを呼び出すことができます。

findmnt -H
    ACTION <string>        action detected by --poll
     AVAIL <string|number> filesystem size available, use <number> if --bytes is given
      FREQ <integer>       dump(8) period in days [fstab only]
    FSROOT <string>        filesystem root
    FSTYPE <string>        filesystem type
FS-OPTIONS <string>        FS specific mount options
        ID <integer>       mount ID
 INO.AVAIL <string>        number of available inodes
 INO.TOTAL <string>        total number of inodes
  INO.USED <string>        number of used inodes
  INO.USE% <string>        percentage of INO.USED divided by INO.TOTAL
     LABEL <string>        filesystem label
   MAJ:MIN <string>        major:minor device number
OLD-OPTIONS <string>        old mount options saved by --poll
OLD-TARGET <string>        old mountpoint saved by --poll
   OPTIONS <string>        all mount options
OPT-FIELDS <string>        optional mount fields
    PARENT <integer>       mount parent ID
 PARTLABEL <string>        partition label
  PARTUUID <string>        partition UUID
    PASSNO <integer>       pass number on parallel fsck(8) [fstab only]
PROPAGATION <string>        VFS propagation flags
      SIZE <string|number> filesystem size, use <number> if --bytes is given
    SOURCE <string>        source device
   SOURCES <string>        all possible source devices
    TARGET <string>        mountpoint
       TID <integer>       task ID
      USED <string|number> filesystem size used, use <number> if --bytes is given
      USE% <string>        filesystem use percentage
      UUID <string>        filesystem UUID
VFS-OPTIONS <string>        VFS specific mount options

特定のファイルシステムに関する情報を取得する

すでに議論したように、findmntをオプションや引数なしで呼び出すと、すべてのマウントされたファイルシステムに関する情報が表示されます。これはあまり役に立ちません。ほとんどの時間、私たちは特定のファイルシステムに関する情報を収集することに興味があり、それをデバイス名、ラベル、UUID、またはメジャー:マイナー番号で参照できます。

ファイルシステムを探す最も一般的な方法は、おそらくそのソースデバイスによるものです。

findmnt /dev/mapper/vg_system-lv_root

別のオプションは、ファイルシステムがマウントされているディレクトリ(マウントポイント)を渡すことです:

findmnt /

Findmnt は、明示的に --target、--mountpoint または --source オプションを使用しない限り、引数を SOURCE および TARGET 列の両方に対して一致させることができます。以下の例では、ユーティリティは引数をマウントポイントとして解釈するため、出力はありません。

findmnt --mountpoint /dev/mapper/vg_system-lv_root

特定のファイルシステムを参照するには、事前にUUIDまたはLABELを知っている場合、それらを使用することもできます。UUID 331392ba-8966-4877-828c-99cc4bc418ecを持つファイルシステムに関する情報を取得したいとしましょう。この場合、次のように実行します:

findmnt UUID=331392ba-8966-4877-828c-99cc4bc418ec

同様に、ファイルシステムをそのLABELで参照するには、次のように実行します:

findmnt LABEL=backups

特定のファイル内を検索する

デフォルトでは、findmnt は /etc/fstab、/etc/mtab および /proc/self/mountinfo ファイル内のファイルシステムを検索します。一部のオプションを使用すると、この動作を変更することができます。例えば、-s(または --fstab)オプションは、findmnt が /etc/fstab ファイル内のファイルシステムのみを考慮するようにします。同様に、-m(--mtab)オプションは、検索を /etc/mtab ファイルの内容に制限し、-k(--kernel の短縮形)は、検索を /proc/self/mountinfo ファイルに絞ります。

カスタムの代替ファイルのパスも、-Fオプション(--tab-fileの短縮形)を使用することで提供できます。例えば、/etc/fstab-backupファイル内のファイルシステムを検索するには、以下のように実行します:

findmnt -F /etc/fstab-backup

ファイルシステムタイプで結果をフィルタリングする

特定のファイルシステムをターゲットにしたくない場合や、マウントされたすべてのファイルシステムのリストを取得したくない場合があります。代わりに、特定のパラメーターに基づいてフィルターを適用することを希望するかもしれません。たとえば、findmntが特定のタイプのファイルシステムのみを返すようにするには、-tオプション(--type)を使用し、フィルターとして使用したいタイプのリストを渡します。すべてのマウントされたvfatまたはXFSファイルシステムに関する情報を収集したいと仮定すると、次のように実行します:

findmnt -t vfat,xfs

マウントオプションで結果をフィルタリングする

もう一つのオプションは、マウントオプションに基づくフィルターを適用することです。この機能を使用するには、すべての必要があるのは、-Oオプション(--optionsの短縮形)を使用し、フィルターとして使用したいオプションのカンマ区切りリストを提供することです。たとえば、「relatime」と「ro」オプションでマウントされたすべてのファイルシステムのリストを取得するには、次のように実行します:

findmount -O relatime,ro

複数のオプションが指定されている場合、指定されたすべてのオプションでマウントされたファイルシステムのみがクエリに一致します(これは論理ANDのように機能します)。

もう一つ注意すべき点は、デフォルトでは「no」接頭辞を持つオプション(例:nosuid)を使用する場合、その表現は文字通りには一致しません。その代わりに「排除」フィルターとして解釈され、このオプションなしでマウントされたすべてのファイルシステムと一致します。この/etc/fstabファイルの内容を見てみましょう:

/         UUID=331392ba-8966-4877-828c-99cc4bc418ec xfs    defaults,x-systemd.device-timeout=0
/boot     UUID=7e28e28a-fc1b-4652-8f86-4e2bdefdad85 xfs    defaults,nosuid
/boot/efi UUID=ABBE-D50B                            vfat   defaults,uid=0,gid=0,umask=077,shortname=winnt
/home     UUID=244ed50a-4223-41a5-9edb-658488d02279 xfs    defaults,x-systemd.device-timeout=0

ご覧の通り、リスト内の2番目のファイルシステム、7e28e28a-fc1b-4652-8f86-4e2bdefdad85 UUIDを持つものだけが「nosuid」というマウントオプションを持っています。-O nosuidオプションでfindmntを実行して、何が返されるか見てみましょう:

findmnt --fstab -O nosuid 

上記のコマンドの出力は:

TARGET    SOURCE                                    FSTYPE OPTIONS
/         UUID=331392ba-8966-4877-828c-99cc4bc418ec xfs    defaults,x-systemd.device-timeout=0
/boot     UUID=7e28e28a-fc1b-4652-8f86-4e2bdefdad85 xfs    defaults,nosuid
/boot/efi UUID=ABBE-D50B                            vfat   defaults,uid=0,gid=0,umask=077,shortname=winnt
/home     UUID=244ed50a-4223-41a5-9edb-658488d02279 xfs    defaults,x-systemd.device-timeout=0

私たちが使用した「クエリ」は、予期せずに「nosuid」オプションでマウントされたファイルシステムのみを一致させるのではなく、すべての「suid」オプションのないものを返しました。したがって、それら全てが一致しました。「nosuid」オプションを持つファイルシステムに正確に一致させたい場合は、そのオプションの前に「+」を付ける必要があります。

findmnt --fstab -O +nosuid

この構文では、表現が「nosuid」オプションと文字通り一致し、期待される結果を得ることができます。

TARGET SOURCE                                    FSTYPE OPTIONS
/boot  UUID=7e28e28a-fc1b-4652-8f86-4e2bdefdad85 xfs    defaults,nosuid

findmntの出力をフォーマットする

一連のオプションにより、findmntコマンドの出力を変更およびフォーマットすることができます。たとえば、シェルスクリプトでfindmntを使用する場合、ヘッダー行を抑制し、ユーティリティの動作を変更して1つの情報のみを返すようにしたいと思うでしょう。

ヘッダ行は、-nオプション(--noheadingsの短縮形)を使用することで抑制できます。一方、ユーティリティに特定の情報のみを返させるためには、-oオプション(--output)を使用し、興味のある列のカンマ区切りリストを引数として渡すことができます。以下の例では、/にマウントされたファイルシステムのfstypeを「“$root_fstype”」変数に格納しています:

root_fstype="$(findmnt --noheadings --output FSTYPE /)"
echo "${root_fstype}"
xfs

findmntは、デフォルトで出力をツリー状の形式で整理し、ファイルシステム間の関係も表示します。これを変更し、出力をJSON形式にするには、-J(--json)オプションを使用します。例えば、/etc/fstabファイルに含まれるファイルシステムをJSON形式に再編成したい場合は、次のように実行します:

findmnt -J --fstab

私たちは次のような結果を得ることになります:

{
  "filesystems": [
     {
        "target": "/",
        "source": "UUID=331392ba-8966-4877-828c-99cc4bc418ec",
        "fstype": "xfs",
        "options": "defaults,x-systemd.device-timeout=0"
     },{
        "target": "/boot",
        "source": "UUID=7e28e28a-fc1b-4652-8f86-4e2bdefdad85",
        "fstype": "xfs",
        "options": "defaults,nosuid"
     },{
        "target": "/boot/efi",
        "source": "UUID=ABBE-D50B",
        "fstype": "vfat",
        "options": "defaults,uid=0,gid=0,umask=077,shortname=winnt"
     },{
        "target": "/home",
        "source": "UUID=244ed50a-4223-41a5-9edb-658488d02279",
        "fstype": "xfs",
        "options": "defaults,x-systemd.device-timeout=0"
     }
  ]
}

また、-l(--list)オプションを渡すことで、「リスト」形式を使用することもできます。この形式は、クエリを制限するためにフィルターを適用するときに自動的に使用されます。

結論

このチュートリアルでは、findmntユーティリティを使用してLinux上のマウントされたファイルシステムに関する情報を取得する方法を学びました。このユーティリティは、ほぼすべての主要なディストリビューションにデフォルトでインストールされています。マウントされたファイルシステムをすべてリスト表示する方法、UUID、LABEL、名前、およびマウントポイントでファイルシステムを参照する方法、マウントオプションおよびファイルシステムタイプでfindmntの結果をフィルタリングする方法を見ました。

関連記事: