控制檯,終端,虛擬終端,tty,shell等概念的區別

控制檯,終端,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借鑑了一些思想。

好了,就寫到這裏,上面的內容是我參考維基百科後寫下的,不保證完全正確, 下面還提供了一些資料,如果有興趣可以閱讀一下。

擴展閱讀

  1. What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'?

  2. shell,bash,zsh,console,terminal到底是什麼意思,它們之間又是什麼關係?

  3. shell、控制檯、終端的區別

  4. Why is a virtual terminal “virtual”, and what/why/where is the “real” terminal?


轉載http://blog.csdn.net/on_1y/article/details/20203963

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章