■いちばん近道なLinuxマスター術
第14回:FHSによるディレクトリの規格化
 Linuxを使い始めて実感する難解さの1つに,ディストリビューションやRPMパッケージ,tarボールなどからのインストールそれぞれでディレクトリ構成が異なる,解説書に書かれているはずの設定ファイルが該当するディレクトリに存在しないなどが挙げられる。これらの設定ファイルが保存されているディレクトリは,ある程度どのディレクトリに保存されているのかが規定されている。
 多くのUnix系のOSでは,どのディレクトリにどのようなファイルを置くかが決まっているものの,OSによってファイルを保存すべきディレクトリの場所が異なったり,ディレクトリ構成が違っているのも事実だ。これは,異なるOSに限らず前述したように同じLinuxでありながらもディストリビューションによって差違があることも珍しくない。
そこで,このようなディレクトリ構成の違いを吸収すべく規格化されたのが「FHS」だ。

FHSとは

 FHS(Filesystem Hierarchy Standard)とは,Daniel Quinlan氏らによってまとめられ提唱されているディレクトリ構成を示したファイルの標準化仕様書だ。FHSの最新のバージョンは2.2で,現在2.3への論議が行われている。

 FHSは、ディレクトリ構造を示すだけでなく,ディレクトリの用途やどのようなファイルをどのディレクトリに配置すべきかなどまで示されている。そのため,OSの各種設定をするときに役立つばかりか,RPMパッケージではなくソースファイル(.tar.gz形式のファイル)をダウンロードしてアプリケーションをインストールしなければならない場合でも,どのディレクトリに保存するのが適切かを理解する上でも参考になる。

 Red Hat Linuxのバージョン7以降のディレクトリ構成は,ほぼこのFHSに準拠したディレクトリ構成となっている。そのため,FHSを理解すれば,自ずとRed Hat Linuxのディレクトリ構成も理解できるだろう。

 今回のLinux How-Toは,FHS 2.2で定義されているディレクトリ構成を解説しよう。

FHSにおけるディレクトリ構成

 FHSで提唱されるディレクトリ構造は,Fig.1のようになっている。

Fig.1■FHSで提唱されるディレクトリ構造
Fig.1

 FHSでは,必須とされるディレクトリ項目とオプション扱いのディレクトリ項目がある。Fig.1では,必須項目を「赤」で,オプション項目を「緑」で示している。なお,オプション扱いのディレクトリ項目は多々あるため,Fig.1では一部オプション扱いのディレクトリ項目のサブディレクトリは省略した。全階層については,FHSのドキュメントを参照してほしい。

 Fig.1に示したように,FHSではディレクトリ階層が次の3つのカテゴリに分かれる。

(1)システムに必須のファイル

 ディレクトリには,システムが起動するために必須なものがまとめられているものがある。例えば,カーネルイメージは必須なものの1つであり,/etcディレクトリに保存されるファイルは,このシステム自身の設定ファイル群であって起動するために不可欠だ。

 また/binディレクトリや/sbinディレクトリには,システムの構築時やシステムのリカバリ時に必要なファイルが含まれている。このため,システムが起動する時点で利用できるよう用意されていることが望ましい。

 それに対して,各ユーザーのホームディレクトリや,/usrディレクトリなどは,起動に必須というわけではない。

 そこでFHSでは,次のディレクトリをシステムの起動に必須のファイルを格納する所として定義されている。

/bin/boot/dev/etc/lib/mnt/opt/root
/sbin
/tmp

(2)システムには必須ではないファイル

 ディレクトリには,起動時には必要なく別のパーティションに分けて格納し,後からマウントしたほうが管理上都合がよいものがある。

 例えば/homeディレクトリは,ユーザーのホームディレクトリとして利用するものだ。そのため,複数台のコンピュータがネットワーク上に存在する場合には,NFSなどでネットワークマウントして利用したい場合もあるだろう。

 そして,/usrディレクトリは,システムを構築するディレクトリではあるが,これらには起動時に必須のコマンドをインストールするわけではない。起動後に利用されるコマンドがインストールされる場所だ。そこで,別のパーティションとして用意しておき,マウントして利用する形にしても問題はない。マウントする形式にしておけば,万が一システムファイルが破損した場合でも,正常に動作しているシステムにマウントし直せばすぐに復旧できるというメリットもある。このように起動時に必須のファイルを格納する場所が推奨されているため,自らでインストールするプログラムも,この規格の元で管理するよう配慮していくのが好ましい。

(3)動的に変化するファイル

 FHSでは,/varディレクトリ以下には,動的に変化するファイルを格納するよう決められている。例えば,プロセスIDのファイルやログ情報,Eメールを保存するディレクトリや各種スプールデータなどが当てはまる。

 動的に変化するファイルを保存するディレクトリは,読み書きできるようにマウントしなければならない。すなわち/var以下は,読み書きできるようにマウントする必要がある。

 それに対し,/var以外のファイルシステムは,OSやプログラムによって書き換えられるファイルは含まれない。よって,ユーザーや管理者が書き換える必要がないのであれば,/var以外のファイルシステムは,読み取り専用でマウントしても構わないのだ。

 例えば,特定の機器に組み込むシステムなどでは,/varディレクトリをRAMディスクに割り当てて,その他のディレクトリはROMに割り当てるといったことが可能だ。また,通常のシステムであっても,/var以外を読み取り専用にマウントすることで不正な書き換えを防ぎ,セキュリティ面でも意識されたシステム構築が可能となるのだ。

 上記以外のカテゴリの分け方として,「システム,システム管理者,一般ユーザーの誰が使うファイルを格納するのか」,「OSの起動時にインストールされるファイルを格納するのか,それともシステム管理者が後からインストールしたファイルを格納するのか」といった分類の仕方もある。これらは,本稿の最後で解説しよう。

 それでは以下に,FHSのディレクトリ構造を見ていこう。

1/4 NEXT