名詞本義
terminal: 終端在電線的末端,
shell: 外殼是烏龜的家,
tty: 是一個奇怪的縮寫,
console: 控制枱是一種機櫃。
嗯,從詞源上來講,就這樣子。
用Unix術語來説,簡短的答案是
- 終端= tty =文本輸入/輸出環境
- 控制枱=物理終端
- shell =命令行解釋器
以下鏈接來自維基百科,可能需要翻牆
控制枱,終端和tty密切相關。早先,他們的意思是一台設備,通過這個設備你可以與計算機交互:在UNIX的早期,這意味着一個電傳式的裝置類似一台打字機,有時也被稱為遠程電傳打字機teletypewriter,或縮寫成“TTY”。“終端”這個名字來自電子科學的角度,從傢俱的角度來看,這個名字是“控制枱”。在Unix歷史的早期,電子鍵盤和顯示器成為終端的規範。
Unix的哲學是一切皆文件
設備也不例外。
用unix術語來説,tty是一種特殊的設備文件,它實現了除讀寫之外的許多其他命令(ioctls)。在其最常見的含義中,terminal是 tty 的同義詞。某些 tty 由內核代表硬件設備提供,例如,輸入來自鍵盤,輸出進入文本模式屏幕,或者輸入和輸出通過串行線路傳輸。其他 tty,有時也稱為 偽tty,是由稱為終端仿真器的程序(通過薄內核層)提供的,例如:
- Xterm在X Window System中運行。
- Screen:在程序和另一個終端之間提供隔離層。
- Ssh:將一台機器上的終端與另一台機器上的程序連接起來。
- Expect:用於腳本化終端交互。
終端一詞更傳統的含義也可以指一種設備的,通過該設備人們可以與計算機(通常是鍵盤和顯示器)進行交互。例如,X終端是一種瘦客户機,是一種專用計算機,其唯一目的是驅動鍵盤,顯示器,鼠標以及偶爾的其他人機交互外圍設備,而實際應用程序則在另一台功能更強大的計算機上運行。
而控制枱一般是在物理意義上的,某種意義上來説是直接連接到主機的終端。控制枱在操作系統中顯示為(內核實現的)tty。在某些系統上,例如 Linux 和 FreeBSD,控制枱顯示為多個 tty(特殊的組合鍵在這些 tty 之間切換)。為了把事搞混搞亂,給每個特定 tty 賦予的名稱可以是“控制枱”,“虛擬控制枱”,“虛擬終端”和其他變體。
另請參見為什麼虛擬終端是“虛擬的”,以及“真正的”終端在什麼/為什麼/在哪裏?。
Shell
一個殼是主界面,用户登錄時看到的,其主要目的是啓動其他程序。(我不知道最初的隱喻是 shell 是用户的家庭環境(home eviroment),還是該shelln是其他程序在其中運行的保護殼。)
在unix圈子中,shell專門指命令行外殼,以輸入要啓動的應用程序的名稱為中心,然後輸入應用程序應作用的文件或其他對象的名稱,然後按Enter 鍵。其他類型的環境不使用“外殼”一詞;例如,“窗口管理器”和“桌面環境”,而不是“外殼”。
有許多不同的unix shell。交互式使用的流行shell包括:
- Bash :大多數Linux安裝中的默認設置,
- zsh: 強調功能和可定製性,
- fish: 強調簡單性。
命令行外殼包含用於組合命令的流控制結構。除了在交互式提示下鍵入命令外,用户還可以編寫腳本。最常見的shell具有基於Bourne_shell的通用語法。在討論“ shell編程”時,幾乎總是將shell暗示為Bourne風格的shell。一些經常用於腳本編寫但缺少高級交互功能的外殼包括Korn外殼(ksh)和許多ash變體。幾乎所有類似Unix的系統都有Bourne風格的shell安裝為/bin/sh,通常是ash,ksh或bash。
在unix系統管理中,用户的外殼程序是他們登錄時調用的程序。普通用户帳户具有命令行外殼程序,但是訪問受限的用户可能具有受限的外殼程序或某些其他特定命令(例如,用於文件傳輸 - 僅帳户)。
Terminal 和 Shell 之間的分工並不完全明顯。下面他們的主要作用:
- 輸入:終端將按鍵轉換為控制序列(例如Left→
e[D)。Shell將控制序列轉換為命令(例如e[D→backward-char)。 -
Shell提供了行編輯,輸入歷史記錄和輔助完成輸入功能。
- 終端可以改為提供自己的行編輯,歷史記錄和完成輸入功能,並且僅在準備好執行時才將行發送到shell。以這種方式運行的唯一普通終端
M-x shell在Emacs中。
- 終端可以改為提供自己的行編輯,歷史記錄和完成輸入功能,並且僅在準備好執行時才將行發送到shell。以這種方式運行的唯一普通終端
- 輸出:外殼程序發出諸如“顯示
foo”,“將前景色切換為綠色”,“將光標移至下一行”之類的指令。終端根據這些指令進行操作。 - 提示(prompt)純粹是一個外殼概念。
- Shell 永遠不會看到它運行的命令的輸出(除非重定向)。輸出歷史記錄(回滾)純粹是終端概念。
- 終端提供應用程序間的複製粘貼(通常使用鼠標或鍵序列,例如Ctrl+ Shift+V或Shift+ Insert)。外殼也可以具有自己的內部複製粘貼機制(例如Meta+W和Ctrl+ Y)。
- 作業控制(在後台啓動程序並進行管理)主要由外殼執行。但是,它是由終端處理諸如Ctrl+C的組合鍵來殺死前台作業和Ctrl+Z使其暫停。
參考