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,nosuidfindmntの出力をフォーマットする
一連のオプションにより、findmntコマンドの出力を変更およびフォーマットすることができます。たとえば、シェルスクリプトでfindmntを使用する場合、ヘッダー行を抑制し、ユーティリティの動作を変更して1つの情報のみを返すようにしたいと思うでしょう。
ヘッダ行は、-nオプション(--noheadingsの短縮形)を使用することで抑制できます。一方、ユーティリティに特定の情報のみを返させるためには、-oオプション(--output)を使用し、興味のある列のカンマ区切りリストを引数として渡すことができます。以下の例では、/にマウントされたファイルシステムのfstypeを「“$root_fstype”」変数に格納しています:
root_fstype="$(findmnt --noheadings --output FSTYPE /)"
echo "${root_fstype}"
xfsfindmntは、デフォルトで出力をツリー状の形式で整理し、ファイルシステム間の関係も表示します。これを変更し、出力を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の結果をフィルタリングする方法を見ました。
