“終端”、“外殼”、“tty”和“控制台”之間的確切區別是什麼?
我認為這些術語在鬆散使用時幾乎指的是同一件事:
- 終端
- 貝殼
- tty
- 安慰
這些術語具體指的是什麼?
終端是電線的末端,貝殼是烏龜的家,tty 是一個奇怪的縮寫,控制台是一種櫃子。
好吧,無論如何,從詞源上講。
在 unix 術語中,簡短的回答是
- 終端 = tty = 文本輸入/輸出環境
- 控制台=物理終端
- shell = 命令行解釋器
控制台、終端和 tty 密切相關。最初,它們是指一種可以與電腦互動的設備:在 unix 的早期,這意味著一種類似於打字機的電傳列印機式設備,有時也稱為電傳打字機,或簡稱為“tty”。“終端”這個名字來自電子的角度,而“控制台”這個名字來自家具的角度。在 unix 歷史的早期,電子鍵盤和顯示器成為終端的標準。
在 unix 術語中,tty是一種特殊類型的設備文件,它實現了除讀寫之外的許多附加命令 ( ioctls )。在其最常見的含義中,終端是 tty 的同義詞。一些 tty 由核心代表硬體設備提供,例如來自鍵盤的輸入和輸出到文本模式螢幕,或通過串列線路傳輸的輸入和輸出。其他 tty,有時稱為偽 tty ,由稱為終端仿真器的程序(通過薄核心層)提供,例如Xterm(在X Window System中執行)、Screen(在程序和另一個終端之間提供一層隔離)、SSH(將一台機器上的終端與另一台機器上的程序連接起來)、Expect(用於編寫終端互動腳本)等。
終端一詞也可以具有更傳統的含義,即人們通過它與電腦互動的設備,通常與鍵盤和顯示器互動。例如,X 終端是一種瘦客戶端,一種專用電腦,其唯一目的是驅動鍵盤、顯示器、滑鼠和偶爾的其他人機互動外圍設備,實際應用程序執行在另一台功能更強大的電腦上。
控制台通常是物理意義上的終端,根據某種定義,它是直接連接到機器的主要終端。控制台對作業系統顯示為(核心實現的)tty。在某些系統上,例如 Linux 和 FreeBSD,控制台顯示為多個 tty(特殊組合鍵在這些 tty 之間切換);只是為了混淆問題,給每個特定 tty 的名稱可以是“控制台”、“虛擬控制台”、“虛擬終端”和其他變體。
另請參閱為什麼虛擬終端是“虛擬的”,以及“真實”終端是什麼/為什麼/在哪裡?.
shell是使用者登錄時看到的主要界面,其主要目的是啟動其他程序。(不知道原來的比喻是shell是使用者的家庭環境,還是shell是其他程序執行的地方。)
在 unix 圈子中,shell專門表示命令行 shell,其中心是輸入要啟動的應用程序的名稱,然後是應用程序應該操作的文件或其他對象的名稱,然後按 Enter 鍵。其他類型的環境不使用“shell”這個詞;例如,視窗系統涉及“視窗管理器”和“桌面環境”,而不是“外殼”。
有許多不同的 unix shell。用於互動使用的流行 shell 包括Bash(大多數 Linux 安裝的預設設置)、zsh(強調功能和可定制性)和fish(強調簡單性)。
命令行 shell 包括用於組合命令的流控制結構。除了在互動式提示符下鍵入命令外,使用者還可以編寫腳本。最常見的 shell 具有基於Bourne_shell的通用語法。在討論“ shell 程式”時,shell 幾乎總是暗示為 Bourne 風格的 shell。一些經常用於編寫腳本但缺乏高級互動功能的 shell 包括 Korn shell (ksh)和許多ash變體。幾乎任何類 Unix 系統都安裝了 Bourne 風格的 shell
/bin/sh
,通常是 ash、ksh 或 bash。在 unix 系統管理中,使用者的shell是他們登錄時呼叫的程序。普通使用者帳戶有一個命令行 shell,但訪問受限的使用者可能有一個受限的 shell或一些其他特定命令(例如,用於文件傳輸- 僅限帳戶)。
終端和外殼之間的分工並不完全明顯。這是他們的主要任務。
輸入:終端將按鍵轉換為控制序列(例如
Left
→\e[D
)。Shell 將控制序列轉換為命令(例如\e[D
→backward-char
)。行編輯、輸入歷史和完成由 shell 提供。
- 終端可能會提供自己的行編輯、歷史記錄和完成功能,並且僅在準備好執行時才向 shell 發送一行。以這種方式執行的唯一通用終端是
M-x shell
在 Emacs 中。輸出:shell 發出諸如“顯示
foo
”、“將前景色切換為綠色”、“將游標移動到下一行”等指令。終端根據這些指令進行操作。提示純粹是一個 shell 概念。
shell 永遠不會看到它執行的命令的輸出(除非重定向)。輸出歷史(回滾)純粹是一個終端概念。
應用程序間複製粘貼由終端提供(通常使用滑鼠或按鍵序列,例如
Ctrl
+Shift
+V
或Shift
+Insert
)。shell 也可能有它自己的內部複製粘貼機制(例如Meta
+W
和Ctrl
+Y
)。作業控制(在後台啟動程序並管理它們)主要由 shell 執行。但是,它是處理組合鍵的終端,例如
Ctrl
+來終止C
前台作業和Ctrl
+Z
來暫停它。