新しいアプリケーションをインストールするときに、結果のバイナリファイルが配置されるディレクトリがいくつかあることに気付きました。
Pythonなどの場合は、パッケージマネージャーを使用してインストールし、make
、easy_install
を使用してコンパイルできます。
私の$PATH
は次のようになります。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
結果のバイナリ(またはライブラリ)をどのディレクトリに配置するかを決定する規則またはルールはありますか?
ソースコードをコンパイルすると、結果はしばしば/usr/local/bin/
になることに気づきました。これはルールですか?
バイナリに従ってUnixの哲学(設計および規則の決定)を説明する答えを書いてもらえますか。なぜこのようになっているのですか(すべてのバイナリに1つのディレクトリしか使用しないのはなぜですか)。
厳密な規則はありませんが、ディストリビューションごとに独自のロジックがあり、それらを行う場所に配置しています。通常、/bin
はシステムバイナリに使用され、/usr/bin
はディストリビューションに付属するデフォルトのアプリケーションに使用され、/usr/local/bin
は通常のディストリビューション以外にインストールされるものに使用されます。 X11バイナリの場合、X11
を追加できます。/usr/X11/bin
と/usr/local/X11/bin
はごく一般的です。一部のソフトウェアは/opt
にもインストールされます。
@ Sardathrion の回答に加えて、sbin
ディレクトリは通常、さまざまな種類のシステム管理ツール、低レベルのシステムアプリケーション、および多くの場合、さまざまな種類のシステムデーモンのバイナリに使用されます。
たとえば、sbin
sの中には、/sbin/init
(カーネルが内部初期化を完了するとブートプロセスを制御する)、/sbin/hdparm
(ハードディスクの動作パラメータの読み取りと設定)などがあります。 、/usr/sbin/cupsd
(印刷デーモン)、/usr/sbin/smartctl
(ハードディスクからデータを読み取るSMARTデータ)など。
一般的な慣例では、/usr
はパッケージマネージャーによって管理され、/usr/local
はユーザーまたはシステム管理者によって管理されます(2つが同一でない場合)。これには歴史的な先例があります。ディスクスペースが高価な場合、/ usrをネットワーク経由で読み取り専用でマウントし、完全なネットワークブートをサポートしていないシステムでも多くのワークステーション間で共有できます。各ワークステーションは、独自の比較的小さな/ usr/localだけでなく、(比較的軽量な)ルートファイルシステム(/
)を持つことができます。この/ usrと/ usr/localの違いが、ほとんどのパッケージがソースコードからビルドされたときにデフォルトで/ usr/localにインストールされる理由であると考えられます。
Filesystem Hierarchy Standard は Linuxディストリビューションがファイルを配置する場所 を指定します。
bin
ディレクトリには、任意のユーザーが使用するための実行可能ファイルが含まれ、sbin
ディレクトリには、システム管理者のみが使用するための実行可能ファイルが含まれます。 sbin
ディレクトリは通常、ルートの$PATH
にのみ存在します。
/bin
(および/sbin
)には、ブートプロセスの早い段階で必要なプログラムが含まれています。これは、/usr
が別のパーティションにマウントされる可能性があるためです(これは現在ではまれです)。
/usr/bin
(および/usr/sbin
)には、ディストリビューションによって提供され、/bin
または/sbin
にはないプログラムが含まれています。一般的なシステムでは、実行可能ファイルの大部分は/usr/bin
にあります。
/usr/local
階層は、管理者の領域です。ディレクトリ/lib
、/bin
、/sbin
および/usr
は通常、ディストリビューション用に予約されており、通常はシステムパッケージマネージャーによって提供されるファイルのみが含まれています。 /usr/local
(特に/usr/local/bin
と/usr/local/sbin
)はパッケージマネージャーによって変更されないため、ローカル管理者が手動でインストールした実行可能ファイルを配置できます。
/usr/games
には、ディストリビューションによって提供され、純粋にレクリエーションと見なされる実行可能ファイルが含まれている場合があります。これは主に歴史的な存続です(昔、/usr/games
は1日の特定の時間帯に立ち入り禁止になる可能性がありますが、この種の習慣(とにかく簡単に回避できた)はなくなりました)。
Linuxシステム上の他の一般的な実行可能ファイルの場所は次のとおりです。
/usr/X11R6/bin
または/usr/bin/X11
。 XプログラムをX以外のプログラムから分離する習慣はなくなりました。現在、彼らは全員/usr/bin
に住んでいます。/usr/bin/mh
MH email client の実行可能ファイルの場合、単一目的のシェルコマンド(show
はメッセージを表示し、forw
はメール、…)MHユーザーのみが/usr/bin/mh
を$PATH
に入れます。/opt/bin
が存在する場合は、/opt
にインストールされているアプリケーションへのシンボリックリンクが含まれます。Linuxのルールは、ほとんどのUNIXシステムが従う一般的なガイドラインに触発されていますが、各UNIXバリアントには独自の癖があります。例えば:
/
および/usr
には、ディストリビューションのコアのみが含まれています。基本的なサービスとアプリケーションは、ディストリビューションのメンテナーによって直接メンテナンスされています。サードパーティのプログラム(「パッケージ」または「ポート」)は、パッケージマネージャーによって管理されている場合でも、/usr/local
にインストールされます。システム管理者が提供するプログラムの一般的に受け入れられている個別の場所はありません。/bin
ディレクトリがありません。これは/sbin
または/usr/bin
へのシンボリックリンクです。bin
ディレクトリを$PATH
に配置します。$PATH
または/usr/bin/posix
または/usr/xpg4/bin
など、/usr/xpg6/bin
に配置される場合と配置されない場合がある追加のディレクトリがある場合があります。 POSIX/Single Unixとの互換性、または/usr/ucb
とレガシーBSDシステムとの互換性。