私はLinuxのさまざまなコンポーネントとそれらがどのように連携するのかを理解しようとしていますが、用語に関する質問があります。端末は通常 Bash というシェルを実行します。ターミナルでLinuxコマンド(ls、mkdir、cpなど)を実行することもできます。しかし、私はすべてのLinuxコマンドがbash(またはシェル)の一部ではないことに気づきました。これは、端末が単にシェルを実行しないことを意味しますか?
答え1
端末は何も実行しません。ただユーザーインターフェイスです。あるいは、オペレーティングシステムで実行されているプロセスの場合read()
とシステムコールを使用してwrite()
読み書きできる特別な種類の「ファイル」です。 (いくつかの端末固有の特殊機能もあります。)
たとえば、SSHを介してログインすると、SSHサーバーはシェルを起動し、端末(デバイスノードを表す)に接続されたファイル記述子を提供します。 GUIを介してログインして端末エミュレータを起動すると、ほぼ同じことが起こります。 SSHサーバーをターミナルエミュレータに置き換えることができます。
どちらの方向に行くと、シェルは端末にプロンプトを印刷し、端末からコマンドを読み取ることができ、端末にアクセスできる外部プログラム(またはls
その他)を起動できるようになりました。git
あるいは、組み込みコマンドを同様に実行することもできます(read
、、echo
)。
(非対話型シェルセッションを実行することもできます。シェルスクリプトを実行することは、ターミナルではなくファイルからシェルへの入力を受け取るという点でほぼ同じです。シェルが起動するとConnectでも入力を受け取ります。ターミナルなどで)。
一般的な汎用システムで実行されるほとんどのコマンドは、シェルに組み込まれておらず、外部プログラムです。 Busyboxを搭載した一部の組み込みシステムでは、一般的なものがBusybox自体内に実装される可能性が高くなります。ただし、それでもシステムが実行する必要があるすべての作業を実際に実行する外部アプリケーションがある可能性があります。それはPythonやLuaのインタプリタだけです。
答え2
これは端末によって異なりますが、私が使用している端末ではすべてのコマンドを実行できました(ただし、多くのコマンドが早すぎるため、端末を起動する必要がなく、出力を生成するか出力を生成するかは重要ではありません。ではありません)。端末を使用して画面を実行し、画面で適切な数のシェルを実行したことを覚えておいてください。
他の回答で述べたように、シェルにはこれらのコマンドにアクセスするための多くの組み込みコマンドがあります(一部のシェルには他のコマンドよりも多くのコマンドがあるため、使用するコマンドのドキュメントを確認してください)、シェルは通常終了するまで実行し続けますになります。 )、実行している作業がわからない場合は、端末がシェルで始まるようにする必要があります。 (場合によってはプロセスを保存できますが、特定の要件がない限り、他のプロセスを実行しても問題はありません。)
答え3
短い答えは「はい」です。コマンドはシェルの内部コマンドでも外部コマンドでもかまいません。
シェルは単にユーザーインターフェイスであり、(さまざまな標準を無視して)コマンドを内部的に実行するか外部で実行するかはシェルに依存します。たとえば、busybox シェルはほとんどすべての基本コマンドを内部で実装しようとするため、組み込みシステムで唯一必要な実行可能ファイルです。
Bashのマニュアルページを読むと、次のような関数が見つかります。シェル組み込みコマンド内部コマンドを一覧表示します。cd
、など一部のコマンドは、外部で実装されている場合は機能しませんexport
。source
外部コマンド用にリストされているディレクトリを検索します$PATH
。一部のコマンドは内部と外部の両方で使用でき、両方のコマンドは必ずしも同じではありません。
コマンドは例ですpwd
。組み込みバージョンは、現在のディレクトリに関するbashの知識を提供します。ディレクトリへのシンボリックリンクを介して移動すると、外部ディレクトリが機能し、/bin/pwd
他の答えを提供します。cd
技術的には、シェルに組み込まれていない外部コマンドは、端末ではなくシェル自体で実行されます。ただし、シェルや他のシェル以外のコマンドで開始するように端末に明示的に指示できます。