3.2. Filesystem Hierarchy Standard(FHS)の概要

Red Hat Enterprise Linuxは、多数のファイルやディレクトリの名前と場所と権限を定義した FHS(Filesystem Hierarchy Standard)に 従います。

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

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

3.2.1. FHS標準

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

総括的な基準はオンラインの http://www.pathname.com/fhsで見ることが出来ます。

3.2.1.1. /boot/ディレクトリ

/boot/ディレクトリには、システムブート時に必要となるLinux カーネルなどの静的ファイルが含まれています。これらのファイルはシステムの正常な 起動に不可欠なものです。

警告警告
 

/boot/ディレクトリは削除しないで下さい。削除すると、 システムをブートできなくなります。

3.2.1.2. /dev/ディレクトリ

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

3.2.1.3. /etc/ディレクトリ

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

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

/etc
  |- X11/
  |- skel/

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

3.2.1.4. /lib/ディレクトリ

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

3.2.1.5. /media/ディレクトリ

/media/ディレクトリは、3.5ディスケット、CD-ROM や Zip ディスクなどの一時的なマウントポイントとして使用されるサブディレクトリを 含みます。

3.2.1.6. /mnt/ディレクトリ

/mnt/ディレクトリは、NFS ファイルシステムマウントなどの一時的にマウントされるファイルシステムに予約されています。全てのリムーバブルメディアには /media/ ディレクトリを使用して下さい。

注記注記
 

このディレクトリをインストールプログラムで使用しないで下さい。

3.2.1.7. /opt/ディレクトリ

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

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

例えば、/opt/ディレクトリ内にある特定ソフトウェアパッケージの 名前がsampleとすれば、 そのファイルはすべて、バイナリは/opt/sample/bin/、 マニュアルページは/opt/sample/man/など、 /opt/sample/ディレクトリ配下のディレクトリ内に配置されます。

それぞれ特定のタスクを実行する各種のサブパッケージを多く含む大きなパッケージもまた、/opt/ディレクトリ内に配置され、 この方法で大きなパッケージも独自に構成していくことができます。 たとえば、sampleパッケージに異なるツールがあり それぞれ独自のサブディレクトリを持つ場合があります。 /opt/sample/tool1//opt/sample/tool2/ など、各サブディレクトリが独自のbin/ディレクトリ、 man/ディレクトリ、その他類似のディレクトリを持つことができます。

3.2.1.8. /proc/ディレクトリ

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

/proc/内ではさまざまなデータが用意されており、このディレクトリを使用してカーネルと通信する方法が数多くある為、この課題を1つの章で 専門に取り扱っています。詳細は章5章を参照してください。

3.2.1.9. /sbin/ディレクトリ

/sbin/ディレクトリは、 rootユーザーが使用する実行可能ファイル群を格納する場所です。 /sbin/内の実行可能ファイル群はブート時にのみ使用され、 システム開腹操作を行ないます。このディレクトリに関して、FHSでは次のように説明しています。

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

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

arp, clock,halt,
init, fsck.*, grub,
ifconfig, mingetty, mkfs.*, 
mkswap, reboot, route, 
shutdown, swapoff, swapon

3.2.1.10. /srv/ディレクトリ

/srv/ディレクトリには、Red Hat Enterprise Linux で稼働するシステムで サービスされるサイト特有のデータが含まれています。このディレクトリは FTP、WWW、 あるいは CVS などの特定のサービス用のデータファイルの場所をユーザーに与えて くれます。特定ユーザーのみに属するデータはその/home/ディレ クトリに保存すべきです。

注記注記
 

現在/var/にあるデータファイルは、将来のリリースで /srv/に移動する可能性があること に注意して下さい。

3.2.1.11. /sys/ディレクトリ

/sys/ディレクトリは、2.6 カーネル特有の新しい sysfs仮想ファイルシステムを活用します。2.6 カーネルでのホットプラグ ハードウェアデバイス用の拡張サポートを持ち、/sys/ディレク トリには、/proc/に保存されているような情報をもっていますが、 ホットプラグデバイスに関して特定デバイス情報の階級表示をします。

特定の USB や FireWire デバイスがどのようにマウントされているかを見るには、 /sbin/hotplug/sbin/udevの 各 man ページを御覧下さい。

3.2.1.12. /usr/ディレクトリ

/usr/ディレクトリは、複数のマシンで共有することのできるファイル用です。通常、/usr/ディレクトリは独自のパーティション上にあり、読み込み専用でマウントされます。最小限、以下のディレクトリ群を/usr/のサブディレクトリとする必要があります:

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

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

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

FHSでは次のように説明しています。

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

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

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

Red Hat Enterprise Linux の場合、/usr/local/ディレクトリの使用用途が、FHSでの指定とは少し異なっています。FHS は、システムソフトウェアのアップグレード時に安全に維持するソフトウェアを/usr/local/に格納すべきであるとしています。ソフトウェアのアップグレードはRPM (RPM パッケージマネージャ)によって安全に行われるため、ソフトウェアを/usr/local/に配置して保護する必要はありません。代わりに、マシンにとってローカルなソフトウェアのために/usr/local/ディレクトリを使用します。

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

3.2.1.14. /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/
       |- at/
       |- clientmqueue/
       |- cron/
       |- cups/
       |- exim/	      
       |- lpd/
       |- mail/
       |- mailman/
       |- mqueue/
       |- news/
       |- postfix/ 
       |- repackage/
       |- rwho/
       |- samba/ 
       |- squid/
       |- squirrelmail/
       |- up2date/
       |- uucp 
       |- uucppublic/
       |- vbox/
  |- tmp/
  |- tux/
  |- www/
  |- yp/

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