3.2. Filesystem Hierarchy Standard(FHS)の概要

Red Hatは、多数のファイルやディレクトリの名前と場所を定義した共同制作ドキュメントである FHS(Filesystem Hierarchy Standard)に従います。

FHSドキュメントは、任意のFHS準拠ファイルシステムに対する権威のあるリファレンスであるものの、 この標準には未定義または拡張可能の領域が多く残されています。このセクションでは、 この規格の概要を示し、規格で取り扱われていないファイルシステムの部分について説明します。

規格の全文は、以下の場所で参照できます。

http://www.pathname.com/fhs

規格に準拠することが多くのことを意味する中で、最も重要な2つのことは、他の準拠システムとの互換性であり、 /usr/パーティションを読み込み専用としてマウントできることです(なぜならば、 このパーティションは共通の実行可能ファイルを含んでおり、ユーザーによって変更されることを意図していないからです)。 /usr/を読み込み専用としてマウントしてある、CD-ROMから、または読み込み専用の FNS経由で別のマシンから/usr/をマウントすることができます。

3.2.1. FHS標準

ここで示すディレクトリとファイルは、FHSドキュメントで指定されるもののほんの一部です。 完全な情報については最新のFHSドキュメントを参照してください。

3.2.1.1. /dev/ディレクトリ

/dev/ディレクトリには、システムに接続されたデバイスを表すファイルシステムエントリが 含まれています。システムが正しく機能するためには、これらのファイルが不可欠です。

3.2.1.2. /etc/ディレクトリ

/etc/ディレクトリは、マシンにとってローカルな設定ファイルのために予約されています。 /etc/にはバイナリファイルを配置しないことになっています。以前は/etc/に 配置されていたすべてのバイナリファイルは、/sbin/または/bin/に 移動する必要があります。

X11/ディレクトリとskel/ディレクトリは、 /etc/ディレクトリのサブディレクトリです:

/etc
  |- X11/
  |- skel/

/etc/X11/ディレクトリは、XF86ConfigなどのX11設定ファイルのためのものです。 /etc/skel/ディレクトリは「スケルトン」ユーザーファイルのためのもので、最初にユーザーを作成するときは これらのファイルを使用してホームディレクトリを埋め込みます。

3.2.1.3. /lib/ディレクトリ

/lib/ディレクトリには、/bin//sbin/に 含まれるバイナリファイルを実行するために必要なライブラリのみを保存する必要があります。これらの 共有ライブラリイメージは、特にシステムをブートしたりルートファイルシステム内でコマンドを実行する場合に重要です。

3.2.1.4. /mnt/ディレクトリ

/mnt/ディレクトリは、CD-ROMやフロッピーディスクなどの一時的にマウントされる ファイルシステムです。

3.2.1.5. /opt/ディレクトリ

/opt/ディレクトリは、通常大きな静的アプリケーションソフトウェアパッケージが 保存される領域を提供します。

/opt/ディレクトリ内にファイルを配置するパッケージは、同じ名前のディレクトリを 作成します。このディレクトリが今度は、ファイルシステム全体に広がる可能性を持つファイルを収納します。 これにより、システム管理者は特定パッケージ内の各ファイルの役割を簡単に決定することができます。

例えば、/opt/内にsampleという名前のソフトウェアパッケージがある場合、 そのバイナリは/opt/sample/bin/に、manページは/opt/sample/man/に 置かれるなど、すべてのファイルを/opt/sample/のディレクトリ内に置くことが出来ます。

それぞれ特定のタスクを実行するサブパッケージを多く含む大きなパッケージもまた、/opt/内に移動し、 それによって大きなパッケージは標準化された方法で組織されます。たとえば、sampleパッケージの サブパッケージは/opt/sample/tool1//opt/sample/tool2/などの独自の サブディレクトリにそれぞれ移動し、それぞれ独自のbin/man/、その他の 同様のディレクトリを持つことができます。

3.2.1.6. /proc/ディレクトリ

/proc/ディレクトリには、カーネルとの間で情報をやりとりするための特別なファイルが含まれています。

/proc/内ではさまざまなデータが用意されており、このディレクトリを使用して カーネルと通信する方法は数多くあるので、この章ではこの問題を中心に説明しています。 詳細は第5章を参照してください。

3.2.1.7. /sbin/ディレクトリ

/sbin/ディレクトリは、rootユーザーのみが使用できる実行可能ファイル群を格納する場所です。 /sbin/内の実行可能ファイル群の使用目的は、システムの起動、/usr/の マウント、システム回復操作のみです。ディレクトリに関して、FHSでは次のように説明しています:

「通常、/sbinには、/binに含まれるバイナリファイルの他に、 システムをブートするために必要なファイルが含まれています。/usrがマウントされたことが 認識された後(何も問題がない場合)に実行されるものは、/usr/sbinの中に配置する必要が あります。また、ローカル専用のシステム管理バイナリファイルは、/usr/local/sbinの中に 配置する必要があります。」

最低でも次のプログラムが/sbin/の中になければなりません:

