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

3.2.1.4. /lib/ディレクトリ

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

3.2.1.5. /mnt/ディレクトリ

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

3.2.1.6. /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.7. /proc/ディレクトリ

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

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

3.2.1.8. /sbin/ディレクトリ

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

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

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

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

3.2.1.9. /usr/ディレクトリ

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

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

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

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

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

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

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

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

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

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

3.2.1.11. /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/
       |- lpd/
       |- mail/
       |- mqueue/
       |- news/
       |- postfix/ 
       |- repackage/
       |- rwho/
       |- samba/ 
       |- squid/
       |- squirrelmail/
       |- up2date/ 
       |- uucppublic/
       |- vbox/
  |- tmp/
  |- tux/
  |- www/
  |- yp/

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