findmntコマンド:Linuxにおけるファイルシステムのクエリを簡単に
findmntは、すべての主要なLinuxディストリビューションのコアパッケージに通常含まれている無料のオープンソースユーティリティです。マウントされたすべてのファイルシステムをリスト表示したり、指定したものだけのデータを取得したりすることができます。このチュートリアルでは、findmntの使い方と、ファイルシステムをタイプ、マウントオプション、その他のパラメータでクエリする方法を学びます。
このチュートリアルでは学びます:<&47;strong>
- findmntを使用してマウントされたファイルシステムに関する情報を取得する方法
- LABEL、UUID、名前、マウントポイントでファイルシステムを検索する方法
- タイプとマウントオプションによるファイルシステムの検索方法
カテゴリ | 要件、規約、または使用されるソフトウェアのバージョン |
---|---|
システム | 分布に依存しない |
ソフトウェア | findmnt |
他 | なし |
慣習 | &8211; 指定されたLinuxコマンドは、rootユーザーとして直接実行するか、sudo<&47;code>コマンドを使用して、root権限で実行する必要があります。 |
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の結果をフィルタリングする方法を見ました。