arp, clock,
getty, halt,
init, fdisk,
fsck.*, grub,
ifconfig, lilo,
mkfs.*, mkswap,
reboot, route,
shutdown, swapoff,
swapon, update

3.2.1.8. /usr/ディレクトリ

/usr/ディレクトリは、サイト全体にわたって共有することのできるファイルのためのものです。 通常、/usr/ディレクトリは独自のパーティションを持っており、読み込み専用でマウント可能と する必要があります。最小限、以下のディレクトリ群を/usr/のサブディレクトリとする必要があります:

/usr
  |- bin/
  |- dict/
  |- doc/
  |- etc/
  |- games/
  |- include/
  |- kerberos/
  |- lib/
  |- libexec/	    
  |- local/
  |- sbin/
  |- share/
  |- src/
  |- tmp -> ../var/tmp/
  |- X11R6/

bin/ ディレクトリは実行可能ファイルを含みます。 dict/ 非FHS対応ドキュメントページを含みます。 etc/ システム全体の設定ファイルを含みます。 games ゲームです。 include/ C ヘッダーファイルを含みます。 kerberos/ Kerberos用にバリナリやその他を含みます。 lib/ ユーザーやシェルスクリプトによって直接使用されるように設計されていないオブジェクトファイルやライブラリ。 libexec/ディレクトリは、他のプログラムによりコールされる小さなヘルププログラムを含んでいます。 sbin/ システム管理バイナリ用(/sbin/ディレクトリに属しない物)。 share/ アーキテクチャ固有でないファイルを含みます。 src/ ソースコードです。 X11R6/ X Window System(XFree86 on Red Hat Linux)。

3.2.1.9. /usr/local/ディレクトリ

ディレクトリに関して、FHSでは次のように説明しています。

/usr/localは、システム管理者がソフトウェアをローカルにインストールする際に使用するものです。システムソフトウェアの更新時に上書きされないように、この階層を保護する必要があります。マシンのグループの間で共有可能であるプログラムやデータのうち、/usrには含まれないもののために、この階層を使用することができます。」

/usr/local/ディレクトリは、構造に関しては/usr/ディレクトリと 似ています。このディレクトリは、以下のサブディレクトリを持っていて、それらのサブディレクトリは、 目的に関しては/usr/ディレクトリと似ています:

/usr/local
       |- bin/
       |- doc/
       |- etc/
       |- games/
       |- include/
       |- lib/
       |- libexec/
       |- sbin/
       |- share/
       |- src/

3.2.1.10. /var/ディレクトリ

FHSはLinuxが/usr/を読み込み専用としてマウントできることを要求しているため、 ログファイルを作成するプログラムや、spool/ディレクトリやlock/ ディレクトリを必要とするプログラムは、データを/var/ディレクトリに書き込む 必要があります。FHSは/var/の目的を以下のように述べています:

「 ...変数データファイル。ここには、spoolディレクトリとspoolファイル、管理データとログデータ、 一時ファイルが含まれます。」

以下のディレクトリ群は/var/のサブディレクトリとする必要があるものです:

/var
  |- account/
  |- arpwatch/
  |- cache/
  |- crash/
  |- db/
  |- empty/
  |- ftp/
  |- gdm/
  |- kerberos/
  |- lib/
  |- local/
  |- lock/
  |- log/
  |- mail -> spool/mail/
  |- mailman/
  |- named/
  |- nis/
  |- opt/
  |- preserve/
  |- run/
  +- spool/
       |- anacron/
       |- at/
       |- cron/
       |- fax/
       |- lpd/
       |- mail/
       |- mqueue/
       |- news/
       |- rwho/
       |- samba/
       |- slrnpull/
       |- squid/
       |- up2date/
       |- uucp/
       |- uucppublic/
       |- vbox/
       |- voice/
  |- tmp/
  |- tux/
  |- www/
  |- yp/

messages/lastlog/などのシステムログファイルは、 /var/log/ディレクトリ内に配置されます。/var/lib/rpm/ ディレクトリには、RPMシステムデータベースも含まれています。ロックファイルは/var/lock/に 格納され、通常は、そのファイルを使用するプログラム固有のディレクトリに格納されます。 /var/spool/ディレクトリは、データファイルを格納する必要がある各種システムの ためのサブディレクトリを持っています。

3.2.2. Red Hat Linuxの/usr/local/

Red Hat Linuxの場合、/usr/local/の意図された用途としては、FHSの指定とは多少異なっています。 FHSは、システムソフトウェアのアップグレード時には、保護するソフトウェアを/usr/local/に 格納すべきであるとしています。Red Hat Linuxからのシステムアップグレードはrpmやグラフィカルな パッケージ管理ツール によって安全に行われるため、ソフトウェアを/usr/local/に 配置して保護する必要はありません。代わりに、マシンにとってローカルなソフトウェアのために/usr/local/を 使用するのがよいでしょう。

例えば、/usr/ディレクトリがリモートホストから読み込み専用NFS共有として マウントされた場合、/usr/local/ディレクトリの下にパッケージやプログラムを インストールすることが出来ます。