Red Hat は、多数のファイルやディレクトリの名前と場所を定義した共同制作ドキュメントであるFilesystem Hierarchy Standard (FHS)に従います。また、Red Hatは今後もこの規格に追従し、Red Hat Linux FHSがこの規格に準拠した状態を保ちます。
最新のFHSドキュメントは、任意のFHS準拠ファイルシステムに対する正式のリファレンスであるものの、この標準に含まれない未定義または拡張可能の領域が多く残されています。このセクションでは、この規格の概要を示し、規格で取り扱われていないファイルシステムの部分について説明します。
規格の全文は
http://www.pathname.com/fhsにあります。
規格に準拠することが多くのことを意味する中で、最も重要な2つのことは、他の準拠システムとの互換性であり、/usrパーティションを読み込み専用としてマウントできることです(なぜならば、このパーティションは共通の実行可能ファイルを含んでおり、ユーザーによって変更されることを意図していないからです)。/usrを読み込み専用としてマウントすることが可能であるため、CD-ROMから、または読み込み専用のFNS経由で別のマシンから/usrをマウントすることができます。
ここで示すディレクトリとファイルは、FHSドキュメントで指定されるもののほんの一部です。完全な情報については最新のFHSドキュメントをチェックしてください。
/devディレクトリには、システムに接続されたデバイスを表すファイルシステムエントリが含まれています。システムが正しく機能するためには、これらのファイルが不可欠です。
/etcディレクトリは、マシンにとってローカルな設定ファイルのために予約されています。/etcにはバイナリファイルを配置しないことになっています。以前は/etcに配置されていたすべてのバイナリファイルは、/sbinまたは/binに移動する必要があります。
X11ディレクトリとskelディレクトリは、/etcのサブディレクトリである必要があります。
/etc |- X11 |- skel |
X11ディレクトリは、XF86ConfigなどのX11設定ファイルのためのものです。skelディレクトリは「スケルトン」ユーザーファイル用であり、ユーザーの作成時にホームディレクトリを作成する場合のテンプレートを配置する場所として使用されます。
これらの共有ライブラリイメージは、特にルートファイルシステム内でのシステムのブートやコマンドの実行を行う場合に重要です。/libディレクトリには、/binや/sbinに含まれるバイナリファイルを実行するために必要なライブラリのみを保存する必要があります。
/mntディレクトリは、CD-ROM やフロッピーディスクなどの一時的にマウントされるファイルシステムを参照します。
/optディレクトリは、通常大きな静的アプリケーションソフトウェアパッケージが保存される領域を提供します。
/optは、ファイルシステム全体へのファイル保存を避けるパッケージに対して、パッケージのディレクトリ下に論理的で将来性のある組織システムを提供します。これによって、システム管理者は特定パッケージ内の各ファイルのロールを簡単に決定することができます。
たとえば、sampleが/opt内にある特定ソフトウェアパッケージの名前である場合、そのファイルはすべて、バイナリを表す/opt/sample/binやマニュアルページを表す/opt/sample/manなどの/opt/sampleにあるディレクトリ内に置かれます。
それぞれ特定なタスクを実行する異なるサブパッケージを多く含む大きなパッケージもまた/opt内に移動し、それによって大きなパッケージは標準化された方法で組織されます。このように、sampleパッケージは/opt/sample/tool1や/opt/sample/tool2などの独自のサブディレクトリにそれぞれ移動し、独自のbin、man、その他の同様のディレクトリを持つことができます。
/sbinディレクトリは、rootユーザーのみが使用できる実行可能ファイル群を格納する場所です。/sbin内の実行可能ファイル群の使用目的は、システムの起動、/usrのマウント、システム回復操作のみです。FHSでは次のように説明しています。
通常、/sbinには、/binに含まれるバイナリファイル以外の、システムをブートするために必要なファイルが含まれています。/usrがマウントされたことが認識された後(何も問題がない場合)に実行されるものは、/usr/sbinの中に配置する必要があります。また、ローカル専用のシステム管理バイナリファイルは、/usr/local/sbinの中に配置する必要があります。
最低でも、以下のプログラムを/sbinの中に配置する必要があります。
arp, clock, getty, halt, init, fdisk, fsck.*, ifconfig, lilo, mkfs.*, mkswap, reboot, route, shutdown, swapoff, swapon, update |
/usrディレクトリは、サイト全体にわたって共有することのできるファイルのためのものです。通常、/usrディレクトリは独自のパーティションを持っており、読み込み専用でマウント可能とする必要があります。以下のディレクトリ群を/usrのサブディレクトリとする必要があります。
/usr |- bin |- doc |- etc |- games |- include |- kerberos |- lib |- libexec |- local |- man |- sbin |- share |- src |- X11R6 |
binディレクトリでは実行可能ファイルを格納し、docディレクトリでは非FHS対応ドキュメントページを格納し、etcディレクトリではサイト全体に関連する設定ファイルを格納し、gamesディレクトリはゲーム用で、includeディレクトリはCヘッダーファイルを格納し、kerberosディレクトリはKerberosのバイナリなどを格納し、libディレクトリはユーザーやシェルスクリプトによって直接使用されるように設計されていないオブジェクトファイルやライブラリを格納します。libexecディレクトリは、ほかのプログラムから呼び出される小さなヘルパーを格納し、sbinディレクトリはシステム管理バイナリ用(/sbinには含まれないもの)で、shareディレクトリはアーキテクチャ固有でないファイルを格納し、srcディレクトリはソースコード用で、X11R6ディレクトリはX Window System (Red Hat LinuxのXFree86)用です。
/usr/localは、システム管理者がソフトウェアをローカルにインストールする際に使用するものです。システムソフトウェアの更新時に上書きされないように、この階層を保護する必要があります。マシンのグループの間で共有可能であるプログラムやデータのうち、/usrには含まれないもののために、この階層を使用することができます。
/usr/localディレクトリは、構造に関しては/usrディレクトリと似ています。このディレクトリは、以下のサブディレクトリを持っています。それらのサブディレクトリは、目的に関しては/usrディレクトリと類似しています。
/usr/local |- bin |- doc |- etc |- games |- info |- lib |- man |- sbin |- src |
FHSが、/usrを読み込み専用としてマウントできることを要求しているため、ログファイルを作成するプログラムや、spoolディレクトリやlockディレクトリを必要とするプログラムは、データを/varディレクトリに書き込む必要があります。FHSは/varの目的を以下のように述べています。
変数データファイル。ここには、spoolディレクトリとスプールファイル、管理データとログデータ、一時ファイルが含まれます。
以下のディレクトリ群を/varのサブディレクトリとする必要があります。
/var |- arpwatrch |- cache |- db |- ftp |- gdm |- kerberos |- lib |- local |- lock |- log |- named |- nis |- opt |- preserve |- run +- spool |- anacron |- at |- cron |- fax |- lpd |- mail |- mqueue |- news |- rwho |- samba |- slrnpull |- squid |- up2date |- uucp |- uucppublic |- vbox |- voice |- tmp |- www |- yp |
messagesやlastlogなどのシステムログファイルは、/var/logディレクトリ内に配置されます。/var/lib/rpmディレクトリには、RPMシステムデータベースも含まれています。ロックファイルは/var/lockに格納され、通常は、そのファイルを使用するプログラム固有のディレクトリに格納されます。/var/spoolディレクトリは、データファイルを格納する必要がある各種システムのためのサブディレクトリを持っています。
Red Hat Linuxの場合、/usr/localの用途として意図されたものは、FHSの指定とは多少異なっています。FHSは、システムソフトウェアのアップグレード時には、保護するソフトウェアを/usr/localに格納すべきであるとしています。Red HatからのシステムアップグレードはRPMシステムやGnome-RPMによって安全に行われるため、ソフトウェアを/usr/localに配置して保護する必要はありません。代わりに、マシンにとってローカルなソフトウェアのために/usr/localを使用することをお勧めします。
たとえば、読み込み専用NFS経由でjakeというホストから/usrをマウントしたとします。インストールしたいパッケージまたはプログラムがあるものの、jakeへの書き込み権限がない場合、/usr/localの下にそれらをインストールする必要があります。後になって、プログラムを/usrにインストールしてもらえるようにjakeのシステム管理者を説得できた場合には、そのプログラムを/usr/localからアンインストールすることができます。