終端、虛擬終端、shell、控制檯、tty的區別

原文鏈接:https://blog.csdn.net/ltx06/article/details/52170852

今天看到有人問終端和控制檯的區別,而且這個問題比較有普遍性,因此想抽出一點時間來解釋一下這兩個術語的區別。  

終端,英文叫做 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


tty 也是一個 Unix 命令,用來給出當前終端設備的名稱。
終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。
在 Linux 系統的設備特殊文件目錄 /dev/ 下,終端特殊設備文件一般有以下幾種:
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/)

僞終端(Pseudo Terminal)是成對的邏輯終端設備(即master和slave設備,對master的操作會反映到slave上)。
例如 /dev/ptyp3 和 /dev/ttyp3(或者在設備文件系統中分別是/dev/pty /m3和 /dev/pty/s3)。它們與實際物理設備並不直接相關。如果一個程序把 ptyp3(master設備)看作是一個串行端口設備,則它對該端口的讀/ 寫操作會反映在該邏輯終端設備對應的另一個 ttyp3 (slave 設備)上面。而 ttyp3 則是另一個程序用於讀寫操作的邏輯設備。telnet 主機 A 就是通過“僞終端”與主機 A 的登錄程序進行通信。
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.其他類型

Linux 系統中還針對很多不同的字符設備存在有很多其它種類的終端設備特殊文件。例如針對 ISDN 設備的 /dev/ttyIn 終端設備等。
tty 設備包括虛擬控制檯,串口以及僞終端設備。
/dev/tty 代表當前 tty 設備,在當前的終端中輸入 echo “hello” > /dev/tty ,都會直接顯示在當前的終端中。

Text Telephones (TTY)
聾啞人電話,在手機插入專用設備後支持收發文本,需網絡支持,中國網絡不支持TTY.
除聾啞模式外,還支持只聽不說(HCO)和只說不聽(VCO)兩種模式
——by:百度百科

**************************************************************華麗分割線************************************************************


shell   (計算機殼層)
在計算機科學中,Shell俗稱殼(用來區別於核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似於DOS 下的command 和後來的 cmd.exe。它接收用戶命令,然後調用相應的應用程序。


同時它又是一種程序設計語言。作爲命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作爲程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
 PS:在排序算法中,Shell 是希爾排序的名稱。
基本上 shell 分兩大類:
一:圖形界面 shell(Graphical User Interface shell 即 GUI shell)

例如:應用最爲廣泛的 Windows Explorer (微軟的 windows 系列操作系統),還有也包括廣爲人知的 Linux shell,其中linuxshell 包括 X window manager (BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 XFCE。
二:命令行式 shell(Command Line Interface shell ,即 CLI shell)
例如:
bash / sh / ksh / csh(Unix/linux 系統)
(MS-DOS系統)
cmd.exe/ 命令提示字符(Windows NT 系統)
Windows PowerShell(支援 .NET Framework 技術的 Windows NT 系統)
傳統意義上的 shell 指的是命令行式的 shell,以後如果不特別註明,shell 是指命令行式的 shell。
文字操作系統與外部最主要的接口就叫做 shell。shell 是操作系統最外面的一層。shell 管理你與操作系統之間的交互:等待你輸入,向操作系統解釋你的輸入,並且處理各種各樣的操作系統的輸出結果。
shell 提供了你與操作系統之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,並且可以立即得到響應),或者以 shell script (非交互)方式執行。shell script 是放在文件中的一串 shell 和操作系統命令,它們可以被重複使用。本質上,shell script 是命令行命令簡單的組合到一個文件裏面。
Shell 基本上是一個命令解釋器,類似於 DOS 下的 command。它接收用戶命令(如 ls 等),然後調用相應的應用程序。較爲通用的 shell 有標準的 Bourne shell (sh)和 C shell (csh)。
交互式 shell 和非交互式 shell
交互式模式就是 shell 等待你的輸入,並且執行你提交的命令。這種模式被稱作交互式是因爲 shell 與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退後,shell 也終止了。
shell也可以運行在另外一種模式:非交互式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾,shell也就終止了。
shell 的類型
在 UNIX 中主要有:
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
Bourne Shell
首個重要的標準 Unix Shell 是 1970 年底在 V7 Unix (AT&T 第 7 版)中引入的,並且以它的創始科技部基礎條件平臺“國家氣象網絡計算應用節點建設”(2004DKA50730)資助者 Stephen Bourne 的名字命名。Bourne shell 是一個交換式的命令解釋器和命令編程語言。Bourne shell 可以運行爲login shell 或者 login shell 的子 shell(subshell)。只有 login 命令可以調用 Bourne shell 作爲一個 login shell。此時,shell 先讀取 /etc/profile 文件和 $HOME/.profile 文件。/etc/profile 文件爲所有的用戶定製環境,$HOME/.profile 文件爲本用戶定製環境。最後,shell會等待讀取你的輸入。
C Shell
Bill Joy 於20世紀80年代早期,在伯克利的加利福尼亞大學開發了 C shell。它主要是爲了讓用戶更容易的使用交互式功能,並把ALGOL 風格的語法結構變成了C語言風格。它新增了命令歷史、別名、文件名替換、作業控制等功能。
Korn Shell
有很長一段時間,只有兩類 shell 供人們選擇,Bourne shell 用來編程,C shell 用來交互。爲了改變這種狀況,AT&T 的 bel l實驗室David Korn開發了 Korn shell。ksh 結合了所有的 C shell 的交互式特性,並融入了 Bourne shell 的語法。因此,Korn shell廣受用戶的歡迎。它還新增了數學計算,進程協作(coprocess)、行內編輯(inline editing)等功能。Korn Shell 是一個交互式的命令解釋器和命令編程語言.它符合 POSIX——一個操作系統的國際標準.POSIX不是一個操作系統,而是一個目標在於應用程序的移植性的標準——在源程序一級跨越多種平臺。
Bourne Again Shell (bash)
bash 是 GNU 計劃的一部分,用來替代 Bourne shell。它用於基於 GNU 的系統如 Linux.大多數的 Linux(Red Hat,Slackware,Caldera)都以 bash 作爲缺省的 shell,並且運行 sh 時,其實調用的是 bash。
POSIX Shell
POSIX shell 是Korn shell的一個變種. 當前提供POSIX shell的最大賣主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
各主要操作系統下缺省的shell:
AIX下是Korn Shell.
Solaris缺省的是Bourne shell.
FreeBSD缺省的是C shell
HP-UX缺省的是POSIX shell.
Linux是 Bourne Again shell.(即bash)
Windows PowerShell是一種新的交互式的命令行和基於任務腳本編寫技術,它使信息技術(IT) 管理員能夠全面地自動操作和控制系統管理任務,從而提高了管理員的生產力。Windows PowerShell 包括多個系統管理實用工具、一致的語法和命名慣例、及對普通管理數據更好地導航,如登記、證書存儲 或 Windows Management Instrumentation (WMI)。Windows PowerShell 還專門針對 IT 管理,提供直觀的腳本編寫語言。
Shell也是一個VB函數,它的作用是運行程序,語法是Shell(命令字符串[,窗口類型])            ——by:百度百科
++++++++++++++++++++++++++++++++++++++++++++++++++++華麗分割線++++++++++++++++++++++++++++++++++++++++++++++++++++++
我們在終端模擬器中輸入命令時,終端模擬器本身並不解釋執行這些命令,它只負責輸入輸出,真正解釋執行這些命令的,是shell。

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