控制台,終端,tty,shell等概念的區別
使用linux已經有一段時間,卻一直弄不明白這幾個概念之間的區別。雖然一直在用,但是很多概念都感覺模糊不清,這樣不上不下的狀態實在令人不爽。下面就澄清一下這些概念。
這些概念本身有著非常濃厚的曆史氣息,隨著時代的發展,他們的含義也在發生改變,它們有些已經失去了最初的含義,但是它們的名字卻被保留了下來。
控制台(Console)
控制台(Console)是物理裝置,用於輸入輸出,它直接連接在電腦上,是電腦系統的一部分。電腦輸出的資訊會顯示在控制台上,例如BIOS的輸出,核心的輸出。
終端(Terminal)
終端(Terminal)也是一台物理裝置,只用於輸入輸出,本身沒有強大的計算能力。一台電腦只有一個控制台,在計算資源緊張的時代,人們想共用一台電腦,可以通過終端串連到電腦上,將指令輸入終端,終端傳送給電腦,電腦完成指令後,將輸出傳送給終端,終端將結果顯示給使用者。
虛擬控制台(Virtual Console),虛擬終端(Virtual Terminal)
虛擬控制台(Virtual Console)和虛擬終端是一樣的。我們只有一台終端(物理裝置),這是我們與電腦之間的使用者介面。假如有一天,我們想擁有多個使用者介面,那麼,一方面我們可以增加終端數目(物理裝置),另一方面,還可以在同一台終端(物理裝置)上虛擬出多個終端,它們之間互相不影響,至少看起來互相不影響。這些終端就是虛擬終端。
在Ubuntu中,我們按下Ctrl+Alt+Fx時,會進入第x個虛擬終端,一共有七個虛擬終端,其中第七個虛擬終端,就是我們預設使用的圖形化使用者介面。
終端模擬器(Terminal Emulator)
我們知道,終端是一種物理裝置,而終端模擬器(Terminal Emulator),是一個程式,這些程式用來類比物理終端。圖形化使用者介面中的終端模擬器一般稱為終端視窗(Terminal Window),我們在Ubuntu下開啟的gnome-terminal就屬於此類。
tty
tty的全稱是TeleTYpewriter,這就是早期的終端(物理裝置),它們用於向電腦發送資料,並將電腦的返回結果列印出來。顯示器出現後,終端不再將結果列印出來,而是顯示在顯示器上。但是tty的名字還是保留了下來。
在Ubuntu中,我們按下Ctrl+Alt+F1時,會進入第1個虛擬終端,你可以看到螢幕上方顯示的tty1。
shell
shell 和之前說的幾個概念截然不同,之前的幾個概念都是與電腦的輸入輸出相關的,而shell是和核心相關的。核心為上層的應用提供了很多服務,shell在核心的上層,在應用程式的下層。例如,你寫了一個 hello world 程式,你並不用顯式地建立一個進程來運行你的程式,你把寫好的程式交給shell就行了,由shell負責為你的程式建立進程。
我們在終端模擬器中輸入命令時,終端模擬器本身並不解釋執行這些命令,它只負責輸入輸出,真正解釋執行這些命令的,是shell。
我們平時使用的sh, bash, csh是shell的不同實現。
sh sh這個概念本身就有岐義,它可以指shell程式的名字,也代表了shell的實現。
Thompson shell是第一個Unix shell,由 Ken Thompso於1971年在Unix第一版本中引入,shell的程式名即為sh。Bourne shell作為Thompson shell的替代,由 Stephen Bourne於1977年在Unix第七版中引入,它的程式名也是sh。Bourne shell不僅僅是一個命令直譯器,更作為一種程式設計語言,提供了Thompson shell不具備的程式控制功能,並隨著 Brian W. Kernighan 和 Rob Pike 的 The UNIX Programming Environment的出版而名聲大噪。
csh csh全稱為 C Shell,由 Bill Joy在70年代晚期完成,那時候他還是加州伯克利大學的研究生。tcsh是csh的升級版。與sh不同,csh的shell指令碼,文法接近於C語言。
bash bash是由 Brian Fox為GNU項目開發的自由軟體,作為Bourne shell的替代品,於1989年發布。是Linux和Mac OS X的預設shell。bash的命令文法是Bourne shell命令文法的超集,從ksh和csh借鑒了一些思想。
好了,就寫到這裡,上面的內容是我參考維基百科後寫下的,不保證完全正確, 下面還提供了一些資料,如果有興趣可以閱讀一下。
擴充閱讀
What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'?
shell,bash,zsh,console,terminal到底是什麼意思,它們之間又是什麼關係?
shell、控制台、終端的區別
Why is a virtual terminal “virtual”, and what/why/where is the “real” terminal?