是否存在登錄腳本不屬於 shell 的 Linux 系統?
我問以下問題是為了獲得一般知識並更好地理解現代 Linux 架構。這個問題的背景是本屆會議。
我假設如果刪除所有 shell,例如(rbash、bash、dash 和 sh),它仍然可以有一些原始/基本 CLUI(命令行使用者界面)用於一些非常簡單的任務並與核心互動最小的方式。當然,對於**一般的現代 Linux 系統,**我錯了,因為控制台只會由 shell 中的登錄腳本啟動,因此,刪除所有 shell 也會刪除該登錄腳本。
但是如果我們把登錄腳本移到 shell 之外,讓它成為核心的一部分呢?那麼我們還能使用一些原始/基本的控制台嗎?
從根本上說,在外殼下面是一個 TTY。雖然它不構成你可以稱之為 CLUI 的東西。終端介面(文本輸入和輸出)在 TTY 中實現,而命令處理由 shell 處理。
在 DOS 中,這更像是批處理命令處理器提示 .bat(ch) 文件。而在 Linux 中,shell 是一種迷你程式語言,其中還包括內置的控制結構。
該“登錄”腳本實際上是核心在載入其 VFS 後自動載入的 init 程序(init 可以合併到 initram 中或等到硬文件系統可訪問)並在載入 ttys 之前執行。事實上,init 程序必須設置 TTY,然後載入服務。sysvinit 載入解釋器 shell,然後使用 init 腳本,而 systemd 使用類似 INI 的配置文件,它呼叫單元。在引導過程或登錄過程中實際上根本不需要 shell 腳本,但 exec 是。
TTY 內置在核心中,但不能與使用者互動。一些命令(例如登錄)通過 TTY 與使用者互動,但在技術上不是命令處理器或 shell。存在其他基本範例,例如路由器上的重置按鈕在技術上是與系統互動的最小方式。但是任何附加到 TTY 的程序都可以從 TTY 獲取標準輸入和輸出並處理命令。
忽略你確實需要一個 shell 來與系統進行有意義的互動這一事實,你與核心互動的最基本方式是通過系統呼叫,而傳遞消息的最基本方式是 exec,它是傳遞命令參數的方式。