Was ist der Unterschied zwischen Standardsyntax und BSD-Syntax?

21

Ich habe viele Befehle gesehen, die eine "BSD-Syntax" sowie deren Standardsyntax akzeptieren. Nehmen Sie den psBefehl für ein Beispiel:

To see every process on the system using standard syntax:
      ps -e
      ps -ef
      ps -eF
      ps -ely

To see every process on the system using BSD syntax:
      ps ax
      ps axu

Was ist der Unterschied zwischen diesen beiden Routen? Im Allgemeinen, wenn sie in BSD-Syntax sagen, an welche Elemente ich mich erinnern sollte? Gilt diese Syntax nur für die Befehle, die sie auch in der BSD enthalten?

Mohammad Reza Rezwani
quelle
Nach den historischen Unterschieden zu fragen, wie Systeme im psLaufe der Zeit implementiert wurden, bedeutet, am Rande eines Abgrunds zu stehen, den man nicht wissen sollte.

Antworten:

18

Was ist der Unterschied zwischen MS Office und LibreOffice? Zwischen Firefox und Chrome?
Sie machen ungefähr dasselbe, aber sie sind von verschiedenen Leuten mit leicht unterschiedlichen Zielen.

Vielleicht ist die bessere Frage, warum BSD-, Linux-, OSX- und Unix-Distributionen so viele Befehle gemeinsam haben. Dies läuft auf POSIX- Konformität hinaus. POSIX ist im Grunde eine Reihe von Standards für Unix-ähnliche Betriebssysteme. Es legt die Kern-API, die Befehle und die Funktionsweise dieser Befehle fest.

Im Fall von ps(einem POSIX-festgelegten Befehl) werden bestimmte Argumente verlangt. Dazu gehören diese BSD. Alle von POSIX abgeleiteten Befehle verfügen über eigene Manpages, müssen jedoch separat installiert werden. Für ps:

sudo apt-get install manpages-posix
man 1posix ps

Warum nutzt BSD nicht unser ps(oder umgekehrt)?

  • Unser psPaket ( procpssiehe: dpkg -S $(which ps)) ist ein Fork von einem anderen procpsPaket . Beide sind GPL-lizenziert. Dies ist mit der BSD-Lizenz nicht kompatibel und kann dort nicht berücksichtigt werden. ( Wir könnten BSDs einschließen, müssen es aber nicht).
  • psist ziemlich kernelspezifisch. Ich denke, sie sind technisch nicht kompatibel.

Was ist mit anderen Anwendungen?

Die meisten Befehle für die POSIX-Kompatibilität stammen aus dem Ubuntu- coreutilsPaket. Dieses Paket stellt die GNU in GNU / Linux dar und ist ebenfalls GPL-lizenziert. BSD liefert seine eigenen BSD-kompatiblen Lizenzversionen aus, die POSIX-konform sind, jedoch nicht unbedingt mit den GNU-Versionen identisch sind.

psist nicht der einzige POSIX-Befehl, der nicht GNU ist . Es gibt viele von ihnen.

Warum sollte es so sein, wie ich es vorstelle? Sie sind über eine sehr lange Zeit von verschiedenen Leuten. Das ist die kurze Antwort hier.

Oli
quelle
20

Diese stammt aus der etwas gewundenen Geschichte von Unix (Wikipedia hat ein vereinfachtes Diagramm , das ist weit von vollständig). Insbesondere gab es eine Zeit lang zwei Hauptströmungen: das von AT & T entwickelte System V und das an der University of California in Berkeley entwickelte BSD . Dies war um die frühen 1980er Jahre, lange vor Linux (1991), geschweige denn Ubuntu (2004). Oft haben diese beiden Strömungen unterschiedliche Entscheidungen getroffen, und auch heute finden Sie gelegentlich Hinweise auf Varianten oder Merkmale von „System V“ und „BSD“.

Der psBefehl stammt aus einer der ersten Versionen von Unix (er war nicht in Version 1, die früheste Online-Manpage, die ich finden kann, stammt aus Version 5 (S.94) im Jahr 1974). psHatte zu der Zeit nur ein paar Optionen, würde zum Beispiel ps aalle Prozesse statt nur des Benutzers ps xanzeigen und würde Prozesse ohne angeschlossenes Terminal anzeigen. Sie werden bemerken, dass die Optionen nicht mit beginnen -: Zu der Zeit war die Konvention der Verwendung -von Optionen nicht so systematisch wie heute, es war meistens eine Sache für Befehle, die Dateinamen als normale Argumente verwendeten.

