So hat es in der Vergangenheit nicht funktioniert.

So hat es in der Vergangenheit nicht funktioniert.

Inein weiterer ThreadIch habe großspurig behauptet, dass jedes Programm [das nicht Teil der Benutzeroberfläche des Betriebssystems ist, wie eine Shell] mit Namen wie exitoder testdumm helpist. Ich wollte damit andeuten, dass solche gebräuchlichen Namen der Benutzeroberfläche der obersten Ebene vorbehalten sein sollten, normalerweise einer Befehlsshell oder einem zentralen Betriebssystem-Dienstprogramm.

Benutzer schily bemerkte, dass helpes sich um einen Befehl des Versionskontrollsystems sccs handelt, das seit den 70er Jahren ein integraler Bestandteil von Unix ist. sccs ist in der Tatin der Single Unix Specification enthalten.

Die Online-Dokumentation von sccs scheint mehrdeutig. Die meisten Seiten listen es helpals sccs-Unterbefehl auf, der aufgerufen wird als sccs help <topic>. Dann gibt es einen/usr/bin/sccshelpBefehl. Abereine andere Seitelistet tatsächlich eine dedizierte auf /usr/ccs/bin/help.

Ich gehe davon aus, dass sich SCCs-Benutzer /usr/ccs/bin/im Pfad befinden würden, der also helpseit 40 Jahren Teil vieler Unix-Installationen ist 1 . In diesem Fall würde ich argumentieren, dass SCCs zwar bedauerlich ist, aber Vorrang hätte und Bash seine integrierte Bash-Hilfe oder Ähnliches hätte aufrufen sollen.

Ist oder war es also üblich, einen ( sccs) help-Befehl in Ihrem Pfad zu haben?


1 Das klingt komisch.

Antwort1

So hat es in der Vergangenheit nicht funktioniert.

Sie kaufen ein etwas fehlerhaftes modernes Modell, was damals nicht der Fall war.

Aber ich lächelte und sagte: „Kein Problem, ich werde Sie einweisen. Der erste Befehl, den Sie lernen, ist HELP„“ und gab ihn dann auf dem Konsolenterminal ein. Der Rechenzentrumsleiter, der Schichtleiter und die acht Tagesbediener sahen also zu, wie der LA100 den üblichen Einführungstext summte. Als er fertig war, drehten sie sich mit erwartungsvollen Gesichtern zu mir um und ich sagte onkelhaft: „Das ist Ihr wichtigster Befehl!“

Der Schichtleiter trat vor und studierte den Text etwa eine Minute lang. Dann drehte er sich mit einem sehr verwirrten Gesichtsausdruck um und fragte: „Wofür verwenden Sie es?“ Seufz.

— Mike O'Brien (The Aerospace Corporation) <neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> über <[email geschützt]> (1989-03-01).VAXen, meine Kinder, gehören einfach nicht an manche Orte. Freizeit. Humor. Lustig.

Es ist ziemlich bekannt, dass Unix keinen einfachen Hilfebefehl für Anfänger hatte. Dies war eine Lücke (die in Online-Diskussionsforen viel diskutiert wurde), die nicht nur einmal, sondern mehrmals, von den Autoren der Bourne Again-Shell geschlossen wurde. Mortice-Kern stellte einen Befehl zur Verfügung, der mithilfe helpvon nach Dokumenten zum Drucken suchte . AT&T System 5 Release 3.2 hatte beispielsweise ebenfalls einen solchen Befehl:helpfilehelpindexhelp

$ Hilfe
Hilfe:Online-Hilfe zum UNIX-System

        Beschreibung der Auswahlmöglichkeiten
                s Starter: Allgemeine Informationen
                l lokalisieren: Befehl mit Schlüsselwort suchen
                u Verwendung: Informationen zum Befehl
                g Glossar: Begriffsdefinitionen
                r Weiterleitung zu einer Datei oder einem Befehl
                q Beenden
       Auswahl eingeben

Dass dies in AT&T Unix geschah, widerlegt die Vorstellung, dass das Ersetzen eines SCCS-Befehls namens helpunzulässig ist oder dass die Entwickler der Bourne Again-Shell nicht auf dem neuesten Stand waren. Aber das ist noch nicht alles.

Von uns wurde erwartet,tatsächlich nutzen PATH.

