在另一个线程exit
我傲慢地说,任何名称为、test
或的程序(不属于操作系统用户界面的一部分,例如 shell)help
都是愚蠢的。我的意思是暗示这些通用名称应该保留给顶级用户界面,通常是命令 shell 或核心操作系统实用程序。
用户 schily 评论说,这help
是 sccs 版本控制系统的命令,该系统自 70 年代以来一直是 Unix 的组成部分。 sccs实际上是包含在 Single Unix 规范中。
sccs 的在线文档似乎含糊不清。大多数页面help
作为 sccs 子命令列出,作为 调用sccs help <topic>
。然后有一个/usr/bin/sccshelp
命令。但另一页确实列出了专门的/usr/ccs/bin/help
.
我假设 sccs 用户/usr/ccs/bin/
会在该路径中,因此help
40 年来它一直是许多 Unix 安装的一部分1。在这种情况下,我认为即使命令名称的选择令人遗憾,sccs 也会有资历,而 bash 应该调用其内置的 bash-help 等。
那么,您的路径中是否经常有 ( sccs
)命令?help
1这听起来很奇怪。
答案1
过去的情况并非如此。
你正在购买一种有些缺陷的现代模型,但当时的情况并非如此。
但我微笑着说:“不用费力,我会训练你的。”您学到的第一个命令是— Mike O'Brien(航空航天公司)<neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> 通过<[电子邮件受保护]> (1989-03-01)。VAXen,我的孩子们,只是不属于某些地方。记录、幽默、有趣。HELP
“并继续在控制台终端上输入它。因此,数据中心经理、值班主管和八天操作员看着 LA100 嗡嗡作响,发出通常的介绍性文字。结束后,他们满脸期待地看着我,我以慈祥的态度说道:“这是你最重要的命令!”值班主管走上前,研究了大约一分钟的文字。然后他转过头来,一脸疑惑地问道:“你用它做什么?”叹。
众所周知,Unix 并没有为初学者提供简单的帮助命令。这是一个漏洞(在线讨论论坛上有很多讨论),Bourne Again shell 的作者不仅填补了一次,而且多次填补了这个漏洞。 Mortice-Kern 提供了一个help
命令,可以搜索 doco 以helpfile
使用helpindex
. AT&T System 5 Release 3.2help
也有一个命令,例如:
$ 帮助 help:UNIX系统在线帮助 选项说明 s 入门:一般信息 llocate:查找带有关键字的命令 u用法:有关命令的信息 g 术语表:术语定义 r 重定向到文件或命令 退出 输入选择
这是在 AT&T Unix 中,从而否定了以下观点:取代指定的 SCCS 命令help
是非法的,或者 Bourne Again shell 的编写者不合时宜。但还有更多。
我们预计实际使用 PATH
。
—# PATH 设置初始 shell PATH 变量 # #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。
现代模型的一部分是所有内容都放入一个巨大的目录中,无论是丹尼尔·J·伯恩斯坦/command
或 Arch Linux 的/usr/bin
.这当然会导致命名不同命令的所有麻烦(在其他模型中将通过在和fastboot
中来区分)。但那不是当时的模型。bin/
sbin/
该模型的例子如下ls
我讨论过的命令的多种变体并通过诸如“Nexenta bash 脚本使用 /usr/sun/bin/sed 而不是 /usr/bin/sed”。有一个全部负载命令目录的数量,以及选择将其中的哪些子集列在环境变量的值中PATH
以及以什么顺序列出,决定了操作系统的个性那人看到了。
命令搜索路径可以并且在一定程度上仍然可以包括以下内容:
/bin
-/usr/bin/
传统的、早于正式标准化的通用工具集;从后正式标准化的角度来看,符合System V 接口定义和X/Open 可移植性指南版本3/sbin
和/usr/sbin/
— 系统管理工具/etc/
以及/usr/etc/
- 更多系统管理工具(是的弗吉尼亚,可执行文件曾经进入过/etc/
。)/5bin
以及/usr/5bin/
— System V(即 5)与 AT&T Unix System 5 兼容工具的兼容性目录/usr/ucb/
— UCB(即 BSD)兼容目录,包含 BSD 兼容工具/usr/mbin/
— 支持多字节字符集的/usr/bin
工具变体/usr/rbin/
— 管理员向某些“受限”shell 提供的工具/usr/lbin/
— 本地安装的工具,是/usr/local/bin/
/usr/amdahl/bin/
-/usr/sun/bin/
操作系统供应商工具,更一般地采用和 的形式,从中可以得出相似之处/usr/${OEM}/bin
/usr/local/bin
/usr/games/
— 游戏/usr/ccs/bin
— 正如您所观察到的,各种开发人员工具/usr/xpg4/bin/
— 包含命令的目录,其行为方式由X/Open 可移植性指南第4期/usr/xpg6/bin/
— 包含按概念规定的方式运行的命令的目录X/Open 可移植性指南第 6 期,更准确的名称是 POSIX.1:2001 或单一 Unix 规范版本3/opt/sfw/bin/
— 通过安装 Sun 提供的附加实用程序 CD 创建,现在称为SunFreeware 配套 CD/opt/csw/bin/
—开放式CSW和爆炸波工具/opt/SUNWspro/bin/
— 来自 Sun Workshop(现在称为 Oracle Developer Studio)工具套件的命令,SUNW
是 Sun 的(原始)股票交易代码并spro
表示旧产品名称 SunPro/usr/local/bin/
/opt
— 由不使用子目录或 CSW 的第三方提供的内容
Sun/Oracle 操作系统及其开源衍生产品正处于鼎盛时期,也许是这种多重个性操作系统的最极端的例子。 (Oracle 此后删除了其中几个目录,包括/usr/ucb
和/usr/ccs
, 。)但是上述目录中的一些来自 AIX 和其他目录。 /usr/amdahl/bin
例如,来自 UTS 的。
从给定的命令名称运行什么程序取决于所选择的个性。对于任何给定的命令名称,曾经并且必须只有一个程序的想法是愚蠢的。毕竟,区分同名命令才是最PATH
重要的为了。
没有严格优先级的概念。
许多命令的存在和消亡都非常迅速。例如,Bill Joy 创建了一个iul
命令作为 的前身。 ul
BSD也曾经有过一个greek
命令。
考虑到命令集的更替,命令永远是一成不变的,并且为 shell 内建函数和其他命令的豁免而得名的想法是相当陌生的。
对于初学者来说,sh
本身在十几年的时间里,我们已经推出过 Thompson、Mashey、Bourne 和 Korn 等不同的炮弹。 Thompson shell 的外部if
命令阻止 Bourne shell 将其作为关键字的想法if
当然是可笑的。
请注意(2005 年后,ksh93q)AT&T Korn shell 启用额外内置命令的机制,将 包含/opt/ast/bin
在 的值中PATH
,两者都支持内置命令可以取代同名的外部命令的概念和PATH
与人们期望用来控制个性的想法联系在一起。 (ast
顺便说一下,代表 AT&T 软件技术。)
进一步阅读
- 美国电话电报公司。 “UNIX 系统用户基础知识:
help
命令”。Unix System V,版本 3.2:用户指南。普伦蒂斯·霍尔。 1989 年。第 2–23 页及以下。 - 大卫·费德勒、布鲁斯·H·亨特、斯蒂芬·G·科尚和帕特里克·H·伍德 (1986)。 “
/usr
——神秘目录”。UNIX系统管理。海登图书公司,ISBN 9780810462892。第 54 页及以下。 - XPG。标准、环境和宏。 Oracle Solaris 手册页。甲骨文。 2014年。
- XPG4。标准、环境和宏。 SunOS 手册页。甲骨文。 2004年。
- 迈克尔·R·奥尔特 (1996)。 UNIX 系统管理员的伴侣。威利。国际标准书号 9780471111443。
if
。手册。埃特什项目。- ksh93 shell 脚本中的奇怪现象(“command -p mkdir t”失败)
- https://news.ycombinator.com/item?id=7278408
- 乔纳森·德博因·波拉德 (2017)。改进的手册页
ul
。提案。
答案2
/usr/bin/help
PWB/UNIX 和 System III 中有一个为 SCCS 提供帮助的程序,主要针对 SCCS 错误消息,尽管它是可扩展的各个站点可以添加其他命令或错误消息的帮助。
帮助(1)来自系统 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.
并以令人愉快的自我参照结束
.SH DIAGNOSTICS
Use
.IR help (1)
for explanations.
/usr/src/cmd/sccs/sccs.mk有以下内容:
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
...
答案3
SCCS 已于 1972 年编写(如今 SCCS 已经有 46 岁了),但是在 1977 年 2 月 18 日发布的 4.0 版本之前很难获得 SCCS 的信息。SCCS 4.0 版本确实包含了该help
命令。较旧的 SCCS 修订版使用与当前 SCCS 不兼容的二进制历史文件格式。
bash
在我写更多关于 SCCS 的文章之前,让我先介绍一下:
bash
是一个用户不友好的 shell,因为它实现了许多愚蠢的内置函数,而不是实现ksh93
标准中未列出的内置函数的方法。ksh93
实现一个名为的内置函数builtin
,允许设置搜索路径对于内置函数。这种愚蠢的内置函数的主要问题是,它们被发现时具有最大的优先级,并且不能轻易停用。然而,扩展的 ksh93 内置函数通常在默认情况下根本找不到,因为它们要求用户设置一个PATH
包含/usr/ast/bin。
回到SCCS
UNIX 行为:
UNIX 上的任何开发人员通常都有/usr/ccs/bin在他的PATH
作为CCS意思类似于C编译系统。该目录包含类似的程序cc, as, size, strip, nm, m4, make, SCCS, yacc...
/usr/bin/sccshelpOracle 在试图使 Solaris 变得像 Linux 时引入了这一更改,但许多 UNIX 用户不喜欢这种更改。
如果您想查看 SCCS 的官方在线文档,我建议您查看:
特别:http://sccs.sourceforge.net/man/index.html
它在过去 12 年里经历了一次重大重写,顺便说一句:从那时起我就是维护者。
虽然最初的 SCCS 子系统是由 AT&T 的 Marc J. Rochkind 编写的,但来自 BSD 的 Eric Allman 编写了命令 sccs
1980 年,使 SCCS 的使用更加简单。
因此,如果您生活在 AT&T 世界中,所有命令都位于/usr/ccs/bin而在 BSD 世界中,你可以调用sccs <subcommand>
回答你的问题:是的,对于开发人员来说,在 PATH 中使用 sccs help 命令是很常见的即使 SCCS 前端命令sccs
通常是/usr/bin