
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 exit
oder test
dumm help
ist. 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 help
es 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 help
als sccs-Unterbefehl auf, der aufgerufen wird als sccs help <topic>
. Dann gibt es einen/usr/bin/sccshelp
Befehl. 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 help
seit 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— 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.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.
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 help
von nach Dokumenten zum Drucken suchte . AT&T System 5 Release 3.2 hatte beispielsweise ebenfalls einen solchen Befehl:helpfile
helpindex
help
$ 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 help
unzulä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/command
oder Arch Linux /usr/bin
. Dies verursacht natürlich all die Kopfschmerzen mit unterschiedlichen Befehlsnamen (die in anderen Modellen durch die Angabe in und fastboot
unterschieden würden ). Aber das war damals nicht das Modell.bin/
sbin/
Das Modell wird dann veranschaulicht durchdie verschiedenen Varianten des ls
Befehls, 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 PATH
Umgebungsvariablen 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:
/bin
und/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/sbin
und/usr/sbin/
— Systemadministrationstools/etc/
und/usr/etc/
– mehr Systemadministrationstools (Ja, Virginia, ausführbare Dateien gingen früher in/etc/
…)/5bin
und/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/bin
Tools/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).SUNW
Dabei handelt es sich um den (ursprünglichen) Börsentickercode von Sun undspro
bezeichnet den alten Produktnamen SunPro/usr/local/bin/
— Inhalte von Drittanbietern, die kein/opt
Unterverzeichnis 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/ucb
und /usr/ccs
, weggeworfen.) Einige der oben genannten stammen jedoch von AIX und anderen. /usr/amdahl/bin
stammt 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, PATH
wasfür.
Es gab keinen Begriff von strikter Priorität.
Viele Befehle existierten und verschwanden recht schnell. Bill Joy schuf beispielsweise einen iul
Befehl als Vorläufer von . Auch BSD hatte einmal einen Befehl.ul
greek
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 if
Befehl der Thompson-Shell verhinderte, dass die Bourne-Shell ein Schlüsselwort hatte, if
war 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/bin
in 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 PATH
zur Kontrolle der Persönlichkeit nutzen soll. ( ast
steht übrigens für AT&T Software Technology.)
Weiterführende Literatur
- American Telephone and Telegraph Company. „Grundlagen für UNIX-Systembenutzer: Der
help
Befehl“.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ür
ul
. Vorschläge.
Antwort2
Es gab /usr/bin/help
in 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 help
Befehl definitiv. Ältere SCCS-Revisionen verwendeten ein binäres Verlaufsdateiformat, das nicht mit dem aktuellen SCCS kompatibel ist.
bash
Bevor ich mehr über SCCS schreibe, möchte ich kurz darauf eingehen :
bash
ist eine benutzerunfreundliche Shell, da sie viele einfache Built-ins implementiert, anstatt die ksh93
Methode für Built-ins zu implementieren, die nicht im Standard aufgeführt sind. ksh93
implementiert 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, PATH
das Folgendes enthält:/usr/ast/bin.
Zurück SCCS
zum UNIX-Verhalten:
Jeder Entwickler unter UNIX hat normalerweise/usr/ccs/binin seinem PATH
alsccsbedeutet 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:
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 sccs
im 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 sccs
typischerweise in/usr/bin