# PATH legt die anfängliche Shell-PATH-Variable fest
#
#PATH=/usr/bin:/etc:/bin:/boot/grub:/boot/grup/bin:/boot/solaris/bin:/sbin:\
/usr/openwin/bin:/usr/5bin://usr/X11/bin:/usr/apache/bin:/usr/apache2/bin:\
/usr/appserver/bin:/usr/ccs/bin:/usr/dt/bin:/usr/j2se/bin:usr/local/bin:\
/usr/oasys/bin:/usr/pgadmin3/bin:/usr/proc/bin:/usr/sadm/bin:\
/usr/sadm/admin/bin:/usr/sadm/sysadm/bin:/usr/sbin:/usr/sfw/bin:\
/usr/sfw/i386-sun-solaris2.10/bin:/usr/sfw/sbin:/usr/snadm/bin:\
/usr/sunvts/bin:/usr/ucb:/usr/ucb:/usr/vmsys/bin:/usr/xpg4/bin:\
/usr/xpg6/bin
login.dfl. Sun Microsystems, Inc.. 25.06.2004.

Ein Teil des modernen Modells besteht darin, dass alles in ein riesiges Verzeichnis gelangt, sei esDaniel J. Bernsteins/commandoder Arch Linux /usr/bin. Dies verursacht natürlich all die Kopfschmerzen mit unterschiedlichen Befehlsnamen (die in anderen Modellen durch die Angabe in und fastbootunterschieden würden ). Aber das war damals nicht das Modell.bin/sbin/

Das Modell wird dann veranschaulicht durchdie verschiedenen Varianten des lsBefehls, die ich besprochen habeund durch Fragen wie „Das Nexenta-Bash-Skript verwendet /usr/sun/bin/sed anstelle von /usr/bin/sed". Es gibt eineganze Ladungvon Befehlsverzeichnissen und welche Teilmenge davon man im Wert der PATHUmgebungsvariablen aufgelistet haben möchte und in welcher Reihenfolge, bestimmtdie Persönlichkeit des Betriebssystemsdas sieht man.

Der Befehlssuchpfad könnte (und kann bis zu einem gewissen Grad immer noch) Dinge wie die folgenden enthalten:

  • /binund /usr/bin/— die traditionellen, allgemeinen Toolsets, die es schon vor der formalen Standardisierung gab; aus der Sicht der Post-formalen Standardisierung sind es Befehle, die denSystem V-Schnittstellendefinitionund dasX/Open-PortabilitätshandbuchVersion 3
  • /sbinund /usr/sbin/— Systemadministrationstools
  • /etc/und /usr/etc/– mehr Systemadministrationstools (Ja, Virginia, ausführbare Dateien gingen früher in /etc/…)
  • /5binund /usr/5bin/— System V (ie 5) Kompatibilitätsverzeichnis mit AT&T Unix System 5 kompatiblen Tools
  • /usr/ucb/— UCB (dh BSD) Kompatibilitätsverzeichnis mit BSD-kompatiblen Tools
  • /usr/mbin/— Multibyte-Zeichensatz-fähige Varianten von /usr/binTools
  • /usr/rbin/— Tools, die von einem Administrator für einige „eingeschränkte“ Shells verfügbar gemacht werden
  • /usr/lbin/— lokal installierte Tools, ein Vorläufer von/usr/local/bin/
  • /usr/amdahl/bin/und /usr/sun/bin/— Tools von Betriebssystemherstellern, die im Allgemeinen die Form von und eine Parallele zu/usr/${OEM}/bin/usr/local/bin
  • /usr/games/— Spiele
  • /usr/ccs/bin— verschiedene Entwicklertools, wie Sie bemerkt haben
  • /usr/xpg4/bin/— das Verzeichnis mit Befehlen, die sich so verhalten, wie es derX/Open-PortabilitätshandbuchAusgabe 4
  • /usr/xpg6/bin/— das Verzeichnis mit Befehlen, die sich so verhalten, wie es der Begriff vorgibtX/Open-PortabilitätshandbuchAusgabe 6, besser bekannt als POSIX.1:2001 oder dieEinzelne Unix-SpezifikationVersion 3
  • /opt/sfw/bin/— erstellt durch die Installation einer CD mit zusätzlichen Dienstprogrammen von Sun, jetzt bekannt alsdie SunFreeware Companion-CD
  • /opt/csw/bin/OpenCSWund Blastwave-Tools
  • /opt/SUNWspro/bin/— Befehle aus der Toolsuite Sun Workshop (jetzt bekannt als Oracle Developer Studio). SUNWDabei handelt es sich um den (ursprünglichen) Börsentickercode von Sun und sprobezeichnet den alten Produktnamen SunPro
  • /usr/local/bin/— Inhalte von Drittanbietern, die kein /optUnterverzeichnis oder CSW verwenden

