/usr はファイルシステムで2番目に重要な領域です。/usr は共有可能であり、読み込みのみ(read-only)のデータが置かれます。/usr は FHS に従っているホスト間で共有可能であることを意味し、そのような意味で記述しています。ホスト特有の情報や時間によって変化する情報はその他の領域に置かれます。
大きなソフトウェア・パッケージは /usr 配下にサブディレクトリを作成すべきではありません。
以下のディレクトリあるいはディレクトリへのシンボリックリンクは /usr で必要とされます:
これまでの慣例から X Window システム実行のために必要とされる場所が例外として確保されています。
以下のようなディレクトリへのシンボリックリンクがあるかもしれません。これらは全てのシステムファイル群が /usr 階層を用いると考えられていたシステムへの互換性を保つためです。
/usr/spool -> /var/spool /usr/tmp -> /var/tmp /usr/local/locks -> /var/lock
システムによって上記のシンボリックリンクが必要としないなら、リンクを削除して構いません。
この階層はX Window システムバージョン 11 リリース6 および関連ファイルのために確保されています。
XFree86 を他の X Window 互換システムと両立させることができるよう問題を単純化するために /usr/X11R6 ディレクトリが存在しているばあい、以下のようなシンボリックリンクが作成されているでしょう。
/usr/bin/X11 -> /usr/X11R6/bin /usr/lib/X11 -> /usr/X11R6/lib/X11 /usr/include/X11 -> /usr/X11R6/include/X11
一般的にソフトウェアは上記のようなシンボリックリンクを用いて管理するようにインストールしてはいけません。ユーザが利用可能であるように意図されています。問題は X Window システムのバージョンの影響を受けるかどうかがありますが、過渡的なものであり、X11 がリリースされている間は問題ないでしょう。
/usr/X11R6/lib/X11 あるファイルがホスト固有のデータであると解釈されます。現在の情報を必要とするアプリケーションによって /etc/X11 の設定ファイルを参照するか、/usr/X11R6/lib にファイルをリンクしているかもしれません。
システムで実行可能なコマンドが置かれている主要なディレクトリです。
対応するサブシステムがインストールされる場合、以下のディレクトリ、あるいはディレクトリへのシンボリックリンクが /usr/bin に置かれます:
/usr/X11R6/bin がある場合は /usr/bin/X11へのシンボリック・リンクが必要です。
以下の対応するサブシステムがインストールされる場合、次のファイルあるいはファイルへのシンボリック・リンクが /usr/bin に置かれます。
(i) 補足説明
シェルスクリプトでは一番最初の行(#!<パス>で呼び出す)でシェル自身のパスを知ることができないため、場所を標準化することは便利になります。ボーンシェルや C シェルらは /bin 以下に既に固定されてしまっていますが、Perl , Python, Tcl などは異なった場所で見受けられます。それらシェル・インタラプターの実際の場所からシンボリック・リンクが置かれているかもしれません。
C プログラミング言語のためのシステムが使用する一般的な組み込みファイルがすべて置かれる場所です。
対応するサブシステムがインストールされている場合、次のディレクトリあるいはディレクトリへのシンボリックリンクが /usr/include に作成されています:
/usr/lib にはシェルスクリプトによって直接実行されないようにしたいオブジェクトファイル、ライブラリ、そして内部のバイナリファイルを含みます。*1
アプリケーションによっては /usr/lib のディレクトリのみ使うかもしれません。もしアプリケーションがサブディレクトリを用いるのであれば、アプリケーションが扱う全てのアーキテクチャに依存するファイルは、そのサブディレクトリ内に置かなければいけません。*2
歴史的な理由から /usr/sbin/sendmail へのシンボリック・リンクが /usr/lib/sendmail として残っている場合があります*3。
/lib/X11 が存在している場合、/usr/lib/X11 は /lib/X11 自体がシンボリックリンクだとしても /lib/X11 へのシンボリック・リンクでなくてはいけません*4。
/usr/lib/<qual> は /usr/lib 配下のバイナリフォーマットと同一の役割を持ちます。ただし /usr/lib<qual>/sendmail と /usr/lib<qual>/X11 へのシンボリック・リンクは必要とされません*5。
目的
/usr/local 階層はシステム管理者がローカルのシステムにソフトウェアをインストールするときに用いる階層です。システムのソフトウェアが更新されるときに上書きされないように注意を払わなくてはいけません。/usr 配下はホスト間で共有プログラムによって使用されるプログラムやデータが置かれる場合もあります。
ローカルな環境にプログラムをインストールしたりアップグレードする場合は /usr にソフトが置かれている場合でも、/usr よりむしろ /usr/local にインストールしなくてはいけません*6。
必要条件
以下のディレクトリあるいはディレクトリへのシンボリックリンクが /usr/local に置かれます
システムをインストールした直後であれば FHS に準拠したシステムであっても /usr/local 配下には何もディレクトリが作成されていない場合があります。
オプション指定
もし /lib<qual> か /usr/lib<qual> が存在しているのであれば、同等のディレクトリが /usr/local 配下にも置いておかなくてはいけません。
/usr/local/etc は /usr/local へのシンボリック・リンクである場合があります。
(i) 補足説明
/usr/local/etc が在ればインストーラーや既に利用されている他のシステムにとっても役立つ場所です。/usr/local 配下のファイルはシステムを置き換えるときにバックアップが必要となりますが、バックアップ以上の作業は必要としません。ですが /etc/local 配下へのシンボリック・リンクがある場合には、その階層を維持するように注意しなくてはいけません。
/usr 配下のプログラムが使用する設定ファイルを置く場所は /etc であり、/usr/etc を利用することはまだ認められていません。
/usr/local/share の必要な条件は /usr/share と同じものです。唯一制約があるのは /usr/local/share/man と /usr/local/man ディレクトリはシンボリック・リンクでなくてはいけないという事があげられます。
このディレクトリにはシステム管理者に特に必要とされないファイルも含みます。システム修復、システム回復、/usr のマウントやその他システム管理に重要なプログラムは /sbin に配置されなくてはいけませ。
/usr/share 階層は全て読み込み専用(read-only)でアーキテクチャに依存しないデータファイルのための場所です*7。
この階層は異なった OS やアーキテクチャ間でデータが共有される事を意図しています。たとえば i386, Alpha, PPC プラットフォームで一緒のサイトを構築する際に /usr/share ディレクトリが中心にマウントされるかもしれません。ですが、一般的には /usr/share が異なった OS や同じ OS であってもリリースが違えば共有されることはありませんので、注意を払っておいてください。
修正する必要がないデータを含んでいるプログラムやパッケージが用いるデータは /usr/share(あるいはローカルにインストールするときは /usr/local/share)に配置されます。必要に応じて /usr/share 配下にサブディレクトリを作成することが認められています。
/usr/share/game に置かれているゲームデータは純粋に静的なデータファイルではなくてはいけません。ゲームのプレイ記録や得点記録ファイルといった更新可能なファイルは /var/games 配下に置くべきです。
以下のディレクトリかディレクトリへのシンボリックリンクが /usr/share に置かれなくてはいけません。
対応するサブシステムがインストールされるのであれば、以下のディレクトリあるいはディレクトリへのシンボリックリンクが /usr/share に置かれます
アプリケーション固有でアーキテクチャに依存しないディレクトリが置かれる事が推奨されています。ディレクトリとしては groff, perl, ghostscript, texmf, kbd(Linux) あるいは syscons(BSD) といったものが含まれます。ですがディストリビューションの方針や旧システムとの互換性を保つ為に /usr/lib に置かれる場合もあります。同様にディストリビューションが /usr/lib/games 階層を /usr/share/games 階層として同じ働きをするものとして用いる場合もあります。
目的
このディレクトリはシステムの単語リスト置き場です。伝統的にディレクトリには英語の綴り、たとえば look(1) や文法をチェックするプログラムによって用いられます。言語はアメリカ式英語か英国式英語のいずれかです。
(i) 補足説明
全ての文法チェックプログラムが唯一共通して利用する場所です。
オプション指定
対応するサブシステムがインストールされる場合、以下のファイルあるいはファイルへのシンボリック・リンクが /usr/share/dict に置かれなくてはいけません。
サイトがアメリカ式と英国式の文法を必要とする場合には /usr/share/dict/american-english あるいは /usr/share/dict/british-english へリンクされるかもしれません。
他の言語のための単語リストが /usr/share/dict/french、/usr/share/dict/danish など英語表記のディレクトリ名が追加されるかもしれません。これらは、可能であれば ISO 8859 文字セットに従うべきです。できれば Latin1(ISO 8859-1) 文字セットに従うべきです(が殆ど無理でしょう)。
ほかにも単語リストが必要であれば、このディレクトリ内に配置されます。
目的
このセクションでは /usr/share/man を含むマニュアルページのための構成を記述します。あわあせて /var/cache/man セクションもご覧下さい。
システムで主要な <mandir> は /usr/share/man です。/usr/share/man にはマニュアル情報と / および /usr ファイルシステムのコマンド群の説明を含みます*8。
マニュアルページは <mandir>/<locale>/man<section>/<arch> として置かれます。<mandir>, <locale>, <section>, <arch> については以下で説明します。
以下はそれぞれのセクションの説明です:
オプション指定
以下のディレクトリまたはディレクトリへのシンボリック・リンクが /usr/share/<mandir>/<local> に置かれるか、まったくディレクトリが存在しない場合もあります。
<section> はマニュアルのセクション番号を指し示します。
/usr/share/man は異なった複数の言語でも記述される事を想定した構造を持たなくてはいけません。どこにファイルを置くか、そして、どこからマニュアルが参照されるかも考慮しなくてはいけません。言語(方言も含む)や文字コードセットに対する適切な配慮も行われます。
/usr/share/man 配下に言語用のサブディレクトリを作成するには POSIX 1003.1 標準の付録 E に基づいて識別できるような文字列を用います。<locale> 文字列は文化的な環境を区別するために用いられます:
languae>[ <territory>][.<character-set>][,<version>]
<language>欄は ISO 639(言語の区別ついての規定)に基づく2文字を入れます。文字は小文字のみです。
<territory>欄には ISO 3166 によって規定されている国や地域についての規定に基づく2文字を入れます。(多くの人々は電子メールアドレス中に含まれる .jp などの2文字の事だと気づくでしょう)規定として2文字を用いることと大文字のみを使用しなくてはいけません*9。
<character-set> 欄には標準の文字コードセットを記述しなくてはいけません。<character-set> 欄が単なる数字を用いるのであれば、文字セットを定義している国際規格の番号を指し示しています。できれば、これら数値の表示には(特に ISO 標準であるように)句読点を含まず、どのような文字でも小文字として記述されるべできす。
<version> 欄は <character-set> の後に , に続いて用いられるかも知れません。これは言語内でも異なった用い方(方言)を区別するために用いられるかもしれません。たとえば、システム仕様に従ったものと、本来の辞書で用いられる使い方が対立する場合などです。特に使用する必要がなければ <version> 欄は用いない事を推奨します。
システムが使用する言語や特定の文字コードセットは <locale> を省略して、そのまま全てのマニュアルが <mandir> に配置されるかもしれません。たとえば、システムが ASCII コードで書かれた英語のマニュアルしか用いないときマニュアル文書は(man<section>ディレクトリ)直接 /usr/share/man に置かれます。(これは実際のところ、伝統的な事情と取り決めによるものです)
特定の国内で一般的に用いられる文字コードセットがある場合には <character-set> 欄は省略されるかもしれません。ですが、省くことで標準として用いてしまうと、他の言語との競合する問題が発生するため、省略しないようにすることを推奨します。
実際の例:
言語 | 領土 | 文字コードセット | ディレクトリ名 |
English | ? | ASCII | /usr/share/man/en |
English | イギリス | ISO 8859-15 | /usr/share/man/en_GB |
English | アメリカ | ASCII | /usr/share/man/en_US |
French | カナダ | ISO 8859-1 | /usr/share/man/fr_CA |
French | フランス | ISO 8859-1 | /usr/share/man/fr_FR |
German | ドイツ | ISO 646 | /usr/share/man/de_DE.646 |
German | ドイツ | ISO 6937 | /usr/share/man/de_DE.6937 |
German | ドイツ | ISO 8859-1 | /usr/share/man/de_DE.88591 |
German | スイス | ISO 646 | /usr/share/man/de_CH.646 |
Japanese | 日本 | JIS | /usr/share/man/ja_JP.jis |
Japanese | 日本 | SJIS | /usr/share/man/ja_JP.sjis |
Japanese | 日本 | UJIS (or EUC-J) | /usr/share/man/ja_JP.ujis |
同様に、デバイスドライブや下位レベルのシステム管理コマンド群に対する説明書など、アーキテクチャに依存するマニュアル文書も提供されなくてはいけません。man<section> ディレクトリ配下に <arch> ディレクトリとして置かれます。たとえば、i386 ctrlaltdel(8) コマンドの為のマニュアルは /usr/share/man/<locale>/man8/i386/ctrlaltdel.8 として置かれるでしょう。
/usr/local 配下のコマンドとデータのためのマニュアル文書は /usr/local/man に置かれます。X11R6 の為のマニュアルは /usr/X11R6/man です。システム内の全てのマニュアル階層は /usr/share/man と同様の構造を持っていなくてはいけません。
cat 文書のセクション(cat<section>)は典型的なマニュアル文書と同様に、<mandir>/<locale> サブディレクトリとして存在する場合もありますが、nroff ソースのマニュアル文書が配布されないように、特に必要とされないものです。
伝統的にマニュアルのセクションは1〜8まで割り振られています。一般的にはファイル名として .<section> のようにセクションを示しています。
追加次項として、特定のアプリケーションに特化した若干大きめのマニュアルを含むファイルセットが存在する場合があります。たとえば、MH メール・ハンドリングシステムのマニュアルページは全て mh という文字がマニュアル名に含まれます。全ての X Window システムのマニュアルページには x という文字がマニュアルに含まれます。
様々な言語のためのマニュアル文書は、サブディレクトリ /usr/share/man に配置されています。その他のマニュアル文章も同様な /usr/local/man と /usr/X11R6/man といった階層構造を持ちます。(標準階層の一部オプションとして /var/cache/man 構造があります)
ディレクトリ内にはアーキテクチャに依存しないファイルや /usr/share 配下におかれるサブディレクトリを含みます。
オプション指定
対応するサブシステムがインストールされる場合、次のファイルあるいはファイルへのシンボリックリンクが /usr/share/misc に置かれます。
ディストリビューションの方針でアプリケーションによっては /usr/share/misc よりも /usr/lib が用いられる場合もあります*10。。
目的
/usr/share/sgml には SGML アプリケーションがオリジンルのカタログ(一覧化されていないものは /etc/sgml)DTD、エンティティ、スタイルシートなどアーキテクチャに依存しないデータを含みます
オプション指定
対応するサブシステムがインストールされる場合、以下のディレクトリあるいはディレクトリへのシンボリック・リンクが /usr/share/xml に置かれます。
所定の DTD に属さないファイルのために、サブディレクトリが作成される場合があります。
目的
/usr/share/xml には XML アプリケーションがオリジナルのカタログ(一覧化されていないのは /etc/sgml )DTD、エンティティ、スタイルシートなどアーキテクチャに依存しないデータを含みます。
オプション指定
対応するサブシステムがインストールされる場合、以下のディレクトリあるいはディレクトリへのシンボリック・リンクが /usr/share/xml に置かれます。
ソースコードを純粋に参照することを目的として、このサブディレクトリを用います*11。