
在另一個線程exit
我傲慢地說,任何名稱為、test
或的程式(不屬於作業系統使用者介面的一部分,例如 shell)help
都是愚蠢的。我的意思是暗示這些通用名稱應該保留給頂級使用者介面,通常是命令 shell 或核心作業系統實用程式。
用戶 schily 評論說,這help
是 sccs 版本控制系統的命令,該系統自 1970 年代以來一直是 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.。
現代模型的一部分是所有內容都放入一個巨大的目錄中,無論是丹尼爾·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 年。 - 大衛·費德勒、布魯斯·H·亨特、史蒂芬·G·科尚和帕特里克·H·伍德 (1986)。 「
/usr
——神秘目錄」。UNIX系統管理。海登圖書公司,ISBN 9780810462892。 - 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 的資訊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