過去的情況並非如此。

過去的情況並非如此。

另一個線程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/會在該路徑中,因此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.。

現代模型的一部分是所有內容都放入一個巨大的目錄中,無論是丹尼爾·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表示舊產品名稱 Su​​nPro
  • /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 年。
  • 大衛·費德勒、布魯斯·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/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 的資訊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

相關內容