
Enotro hiloEstaba diciendo arrogantemente que cualquier programa [que no sea parte de la interfaz de usuario del sistema operativo, como un shell] con nombres como exit
o test
es help
estúpido. Quise dar a entender que estos nombres comunes deberían reservarse para la interfaz de usuario de nivel superior, generalmente un shell de comandos o una utilidad central del sistema operativo.
El usuario schily comentó que help
es un comando del sistema de control de versiones sccs que ha sido una parte integral de Unix desde los años 70. sccs es de hechoincluido en la especificación única de Unix.
La documentación en línea de sccs parece ambigua. La mayoría de las páginas aparecen help
como un subcomando sccs, invocado como sccs help <topic>
. Entonces hay un/usr/bin/sccshelp
dominio. Perootra páginade hecho enumera un archivo dedicado /usr/ccs/bin/help
.
Supongo que para los usuarios de sccs /usr/ccs/bin/
estaría en el camino, ya que help
ha sido parte de muchas instalaciones de Unix durante 40 años 1 . En ese caso, yo diría que, aunque la elección del nombre del comando es lamentable, sccs tendría antigüedad y bash debería haber llamado a su bash-help incorporado o similar.
Entonces, ¿es o era común tener un comando ( sccs
) help
en su camino?
1 Esto suena raro.
Respuesta1
El pasado no funcionó así.
Estás comprando un modelo moderno algo defectuoso que no existía en ese momento.
Pero sonreí y dije: “No te preocupes, te entrenaré. El primer comando que aprende es— Mike O'Brien (The Aerospace Corporation) <neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> vía <[correo electrónico protegido]> (1989-03-01).VAXen, hijos míos, simplemente no pertenecen a algunos lugares. rec.humor.divertido.HELP
“y procedió a escribirlo en la terminal de la consola. Entonces, el director del centro de datos, el supervisor de turno y los operadores de ocho días observaron cómo el LA100 emitía el texto introductorio habitual. Cuando terminó, se volvieron hacia mí con caras expectantes y les dije de manera paternal: "¡Esta es tu orden más importante!"El supervisor de turno dio un paso adelante y estudió el texto durante aproximadamente un minuto. Luego se volvió con una expresión muy perpleja en su rostro y preguntó: “¿Para qué lo usas?” Suspiro.
Es bastante famoso que Unix no viniera con un simple comando de ayuda para principiantes. Este fue un vacío (muy discutido en los foros de discusión en línea) que los escritores de Bourne Again llenaron no sólo una vez, sino varias veces. Mortice-Kern proporcionó un help
comando que buscaría doco para imprimir desde un helpfile
archivo helpindex
. AT&T System 5 versión 3.2 help
también tenía un comando, por ejemplo:
$ ayuda ayuda:Ayuda en línea del sistema UNIX Descripción de opciones s motor de arranque: información general Localizo: encuentro un comando con palabra clave uso de u: información sobre el comando g glosario: definición de términos r redirigir a un archivo o un comando dejar de fumar Introduzca la elección
El hecho de que esto fuera en AT&T Unix pone en duda la idea de que reemplazar un comando SCCS nombrado help
es ilegítimo o que los escritores del shell Bourne Again estaban fuera de sintonía. Pero hay más.
Se esperaba querealmente uso PATH
.
—# PATH establece la variable PATH inicial del shell # #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. 2004-06-25.
Una parte del modelo moderno es que todo va en un directorio gigante, ya seaDaniel J. Bernstein/command
o el de Arch Linux /usr/bin
. Esto, por supuesto, causa todos los dolores de cabeza con diferentes comandos nombrados fastboot
(que en otros modelos se distinguirían por estar en bin/
y sbin/
). Pero ese no era el modelo entonces.
El modelo entonces se ejemplifica mediantelas múltiples variantes del ls
comando que discutíy por preguntas como "El script bash de Nexenta usa /usr/sun/bin/sed en lugar de /usr/bin/sed". Hay uncarga completade directorios de comandos, y qué subconjunto de ellos se elige incluir en el valor de la PATH
variable de entorno, y en qué orden, determinala personalidad del sistema operativoque uno ve.
La ruta de búsqueda de comandos podría, y hasta cierto punto todavía puede, incluir cosas como:
/bin
y/usr/bin/
— los conjuntos de herramientas generales tradicionales, anteriores a la normalización formal; desde un punto de vista post-estandarización formal, los comandos que se ajustan a laDefinición de la interfaz del Sistema Vy elX/Guía de portabilidad abiertaversión 3/sbin
y/usr/sbin/
— herramientas de administración del sistema/etc/
y/usr/etc/
- más herramientas de administración del sistema (Sí, Virginia, una vez se incluyeron ejecutables/etc/
)./5bin
y/usr/5bin/
— Directorio de compatibilidad de System V (es decir, 5) con herramientas compatibles con AT&T Unix System 5/usr/ucb/
— Directorio de compatibilidad UCB (es decir, BSD) con herramientas compatibles con BSD/usr/mbin/
/usr/bin
— variantes de herramientas con capacidad para juegos de caracteres multibyte/usr/rbin/
— herramientas puestas a disposición por un administrador para algunos shells "restringidos"/usr/lbin/
— herramientas instaladas localmente, precursoras de/usr/local/bin/
/usr/amdahl/bin/
y/usr/sun/bin/
— herramientas de proveedores de sistemas operativos, que en general adoptan la forma y a partir de las cuales se puede establecer un paralelo con/usr/${OEM}/bin
/usr/local/bin
/usr/games/
- juegos/usr/ccs/bin
- varias herramientas de desarrollo, como habrás observado/usr/xpg4/bin/
— el directorio con comandos que se comportan de la manera dictada por elX/Guía de portabilidad abiertanúmero 4/usr/xpg6/bin/
— el directorio con comandos que se comportan de la manera dictada por el conceptoX/Guía de portabilidad abiertanúmero 6, más propiamente conocido como POSIX.1:2001 o elEspecificación única de Unixversión 3/opt/sfw/bin/
— creado instalando un CD de utilidades adicionales de Sun, ahora conocido comoel CD complementario de SunFreeware/opt/csw/bin/
—AbiertoCSWy herramientas Blastwave/opt/SUNWspro/bin/
- comandos del conjunto de herramientas Sun Workshop (ahora conocido como Oracle Developer Studio),SUNW
que son el código bursátil (original) de Sun yspro
que denotan el antiguo nombre del producto SunPro/usr/local/bin/
— material proporcionado por terceros que no utilizan un/opt
subdirectorio o CSW
Los sistemas operativos Sun/Oracle y sus derivados de código abierto fueron quizás en su apogeo los ejemplos más extremos de tales sistemas operativos de personalidad múltiple. (Desde entonces, Oracle ha descartado varios de estos directorios, incluidos /usr/ucb
y /usr/ccs
,). Pero algunos de los mencionados anteriormente son de AIX y otros. /usr/amdahl/bin
es de UTS, por ejemplo.
El programa que se ejecutaba desde un nombre de comando determinado dependía de la personalidad que se eligiera. La idea de que había, y debía haber, sólo un programa para cada nombre de comando era una tontería. Después de todo, diferenciar comandos con los mismos nombres era lo PATH
quepara.
No existía una noción de precedencia estricta.
Muchos comandos vivieron y murieron con bastante rapidez. Bill Joy creó un iul
comando como precursor de ul
, por ejemplo. BSD también tuvo una vez un greek
comando.
La idea de que un comando estuviera grabado en piedra para siempre y tuviera un nombre para excusión de los componentes integrados de Shell y otros, era bastante extraña, dada la rotación en los conjuntos de comandos.
Sólo para empezar,sh
sí mismoHabían sido los caparazones de Thompson, Mashey, Bourne y Korn en el espacio de una década y poco. La idea de que el comando externo del shell Thompson if
impidiera que el shell Bourne tuviera if
como palabra clave era, por supuesto, ridícula.
Tenga en cuenta que el mecanismo del shell AT&T Korn (posterior a 2005, ksh93q) para habilitar comandos integrados adicionales, la inclusión de /opt/ast/bin
en el valor de PATH
, respalda la noción de que los comandos integrados pueden suplantar los comandos externos con los mismos nombres.ySe relaciona con la idea de que se espera que uno use PATH
para controlar la personalidad. ( ast
Por cierto, significa AT&T Software Technology).
Otras lecturas
- Compañía Estadounidense de Teléfonos y Telégrafos. "Conceptos básicos para usuarios de sistemas UNIX: el
help
comando".Unix System V, versión 3.2: guía del usuario. Prentice Hall. 1989, págs. 2 a 23 y siguientes. - David Fiedler, Bruce H. Hunter, Stephen G. Kochan y Patrick H. Wood (1986). "
/usr
- El directorio misterioso".administración del sistema unix. Hayden Book Company, ISBN 9780810462892. págs. 54 y siguientes. - XPG.Estándares, entornos y macros. Páginas del manual de Oracle Solaris. Oráculo. 2014.
- XPG4.Estándares, entornos y macros. Páginas del manual de SunOS. Oráculo. 2004.
- Michael R. Ault (1996). Compañero del administrador del sistema UNIX. Wiley. ISBN 9780471111443.
if
.Manuales. Proyecto Etsh.- Rareza en el script de shell ksh93 ("el comando -p mkdir t" falla)
- https://news.ycombinator.com/item?id=7278408
- Jonathan de Boyne Pollard (2017).Una página de manual mejorada para
ul
. Propuestas.
Respuesta2
Había un /usr/bin/help
en PWB/UNIX y System III que brindaba ayuda para SCCS, principalmente para mensajes de error de SCCS, aunque eraextensibley los sitios individuales podrían agregar ayuda para otros comandos o mensajes de error.
ayuda(1)del Sistema 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.
y terminando con el deliciosamente autorreferencial
.SH DIAGNOSTICS
Use
.IR help (1)
for explanations.
/usr/src/cmd/sccs/sccs.mktenia lo siguiente:
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
...
Respuesta3
SCCS ya se escribió en 1972 (lo que hace que SCCS tenga 46 años hoy), pero es difícil obtener información para SCCS antes de la versión 4.0 que se publicó el 18 de febrero de 1977. La versión 4.0 de SCCS definitivamente incluía el help
comando. Las revisiones anteriores del SCCS utilizaban un formato de archivo de historial binario que no es compatible con el SCCS actual.
Permítanme brindarles una breve información bash
antes de escribir más sobre SCCS:
bash
es un shell poco amigable para el usuario ya que implementa muchas funciones integradas tontas en lugar de implementar el ksh93
método para funciones integradas que no figuran en el estándar. ksh93
implementa un incorporado llamado builtin
que permite configurar unruta de búsquedapara construcciones. El principal problema con estas tontas funciones integradas es que se encuentran con la máxima preferencia y no se pueden desactivar fácilmente. Sin embargo, las funciones integradas ksh93 extendidas generalmente no se encuentran de forma predeterminada, ya que requieren que el usuario configure una PATH
que incluya/usr/ast/bin.
Volver a SCCS
y comportamiento de UNIX:
Cualquier desarrollador en UNIX normalmente tiene/usr/ccs/binen su PATH
comoccssignifica algo similar asistema de compilación c. Este directorio contiene programas comocc, as, size, strip, nm, m4, make, SCCS, yacc...
/usr/bin/sccshelpha sido introducido por Oracle al intentar hacer que Solaris sea similar a Linux y a muchas personas de UNIX no les gusta este cambio.
Si desea consultar la documentación oficial en línea de SCCS, le recomiendo que consulte:
en especial:http://sccs.sourceforge.net/man/index.html
Ha sido objeto de una reescritura importante durante los últimos 12 años y, por cierto, soy el mantenedor desde entonces.
Mientras que el subsistema SCCS original fue escrito por Marc J. Rochkind de AT&T, Eric Allman de BSD escribió eldominio sccs
en 1980 y simplificó el uso del SCCS.
Entonces, si vives en el mundo de AT&T, todos los comandos están en/usr/ccs/binmientras estás en el universo BSD, llamassccs <subcommand>
Respondiendo tu pregunta:Sí, era común que los desarrolladores tuvieran el comando de ayuda sccs en PATH.a pesar de que el comando de interfaz SCCS sccs
suele estar en/usr/bin