
で別のスレッドexit
私は、、、またはのような名前を持つプログラム(シェルのような OS ユーザー インターフェイスの一部ではないもの)は愚かtest
だと自信たっぷりhelp
に言っていました。私が言いたかったのは、このような一般的な名前は、通常はコマンド シェルまたはコア OS ユーティリティであるトップ レベルのユーザー インターフェイスに限定するべきだということです。
ユーザーschilyは、これはhelp
70年代からUnixの不可欠な部分となっているsccsバージョン管理システムのコマンドであると述べました。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
過去はそうはいきませんでした。
あなたは、当時はそうではなかった、いくぶん欠陥のある現代のモデルを信じているのです。
しかし私は笑ってこう言いました。「大丈夫です。私が指導します。最初に覚えるコマンドは です— マイク・オブライエン (The Aerospace Corporation) <neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> 経由 <[メールアドレス]> (1989-03-01).VAXen、私の子供たちは、どこかの場所には属さない. ユーモア、おもしろさを推奨します。HELP
」。そしてコンソール端末に入力し始めました。データセンターのマネージャー、シフトの監督者、そして 8 人の日勤オペレーターは、LA100 がいつもの紹介文をブザー音で鳴らすのを見守りました。それが終わると、彼らは期待に満ちた顔で私のほうを向き、私はおじさん風にこう言いました。「これはあなたにとって最も重要なコマンドです!」シフト監督者は前に進み出て、約 1 分間テキストを調べました。その後、非常に困惑した表情で振り返り、「これは何に使うのですか?」と尋ねました。ため息。
かなり有名な話ですが、Unix には初心者向けの簡単なヘルプ コマンドが付属していませんでした。これは (オンライン ディスカッション フォーラムでよく議論された) 穴でしたが、Bourne Again シェルの作者によって一度だけでなく何度も埋められました。Mortice-Kern は、を使用してhelp
から印刷するドキュメントを検索するコマンドを提供しました。AT&T System 5 Release 3.2にも、たとえば次のようなコマンドがありました。helpfile
helpindex
help
$ ヘルプ ヘルプ:UNIX システム オンライン ヘルプ 選択肢の説明 スターター: 一般情報 l 位置検索:キーワードを含むコマンドを検索 u 使用法: コマンドに関する情報 g 用語集: 用語の定義 r ファイルまたはコマンドにリダイレクトする q 終了 選択を入力
これが AT&T Unix にあったということは、SCCS コマンド named を置き換えるのは違法であるとか、Bourne Again シェルの作成者が時代遅れであったという考えをむしろ否定するものですhelp
。しかし、それだけではありません。
私たちは実際に使う PATH
。
—# PATHは初期シェル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:\ バイナリ
login.dfl
. Sun Microsystems, Inc. 2004-06-25.
現代のモデルの一つは、あらゆるものが1つの巨大なディレクトリにまとめられることです。ダニエル・J・バーンスタインの/command
または Arch Linux の です/usr/bin
。もちろん、これはさまざまなコマンド名(他のモデルでは、 とfastboot
にあることで区別されます) による頭痛の種となります。しかし、それは当時のモデルではありませんでした。bin/
sbin/
このモデルは次のように例示される。ls
私が議論したコマンドの複数のバリエーションそして、「Nexenta bash スクリプトは /usr/bin/sed の代わりに /usr/sun/bin/sed を使用します"。 あります全負荷コマンドディレクトリの種類と、環境変数の値にリストするコマンドディレクトリのサブセットPATH
と順序は、オペレーティングシステムの個性人が見るもの。
コマンド検索パスには、ある程度まで次のようなものを含めることができます。
/bin
そして/usr/bin/
、伝統的な、形式標準化以前の、一般的なツールセット。形式標準化後の視点から見ると、System V インターフェース定義そしてそのX/Open 移植性ガイドバージョン3/sbin
および/usr/sbin/
システム管理ツール/etc/
そして/usr/etc/
、より多くのシステム管理ツール (そうです、バージニア、実行ファイルはかつて に入っていました/etc/
。)/5bin
そして/usr/5bin/
— AT&T Unix System 5 互換ツールを備えた System V (ie 5) 互換ディレクトリ/usr/ucb/
— BSD 互換ツールを含む UCB (BSD) 互換ディレクトリ/usr/mbin/
— マルチバイト文字セット対応の/usr/bin
ツール/usr/rbin/
— 管理者によって一部の「制限された」シェルに提供されるツール/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およびBlastwaveツール/opt/SUNWspro/bin/
— Sun Workshop(現在はOracle Developer Studioとして知られている)ツールスイートのコマンド。SunSUNW
の(オリジナルの)証券取引所のティッカーコードであり、spro
古い製品名SunProを表しています。/usr/local/bin/
/opt
—サブディレクトリやCSWを使用しない第三者が提供するもの
Sun/Oracle オペレーティング システムとそのオープン ソース派生製品は、最盛期には、おそらくこのような多重人格オペレーティング システムの最も極端な例でした。(Oracle はその後、/usr/ucb
やなど/usr/ccs
、これらのディレクトリのいくつかを削除しました。) ただし、前述の の一部は AIX からのものであり、その他は、 /usr/amdahl/bin
たとえば UTS からのものです。
特定のコマンド名からどのプログラムを実行するかは、選択したパーソナリティによって決まります。特定のコマンド名に対して1つのプログラムしか存在しない、あるいは1つでなければならないという考えは愚かです。結局のところ、同じ名前のコマンドを区別することがPATH
、のために。
厳格な優先順位という概念はありませんでした。
多くのコマンドは、非常に急速に誕生しては消滅しました。たとえば、Bill Joy はiul
の前身として コマンドを作成しましたul
。BSD にもかつてgreek
コマンドがありました。
コマンドが永久に固定され、シェルの組み込みコマンドなどを除いて名前が付けられるという考え方は、コマンド セットの入れ替わりを考えると、かなり異質なものでした。
まず、sh
自体if
10 年と少しの間に、Thompson シェル、Mashey シェル、Bourne シェル、Korn シェルなど、さまざまなシェルが開発されました。Thompson シェルの外部コマンドによって Bourne シェルがif
キーワードを使用できないという考えは、もちろんばかげています。
/opt/ast/bin
(2005年以降、ksh93q)AT&T Kornシェルの追加の組み込みコマンドを有効にするメカニズム、つまり の値に を含めることは、PATH
組み込みコマンドが同じ名前の外部コマンドに取って代わることができるという概念をサポートしていることに注意してください。そして人格を制御するために使用することが期待されるという考えと結びついていますPATH
。 (ast
ちなみに、 は AT&T Software Technology の略です。)
参考文献
- American Telephone and Telegraph Company. 「UNIX システム ユーザーのための基礎: コマンド
help
」Unix System V、リリース 3.2: ユーザーズ ガイド. プレンティス・ホール. 1989年. pp. 2–23以降. - David Fiedler、Bruce H. Hunter、Stephen G. Kochan、Patrick H. Wood (1986)。「
/usr
— The Mystery Directory」。UNIX システム管理. Hayden Book Company、ISBN 9780810462892。pp. 54以降。 - XPG。標準、環境、マクロ. Oracle Solaris マニュアル ページ。Oracle。2014 年。
- XPG4。標準、環境、マクロ. SunOS マニュアル ページ。Oracle。2004 年。
- マイケル・R・オルト(1996年)。 UNIX システム管理者の手引き. ワイリー. ISBN 9780471111443.
if
。マニュアル. Etsh プロジェクト。- ksh93 シェル スクリプトの異常 (「command -p mkdir t」が失敗する)
- https://news.ycombinator.com/item?id=7278408
- ジョナサン・デ・ボイン・ポラード(2017年)。改良されたマニュアルページ
ul
. 提案。
答え2
PWB/UNIXとSystem IIIには、SCCSのヘルプ、主にSCCSエラーメッセージを提供するものがありました/usr/bin/help
が、拡張可能個々のサイトでは、他のコマンドやエラー メッセージのヘルプを追加できます。
ヘルプ(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.
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
ksh93
は、標準にリストされていない組み込み関数のメソッドを実装する代わりに、多くのダム組み込み関数を実装しているため、ユーザーフレンドリーではないシェルです。ksh93
という名前の組み込み関数を実装しbuiltin
、検索パス組み込み関数の場合。このような愚かな組み込み関数の主な問題は、最大の優先度で検出され、簡単に無効にできないことです。ただし、拡張されたksh93組み込み関数は、ユーザーが設定する必要があるため、通常はデフォルトではまったく検出されませんPATH
。ディレクトリ。
SCCS
UNIXの動作に戻る:
UNIXの開発者なら誰でも、bin ディレクトリ彼のPATH
ようにccs似た意味を持つC コンパイルシステムこのディレクトリには次のようなプログラムが格納されていますcc, as, size, strip, nm, m4, make, SCCS, yacc...
/usr/bin/sccshelpこれは、Oracle が 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の世界に住んでいるなら、すべてのコマンドはbin ディレクトリ一方BSDの世界では、sccs <subcommand>
あなたの質問にお答えします:はい、開発者が PATH に sccs help コマンドを置くのは一般的でした/現在もそうです。SCCSフロントエンドコマンドはsccs
典型的にはディレクトリ