追加読書

追加読書

Ubuntuのコマンドマニュアルにはps次のテキストがあります。

このpsバージョンはさまざまなオプションを受け入れます:

   1   UNIX options, which may be grouped and must be preceded by a
       dash.
   2   BSD options, which may be grouped and must not be used with
       a dash.
   3   GNU long options, which are preceded by two dashes.

Ubuntuの組み込みコマンドが他のオペレーティングシステムのオプションを使用できるのはなぜですか? Linux、UNIX、BSDは起源は同じですが、枝が異なることを知っています。

答え1

これはすべてAlbert D. Cahalanという人のために起こりました。 XeはBSDを理解していません。

psもともとLinuxコマンドは次のように書かれていました。ブランコ・ランケスター(Branko Lankester) 1992年3月初版出版。後で「proc-ps」と区別するために「kmem-ps」と呼ばれた。1992年12月 Michael K. Johnson 出版。 M. Lankesterはpsこのkmemデバイスを使用してカーネルメモリからプロセステーブルを読み込みます。 M. Johnsonはファイルシステムをps使用してprocプロセステーブルを読み込み、今後数年間にわたっていくつかのバージョンがリリースされました(例:1993年1月1994年1月)。

当時も、これらのコマンドは1980年代初頭psスタイルのかなり古いコマンド構文を提供しました。getopt()これはから来たものですkmem-psは1993年11月にリリースされました。:

使用法: ps 0acefhHjlmnprsStuUvwxXy [t tty] [pid[,pid]...]

j - ジョブ制御形式、l - 長い形式、m - メモリ形式、
s - 信号形式、u - ユーザー形式、v - 仮想メモリ形式、
X - レジスタフォーマット、y - システムコールフォーマット、デフォルト値 - ショートフォーマット

0 - タスク0を含み、a - すべてのユーザーのプロセスを含みます。
c - コマンド名のみ印刷、e - 環境変数の表示、f - プロセスフォレストの印刷
h - ヘッダーを抑制します。 n - ユーザーフィールドとwchanフィールドを数値で印刷します。
p - ページ数を印刷します。 r - 実行可能なプロセスにリストを制限します。
S - CPU時間とページエラーフィールドのサブプロセス使用量を要約します。
t tty - TTY を制御端末として使用するすべてのプロセスを表示します。
w - 幅:132、ww - 264、www - 無制限、デフォルト - 画面幅または80
x - 制御端末がないプロセスを含みます。
U[SYSTEM-PATH[SWAP-PATH]] - ps データベースの更新

ご覧のとおり、文字には個性があり、単一の意味があり、前にマイナス文字はありません。

Uロゴ(お知らせではありません)のアイデアは-U次のとおりです。1986年のBSDパッチpsMichael A. CallahanはこれをUsenet mod.sourcesNews Group(第6巻、第83号)に掲示しました。

数年後、Albert D. Cahalanが登場し、proc-psを書き直しました。 Xeはこれについて多くの主張をしています。残念なことに、これらの主張の多くは真実ではないという事実は忘れられており、ps数年後もまだ存在するマニュアルでは、psUnix、BSD、およびGNUオプションの構文を提供すると主張しています。

そうではありません。

BSDはオプション処理をps使用します。getopt()Marc Teitelbaumが1990年4月に変更した後年度psM. Cahalanのバージョンは言うまでもなく、M. LankesterのLinuxバージョンよりはるかに古いです。

M. Cahalanはps以前のLinux kmem-ps / proc-ps構文を提供しました。後で、psM. CahalanがAIXコマンドから出たと主張するいくつかの構文を追加しました。ユーズネットでこの点をしっかりと明らかにしたM. Cahalan:「BSDは不便ですが、SysVはそうではありません」それFreeBSDは「迷惑」proc-psのxyr書き換えは次のとおりです。「標準準拠/bin/ps」、「旧BSD構文」のサポート皮肉なことに、これが実際にはほぼ10年間BSD構文ではなかったという事実は、当時認識されていませんでした。 psそれ自体ただそこにいたしかもその年に標準化されました。 標準原理分析BSDとAT&T Unixコマンドラインオプションの比較は、M. Cahalanの記事のどれよりもはるかに思慮深いです。

