web-dev-qa-db-ja.com

`help`は一般的にいくつかのUnixフレーバーでsccsヘルプを呼び出しますか?

別のスレッド で、exittesthelpなどの名前のプログラム[シェルのようにOSユーザーインターフェイスの一部ではない]はばかげていると言っていました。私は、そのような一般名をトップレベルのユーザーインターフェイス(通常はコマンドシェルまたはコアOSユーティリティ)に予約する必要があることを意味しました。

ユーザーは、helpは、70年代からUnixの不可欠な部分であるsccsバージョン管理システムのコマンドであると慎重に述べました。 sccsは実際には Single Unix Specificationに含まれています。

Sccsのオンラインドキュメントはあいまいなようです。ほとんどのページでは、sccs help <topic>として呼び出されるsccsサブコマンドとしてhelpがリストされています。次に、 /usr/bin/sccshelp コマンドがあります。しかし 別のページ 確かに専用の/usr/ccs/bin/helpがリストされています。

Sccsユーザーの場合は/usr/ccs/bin/がパスに含まれているため、helpは40年間多くのUnixインストールの一部であると思います。1。その場合、コマンド名の選択が残念であっても、sccsには年功序列があり、bashは組み込みのbash-helpなどを呼び出す必要があると私は主張します。

それで、パスに(sccshelpコマンドがあるのは一般的ですか?


1 これは奇妙に聞こえます。

過去はそのようには機能しませんでした。

当時はそうではなかった、やや欠陥のあるモダンモデルを購入しています。

しかし、私は微笑んで言いました。「汗を流さないで、あなたを訓練します。最初に学習するコマンドはHELP”で、コンソール端末に入力します。そのため、データセンターマネージャー、シフトスーパーバイザー、および8日間のオペレーターは、LA100が通常の紹介テキストを話題にするのを見ました。それが終わったとき、彼らは期待の顔で私に向きを変え、私は「これはあなたの最も重要な命令です!」とはっきりと言いました。

シフトスーパーバイザーは前に出て、約1分間テキストを調べました。それから彼は非常に困惑した表情で振り返り、「あなたはそれを何のために使うのですか?」と尋ねました。はぁ。

— Mike O'Brien(The Aerospace Corporation)<neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> via <[email protected]>(1989- 03-01)。 VAXen、私の子供たち、ただいくつかの場所に属していない。 rec.humor.funny。

むしろ有名なことに、Unixには初心者向けの簡単なヘルプコマンドが付属していませんでした。これは、Bourne Again Shellの作成者によって一度だけでなく、何度も埋められた穴(オンラインディスカッションフォーラムで多く議論されました)でした。 Mortice-Kernは、helpを使用してhelpfileから印刷するドコを検索するhelpindexコマンドを提供しました。 AT&T System5リリース3.2にもhelpコマンドがありました。次に例を示します。

$ help 
 help:UNIXシステムオンラインヘルプ
 
選択肢の説明
 sスターター:一般情報
 llocate:キーワードを含むコマンドを検索
 u使用法:コマンドに関する情報
 g用語集:用語の定義
 rファイルまたはコマンドにリダイレクト
 q終了
選択肢を入力

これがAT&T Unixにあったということは、helpという名前のSCCSコマンドに取って代わることは違法である、またはBourne AgainShellの作成者が一歩外れたという考えにキボッシュを置きます。しかし、それだけではありません。

実際に使用する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:\ 
/usr/xpg6/bin
login.dfl。 Sun Microsystems、Inc。2004-06-25。

現代のモデルの一部は、すべてが1つの巨大なディレクトリに入るということです Daniel J.Bernsteinの/command またはArchLinuxの/usr/bin。これはもちろん、fastbootという名前の異なるコマンドですべての頭痛の種を引き起こします(他のモデルでは、bin/sbin/にあることで区別されます)。しかし、それは当時のモデルではありませんでした。

次に、モデルは 私が説明したlsコマンドの複数のバリアント および " Nexentabashスクリプトは/ usr/Sun/bin/sedを使用します)などの質問によって例示されます。/usr/bin/sed "の代わりに。コマンドディレクトリには全負荷があり、それらのサブセットをPATH環境変数の値にリストすることを選択し、その順序によって決定しますオペレーティングシステムの個性人が見る。

コマンド検索パスには、次のようなものを含めることができます。

  • /binおよび/usr/bin/ —従来の、以前の正式な標準化、一般的なツールセット。正式な標準化後の観点から、SystemVインターフェイス定義およびX/Open Portability Guideバージョン3に準拠するコマンド
  • /sbinおよび/usr/sbin/ —システム管理ツール
  • /etc/および/usr/etc/ —より多くのシステム管理ツール(はい、バージニア州、実行可能ファイルはかつて/etc/に入っていました。)
  • /5binおよび/usr/5bin/ — AT&T Unix System 5互換ツールとのSystem V(つまり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 Portability Guide問題4で指定された方法で動作するコマンドを含むディレクトリ
  • /usr/xpg6/bin/ —概念的なX/Open Portability Guide issue 6、より適切にはPOSIX.1:2001またはSingleとして知られる方法で動作するコマンドを含むディレクトリUnix仕様バージョン3
  • /opt/sfw/bin/ — Sunから追加のユーティリティのCDをインストールすることによって作成され、現在は SunFreeware Companion CD として知られています。
  • /opt/csw/bin/OpenCSW およびBlastwaveツール
  • /opt/SUNWspro/bin/ — Sun Workshop(現在はOracle Developer Studioとして知られている)ツールスイートからのコマンド。SUNWはSunの(元の)証券取引所のティッカーコードであり、sproは古い製品名SunProを示します。
  • /usr/local/bin//optサブディレクトリまたはCSWを使用しないサードパーティによって提供されるもの

Sun/Oracleオペレーティングシステムとそのオープンソース派生物は、おそらくそのような複数のパーソナリティオペレーティングシステムの最も極端な例でした。 (オラクルはその後、/usr/ucb/usr/ccsを含むこれらのディレクトリのいくつかを離れてチャックしました。)しかし、前述のいくつかはAIXなどからのものです。 /usr/amdahl/binは、たとえばUTSからのものです。

特定のコマンド名からどのプログラムを実行するかは、選択するパーソナリティによって異なります。特定のコマンド名に対して1つのプログラムしか存在しない、そして存在しなければならないという考えは、巧妙でした。結局のところ、同じ名前のコマンドを区別することは、PATHforであったことでした。

厳密な優先順位の概念はありませんでした。

多くのコマンドが非常に急速に存続し、消滅しました。たとえば、BillJoyはiulの前身としてulコマンドを作成しました。 BSDにもかつてgreekコマンドがありました。

コマンドが永遠に石に設定され、シェルビルトインなどの言い訳の名前を所有しているという考えは、コマンドセットの売上高を考えると、かなり異質でした。

初心者のために、shitselfは、10年と少しの間に、トンプソン、マシー、ボーン、コーンのシェルでした。 ThompsonShellの外部のifコマンドが、BourneShellがifをキーワードとして持つことを妨げたという考えはもちろんばかげていました。

追加の組み込みコマンドを有効にするための(2005年以降のksh93q)AT&T Korn Shellのメカニズム、PATHの値に/opt/ast/binを含めることは、どちらも組み込みコマンドの概念をサポートしていることに注意してください。同じ名前の外部コマンドに取って代わることができますandは、パーソナリティを制御するためにPATHを使用することが期待されているという考えと結びついています。 (ちなみに、astはAT&T Software Technologyの略です。)

参考文献

  • American Telephone andTelegraphCompany。 「UNIXシステムユーザーのための基本:helpコマンド」。 nix System V、リリース3.2:ユーザーガイド。プレンティスホール。 1989. pp。2–23 etseq。
  • David Fiedler、Bruce H. Hunter、Stephen G. Kochan、およびPatrick H. Wood(1986)。 "/usr —ミステリーディレクトリ"。 NIXシステム管理。 Hayden Book Company、ISBN9780810462892.pp。54etseq。
  • [〜#〜] xpg [〜#〜]標準、環境、およびマクロ。 OracleSolarisのマニュアルページ。オラクル。 2014年。
  • XPG4標準、環境、およびマクロ。 SunOSのマニュアルページ。オラクル。 2004年。
  • Michael R. Ault(1996)。 NIXシステム管理者のコンパニオン。ワイリー。 ISBN9780471111443。
  • ifマニュアル。 Etshプロジェクト。
  • ksh93シェルスクリプトの異常( "command -p mkdir t"が失敗します)
  • https://news.ycombinator.com/item?id=7278408
  • ジョナサンデボインポラード(2017)。 ulの改良されたマニュアルページ。提案。
8
JdeBP

SCCSはすでに1972年に作成されていますが(現在SCCSは46歳になっています)、1977年2月18日に公開されたリリース4.0より前のSCCSの情報を取得するのは困難です。SCCSリリース4.0には間違いなくhelpコマンドが含まれていました。 。古いSCCSリビジョンは、現在のSCCSと互換性のないバイナリ履歴ファイル形式を使用していました。

SCCSについて詳しく説明する前に、bashについて簡単に説明します。

bashは、標準にリストされていないビルトインに対してksh93メソッドを実装する代わりに、多くのダムビルトインを実装するため、ユーザーフレンドリーなシェルです。 ksh93は、builtinという名前の組み込みを実装します。これにより、組み込みのsearch pathを設定できます。このようなダムビルトインの主な問題は、それらが最大の優先順位で検出され、簡単に非アクティブ化できないことです。ただし、拡張ksh93ビルトインは、ユーザーが/ usr/ast/binを含むPATHを設定する必要があるため、通常、デフォルトではまったく見つかりません。 。

SCCSとUNIXの動作に戻る:

UNIXの開発者は通常、PATH/ usr/ccs/binccsとして持っています。Cコンパイルシステムに似たものを意味します。このディレクトリには、cc, as, size, strip, nm, m4, make, SCCS, yacc...のようなプログラムがあります。

/ usr/bin/sccshelpは、Solaris Linuxに似たものにしようとしているときに、Oracleによって導入されました。多くのUNIXの人々はこの変更を嫌っています。

SCCSの公式オンラインドキュメントを確認したい場合は、以下を確認することをお勧めします。

http://sccs.sourceforge.net/

特別に: http://sccs.sourceforge.net/man/index.html

過去12年間で大幅な書き換えが行われていますが、それ以来、私はメンテナです。

元のSCCSサブシステムはAT&TのMarc J. Rochkindによって作成されましたが、BSDのEricAllmanは1980年にcommandsccsを作成し、SCCSの使用を簡単にしました。 。

したがって、AT&Tの世界に住んでいる場合、すべてのコマンドは/ usr/ccs/binにありますが、BSDユニバースでは、sccs <subcommand>を呼び出します。

あなたの質問に答える:yesは、SCCSフロントエンドコマンドsccsが/で一般的であるにもかかわらず、開発者がPATHにsccshelpコマンドを持っているのが一般的でした/ usr/bin

1
schily

ありました /usr/bin/help SCCS、主にSCCSエラーメッセージのヘルプを提供したPWB/UNIXおよびSystemIIIでは、 extensible であり、個々のサイトが他のコマンドまたはエラーメッセージのヘルプを追加できました。

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.

/ 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
    ...
1
Mark Plotnick