「BSD構文」とその標準構文を受け入れる多くのコマンドを見てきました。一例としてps
コマンドを使用します。
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
To see every process on the system using BSD syntax:
ps ax
ps axu
では、これら2つのルートの違いは何ですか?一般に、彼らがBSD構文で私が覚えておくべき要素を言うとき?この構文は、BSDにあるコマンドだけのものですか?
MS OfficeとLibreOfficeの違いは何ですか? FirefoxとChromeの間?
彼らはほぼ同じことをしますが、目的は少し異なります。
おそらく、より良い質問は、なぜBSD、Linux、OSX、およびUnixディストリビューションはso多くのコマンドを共有するのですか?つまり、 POSIX コンプライアンスになります。 POSIXは、基本的にUnixライクなオペレーティングシステムの標準セットです。コアAPI、コマンド、およびそれらのコマンドの動作方法を規定しています。
ps
(POSIXで規定されたコマンド)の場合、特定の引数が要求されます。これらには、これらのBSDのものが含まれます。すべてのPOSIX派生コマンドには独自のマニュアルページがありますが、個別のインストールが必要です。 ps
の場合:
Sudo apt-get install manpages-posix
man 1posix ps
では、なぜBSDはps
(またはその逆)を使用しないのですか?
ps
パッケージ(procps
参照:dpkg -S $(which ps)
) fork of another procps
package 。どちらもGPLライセンスです。これはBSDのライセンスと互換性がないため、そこに含めることはできません。 (WeはBSDを含めることができますが、その必要はありません)。ps
はかなりカーネル固有です。私は彼らが技術的に互換性がないと考えています。他のアプリケーションはどうですか?
POSIX準拠のコマンドのほとんどは、Ubuntuのcoreutils
パッケージから提供されます。このパッケージは、GNU/LinuxのGNUを表し、GPLライセンスも取得しています。 BSDは、POSIXに準拠しているが、対応するGNUと完全に同じではない、独自のBSD互換ライセンスバージョンを出荷しています。
ps
は、GNUではない唯一のPOSIXコマンドではありません 。それらの負荷があります。
私が先導するように、なぜ彼らはそうあるべきなのでしょうか?彼らは、非常に長い時間をかけてさまざまな人々によっています。それがここでの短い答えです。
これは、 nix (Wikipediaには 簡略図 があり、これは farfrom completeのやや曲がりくねった歴史にまでさかのぼります)。特に、しばらくの間、2つの主要な流れがありました。 System V AT&Tによって開発され、 BSD カリフォルニア大学バークレー校で開発されました。これは、Linux(1991)、Ubuntu(2004)よりもずっと前の1980年代初頭頃でした。多くの場合、これら2つの電流は異なる決定を下し、今日でも「System V」および「BSD」のバリアントまたは機能への参照が見つかることがあります。
ps
コマンドは、Unixの最初のリリースの1つから遡ります(バージョン1ではありませんでした。オンラインで最初に見つかったマニュアルページは、1974年の バージョン5 (p.94)からのものです)。当時、ps
にはいくつかのオプションがありました。たとえば、ps a
はユーザーの代わりにすべてのプロセスを表示し、ps x
は端末が接続されていないプロセスを表示します。オプションは-
で始まらないことに注意してください:当時、オプションに-
を使用する慣習は今日のようにほぼ体系的ではなく、ほとんどのためのものでしたファイル名を通常の引数として使用するコマンド。
時間が経つにつれて、Unixのさまざまなストランドはps
をさらに多くのオプションで拡張しました。 BSDバリアントは、先頭の-
なしで元の構文を保持することを選択し、a
およびx
は今日も存在しています。 System Vバリアントは、オプションに-
の構文規則を採用することを選択し、異なる文字を使用しました(たとえば、ps -e
はすべてのプロセスを表示します)。 Oracle(以前のSun) Solaris は、System Vバリアントの例です(Solarisには、BSDを念頭に置いて作成されたアプリケーション用に、デフォルトのps
にないディレクトリに別個のPATH
実行可能ファイルも付属しています)。
Linuxが登場した時点で、Linuxを使用した人は、多くの場合、ある種のUnixバリアントを以前に経験したことがあります。 Linuxは、技術的な考慮事項に基づいて、または機能を実装した人の経験と好みに基づいて、System V方式、時にはBSD方式、時には独自の方式で物事を行いました。 Linuxのps
コマンドは、BSDに似たオプションで始まりました。 ps ae
は、すべてのプロセスを表示し、リストに環境変数を含めます。時間が経つにつれて(1990年代後半、正確な時期は覚えていません)、Linuxのps
の作成者は、System Vに慣れていた人々にオプションを追加しました。したがって、今日はps ax
またはps -e
Linuxでのプロセス、および環境変数(PS_PERSONALITY
)を使用して、ps
をさまざまなUnixの古いUnixバリアントのように動作させることができます。
いくつかのUnixバリアントを使用した人々は、あるUnixバリアントから別のバリアントに切り替えるときに、プログラムとその習慣を変更する必要があることを好まなかった。そのため、機能のサブセットを標準化する努力がありました。これが POSIX 標準( IEEE によって導かれる)につながりました。 ps
コマンドを含むスコープを持つ最初のエディションは1992年に登場しました。これはオンラインでは利用できませんが、 1997年版 は利用可能です。 ps
コマンドでは、他の多くの場合と同様に、POSIXはSystem Vの方法を採用しました。
ps
コマンドの標準構文は、System VとPOSIXの両方と互換性があるものです。さらに、この構文は-
を使用してデフォルトでオプションを導入するため、標準であると言えます。一部のオプションは、2つの構文のいずれかにのみ存在します。幸いなことに、同じ呼び出しでそれらを混在させることができます。
一般的に言えば、「BSD」と「System V」には技術的な意味はありません。 「BSD」は1980年代以降にBSDが行った選択であり、「System V」はAT&Tとそのパートナー(特にSun)が行った選択です。 「POSIX」は、IEEE標準化委員会が行った選択です。
参照している「標準」構文は、実際には1980年代に開発されたGNUオペレーティングシステムです。 GNUベースのユーティリティと哲学をLinuxカーネルと組み合わせて、最新のLinuxディストリビューション(Ubuntuを含む)を開発しました。
BSDオペレーティングシステムは、1970年代後半にGNUから独立して開発され、後にFreeBSDやOpenBSDなどの最新バージョンに分岐しました。
GNUとBSDは両方ともUnixに触発されており、わずかに異なる哲学、構文などを持っています。
Ubuntuのcoreutilsは、GNUで管理されたアプリケーションのコレクションであり、あらゆるものを含んでいます(apt-cache show coreutilsをご覧ください)。 BSDには独自のバージョンがあります(GNUはBSDライセンスと互換性がありません)。