これはps有名なI_WANT_A_BROKEN_PS環境変数を紹介しますが、混乱するように、M. Cahalanはxyrselfがオプションの解決を担当していると主張しながらM. Johnsonのプロパティを指定します。実際、twainは2つのps実装を並列に保ちます。

奇妙なことに、当時のBSDの場合getopt()と同様に、マイナス記号の前に-styleオプションを使用し(当時)、新しい記録標準としてCahalan / Johnsonは次のように指摘しています。pspsps

警告: '-'は廃止されました。 「ps -e」の代わりに「ps e」を使用してください。

実はもともとそうでした。いいえ廃止され-ました。実際、M. Cahalanはxyrがps標準的な方法で動作すると主張しています - BSDがすでにやっている-ようです。psこれにより、1990年代後半と2000年代初めに混乱していた多くのユーザーから質問が提起され、本で次の内容が言及され始めると、通常システム管理者とユーザーも混乱していました。

なぜシンボルの前にダッシュを使用しないのか疑問に思いますps。使用できますが、これはps古い方法なので、プログラムを引き続き使用すると警告メッセージが表示されます。
——Deborah S. RayおよびEric J. Ray(1998)。Unixシステム。ピッチスキンプレス。 ISBN 9780201353952。 174.

この議論を引き続き見ることができます。oldps手動これは、「BSDバージョンから派生したps」について説明します。これは本当ではありませんが、Linuxバージョンから派生したものであることは明らかです。コマンドライン引数の前には「-」文字を入れてはいけません。現在のコマンドライン引数の「拡張BSD」スタイルを表すために「-」を使用する代わりに、Unix98標準のコマンドライン引数を表すために使用します。

これらのいくつかはprocps-ngで軽減されました。第三書き換えは、世紀が変わるやいなや(プロジェクト名の「-ng」がà laモードであったとき)行われたが、この時、Cahalan / Johnsonがpsoldpsご覧のとおり、マニュアルpsには「拡張」と表示されなくなります。しかし、新しいバージョンpsそれでもM. Cahalanが関係しています。)実際には、いくつかの人格の全体的なアイデアを非常に受け入れます。残念ながら他にもまだこれにより、今日まで続くBSDコマンドラインオプションに関する噂が続きました。

同時に、幸せ一つ-personality BSDは、この回答を書いた時点で、ps過去29年7日間にコマンドラインオプションを提供しました。getopt()NetBSDprocstatとOpenBSDは、単一のUnix仕様が維持するps新しい妥協オプションを追跡しました。-A新しいBSD-Oオプションps

追加読書

  • ロバートNMワトソン(2017-01-14)。procstatFreeBSD 共通コマンドマニュアル
  • psFreeBSD 共通コマンドマニュアル。 2018年3月13日。
  • psNetBSD 共通コマンドマニュアル。 2016年12月2日。
  • psOpenBSD 共通コマンドマニュアル。 2016年10月26日。

答え2

一般的な答えだけを提供できます。コマンドラインオプションは通常、ライブラリ関数を使用して解析されますgetopt。最初は - の後に記号が続く引数だけが許可されます。これは、-A から -Z、-a から -z、-0 から -9 まで使用可能なオプションの数を効果的に制限します。実際の使用に関する最小限のヒントがなくても、ヘルプの場合は-h、バージョン情報、または詳細な出力の場合は-vなどのオプションを使用しないと想像できます。

Linuxにはしばしば標準Cライブラリglibcと関連があり、同様のオプションを処理するgetopt拡張機能があります。その結果、GNUによって開発された多くのコマンド(glibcなど)はこの拡張を使用します。多くのコマンドでGNUに似たスタイルオプションを使用することもできます。 -vと--verbose、-h、--helpなど。 BSDでも同じことが起こるようです(私はBSDの専門家ではありませんが訂正してください)。

あなたのpsコマンドはprocpsと呼ばれるソフトウェアのコレクションから来ます。推測する彼らは特定のプラットフォームのオプションスタイルを模倣したいと思います。したがって、UNIXユーザーの場合は - オプションがあります。 BSDの場合、このような内容も許可されますps aux

psこのように動作する唯一のプログラムではありません。多くの標準プログラムは、「以前の」UNIXバージョン(POSIX)といくつかの最新の拡張機能をサポートしています。

関連情報