私はファイルシステム階層標準を理解しようとしています。私はバイナリとライブラリの両方を調べましたが、私は現在それを理解しています:
binariesは、CPUとプロセッサをビットで直接制御する、バイナリ形式のコンピュータ可読コードのファイルです。
librariesは、PHPのJavascriptでモジュールが必要な場合など、便宜上、さまざまなプログラムで使用できる関数です。
この理解は正しいですか?もしそうなら、なぜ私たちはまだライブラリとバイナリを分離しているのですか?一部のライブラリはバイナリバイナリですよね?そして、いくつかのバイナリー(cat、less、date、rm、cpなど)は、ライブラリーであるかのように使用および再利用されます...誰かが違いを説明し、これら2つの単語のより良い定義を見つけるのを手伝ってくれませんか?ありがとうございました。
あなたの理解はほとんど正しいですが、考慮すべき追加事項がいくつかあります。
/lib
_のほとんどは、マシンコードにコンパイルされたライブラリです。cat
のようなものは、ライブラリ内のコードの呼び出しなどのシェルスクリプトで使用されますが、それらは単独で実行できるため、FHSの意味でのライブラリではありません。これらの点の結果として、標準ドキュメントを作成していない人の間で一般的な用語は次のとおりです。
オブジェクトファイル:これらはネイティブにコンパイルされたマシンコードですが、実行されなかったり、呼び出し可能ではない場合もあります。他のカテゴリに分類されない限り、通常は_.o
_拡張子があり、ソフトウェアのビルド時を除いて、ほとんどのシステムでほとんど見られません。以下にいくつかのことを理解するために重要なので、ここにリストしました。
実行可能ファイル:これらは、直接実行できるほとんどが自己完結型のコードで構成されるファイルです。それらは、カーネルによって直接ロードできる特別にフォーマットされたオブジェクトファイル(cat
、bash
、python
などはすべてこのタイプの実行可能ファイルです)か、それ自体が実行可能プログラムである中間プログラムによって解釈されます(Minecraft、pydoc
、およびcowsay
はすべて、このタイプの実行可能プログラムの例です)。最初のタイプの実行可能ファイルは、UNIXシステムではほとんどファイル拡張子がありませんが、2番目のタイプの実行可能ファイルは、そうでない場合があります。これは、FHSが「バイナリ」と呼んでいるものです。他の実行可能ファイルから実行できますが、特別な関数を呼び出して呼び出す必要があります(CおよびC++ではfork()
およびexec()
、Pythonのsubprocess
モジュール以外のもの)など)、別のプロセスとして実行します。
ライブラリ:これらは、別のライブラリまたは実行可能ファイルから呼び出すことができる再利用可能なコードを含むファイルです。ライブラリのコードは、ライブラリが読み込まれると(ほとんど)他のコードによって直接呼び出され(コンパイルされたコードについて話すときは「リンク」と呼ばれます)、それを呼び出すコードと同じプロセスで実行されます。ライブラリには3つの一般的なタイプがあります。
.a
_拡張子が付いています。静的ライブラリの概念は、コンパイルされたプログラミング言語以外には存在しません。.so
_拡張子が付いています(_.dll
_はWindowsでは標準です)。これは、実行時にそれを使用する実行可能ファイルによってロードされます。実動システムの_/lib
_にあるもののほとんどは、動的ライブラリーです。http.server
_を参照) =例の標準ライブラリ)。