Linux ディレクトリ構造の標準仕様(FHS)について
FHSとは
Daniel Quinlan氏らによってまとめられ提唱されているディレクトリ構成を示したファイルの標準化仕様書。
FHSは、Linuxディストリビューション間のファイルやディレクトリ構造の違いによる混乱を防ぎ、互換性を保つために作成された。
ディレクトリ構造を示すだけでなく,ディレクトリの用途やどのようなファイルをどのディレクトリに配置すべきかなどまで示されています。
そのため,OSの各種設定をするときに役立つばかりか,RPMパッケージではなくソースファイルをダウンロードしてアプリケーションをインストールしなければならない場合でも,どのディレクトリに保存するのが適切かを理解する上でも参考になる。
FHSは、UNIX系OSにも適用可能なものになっている。
ディレクトリ編集
FHSにおいて,システム管理者がプログラムをインストールするために利用できるディレクトリは,/usr/local以下だけである。 ※/usr/localディレクトリにサブディレクトリを作成する事は、推奨されていない。
なぜならば,それらのディレクトリには,OSで標準提供されているコマンドが含まれるため,
これらと合わさってしまい後からインストールしたコマンドなのかが分からなくなる可能性があり,
OSのアップグレードやパッチの適用によって書き換えられてしまうことも予想されるためだ。
規模の大きなアプリケーションであるならば,/usr/localディレクトリではなく,
/optディレクトリにインストールすることも検討してもよいだろう。
/optディレクトリは,アプリケーションパッケージごとにサブディレクトリを分けて格納することを想定して
考えられたディレクトリだ。この/optディレクトリに格納したファイルも,OSのアップグレードやパッチの適用
によって書き変わってしまうことはない。
1.起動時に必須のファイル群
+-bin バイナリのコマンド群
+-boot 起動時に必要とするファイル群
+-dev デバイスファイル
+-etc システムの環境設定ファイル群
| +--opt /optディレクトリに格納したパッケージのための環境設定ファイル群
| | |
| | +- パッケージ名
| +--x11 X Window Systemの環境設定ファイル群
| +--sgml SGMLやXMLのための環境設定ファイル群
+-lib 共有ライブラリ群
| +--modules カーネルモジュール群
|
+-mnt 一時的なマウンティング先
+-opt ソフトウェアの拡張パッケージ群
| +--パッケージ名
+-root rootユーザーのホームディレクトリ
+-sbin システム管理者が利用するコマンド群
+-tmp テンポラリファイル群。再起動後に削除される
2.起動時になくてもよいファイル群
/usrディレクトリは,システムを構築するディレクトリではあるが,
これらには起動時に必須のコマンドをインストールするわけではない。
起動後に利用されるコマンドがインストールされる場所だ。
そこで,別のパーティションとして用意しておき,マウントして利用する形にしても問題はない。
マウントする形式にしておけば,万が一システムファイルが破損した場合でも,
正常に動作しているシステムにマウントし直せばすぐに復旧できるというメリットもある。
|
+-home ユーザーのホームディレクトリ
| +--ユーザー名
+-usr 様々なファイル格納するための第二階層
| +--bin
| | +--mh MHメールのためのコマンド群
| | +--X11 /usr/bin/X11へのシンボリックリンク
| +--include 一般的に利用されるインクルードファイル群
| | +--dad BSDシステムで一般的に利用されるインクルードファイル群
| +--games ゲームプログラム群
| +--lib 一般的に利用される共有ライブラリ群
| | +--sendmail /usr/sbin/sendmailへのシンボリックリンク
| | +--X11 /lib/X11へのシンボリックリンク
| |
| +--local システム管理者があとからインストールするファイルを格納するディレクトリ
| | +--bin
| | +--games
| | +--include
| | +--lib
| | +--man
| | +--sbin
| | +--share
| | +--src
| +--sbin システム管理者が利用する一般的なコマンド群
| +--share アーキテクチャに依存しないファイル群
| | +--man オンラインマニュアル群
| | +--misc その他データ群
| | +--dict 辞書データ群
| | +--doc その他ドキュメント群
| | +--games /usr/gamesに格納されたプログラムで使われている静的なデータ群
| | +--info GNUのinfoシステムで使われてるデータ群
| | +--locale 地域情報群
| | +--nls NLS(Native language support)のためのメッセージカタログ
| | +--sgml SGMLやXMLのデータ群
| | +--terminfo terminfoのためのデータベース群
| | +--tmac troffマクロのためのデータ群
| | +--zoneinfo タイムゾーンのデータ群
| +--src カーネルのソースファイル
| +--X11R6 X Window Systemバージョン11リリース6のファイル群
3.動的に変化するファイル群
/var以外のファイルシステムは,OSやプログラムによって書き換えられるファイルは含まれない。
よって,ユーザーや管理者が書き換える必要がないのであれば,/var以外のファイルシステムは,読み取り専用でマウントしても構わないのだ。
例えば,特定の機器に組み込むシステムなどでは,/varディレクトリをRAMディスクに割り当てて,
その他のディレクトリはROMに割り当てるといったことが可能だ。また,通常のシステムであっても,
/var以外を読み取り専用にマウントすることで不正な書き換えを防ぎ,セキュリティ面でも意識されたシステム構築が可能となるのだ。
|
+--var 動的なデータを格納する場所
| +--account アカウントのログを記録するディレクトリ
| +--cache キャッシュ情報を保持するディレクトリ
| | +--fonts フォントキャッシュ
| | +--man manのキャッシュ
| | +--www Webのキャッシュやプロキシデータ
| | +--パッケージ名 各パッケージが利用するキャッシュ
| +--crash システムのクラッシュ時にダンプデータを保存する。
| +--games ゲームプログラムの動的データ
| +--lib 動的なステータスの保持のためのディレクトリ
| | +--misc その他ステータス
| | +--ユーザー名 各ユーザーが編集しているバックアップファイルや状態
| | +--パッケージツール名 パッケージのためのファイル群
| | +--パッケージ名 パッケージの状態などを保持するファイル群
| | +--hwclock ハードウェアクロックの状態を保持するファイル群
| | +--xdm X Display Managerの状態をほぞ時するファイル群
| +--local /usr/localディレクトリに保持したファイル群の動的データ群
| +--lock ロックファイル群
| +--log ログファイル群
| +--mail ユーザーに届いたメール群
| | +--ユーザー名
| | +--パッケージ名
| +--run 実行時の動的なファイル群。プロセスIDのファイルなど
| +--spool スプールデータ群
| | +--lpd プリンタスプール
| | +--mqueue メールキュー
| | +--news ニュース用スプール
| | +--rwho rwhodデータ
| | +--uucp UUCPデータ
| +--tmp テンポラリファイル群、再起動しても削除されない
| +--yp NIS(Network Informetion Service)のためのディレクトリ
+--opt /optディレクトリに格納したファイル群の動的データ群
補足
/etc | 設定ファイルがたくさん入ってる場所。サブディレクトリもたくさんある。 |
/home | /home/[ユーザー名]が、Windowsでいう「マイドキュメント」的なとこ。 大容量のパーティションを割り当てるとよい。 |
/bin、/sbin | システム系のプログラムファイルを保管します。 binはcatなど全員が使うコマンド、sbinはshutdownなどrootが使うようなコマンドを保存。 Windowsでいうと「C:\WINDOWS\system32」です。 |
/usr | 「読み出し可能かつ共有可能なファイル」つまりプログラムファイルを保管します。 /bin、/sbinとの違いは、アプリケーションプログラムを保存するってとこかな。 Windowsでいうなら「C:\Program Files」。 /usr/localにはパッケージシステム(yumやYaST2)管理外のプログラムファイルを保管。 例えばLinux用のフリーソフトとかゲームとか。 |
FHS2.3の規定
ルートディレクトリ直下に必須とされているディレクトリは、「/bin」「/boot」「/dev」「/etc」「/lib」「/media」「/mnt」「/opt」「/sbin」「/srv」「/tmp」「/usr」「/var」となっている。