Im Handbuch für den ps
Befehl unter Ubuntu gibt es diesen Text:
Diese Version von ps akzeptiert verschiedene Arten von Optionen:
1 UNIX options, which may be grouped and must be preceded by a dash. 2 BSD options, which may be grouped and must not be used with a dash. 3 GNU long options, which are preceded by two dashes.
Warum ist es möglich, dass ein in Ubuntu erstellter Befehl Optionen von verschiedenen Betriebssystemen verwendet? Ich weiß, dass der Ursprung von Linux, UNIX und BSD gleich ist, aber es handelt sich um unterschiedliche Zweige.
Antworten:
Ich kann Ihnen nur eine allgemeine Antwort geben: Befehlszeilenoptionen werden häufig mithilfe der Bibliotheksfunktion analysiert
getopt
. Ursprünglich wurden nur Argumente akzeptiert, die aus einem - gefolgt von einem Symbol bestehen. Dies begrenzt effektiv die Anzahl der verfügbaren Optionen, mehr oder weniger -A bis -Z, -a bis -z und -0 bis -9. Sie können sich vorstellen, dass Sie eine Option nicht verwenden, ohne zumindest einen Hinweis auf die tatsächliche Verwendung zu haben, z. B. -h für Hilfe oder -v für Versionsinformationen oder ausführliche Ausgabe.Unter Linux und der häufig zugeordneten Standard-C-Bibliothek glibc gibt es die Erweiterung getopt, mit der auch Optionen behandelt werden können. Damit verbunden ist, dass viele unter GNU entwickelte Befehle (wie glibc) diese Erweiterung verwendeten. Für viele Befehle haben Sie jetzt auch die Option GNU-ähnlichen Stil. -v und --verbose, -h und --help und so weiter. Ich denke, dasselbe ist bei BSD passiert (obwohl ich kein BSD-Typ bin, korrigieren Sie mich bitte).
Ihr
ps
Befehl stammt aus einer Software-Sammlung namens procps, und ich denke , sie möchten den für eine bestimmte Plattform spezifischen Optionsstil nachahmen. Für die UNIX-Leute gibt es also Optionen. Für BSD akzeptiert es auch so etwasps aux
und so weiter.ps
ist nicht das einzige Programm, das sich so verhält. Viele der Standardprogramme verstehen den "alten" UNIX-Stil (POSIX) und einige moderne Erweiterungen.quelle
Es ist alles wegen einer Person namens Albert D. Cahalan. Xe kannte BSD nicht.
Der ursprüngliche
ps
Befehl für Linux wurde im März 1992 von Branko Lankester geschrieben und erstmals veröffentlicht . Es wurde später als "kmem-ps" bekannt, um es von "proc-ps" zu unterscheiden, die im Dezember 1992 von Michael K. Johnson veröffentlicht wurden . M. Lankester hatps
daskmem
Gerät verwendet, um die Prozesstabelle aus dem Kernelspeicher zu lesen. M. Johnson hatps
dasproc
Dateisystem zum Lesen der Prozesstabelle verwendet, und in den nächsten Jahren wurden mehrere Versionen davon veröffentlicht (z. B. Januar 1993 , Januar 1994 ).Diese
ps
Befehle lieferten schon damals eine ziemlich alte Syntax für den Befehl, dessen Stil aus dengetopt()
Tagen der 1980er Jahre stammte . Hier ist es aus einer Veröffentlichung von kmem-ps im November 1993 :Wie Sie sehen können, gab es eine Persönlichkeit, eine einzige Bedeutung für die Buchstaben und keine führenden Minuszeichen.
Die Idee einer
U
Flagge (nicht-U
beachten) stammt aus einem Patchps
von 1986 an BSD , dermod.sources
von Michael A. Callahan in der Usenet- Newsgroup (als Band 6, Ausgabe 83) veröffentlicht wurde.Einige Jahre später kam Albert D. Cahalan, der Proc-ps neu schrieb. Xe machte viele Behauptungen darüber. Leider wurde das Entlarven vieler dieser Behauptungen vergessen, und all diese Jahre später steht das
ps
Handbuch, das behauptet, dass diesps
Unix-, BSD- und GNU-Optionssyntax bietet.Es tut nicht.
BSD
ps
hat diegetopt()
Optionsverarbeitung verwendet, seit Marc Teitelbaum sie im April 1990 geändert hat , Jahre bevor sogar die Linux-Version von M. Lankesterps
, geschweige denn die von A. Cahalan.A. Cahalan hat
ps
die alte Linux-Syntax kmem-ps / proc-ps bereitgestellt. Später wurde eine Syntax hinzugefügt, die A. Cahalan angeblich vom AIX-ps
Befehl stammt. A. Cahalan, der unerbittlich die Ansicht im Usenet vertrat, dass "BSD saugt und SysV nicht", dass FreeBSD "saugt" und dass das xyr-Umschreiben von proc-ps eine "standardkonforme/bin/ps
" war, die "Ihre veraltete BSD-Syntax" unterstützte , Ironischerweise war ihm nicht bewusst, dass dies zu diesem Zeitpunkt fast ein Jahrzehnt lang nicht die BSD-Syntax gewesen war.ps
selbst war in diesem Jahr gerade erst standardisiert worden. Die Analyse in der Begründung des Standards von BSD im Vergleich zu AT & T Unix-Befehlszeilenoptionen sind viel nachdenklicher als alle anderen von A. Cahalan.Dies führte
ps
bekanntermaßen dieI_WANT_A_BROKEN_PS
Umgebungsvariable ein, die A. Cahalan verwirrenderweise M. Johnson vorwarf und gleichzeitig behauptete, xyrself sei für das Parsen der Optionen verantwortlich. Tatsächlich behielten die beiden zweips
Implementierungen parallel bei .Seltsamerweise würde Cahalan / Johnson Folgendes angeben , wenn man
getopt()
Optionen im Stil verwendet, denen Minuszeichen vorangestellt sind, wie diesps
zu der Zeit für BSD der Fall war und als (damals) neuer Standard fürps
dokumentierteps
:Eigentlich wurde es nicht benutzt
- Deborah S. Ray und Eric J. Ray (1998). UNIX . Peachpit Press. ISBN 9780201353952. p. 174.-
, was veraltet war. In der Tat war die Behauptung von A. Cahalan, dass xyrps
auf die übliche Weise funktionieren würde,-
wie es BSDps
bereits getan hatte. Dies verursachte in den späten 1990er und frühen 2000er Jahren zahlreiche Fragen von verwirrten Benutzern und verwirrte Systemadministratoren und Benutzer im Allgemeinen, als Bücher anfingen, Dinge zu sagen wie:Sie können dies immer noch in dem
oldps
Handbuch sehen, das davon spricht, "von der BSD-Version vonps
" abgeleitet zu sein, obwohl dies wirklich nicht der Fall war, da es ziemlich offensichtlich von der Linux- Version abgeleitet ist. und die besagt, dass "Befehlszeilenargumenten kein" - "vorangestellt werden sollte, da in Zukunft ein" - "verwendet wird, um Unix98-Standard-Befehlszeilenargumente anzugeben, während kein" - "das angibt aktueller "erweiterter BSD" -Stil von Befehlszeilenargumenten ".Einiges davon wurde in procps-ng abgeschwächt, einem dritten Umschreiben, das kurz nach der Jahrhundertwende durchgeführt wurde (als "-ng" in Projektnamen à la mode war), als Cahalan / Johnson
ps
wurdeoldps
. Wie Sie sehen können, steht imps
Handbuch nicht mehr "erweitert". Aber die neue Version vonps
(an der noch A. Cahalan beteiligt war ) hat die gesamte Idee der Mehrfachpersönlichkeit auf die Spitze getrieben . Leider es darüber hinaus noch verewigte die canard über BSD - Befehlszeilenoptionen, und tut dies bis heute.In der Zwischenzeit die glücklich Single -Persönlichkeit BSD
ps
hat bereitgestelltgetopt()
Befehlszeilenoption Parsing für die letzten 29 Jahre und 7 Tage in der Zeit , diese Antwort zu schreiben; FreeBSD hat einenprocstat
Befehl erhalten; NetBSD und OpenBSDps
haben die neue Kompromissoption verfolgt-A
. und die Single Unix Specification hat die neue BSD--O
Option für reserviert (aber nicht enthalten)ps
.Weiterführende Literatur
procstat
. FreeBSD General Commands Manual .ps
. FreeBSD General Commands Manual . 2018-03-13.ps
. NetBSD General Commands Manual . 2016-12-02.ps
. OpenBSD General Commands Manual . 2016-10-26.quelle
"JdeBP" "Xe"
(mit beiden Anführungszeichen) erzeugt ungefähr 5000 Treffer. Ich denke, das deutet darauf hin, dass der Autor Cahalans bevorzugte Personalpronomen nicht respektiert.