私はLinuxのさまざまなコンポーネントとそれらがどのように連携するのかを理解しようとしていますが、用語に関する質問があります。端末は通常 Bash というシェルを実行します。ターミナルでLinuxコマンド(ls、mkdir、cpなど)を実行することもできます。しかし、私はすべてのLinuxコマンドがbash(またはシェル)の一部ではないことに気づきました。これは、端末が単にシェルを実行しないことを意味しますか?
ベストアンサー1
端末は何も実行しません。ただユーザーインターフェイスです。あるいは、オペレーティングシステムで実行されているプロセスの場合read()
とシステムコールを使用してwrite()
読み書きできる特別な種類の「ファイル」です。 (いくつかの端末固有の特殊機能もあります。)
たとえば、SSHを介してログインすると、SSHサーバーはシェルを起動し、端末(デバイスノードを表す)に接続されたファイル記述子を提供します。 GUIを介してログインして端末エミュレータを起動すると、ほぼ同じことが起こります。 SSHサーバーをターミナルエミュレータに置き換えることができます。
どちらの方向に行くと、シェルは端末にプロンプトを印刷し、端末からコマンドを読み取ることができ、端末にアクセスできる外部プログラム(またはls
その他)を起動できるようになりました。git
あるいは、組み込みコマンドを同様に実行することもできます(read
、、echo
)。
(非対話型シェルセッションを実行することもできます。シェルスクリプトを実行することは、ターミナルではなくファイルからシェルへの入力を受け取るという点でほぼ同じです。シェルが起動するとConnectでも入力を受け取ります。ターミナルなどで)。
一般的な汎用システムで実行されるほとんどのコマンドは、シェルに組み込まれておらず、外部プログラムです。 Busyboxを搭載した一部の組み込みシステムでは、一般的なものがBusybox自体内に実装される可能性が高くなります。ただし、それでもシステムが実行する必要があるすべての作業を実際に実行する外部アプリケーションがある可能性があります。それはPythonやLuaのインタプリタだけです。