过去的情况并非如此。

过去的情况并非如此。

另一个线程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/会在该路径中,因此help40 年来它一直是许多 Unix 安装的一部分1。在这种情况下,我认为即使命令名称的选择令人遗憾,sccs 也会有资历,而 bash 应该调用其内置的 bash-help 等。

那么,您的路径中是否经常有 ( sccs)命令?help


1这听起来很奇怪。

答案1

过去的情况并非如此。

你正在购买一种有些缺陷的现代模型,但当时的情况并非如此。

但我微笑着说:“不用费力,我会训练你的。”您学到的第一个命令是HELP“并继续在控制台终端上输入它。因此,数据中心经理、值班主管和八天操作员看着 LA100 嗡嗡作响,发出通常的介绍性文字。结束后,他们满脸期待地看着我,我以慈祥的态度说道:“这是你最重要的命令!”

值班主管走上前,研究了大约一分钟的文字。然后他转过头来,一脸疑惑地问道:“你用它做什么?”叹。

— Mike O'Brien(航空航天公司)<neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> 通过<[电子邮件受保护]> (1989-03-01)。VAXen,我的孩子们,只是不属于某些地方。记录、幽默、有趣。

众所周知,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命令作为 的前身。 ulBSD也曾经有过一个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/helpPWB/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

回到SCCSUNIX 行为:

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/

特别:http://sccs.sourceforge.net/man/index.html

它在过去 12 年里经历了一次重大重写,顺便说一句:从那时起我就是维护者。

虽然最初的 SCCS 子系统是由 AT&T 的 Marc J. Rochkind 编写的,但来自 BSD 的 Eric Allman 编写了命令 sccs1980 年,使 SCCS 的使用更加简单。

因此,如果您生活在 AT&T 世界中,所有命令都位于/usr/ccs/bin而在 BSD 世界中,你可以调用sccs <subcommand>

回答你的问题:是的,对于开发人员来说,在 PATH 中使用 sccs help 命令是很常见的即使 SCCS 前端命令sccs通常是/usr/bin

相关内容