私は常識を得て、最新のLinuxアーキテクチャをよりよく理解するために、次の質問をします。この質問の背景は今回の会議。
rbash、bash、dash、shなどのすべてのシェルを削除しても、非常に簡単な操作のために基本/基本CLUI(コマンドラインユーザーインターフェイス)を使用し、最小限の方法でカーネルと対話できるとします。 。もちろん、最新のLinuxシステムの場合一般的に言えば、コンソールはシェルのログインスクリプトによってのみ起動されるため、間違っていました。したがって、すべてのシェルを削除すると、ログインスクリプトも削除されます。
しかし、そのログインスクリプトをシェルの外に移動してカーネルの一部にする場合はどうなりますか?それでは、まだデフォルト/メインコンソールを使用できますか?
答え1
デフォルトでは、シェルの下にはTTYがあります。いわゆるCLUIを構成するわけではありません。ターミナルインタフェース(テキスト入力と出力)はTTYで実装され、コマンド処理はシェルで処理されます。
DOSでは、これはバッチコマンドプロセッサプロンプトの.bat(ch)ファイルと似ています。 Linuxでは、シェルは組み込み制御構造も含む小さなプログラミング言語です。
この「ログイン」スクリプトは、実際にはVFSがロードされた後にカーネルによって自動的にロードされるinitプログラムです(initはinitramにマージされるかハードファイルシステムにアクセスできるまで待つことができます)、ttyがロードされる前に実行されます。実際、initプログラムはTTYを設定してからサービスをロードする必要があります。 sysvinitはインタプリタシェルをロードしてからinitスクリプトを使用しますが、systemdはINIを使用します(ユニットを呼び出す設定ファイルに似ています)。実際には、起動またはログインプロセス中にシェルスクリプトはまったく必要ありませんが、execは必要です。
TTYはカーネルに組み込まれていますが、ユーザーは対話できません。ログインなどのいくつかのコマンドはTTYを介してユーザーと対話しますが、技術的にはコマンドプロセッサやシェルではありません。技術的には、システムと対話する最小の方法であるルーターのリセットボタンなどの他の基本的な例もあります。ただし、TTYに接続されているすべてのプログラムは、TTYコマンドとプロセスコマンドから標準入力と出力を取得できます。
システムと意味のある対話にはシェルが必要であることを無視し、カーネルと対話する最も基本的な方法はシステム呼び出しを介することであり、メッセージを渡す最も基本的な方法はコマンド引数が渡される方法であるexecです。