Filesystem Hierarchy Standard(FHS)の概要

Red Hatは、多数のファイルやディレクトリの名前と場所を定義した共同制作ドキュメントであるFilesystem Hierarchy StandardFHS)に従います。また、Red Hatは今後もこの規格に追従し、Red Hat Linux FHSがこの規格に準拠した状態を保ちます。

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

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

http://www.pathname.com/fhs

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

FHS標準

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

/devディレクトリ

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

/etcディレクトリ

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

X11ディレクトリとskelディレクトリは、/etcのサブディレクトリである必要があります。

/etc
  |- X11
  |- skel

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

/libディレクトリ

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

/mntディレクトリ

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

/optディレクトリ

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

/optは、ファイルシステム全体へのファイル保存を避けるパッケージに対して、パッケージのディレクトリ下に論理的で将来性のある組織システムを提供します。これによって、システム管理者は特定パッケージ内の各ファイルのロールを簡単に決定することができます。

たとえば、/opt内にsampleというソフトウェアパッケージがある場合、そのバイナリは/opt/sample/binに、manページは/opt/sample/manに置かれるなど、/opt/sampleのディレクトリ内に置かれます。

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

/procディレクトリ

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

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

/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

/usrディレクトリ

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

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

  • /usr/bin実行可能ファイル

  • /usr/doc非FHS対応ドキュメントページ

  • /usr/etcサイト全体に関連する設定ファイル

  • /usr/gamesゲーム

  • /usr/includeCヘッダーファイル

  • /usr/kerberosKerberosのバイナリなど

  • /usr/libユーザーやシェルスクリプトによって直接使用されるように設計されていないオブジェクトファイルやライブラリ

  • /usr/libexecほかのプログラムから呼び出される小さなヘルパ

  • /usr/sbinシステム管理バイナリ用(/sbinには含まれないもの)

  • /usr/shareアーキテクチャ固有でないファイル

  • /usr/srcソースコード

  • /usr/X11R6X Window System(Red Hat LinuxのXFree86

/usr/localディレクトリ

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

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

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

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

/varディレクトリ

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

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

Red Hat Linuxの/usr/local

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からアンインストールすることができます。