バイナリファイルとライブラリの違いは何ですか?


11

Filesystem Hierarchy Standardを理解しようとしています。私はバイナリとライブラリの両方を調べましたが、私は現在それを理解しています:

バイナリは、ビットでCPUとプロセッサを直接制御するバイナリ形式のコンピュータ可読コードのファイルです。

ライブラリは、PHPのJavascriptでモジュールが必要な場合など、便宜上、さまざまなプログラムで使用できる関数です。

この理解は正しいですか?もしそうなら、なぜ私たちはまだライブラリとバイナリを分離しているのですか?一部のライブラリバイナリですよね?そして、いくつかのバイナリ(cat、less、date、rm、cpなど)は、ライブラリであるかのように使用および再利用されます...誰かが違いを説明し、これら2つの単語のより良い定義を見つけるのを助けることができますか?ありがとうございました。

回答:


10

あなたの理解はほとんど正しいですが、考慮すべきいくつかの追加事項があります:

  1. 「バイナリ」は人間が読めないものを指します。これは通常、マシンコードを指しますが、他の多くのファイルもこの意味でバイナリファイルであり、ほとんどのマルチメディアフォーマットが良い例です。ただし、FHSにはこの用語のより具体的な使用法があります。
  2. ライブラリはバイナリコードにすることができます。実際、そのほとんどは、/libマシンコードにコンパイルされたライブラリです。
  3. のようなものcatは、ライブラリのコードの呼び出しなどのシェルスクリプトで使用されますが、それらは単独で実行できるため、FHSの意味でのライブラリではありません。

これらの点の結果として、標準ドキュメントを作成していない人々の間で一般的な用語は次のとおりです。

  • オブジェクトファイル:これらはネイティブにコンパイルされたマシンコードですが、実行されないか、呼び出し可能ではない場合があります。.o他のカテゴリに分類されない限り、通常は拡張機能があり、ソフトウェアを構築する場合を除いて、ほとんどのシステムではほとんど見られません。以下にいくつかのことを理解するために重要なので、ここにリストしました。

  • 実行可能ファイル:これらは、直接実行できるほとんどが自己完結型のコードで構成されるファイルです。彼らはいずれかの特別なカーネルによって直接ロード可能なオブジェクトファイルフォーマット(のようなものであってもよくcatbashおよびpython実行可能ファイルのすべてのこのタイプである)、または実行(Minecraftは、それ自体がいくつかの仲介プログラムによって解釈されpydoc、そしてcowsayすべての例でありますこのタイプの実行可能ファイル)。最初のタイプの実行可能ファイルは、UNIXシステムではほとんどファイル拡張子がありませんが、2番目のタイプの実行可能ファイルは、そうでない場合があります。これは、FHSが「バイナリ」と呼んでいるものです。彼らは、他の実行可能ファイルから実行されますが、それら(呼び出すために特別な機能を呼び出す必要がすることができますfork()し、exec()CおよびC ++での、外のものsubprocess Pythonなどのモジュール)、別のプロセスとして実行します。

  • ライブラリ:これらは、別のライブラリまたは実行可能ファイルから呼び出すことができる再利用可能なコードを含むファイルです。ライブラリ内のコードは、ライブラリが読み込まれると(ほとんど)直接他のコードによって呼び出され(コンパイルされたコードについて話すときは「リンク」と呼ばれます)、それを呼び出すコードと同じプロセスで実行されます。ライブラリには3つの一般的なタイプがあります。

    1. 静的ライブラリ:これらは元々の種類です。これらは、ライブラリ内の各関数に1つずつ、多数のオブジェクトファイルが含まれたアーカイブファイル(通常はAR形式)で構成されています。オブジェクトファイルは、それらを使用する実行可能ファイルにリンクされるため、静的ライブラリのみを使用する実行可能ファイルは、他のコードから基本的に100%独立しています。UNIXシステムでは、通常、.a拡張機能があります。静的ライブラリの概念は、コンパイルされたプログラミング言語以外には存在しません。
    2. 動的ライブラリー:これらは、今日使用されている最も一般的なタイプのライブラリーです。動的ライブラリは特別なオブジェクトファイルであり、通常.soUNIXの拡張子(.dllWindowsの標準)で、それを使用する実行可能ファイルによって実行時にロードされます。/lib本番システムで見つかるのは動的ライブラリです。
    3. モジュール:これは、インタプリタ言語の動的ライブラリに相当します。処理はコンパイル済み言語とは少し異なり、コンパイル済み言語とは異なり、ファイルがモジュールと実行可能ファイルの両方になる可能性があります(例についてhttp.serverは、Python標準ライブラリを参照)。

実行されるバイナリ実行可能ファイル(bashpython)に依存するため、実行可能ファイルの特殊なケースであるスクリプトファイルを忘れないでください。さらに、のスクリプトは/lib、他のスクリプトで使用するためのものです。Pythonモジュールを比較します。
マーフィー

1
これは「一部の中間プログラム. Tow of the examples I listed for that (pydoc によって解釈される」に該当し、cowsayスクリプトはスクリプトです。
オースティンヘンメルガーン2017

#3の明確化-モジュールは、機能を拡張するために使用されるロード可能なコードのビットです。Apache / phpモジュールはインタプリタされたスクリプト部分の良い例ですが、カーネルモジュールも重要です...さまざまなシェル、php、perlなどのスクリプトのような、ほとんどの人が読めるインタプリタ言語をカバーするポイントも追加します。 FHSごとに、それらは実行可能プログラムであるため、/ binまたは/ sbinディレクトリに移動します
ivanivan

拡張機能としてのモジュールは、プラグインと呼ばれることが多いです。Apacheの命名の選択は、カーネルドライバーモジュールを呼び出すという古いUNIX標準に基づいていましたが、今では(マーケティングのために)Webサーバーで一般的な用語になっていますが、他のほとんどのソフトウェアと比べて奇妙なケースです。 「または」を参照する場合は「拡張子」。
オースティンヘンメルガーン2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.