Die Betriebssysteme von Sun/Oracle und ihre Open-Source-Derivate waren auf ihrem Höhepunkt vielleicht die extremsten Beispiele für solche Betriebssysteme mit multipler Persönlichkeit. (Oracle hat seitdem mehrere dieser Verzeichnisse, darunter /usr/ucbund /usr/ccs, weggeworfen.) Einige der oben genannten stammen jedoch von AIX und anderen. /usr/amdahl/binstammt beispielsweise von UTS.

Welches Programm man mit einem bestimmten Befehlsnamen ausführte, hing davon ab, welche Persönlichkeit man wählte. Die Idee, dass es für jeden Befehlsnamen nur ein Programm geben muss, war dumm. Schließlich war die Unterscheidung von Befehlen mit demselben Namen das, PATHwasfür.

Es gab keinen Begriff von strikter Priorität.

Viele Befehle existierten und verschwanden recht schnell. Bill Joy schuf beispielsweise einen iulBefehl als Vorläufer von . Auch BSD hatte einmal einen Befehl.ulgreek

Die Vorstellung, dass ein Befehl für immer in Stein gemeißelt sei und unter Ausschluss von Shell-Builtins und anderen einen Namen besitze, war angesichts der Fluktuation der Befehlssätze ziemlich fremd.

Nur für den Anfang,sh selbstwaren innerhalb von etwas mehr als einem Jahrzehnt die Shells Thompson, Mashey, Bourne und Korn gewesen. Die Idee, dass der externe ifBefehl der Thompson-Shell verhinderte, dass die Bourne-Shell ein Schlüsselwort hatte, ifwar natürlich lächerlich.

Beachten Sie, dass der Mechanismus der AT&T Korn-Shell (nach 2005, ksh93q) zum Aktivieren zusätzlicher integrierter Befehle, die Aufnahme von /opt/ast/binin den Wert von PATH, die Annahme unterstützt, dass integrierte Befehle externe Befehle mit demselben Namen ersetzen können.Undknüpft an die Idee an, die man PATHzur Kontrolle der Persönlichkeit nutzen soll. ( aststeht übrigens für AT&T Software Technology.)

Weiterführende Literatur

  • American Telephone and Telegraph Company. „Grundlagen für UNIX-Systembenutzer: Der helpBefehl“.Unix System V, Version 3.2: Benutzerhandbuch. Prentice-Hall. 1989. S. 2–23 ff.
  • David Fiedler, Bruce H. Hunter, Stephen G. Kochan und Patrick H. Wood (1986). „ /usr— Das Mystery-Verzeichnis“.UNIX-Systemadministration. Hayden Book Company, ISBN 9780810462892. S. 54 ff.
  • XPG.Standards, Umgebungen und Makros. Oracle Solaris-Handbuchseiten. Oracle. 2014.
  • XPG4.Standards, Umgebungen und Makros. SunOS-Handbuchseiten. Oracle. 2004.
  • Michael R. Ault (1996). Begleiter für UNIX-Systemadministratoren^ "Wiley, Hrsg.".
  • if.Anleitungen. Etsh-Projekt.
  • Merkwürdigkeit im KSH93-Shell-Skript („Befehl -p mkdir t“ schlägt fehl)
  • https://news.ycombinator.com/item?id=7278408
  • Jonathan de Boyne Pollard (2017).Eine verbesserte Manualpage fürul. Vorschläge.

Antwort2

Es gab /usr/bin/helpin PWB/UNIX und System III eine Hilfe für SCCS, hauptsächlich für SCCS-Fehlermeldungen, obwohl eserweiterbarund einzelne Sites könnten Hilfe für andere Befehle oder Fehlermeldungen hinzufügen.

Hilfe(1)aus System III:

