組み込みコマンドと、名目上同じことを実行できる別のコマンドとの間に本質的な違いはありますか?
例えば。ビルトインは「特別な」扱いを受けますか? …それらを実行するオーバーヘッドは少なくなりますか? ..または単に「組み込み」であるか。あなたの車のダッシュボードのように?
…そして、これらのビルトインの決定的な(現在の)リストはありますか?
承認された回答:
あなたのコメントから、あなたは正確にシェルが何であるかについて混乱しているようです は。カーネルはシステムの管理を担当します。これは、実際にプログラムをロードして実行したり、ファイルにアクセスしたり、メモリを割り当てたりする部分です。ただし、カーネルにはユーザーインターフェイスがありません。仲介者として別のプログラムを使用することによってのみ、それと通信することができます。
シェルは、プロンプトを出力し、入力行を読み取り、それを1つ以上のコマンドとして解釈して、ファイルを操作したり、他のプログラムを実行したりするプログラムです。 GUIが発明される前は、シェルはOSの主要なユーザーインターフェイスでした。 MS-DOSでは、シェルはcommand.com
と呼ばれていました。 そして、別のものを使おうとした人はほとんどいませんでした。ただし、Unixでは、ユーザーが選択できる複数のシェルが長い間存在していました。
それらは3つのタイプに分けることができます。 Bourne互換シェルは、元のBourneシェルから派生した構文を使用します。 Cシェルは、元のCシェルの構文を使用します。次に、独自の構文を発明したり、プログラミング言語から1つを借用したりする非伝統的なシェルがあり、一般的に最初の2つのタイプよりもはるかに人気がありません。
組み込みコマンドは、他のプログラムをロードして実行するための要求として解釈するのではなく、シェルがそれ自体を実行するコマンドです。これには2つの主な効果があります。まず、プログラムの読み込みと実行には時間がかかるため、通常は高速です。もちろん、コマンドの実行に時間がかかるほど、全体の実行時間と比較してロード時間の重要性は低くなります(ロード時間はかなり一定であるため)。
次に、組み込みコマンドがシェルの内部状態に影響を与える可能性があります。そのため、cd
などのコマンド 必須 外部プログラムはシェルの現在のディレクトリを変更できないため、組み込みである必要があります。 echo
などの他のコマンド 、効率のために組み込まれている可能性がありますが、外部コマンドにできない本質的な理由はありません。
組み込みのコマンドは、使用しているシェルによって異なります。リストについては、ドキュメントを参照する必要があります(例:bash
の組み込みコマンドは、そのマニュアルの第4章にリストされています)。 type
POSIXではtype
が必要なため、コマンドはコマンドが組み込まれているかどうか(シェルがPOSIX互換の場合)を通知します。 ビルトインであること。 which
の場合 はシェルに組み込まれていないため、シェルの組み込みについてはおそらく認識されませんが、外部プログラムを探すだけです。