ウェブサイト検索

findmntコマンド:Linuxにおけるファイルシステムのクエリを簡単に


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

このチュートリアルでは学びます:<&47;strong>

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

カテゴリ要件、規約、または使用されるソフトウェアのバージョン
システム分布に依存しない
ソフトウェアfindmnt
なし
慣習&8211; 指定されたLinuxコマンドは、rootユーザーとして直接実行するか、sudo<&47;code>コマンドを使用して、root権限で実行する必要があります。
$&8211; 指定されたLinuxコマンドは、通常の非特権ユーザーとして実行する必要があります。

findmntの基本的な使い方

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

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

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

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

$ 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<&47;code>はすべてのマウントされたファイルシステムに関する情報を表示します。これはほとんど役に立ちません。ほとんどの場合、特定のファイルシステムに関する情報を収集することに興味があり、デバイス名<&47;em>、ラベル<&47;em>、UUID<&47;em>、またはメジャー:マイナー<&47;em>番号で参照できます。

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

$ findmnt /dev/mapper/vg_system-lv_root

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

$ findmnt /

findmntは、--target<&47;code>、--mountpoint<&47;code>、または--source<&47;code>オプションを明示的に使用しない限り、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は&47;etc&47;fstab<&47;code>、&47;etc&47;mtab<&47;code>、および&47;proc&47;self&47;mountinfo<&47;code>ファイル内のファイルシステムを検索します。一部のオプションを使用すると、この動作を変更できます。たとえば、-s<&47;code>(または--fstab<&47;code>)オプションは、findmntが&47;etc&47;fstab<&47;code>ファイル内のファイルシステムのみを考慮するようにします。同様に、-m<&47;code>(--mtab<&47;code>)オプションは、検索を&47;etc&47;mtab<&47;code>ファイルの内容に制限し、-k<&47;code>(--kernel<&47;code>の短縮形)は、検索を&47;proc&47;self&47;mountinfo<&47;code>ファイルに絞ります。

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

$ findmnt -F /etc/fstab-backup

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

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

$ findmnt -t vfat,xfs

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

別のオプションは、マウントオプションに基づいてフィルターを適用することです。この機能を使用するには、-O<&47;code>オプション(--options<&47;code>の短縮形)を使用し、フィルターとして使用したいオプションのカンマ区切りリストを提供するだけです。たとえば、「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番目のファイルシステム、UUIDが7e28e28a-fc1b-4652-8f86-4e2bdefdad85<&47;code>のものは、「nosuid」というマウントオプションを持っている唯一のものです。-O nosuid<&47;code>オプションを使って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を使用する場合、ヘッダー行を抑制し、ユーティリティの動作を変更して単一の情報のみを返すようにしたいと思うでしょう。

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

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

findmntはデフォルトで出力をツリー状の形式で整理し、ファイルシステム間の関係も示します。これを変更し、出力をJSON形式にフォーマットするには、-J<&47;code>(--json<&47;code>)オプションを使用します。例えば、&47;etc&47;fstab<&47;code>ファイルに含まれるファイルシステムを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<&47;code>(--list<&47;code>)オプションを渡すことで「リスト」形式を使用できます。この形式は、クエリを制限するためにフィルターを適用する際に自動的に使用されます。

結論

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