.SH NAME
help \- ask for help
.SH SYNOPSIS
.B help
[\^args\^]
.SH DESCRIPTION
.I Help\^
finds information to explain a message from a command or explain the use of
a command.
Zero or more arguments may be supplied.
If no arguments are given,
.I help\^
will prompt for one.
.PP
The arguments may be either
message numbers (which normally appear in parentheses following messages)
or command names,
of one of the following types:
.PP
.RE 
.RS 10
.TP 10
type 1
Begins with non-numerics, ends in numerics.
The non-numeric prefix is usually an abbreviation for the program or
set of routines which produced the message
(e.g., \fBge6\fP, for message 6 from the
.I get\^
command).
...
.SH FILES
.PP
.TP 20
/usr/lib/help
directory containing files of message text.

und endet mit dem wunderbar selbstreferenziellen

.SH DIAGNOSTICS
Use
.IR help (1)
for explanations.

/usr/src/cmd/sccs/sccs.mkhatte folgendes:

INSDIR = /usr/bin
#   Directory where executable SCCS commands are stored

help:   help.o $(LIBDIR)/comobj.a
    $(CC) $(LDFLAGS) -o help help.o $(LIBDIR)/comobj.a $(LIBES)
    cp $(TESTDIR)/help $(INSDIR)


HELPDIR = help.d
#   Directory containing SCCS help files.
PUB_HELPLIB = /usr/lib/help
#   Public directory where help files are stored.

helpfiles:
    -mkdir $(PUB_HELPLIB)
    cp $(HELPDIR)/ad $(PUB_HELPLIB)/ad
    cp $(HELPDIR)/bd $(PUB_HELPLIB)/bd
    ...

Antwort3

SCCS wurde bereits 1972 geschrieben (was SCCS heute 46 Jahre alt macht), aber es ist schwierig, Informationen zu SCCS vor Version 4.0 zu erhalten, die am 18. Februar 1977 veröffentlicht wurde. Die SCCS-Version 4.0 enthielt den helpBefehl definitiv. Ältere SCCS-Revisionen verwendeten ein binäres Verlaufsdateiformat, das nicht mit dem aktuellen SCCS kompatibel ist.

bashBevor ich mehr über SCCS schreibe, möchte ich kurz darauf eingehen :

bashist eine benutzerunfreundliche Shell, da sie viele einfache Built-ins implementiert, anstatt die ksh93Methode für Built-ins zu implementieren, die nicht im Standard aufgeführt sind. ksh93implementiert ein Built-in namens builtin, das die Einrichtung einesSuchpfadfür Builtins. Das Hauptproblem bei solchen einfachen Builtins ist, dass sie mit der maximalen Präferenz gefunden werden und nicht einfach deaktiviert werden können. Die erweiterten ksh93-Builtins werden jedoch normalerweise überhaupt nicht standardmäßig gefunden, da sie erfordern, dass der Benutzer ein Setup einrichtet, PATHdas Folgendes enthält:/usr/ast/bin.

Zurück SCCSzum UNIX-Verhalten:

Jeder Entwickler unter UNIX hat normalerweise/usr/ccs/binin seinem PATHalsccsbedeutet soviel wieC-KompilierungssystemDieses Verzeichnis enthält Programme wiecc, as, size, strip, nm, m4, make, SCCS, yacc...

/usr/bin/sccshelpwurde von Oracle eingeführt, als es versuchte, Solaris Linux-ähnlich zu machen, und vielen UNIX-Benutzern gefällt diese Änderung nicht.

Wenn Sie die offizielle Online-Dokumentation für SCCS lesen möchten, empfehle ich Ihnen Folgendes:

http://sccs.sourceforge.net/

im Besonderen:http://sccs.sourceforge.net/man/index.html

Es wurde in den letzten 12 Jahren grundlegend umgeschrieben und übrigens: Seitdem bin ich der Betreuer.

Während das ursprüngliche SCCS-Subsystem von Marc J. Rochkind bei AT&T geschrieben wurde, schrieb Eric Allman von BSD dasBefehl sccsim Jahr 1980 und vereinfachte die Verwendung von SCCS.

Wenn Sie also in der AT&T-Welt leben, sind alle Befehle in/usr/ccs/binIm BSD-Universum rufen Siesccs <subcommand>

Beantwortung Ihrer Frage:ja, es war/ist üblich, dass Entwickler den Befehl sccs help in PATH habenobwohl der SCCS-Frontend-Befehl sccstypischerweise in/usr/bin

verwandte Informationen