Was ist der Unterschied zwischen einer Binärdatei und einer Bibliothek?

11

Ich versuche, den Dateisystem-Hierarchie-Standard zu verstehen. Ich habe sowohl Binärdateien als auch Bibliotheken nachgeschlagen und wie ich es derzeit verstehe:

Binärdateien sind Dateien mit computerlesbarem Code im Binärformat, die die CPU und den Prozessor direkt mit Bits steuern.

Bibliotheken sind Funktionen, die von verschiedenen Programmen aus praktischen Gründen verwendet werden können - beispielsweise wenn Sie ein Modul in Javascript von PHP benötigen.

Ist dieses Verständnis richtig? Wenn ja, warum trennen wir dann immer noch Bibliotheken und Binärdateien? Einige Bibliotheken sind Binärdateien, oder? Und einige Binärdateien (cat, less, date, rm, cp usw.) werden verwendet und wiederverwendet, als wären sie Bibliotheken ... Kann mir jemand helfen, den Unterschied zu erklären und mir zu helfen, bessere Definitionen für diese beiden Wörter zu finden? Vielen Dank.

houallet
quelle

Antworten:

10

Ihr Verständnis ist größtenteils richtig, aber es gibt ein paar zusätzliche Dinge zu beachten:

  1. 'binär' bezieht sich auf etwas, das nicht von Menschen lesbar ist. Dies bezieht sich normalerweise auf Maschinencode, aber viele andere Dateien sind in diesem Sinne auch Binärdateien, wobei die meisten Multimedia-Formate ein gutes Beispiel sind. Das FHS hat jedoch eine spezifischere Verwendung für den Begriff.
  2. Bibliotheken können Binärcode sein. Tatsächlich werden die meisten Inhalte /libBibliotheken sein, die zu Maschinencode kompiliert wurden.
  3. Während Dinge wie catShell-Skripte wie Aufrufe von Code in Bibliotheken verwendet werden, sind sie keine Bibliotheken im FHS-Sinne, da sie selbst ausgeführt werden können.

Aufgrund dieser Punkte lautet die häufigere Terminologie bei Personen, die keine Standarddokumente schreiben:

  • Objektdateien: Dies ist nativ kompilierter Maschinencode, der jedoch möglicherweise nicht einmal ausgeführt wird oder aufgerufen werden kann. Sie haben normalerweise eine .oErweiterung, es sei denn, sie fallen in eine der anderen Kategorien und werden auf den meisten Systemen fast nie gesehen, außer beim Erstellen von Software. Ich habe sie hier aufgelistet, weil sie wichtig sind, um einige Dinge unten zu verstehen.

  • Ausführbare Dateien: Dies sind Dateien, die aus größtenteils in sich geschlossenem Code bestehen und direkt ausgeführt werden können. Sie können entweder speziell Objektdateien formatieren , die direkt vom Kernel geladen werden können (Dinge mögen cat, bashund pythonall diese Art von ausführbaren) oder werden von einigen Vermittlern Programm interpretiert , die selbst ist eine ausführbare Datei (Minecraft, pydocund cowsaysind alle Beispiele dieser Art von ausführbarer Datei). Ausführbare Dateien des ersten Typs haben auf UNIX-Systemen fast nie eine Dateierweiterung, während ausführbare Dateien des zweiten Typs möglicherweise oder möglicherweise nicht. Dies wird von der FHS als "Binärdateien" bezeichnet. Sie können von anderen ausführbaren Dateien ausgeführt werden, erfordern jedoch den Aufruf spezieller Funktionen, um sie aufzurufen ( fork()und exec()in C und C ++ Dinge aus demsubprocess Modul in Python usw.) und als separater Prozess ausführen.

  • Bibliotheken: Dies sind Dateien, die wiederverwendbaren Code enthalten, der von einer anderen Bibliothek oder einer ausführbaren Datei aufgerufen werden kann. Code in Bibliotheken wird (meistens) direkt von anderem Code aufgerufen, sobald die Bibliothek geladen ist (im Zusammenhang mit kompiliertem Code als "Verknüpfen" bezeichnet) und im selben Prozess wie der aufrufende Code ausgeführt. Es gibt drei generische Arten von Bibliotheken:

    1. Statische Bibliotheken: Dies sind die ursprünglichen Sorten. Sie bestehen aus einer Archivdatei (normalerweise im AR-Format) mit einer großen Anzahl von Objektdateien, eine für jede Funktion in der Bibliothek. Die Objektdateien werden mit der ausführbaren Datei verknüpft, die sie verwendet. Eine ausführbare Datei, die nur statische Bibliotheken verwendet, ist also im Wesentlichen 100% unabhängig von jedem anderen Code. Auf UNIX-Systemen haben sie normalerweise eine .aErweiterung. Das Konzept der statischen Bibliotheken existiert außerhalb kompilierter Programmiersprachen nicht wirklich.
    2. Dynamische Bibliotheken: Dies sind die heute am häufigsten verwendeten Bibliothekstypen. Eine dynamische Bibliothek ist eine spezielle Objektdatei, normalerweise mit einer .soErweiterung unter UNIX ( .dllist der Standard unter Windows), die zur Laufzeit von ausführbaren Dateien geladen wird, die sie verwenden. Das meiste, was Sie /libauf Produktionssystemen finden, sind dynamische Bibliotheken.
    3. Module: Dies entspricht einer dynamischen Bibliothek für eine interpretierte Sprache. Die Handhabung unterscheidet sich ein wenig von der einer kompilierten Sprache. Im Gegensatz zu einer kompilierten Sprache kann eine Datei sowohl ein Modul als auch eine ausführbare Datei sein ( http.serverein Beispiel finden Sie in der Python-Standardbibliothek).
Austin Hemmelgarn
quelle
Nicht zu vergessen die Skriptdateien, die ein Sonderfall für ausführbare Dateien sind, da sie von einer ausführbaren Binärdatei ( bash, python) abhängen , die ausgeführt werden soll. Darüber hinaus können Skripte in /libvon anderen Skripten verwendet werden. Vergleichen Sie die Python-Module.
Murphy
1
Das fällt unter "interpretiert von einem Zwischenprogramm . Tow of the examples I listed for that (pydoc" und cowsay) sind Skripte.
Austin Hemmelgarn
Klarstellung zu # 3 - Module sind ladbare Codebits, die zur Erweiterung der Funktionalität verwendet werden. Apache / PHP-Module sind ein gutes Beispiel für Ihren Teil mit interpretierten Skripten, aber auch Kernel-Module zählen ... Ich möchte auch einen Punkt hinzufügen, der die meist lesbaren interpretierten Sprachen wie Skripte für die verschiedenen Shells, PHP, Perl usw. abdeckt per FHS würde in ein / bin oder / sbin Verzeichnis gehen, da es sich um ausführbare Programme handelt
ivanivan
Module als Erweiterungen werden häufiger als Plugins bezeichnet. Die Namenswahl von Apache basierte auf dem alten UNIX-Standard zum Aufrufen von Kernel-Treibermodulen, und dies ist mittlerweile eine gängige Terminologie für Webserver (aufgrund von Marketing), aber das ist ein seltsamer Fall im Vergleich zu den meisten anderen Programmen, die beide Plugins universell verwenden 'oder' Erweiterung ', wenn darauf Bezug genommen wird.
Austin Hemmelgarn