Im Laufe der Zeit wurden die verschiedenen Stränge von Unix um psviele weitere Optionen erweitert. Die BSD - Variante wählte die ursprüngliche Syntax, ohne führenden zu behalten -, und aund xexistiert noch heute. Die System V-Variante hat die syntaktische Konvention von -for options übernommen und verschiedene Buchstaben verwendet (z. B. ps -eum alle Prozesse anzuzeigen). Oracle (ehemals Sun) Solaris ist ein Beispiel für eine System V-Variante (Solaris psliefert PATHfür Anwendungen, die unter Berücksichtigung von BSD geschrieben wurden, auch eine separate ausführbare Datei in einem nicht standardmäßig festgelegten Verzeichnis aus ).

Zu der Zeit, als Linux auf den Markt kam, hatten die Leute, die es nutzten, oft schon Erfahrung mit der einen oder anderen Unix-Variante. Linux hat die Dinge manchmal nach System V, manchmal nach BSD und manchmal nach eigenem Ermessen gemacht, entweder aufgrund technischer Überlegungen oder aufgrund der Erfahrung und des Geschmacks derer, die das Feature implementiert haben. Der Linux- psBefehl begann mit BSD-ähnlichen Optionen, z. B. ps aeum alle Prozesse anzuzeigen und Umgebungsvariablen in die Auflistung aufzunehmen. Im Laufe der Zeit (Ende der 1990er Jahre, ich weiß nicht genau, wann) haben die Autoren von Linux psOptionen für Benutzer hinzugefügt, die an System V gewöhnt waren. Daher werden heute entweder alle Prozesse unter Linux aufgelistet ps axoder ps -ees gibt sogar eine Umgebungsvariable ( PS_PERSONALITY) zu machenps verhalten sich eher wie verschiedene Unix-alte Unix-Varianten, zum Wohle alter Skripte und Menschen mit festgelegten Gewohnheiten.

Menschen, die mehrere Unix-Varianten verwendeten, mochten es nicht, dass sie ihre Programme und Gewohnheiten ändern mussten, wenn sie von einer Unix-Variante zu einer anderen wechselten. Daher wurde versucht, eine Teilmenge der Funktionalität zu standardisieren. Dies führte zum POSIX- Standard (angeführt von der IEEE ), dem Ubuntu im Großen und Ganzen folgt. Die erste Ausgabe, deren Umfang den psBefehl umfasste , erschien 1992; Dieser ist nicht online verfügbar, die Ausgabe von 1997 jedoch. Für den psBefehl verwendete POSIX wie in vielen anderen Fällen die System V-Methode.

Die psStandardsyntax des Befehls ist sowohl mit System V als auch mit POSIX kompatibel. Darüber hinaus kann diese Syntax als Standard bezeichnet werden, da standardmäßig -Optionen eingeführt werden. Einige Optionen sind nur in einer der beiden Syntaxarten verfügbar. Zum Glück können sie im selben Anruf gemischt werden.

Im Allgemeinen hat „BSD“ gegenüber „System V“ keine technischen Auswirkungen. Es bezieht sich auf die Geschichte: „BSD“ ist die Wahl, die BSD in den 1980er Jahren getroffen hat, und so weiter. „System V“ ist die Wahl, die AT & T und ihre Partner (insbesondere Sun) getroffen haben. „POSIX“ ist die Wahl, die das IEEE-Standardisierungskomitee getroffen hat.

Gilles 'SO - hör auf böse zu sein'
quelle
2

Die 'Standard'-Syntax, auf die Sie sich beziehen, ist das GNU-Betriebssystem, das in den 1980er Jahren entwickelt wurde. GNU-basierte Dienstprogramme und Philosophie wurden mit dem Linux-Kernel kombiniert, um die modernsten Linux-Distributionen (einschließlich Ubuntu) zu entwickeln.

Das BSD-Betriebssystem wurde Ende der 1970er Jahre unabhängig von GNU entwickelt und später in moderne Versionen wie FreeBSD oder OpenBSD verzweigt.

Sowohl GNU als auch BSD sind von Unix inspiriert und haben leicht unterschiedliche Philosophien, Syntax usw.

Alex B
quelle
0

Ubuntus coreutils ist eine Sammlung von GNU-gepflegten Anwendungen, die eine ganze Reihe von Dingen enthält (siehe apt-cache show coreutils). BSDs haben ihre eigenen Versionen (GNU ist nicht mit der BSD-Lizenz kompatibel).

Hadi
quelle