
Emoutro tópicoEu estava dizendo arrogantemente que qualquer programa [que não faz parte da interface de usuário do sistema operacional, como um shell] com nomes como exit
, test
ou help
é estúpido. Eu quis dizer que esses nomes comuns deveriam ser reservados para a interface do usuário de nível superior, geralmente um shell de comando ou utilitário principal do sistema operacional.
O usuário Schily comentou que help
é um comando do sistema de controle de versão sccs que é parte integrante do Unix desde os anos 70. sccs é na verdadeincluído na Especificação Unix Única.
A documentação online do sccs parece ambígua. A maioria das páginas é listada help
como um subcomando sccs, invocado como sccs help <topic>
. Então há um/usr/bin/sccshelp
comando. Masoutra páginana verdade lista um arquivo /usr/ccs/bin/help
.
Presumo que, para o sccs, os usuários /usr/ccs/bin/
estariam no caminho, de modo que help
faz parte de muitas instalações Unix há 40 anos 1 . Nesse caso, eu argumentaria que, embora a escolha do nome do comando seja lamentável, o sccs teria antiguidade e o bash deveria ter chamado seu bash-help integrado ou algo semelhante.
Então é ou era comum ter um comando ( sccs
) help
no seu caminho?
1 Isso parece estranho.
Responder1
O passado não funcionou assim.
Você está comprando um modelo moderno um tanto falho que não era o caso na época.
Mas eu sorri e disse: “Não se preocupe, vou treinar você. O primeiro comando que você aprende é— Mike O'Brien (The Aerospace Corporation) <neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> via <[e-mail protegido]> (01/03/1989).VAXen, meus filhos, simplesmente não pertencem a alguns lugares. rec.humor.engraçado.HELP
”e digita-o no terminal do console. Assim, o gerente do data center, o supervisor de turno e os operadores de oito dias observaram o LA100 emitir o habitual texto introdutório. Quando terminou, eles se viraram para mim com rostos de expectativa e eu disse de maneira avuncular: “Este é o seu comando mais importante!”O supervisor de turno deu um passo à frente e estudou o texto por cerca de um minuto. Ele então se virou com uma expressão muito confusa no rosto e perguntou: “Para que você usa isso?” Suspirar.
É notório que o Unix não veio com um comando de ajuda simples para iniciantes. Este foi um buraco (muito discutido em fóruns de discussão on-line) que foi preenchido não apenas uma vez, pelos escritores do shell Bourne Again, mas várias vezes. Mortice-Kern forneceu um help
comando que procuraria por doco para imprimir de a helpfile
usando a helpindex
. AT&T System 5 Release 3.2 help
também tinha um comando, por exemplo:
$ ajuda help:Ajuda on-line do sistema UNIX Descrição das escolhas s starter: informações gerais l localizar:encontre um comando com palavra-chave você uso: informações sobre o comando g glossário: definição de termos r redireciona para um arquivo ou comando q Sair Insira a escolha
O fato de isso ter acontecido no AT&T Unix acaba com a ideia de que substituir um comando SCCS nomeado help
é ilegítimo ou que os escritores do shell Bourne Again estavam fora de sintonia. Mas há mais.
Esperava-se que nósrealmente uso PATH
.
—# PATH define a variável PATH inicial do 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.. 25/06/2004.
Uma parte do modelo moderno é que tudo vai para um diretório gigante, sejaDaniel J. Bernstein/command
ou Arch Linux /usr/bin
. É claro que isso causa todas as dores de cabeça com comandos diferentes nomeados fastboot
(que em outros modelos seriam diferenciados por estarem in bin/
e sbin/
). Mas esse não era o modelo então.
O modelo então é exemplificado poras múltiplas variantes do ls
comando que discutie por perguntas como "O script bash Nexenta usa /usr/sun/bin/sed em vez de /usr/bin/sed". Há umcarga inteirade diretórios de comando e qual subconjunto deles se escolhe listar no valor da PATH
variável de ambiente e em que ordem determinaa personalidade do sistema operacionalaquele vê.
O caminho de pesquisa do comando pode, e até certo ponto ainda pode, incluir coisas como:
/bin
e/usr/bin/
— a normalização formal tradicional e anterior, conjuntos de ferramentas gerais; do ponto de vista da padronização pós-formal, comandos que estejam em conformidade com oDefinição de interface do sistema Ve aGuia de portabilidade X/Openversão 3/sbin
e/usr/sbin/
— ferramentas de administração do sistema/etc/
e/usr/etc/
- mais ferramentas de administração de sistema (Sim, Virgínia, os executáveis já foram incluídos/etc/
.)/5bin
e/usr/5bin/
- diretório de compatibilidade System V (ou seja, 5) com ferramentas compatíveis com AT&T Unix System 5/usr/ucb/
— Diretório de compatibilidade UCB (ou seja, BSD) com ferramentas compatíveis com BSD/usr/mbin/
/usr/bin
- variantes de ferramentas com capacidade para conjunto de caracteres multibyte/usr/rbin/
— ferramentas disponibilizadas por um administrador para alguns shells "restritos"/usr/lbin/
— ferramentas instaladas localmente, um precursor de/usr/local/bin/
/usr/amdahl/bin/
e/usr/sun/bin/
— ferramentas de fornecedores de sistemas operacionais, mais geralmente assumindo a forma e a partir das quais um paralelo pode ser traçado/usr/${OEM}/bin
/usr/local/bin
/usr/games/
- jogos/usr/ccs/bin
— várias ferramentas de desenvolvedor, como você observou/usr/xpg4/bin/
- o diretório com comandos que se comportam da maneira ditada peloGuia de portabilidade X/Openedição 4/usr/xpg6/bin/
- o diretório com comandos que se comportam da maneira ditada pelo nocionalGuia de portabilidade X/Openedição 6, mais conhecida como POSIX.1:2001 ouEspecificação Unix únicaversão 3/opt/sfw/bin/
— criado através da instalação de um CD de utilitários adicionais da Sun, agora conhecido comoo CD complementar do SunFreeware/opt/csw/bin/
-OpenCSWe ferramentas Blastwave/opt/SUNWspro/bin/
- comandos do conjunto de ferramentas Sun Workshop (agora conhecido como Oracle Developer Studio),SUNW
sendo o código da bolsa de valores (original) da Sun espro
denotando o antigo nome do produto SunPro/usr/local/bin/
— material fornecido por terceiros que não usam um/opt
subdiretório ou CSW
Os sistemas operacionais Sun/Oracle e seus derivados de código aberto foram, no seu auge, talvez os exemplos mais extremos de tais sistemas operacionais de personalidade múltipla. (Desde então, a Oracle descartou vários desses diretórios, incluindo /usr/ucb
e /usr/ccs
, fora.) Mas alguns dos mencionados acima são do AIX e outros. /usr/amdahl/bin
é da UTS, por exemplo.
O programa executado a partir de um determinado nome de comando dependia da personalidade escolhida. A ideia de que havia, e deveria haver, apenas um programa para qualquer nome de comando era estúpida. Afinal, diferenciar comandos com os mesmos nomes era o PATH
quepara.
Não havia noção de precedência estrita.
Muitos comandos viveram e morreram rapidamente. Bill Joy criou um iul
comando como precursor do ul
, por exemplo. O BSD também já teve um greek
comando.
A ideia de que um comando era gravado em pedra para sempre e possuía um nome com exceção dos shell builtins e outros, era bastante estranha, dada a rotatividade nos conjuntos de comandos.
Só para começar,sh
em siforam os projéteis Thompson, Mashey, Bourne e Korn no espaço de uma década e pouco. A ideia de que o comando externo do shell Thompson if
impedia que o shell Bourne fosse usado if
como palavra-chave era obviamente ridícula.
Observe que o mecanismo do shell AT&T Korn (pós-2005, ksh93q) para habilitar comandos internos extras, a inclusão de /opt/ast/bin
no valor de PATH
, ambos suportam a noção de que comandos internos podem suplantar comandos externos com os mesmos nomeseestá de acordo com a ideia que se espera que alguém use PATH
para controlar a personalidade. ( ast
a propósito, significa AT&T Software Technology.)
Leitura adicional
- Companhia Americana de Telefonia e Telégrafo. "Noções básicas para usuários do sistema UNIX: o
help
comando".Unix System V, versão 3.2: guia do usuário. Prentice-Hall. 1989. pp. 2–23 e seguintes. - David Fiedler, Bruce H. Hunter, Stephen G. Kochan e Patrick H. Wood (1986). "
/usr
- O Diretório Misterioso".Administração do sistema UNIX. Hayden Book Company, ISBN 9780810462892. pp. - XPG.Padrões, ambientes e macros. Páginas do manual do Oracle Solaris. Oráculo. 2014.
- XPG4.Padrões, ambientes e macros. Páginas de manual do SunOS. Oráculo. 2004.
- Michael R. Ault (1996). Companheiro do administrador do sistema UNIX. Wiley. ISBN 9780471111443.
if
.Manuais. Projeto Etsh.- Estranheza no script de shell ksh93 ("command -p mkdir t" falha)
- https://news.ycombinator.com/item?id=7278408
- Jonathan de Boyne Pollard (2017).Uma página de manual aprimorada para
ul
. Propostas.
Responder2
Havia um /usr/bin/help
no PWB/UNIX e no Sistema III que fornecia ajuda para o SCCS, principalmente para mensagens de erro do SCCS, embora fosseextensívele sites individuais podem adicionar ajuda para outros comandos ou mensagens de erro.
ajuda(1)do 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.
e terminando com o deliciosamente autorreferencial
.SH DIAGNOSTICS
Use
.IR help (1)
for explanations.
/usr/src/cmd/sccs/sccs.mkteve o seguinte:
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
...
Responder3
O SCCS já foi escrito em 1972 (fazendo com que o SCCS complete 46 anos hoje), mas é difícil obter informações para o SCCS antes da versão 4.0, que foi publicada em 18 de fevereiro de 1977. A versão 4.0 do SCCS definitivamente incluía o help
comando. As revisões mais antigas do SCCS usavam um formato de arquivo de histórico binário que não é compatível com o SCCS atual.
Deixe-me dar algumas informações bash
antes de escrever mais sobre o SCCS:
bash
é um shell hostil ao usuário, pois implementa muitos recursos internos idiotas em vez de implementar o ksh93
método para componentes internos que não estão listados no padrão. ksh93
implementa um builtin nomeado builtin
que permite configurar umcaminho de pesquisapara embutidos. O principal problema com esses built-ins idiotas é que eles são encontrados com preferência máxima e não podem ser desativados facilmente. Os componentes estendidos do ksh93, entretanto, geralmente não são encontrados por padrão, pois exigem que o usuário configure um PATH
que inclua/usr/ast/bin.
Voltar SCCS
ao comportamento do UNIX:
Qualquer desenvolvedor no UNIX normalmente tem/usr/ccs/binem seu PATH
comoCCSsignifica algo semelhante aSistema de compilação C. Este diretório contém programas comocc, as, size, strip, nm, m4, make, SCCS, yacc...
/usr/bin/sccshelpfoi introduzido pela Oracle enquanto tentava tornar o Solaris semelhante ao Linux e muitas pessoas do UNIX não gostam dessa mudança.
Se você gosta de verificar a documentação online oficial do SCCS, recomendo que você verifique:
em especial:http://sccs.sourceforge.net/man/index.html
ele passou por uma grande reescrita durante os últimos 12 anos e, aliás: sou o mantenedor desde então.
Embora o subsistema SCCS original tenha sido escrito por Marc J. Rochkind da AT&T, Eric Allman da BSD escreveu ocomando sccs
em 1980 e simplificou o uso do SCCS.
Então, se você mora no mundo da AT&T, todos os comandos estão em/usr/ccs/binenquanto no universo BSD, você chamasccs <subcommand>
Respondendo sua pergunta:sim, era/é comum que os desenvolvedores tenham o comando sccs help no PATHmesmo que o comando frontend do SCCS sccs
esteja normalmente em/usr/bin