終端與控制台的區別?
最近開始接觸Linux,終端、虛擬終端、shell、控制台、tty等概念讓我很混亂,有必要認識清楚。
今天看到有人問終端和控制台的區別,而且這個問題比較有普遍性,因此想抽出一點時間來解釋一下這兩個術語的區別。
終端,英文叫做terminal ,通常簡稱為term ,比如我們在X下的xterm.
控制台,英文叫做console.
要明白這兩者的關系,還得從以前的多人使用的計算機開始。
大家都知道,最初的計算機由於價格昂貴,因此,一台計算機一般是由多個人同時使用的。
在這種情況下一台計算機需要連接上許多套鍵盤和顯示器來供多個人使用。
在以前專門有這種可以連上一台電腦的設備,只有顯示器和鍵盤,還有簡單的處理電路,本身不具有處理計算機信息的能力,他是負責連接到一台正常的計算 機上(通常是通過串口) ,然后登陸計算機,並對該計算機進行操作。當然,那時候的計算機操作系統都是多任務多用戶的操作系統。這樣一台只有顯示器和鍵盤能夠通過串口連接到計算機 的設備就叫做終端。
而控制台又是什么回事呢?
學機電的人應該知道,一台機床,或者數控設備的控制箱,通常會被稱為控制台,顧名思義,控制台就是一個直接控制設備的台面(一個面板,上面有很多控制按鈕)。 在計算機里,把那套直接連接在電腦上的鍵盤和顯示器就叫做控制台。
請注意它和終端的區別,終端是通過串口連接上的,不是計算機本身就有的設備,而控制台是 計算機本身就有的設備,一個計算機只有一個控制台。
計算機啟動的時候,所有的信息都會顯示到控制台上,而不會顯示到終端上。也就是說,控制台是計算機的基 本設備,而終端是附加設備。
當然,由於控制台也有終端一樣的功能,控制台有時候也被模糊的統稱為終端。
計算機操作系統中,與終端不相關的信息,比如內核消息,后台服務消息,都可以顯示到控制台上,但不會顯示到終端上。
以上是控制台和終端的歷史遺留區別。
現在由於計算機硬件越來越便宜,通常都是一個人獨占一台計算機超做,不再連接以前那種真正意義上的“終端設備了”,因此,終端和控制台的概念也慢慢演化了。終端和控制台由硬件的概念,演化成了軟件的概念。
現在說的終端,比如linux中的虛擬終端,都是軟件的概念,他用計算機的軟件來模擬以前硬件的方式。
比如在linux中,用 alt+f1~f6 可以切換六個虛擬終端,就好比是以前多人公用的計算機中的六個終端設備,這就是為什么這叫“虛擬終端”的原因。
當然,現在的linux也可以通過串口 線,連接一個真正的終端,現在這種終端設備已經非常罕見了,但是還存在,只是一般人很難見到。也有人利用以前的老電腦(386,486)裝上一個串口通信 軟件,連上一台計算機,來模擬一個終端來用。這樣可以達到一台電腦多人使用的目的。
簡單的說,能直接顯示系統消息的那個終端稱為控制台,其他的則稱為終端。
但是在linux系統中,這個概念也已經模糊化了。
比如下面這條命令:echo "hello,world" > /dev/console 這條命令的目的是將"hello,world"顯示到控制台上/dev/console是控制台設備的設備名。
在linux中,在字符模式下,你無論在哪個虛擬終端下執行這條命令,字符hello,world都會顯示在當前的虛擬終端下。也就是說,linux把當前的終端當作控制台來看待。
可見,linux中已經完全淡化了控制台和終端的區別。
但是在其他的UNIX類系統中,卻很明顯的有虛擬終端和控制台的區別。比如 freeBSD系統。
在freebsd中,只有第一個“終端”才是真正的控制台。(就是說按alt+f1得到的那個虛擬終端) ,你無論在哪個虛擬終端上執行上面的那條命令(哪怕是通過網絡連接的偽終端上執行這條命令)。hello,world字符總會顯示到第一個“終端”也就是 真正的控制台上。
另外,其他的一些系統內部信息,比如哪個用戶在哪個終端登陸,系統有何嚴重錯誤警告等信息,全都顯示在這個真正的控制台上。在這里,就明顯的區分了終端和控制台的概念。
其他UNIX中也是這樣的。比如Tru64 unix 在X下有一個控制台模擬軟件,你無論在哪里輸入echo "hello,world" > /dev/console命令,hello,world總會顯示在這個控制台模擬器中。
我們在X界面下用的那些輸入命令的軟件,比如xterm ,rxvt, gnome-terminal等等,都應該被稱為終端模擬軟件。請注意它和控制台模擬軟件的區別。
linux中好象沒有控制台模擬軟件。在X中的終端模擬軟件中輸入的echo "hello,world">/dev/console 命令的輸出信息,都會輸出到啟動該X服務器的虛擬終端上。比如,你用字符方式登陸系統。進入第一個虛擬終端,然后startx啟動X服務器。再打開 xterm 來輸入echo"hello,world">/dev/console 命令,那么字符串hello,world就顯示在第一個虛擬終端上。你按ctrl+alt+f1,回到那個啟動X服務器的終端,就可以看到hello, world字符串。
現在該明白終端和控制台的區別了吧。
再簡單的說,控制台是直接和計算機相連接的原生設備,終端是通過電纜、網絡等等和主機連接的設備。
在以前的硬件終端設備中,由於生產廠家不同,所遵循的標准不同,因此有不同的型號標准。比如vt100等。這里的vt100就是一個標准,那么現在我們所說的終端,往往不是真正的硬件終端了,而是終端模擬軟件了,因此不同的終端模擬軟件可能符合不同的標准,還有一些終端模擬軟件符合很多種不同終端的標准。比如gnome的終端模擬軟件gnome-terminal,他提供好幾中標准可供用戶選擇。用戶只要設置一下就可以了。
現在,由於原先的這些設備在我們的視線中漸漸淡出,控制台和終端的概念也慢慢談化。
普通用戶可以簡單的把終端和控制台理解為:可以輸入命令行並顯示程序運行過程中的信息以及程序運行結果的窗口。不必要嚴格區分這兩者的差別。
——by:http://blog.csdn.net/caomiao2006/article/details/8791775
******************************************************************華麗分割線********************************************************
從歷史角度看,終端剛開始就是終端機,配有打印機,鍵盤,帶有一個串口,通過串口傳送數據到主機端,然后主機處理完交給終端打印出來。
那么現在終端也就是鍵盤+顯示器。但是不同的設備可能協議不同,要操作系統怎么識別呢?簡單。就像linux 的虛擬文件系統一樣,抽象出一層就可以了。
tty層橫空出世,tty的一邊是操作系統,一邊是不同的設備驅動。大家知道,在linux下所有的設備都是文件,那么假設我們要打印到顯示器,只要write到顯示器對應的tty層的文件,然后它自己去匹配合適的驅動,這部分就不是系統考慮的問題了。
現在的終端還是實體(也就是有實際的硬件),只不過由tty層做了邏輯抽象。
但是隨着互聯網的興起,人們有了遠程使用計算機的要求,於是終端仿真系統誕生了。把本地PC當成是一個終端,遠程的計算機當成是主機。由軟件模擬硬件終端的工作過程(無非就是編碼格式,電位等等,設計組成原理等)。比如現在嵌入式開發,不就是把個人PC當作輸入輸出工具,由開發板做主機么?
現在的個人計算機常常被仿真成一個終端與主機相連(雖然沒讓我發現有什么優點,也許是為了本地用戶和遠程用戶的同等地位?)
人們用終端仿真技術開發了各種的虛擬終端,偽終端等等。相當於PC不在邏輯上處理數據,只是按照行業標准,進行數據傳輸(應該有編碼過程?)和接受顯示(解碼?)
此時此刻,終端已經不是狹義的硬件了,它更多的被理解為模擬硬件的軟件。
現在說說tty。之前提到了,抽象為了tty層。為什么叫tty呢?
Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱讀和發送信息的東西,和古老的電報機區別並不是很大。最終,電傳打字機被鍵盤和顯示器終端(這里時硬件)所取代,但在終端或TTY接插的地方,操作系統仍然需要一個程序來監視串行窗口。一個getty“Get TTY”的處理過程是:一個程序監視物理的TTY/終端接口。
從上面百度百科的定義,可以知道,后來getty就是一個見識TTY/終端的接口,那么這個將操作系統內核和終端連接的層叫什么名字也就呼之欲出了。
——by:http://blog.chinaunix.net/uid-28596231-id-3516101.html
終端特殊設備文件有哪些?
1.串行端口終端(/dev/ttySn)
串行端口終端(Serial Port Terminal)是使用計算機串行端口連接的終端設備。計算機把每個串行端口都看作是一個字符設備。有段時間這些串行端口設備通常被稱為終端設備,因為那時它的最大用途就是用來連接終端。這些串行端口所對應的設備名稱是/dev/tts/0(或/dev/ttyS0),/dev/tts/1(或/dev/ttyS1)等,設備號分別是(4,0),(4,1)等,分別對應於DOS系統下的COM1、COM2等。若要向一個端口發送數據,可以在命令行上把標准輸出重定向到這些特殊文件名上即可。例如,在命令行提示符下鍵入:echo test > /dev/ttyS1會把單詞”test”發送到連接在ttyS1(COM2)端口的設備上
2.偽終端(/dev/pty/)
3.控制終端(/dev/tty)
如果當前進程有控制終端(Controlling Terminal)的話,那么/dev/tty就是當前進程的控制終端的設備特殊文件。可以使用命令”ps –ax”來查看進程與哪個控制終端相連。對於你登錄的shell,/dev/tty就是你使用的終端,設備號是(5,0)。使用命令”tty”可以查看它具體對應哪個實際終端設備。/dev/tty有些類似於到實際所使用終端設備的一個聯接。
4.控制台(/dev/ttyn, /dev/console)
在Linux 系統中,計算機顯示器通常被稱為控制台終端(Console)。它仿真了類型為Linux的一種終端(TERM=Linux),並且有一些設備特殊文件與之相關聯:tty0、tty1、tty2 等。當你在控制台上登錄時,使用的是tty1。使用Alt+[F1—F6]組合鍵時,我們就可以切換到tty2、tty3等上面去。tty1–tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的一個別名,系統所產生的信息會發送到該終端上(這時也叫控制台終端)。因此不管當前正在使用哪個虛擬終端,系統信息都會發送到控制台終端上。/dev/console即控制台,是與操作系統交互的設備,系統將一些信息直接輸出到控制台上。只有在單用戶模式下,才允許用戶登錄控制台。
5.虛擬終端
在Xwindow模式下的偽終端.如在Kubuntu下用konsole,就是用的虛擬終端,用tty命令可看到/dev/pts/name,name為當前用戶名。
6.其他類型
——by:百度百科
**************************************************************華麗分割線************************************************************
shell(計算機殼層)


