web-dev-qa-db-ja.com

Linuxのバイナリファイルを含むディレクトリ

新しいアプリケーションをインストールするときに、結果のバイナリファイルが配置されるディレクトリがいくつかあることに気付きました。

Pythonなどの場合は、パッケージマネージャーを使用してインストールし、makeeasy_installを使用してコンパイルできます。

私の$PATHは次のようになります。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

結果のバイナリ(またはライブラリ)をどのディレクトリに配置するかを決定する規則またはルールはありますか?

ソースコードをコンパイルすると、結果はしばしば/usr/local/bin/になることに気づきました。これはルールですか?

バイナリに従ってUnixの哲学(設計および規則の決定)を説明する答えを書いてもらえますか。なぜこのようになっているのですか(すべてのバイナリに1つのディレクトリしか使用しないのはなぜですか)。

8
xralf

厳密な規則はありませんが、ディストリビューションごとに独自のロジックがあり、それらを行う場所に配置しています。通常、/binはシステムバイナリに使用され、/usr/binはディストリビューションに付属するデフォルトのアプリケーションに使用され、/usr/local/binは通常のディストリビューション以外にインストールされるものに使用されます。 X11バイナリの場合、X11を追加できます。/usr/X11/bin/usr/local/X11/binはごく一般的です。一部のソフトウェアは/optにもインストールされます。

これ 記事/の事柄についてより詳細な説明があります。そしてもちろん wikipedia にはページがあります。

@ Sardathrion の回答に加えて、sbinディレクトリは通常、さまざまな種類のシステム管理ツール、低レベルのシステムアプリケーション、および多くの場合、さまざまな種類のシステムデーモンのバイナリに使用されます。

たとえば、sbinsの中には、/sbin/init(カーネルが内部初期化を完了するとブートプロセスを制御する)、/sbin/hdparm(ハードディスクの動作パラメータの読み取りと設定)などがあります。 、/usr/sbin/cupsd(印刷デーモン)、/usr/sbin/smartctl(ハードディスクからデータを読み取るSMARTデータ)など。

一般的な慣例では、/usrはパッケージマネージャーによって管理され、/usr/localはユーザーまたはシステム管理者によって管理されます(2つが同一でない場合)。これには歴史的な先例があります。ディスクスペースが高価な場合、/ usrをネットワーク経由で読み取り専用でマウントし、完全なネットワークブートをサポートしていないシステムでも多くのワークステーション間で共有できます。各ワークステーションは、独自の比較的小さな/ usr/localだけでなく、(比較的軽量な)ルートファイルシステム(/)を持つことができます。この/ usrと/ usr/localの違いが、ほとんどのパッケージがソースコードからビルドされたときにデフォルトで/ usr/localにインストールされる理由であると考えられます。

6
a CVn

Filesystem Hierarchy StandardLinuxディストリビューションがファイルを配置する場所 を指定します。

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システム上の他の一般的な実行可能ファイルの場所は次のとおりです。

  • Xプログラムの場合は/usr/X11R6/binまたは/usr/bin/X11。 XプログラムをX以外のプログラムから分離する習慣はなくなりました。現在、彼らは全員/usr/binに住んでいます。
  • /usr/bin/mhMH email client の実行可能ファイルの場合、単一目的のシェルコマンド(showはメッセージを表示し、forwはメール、…)MHユーザーのみが/usr/bin/mh$PATHに入れます。
  • /opt/binが存在する場合は、/optにインストールされているアプリケーションへのシンボリックリンクが含まれます。

Linuxのルールは、ほとんどのUNIXシステムが従う一般的なガイドラインに触発されていますが、各UNIXバリアントには独自の癖があります。例えば:

  • * BSDでは、/および/usrには、ディストリビューションのコアのみが含まれています。基本的なサービスとアプリケーションは、ディストリビューションのメンテナーによって直接メンテナンスされています。サードパーティのプログラム(「パッケージ」または「ポート」)は、パッケージマネージャーによって管理されている場合でも、/usr/localにインストールされます。システム管理者が提供するプログラムの一般的に受け入れられている個別の場所はありません。
  • 一部のUNIXシステムには/binディレクトリがありません。これは/sbinまたは/usr/binへのシンボリックリンクです。
  • 一部のシステムでは、オプションのパッケージを含む追加のディレクトリがあり、それぞれが独自のbinディレクトリを$PATHに配置します。
  • 一部のシステムには、実行環境との互換性に応じて、$PATHまたは/usr/bin/posixまたは/usr/xpg4/binなど、/usr/xpg6/binに配置される場合と配置されない場合がある追加のディレクトリがある場合があります。 POSIX/Single Unixとの互換性、または/usr/ucbとレガシーBSDシステムとの互換性。