linux下tty,控制檯,虛擬終端,串口,console(控制檯終端)詳解

轉載:http://blog.csdn.net/liaoxinmeng/article/details/5004743

首先:

1. 終端和控制檯都不是個人電腦的概念,而是多人共用的小型中型大型計算機上的概念.
一臺主機,連很多終端,終端爲主機提供了人機接口,每個人都通過終端使用主機的資源. 終端有字符啞終端和圖形終端兩種.
控制檯是另一種人機接口, 不通過終端與主機相連, 而是通過顯示卡-顯示器和鍵盤接口分別與主機相連, 這是人控制主機的第一人機接口.
話回到個人計算機上,個人計算機只有控制檯,沒有終端. 當然願意的話, 可以在串口上連一兩臺字符啞終端. 但是linux偏要按POSIX標準把個人計算機當成小型機來用,
那麼就在控制檯上通過getty軟件虛擬了六個字符啞終端(或者叫控制檯終端tty1-tty6)(數量可以在/etc/inittab裏自己調)和一個圖型終端, 在虛擬圖形終端中又可以通過軟件(如rxvt)再虛擬無限多個虛擬字符啞終端(pts/0....). 記住,這全是虛擬的,用起來一樣,但實際上並不是.
所以在個人計算機上,只有一個實際的控制檯,沒有終端,所有終端都是在控制檯上用軟件模擬的.
要把個人計算機當主機再通過串口或網卡外連真正的物理終端也可以,但由於真正的物理終端並不比個人計算機本身便宜,一般沒有人這麼做.

 

2.如同其他UNIX類系統,Linux本身也是基於命令行的。試試“Ctrl”+“Alt”+“Fx”。這就是控制檯,算是Linux的本來面目。至於使用方法,除了多出登錄註銷外,其它操作和我們在linux圖形界面(X—window)下的終端操作是一樣的,在X-Window出問題或不運行X-Window的時候,操作主要在這裏完成。
  Linux在控制檯下提供了不止一個(字符啞)終端,支持多用戶同時登錄,包括在本機同時登錄。控制檯“Alt”+“Fx”能夠切換到第x個(字符啞)終端。如果需要從X-Window裏跳到第(字符啞)終端,需要“Ctrl”+“Alt”+“Fx”。一般情況下如果要從控制檯返回Xwindow可用““Alt”+7”來返回到Xwind的圖形界面。(Linux發行版提供7個虛擬屏幕,1~6號是控制檯終端((字符啞)終端),第7個上面跑X-Window。)

 

3.控制終端(/dev/tty) 這是個在應用程序中的一個概念,前臺進程有個控制終端,就對應這個。不過它並不指任何物理意義上的終端,其實/dev/tty會映射到當前的設備(通過tty命令可以看到),比如你如果在控制檯界面下(即字符界面下)那麼dev/tty就是映射到dev/tty1-6之間的一個(取決於你當前的控制檯號),但是如果你現在是在圖形界面(Xwindows),那麼你會發現現在的/dev/tty映射到的是/dev/pts的僞終端上。比如你可以輸入命令 #tty 那麼將顯示當前映射終端如:/dev/tty1或者/dev/pts/0等。

 

4.僞終端(/dev/pty/)這個是終端的發展,爲滿足現在需求(比如網絡登陸、xwindow窗口的管理)。

僞終端(Pseudo Terminal)是成對的邏輯終端設備,例如/dev/ptyp3和/dev/ttyp3(或着在設備文件系統中分 
別是/dev/pty/m3和/dev/pty/s3)。它們與實際物理設備並不直接相關。如果一個程序把ttyp3看作是一個串 
行端口設備,則它對該端口的讀/寫操作會反映在該邏輯終端設備對的另一個上面(ttyp3)。而ttyp3則是 
另一個程序用於讀寫操作的邏輯設備。這樣,兩個程序就可以通過這種邏輯設備進行互相交流,而其中 
一個使用ttyp3的程序則認爲自己正在與一個串行端口進行通信。這很象是邏輯設備對之間的管道操作。 
對於ttyp3(s3),任何設計成使用一個串行端口設備的程序都可以使用該邏輯設備。但對於使用ptyp3的 
程序,則需要專門設計來使用ptyp3(m3)邏輯設備。 
例如,如果某人在網上使用telnet程序連接到你的計算機上,則telnet程序就可能會開始連接到設 
備ptyp2(m2)上(一個僞終端端口上)。此時一個getty程序就應該運行在對應的ttyp2(s2)端口上。當telnet從 
遠端獲取了一個字符時,該字符就會通過m2、s2傳遞給getty程序,而getty程序就會通過s2、m2和telnet程序 
往網絡上返回”login:”字符串信息。這樣,登錄程序與telnet程序就通過“僞終端”進行通信。通過使用適當的 
軟件,就可以把兩個甚至多個僞終端設備連接到同一個物理串行端口上。 
在使用設備文件系統(device filesystem)之前,爲了得到大量的僞終端設備特殊文件,HP-UX AIX等使用了 
比較複雜的文件名命名方式。

 

5.控制檯終端(/dev/ttyn, /dev/console) 
在UNIX系統中,計算機顯示器通常被稱爲控制檯終端(Console)。它仿真了類型爲Linux的一種終端(TERM=Linux), 
並且有一些設備特殊文件與之相關聯:tty0、tty1、tty2等。當你在控制檯上登錄時,使用的是tty1。使用Alt+[F1—F6]組合 
鍵時,我們就可以切換到tty2、tty3等上面去。tty1 –tty6等稱爲虛擬終端,而tty0則是當前所使用虛擬終端的一個別名, 
系統所產生的信息會發送到該終端上。因此不管當前正在使用哪個虛擬終端,系統信息都會發送到控制檯終端上。 
你可以登錄到不同的虛擬終端上去,因而可以讓系統同時有幾個不同的會話期存在。只有系統或超級用戶root可以 
向/dev/tty0進行寫操作

 

console是一個緩衝的概念,其實是爲內核提供打印的。我們的pc,終端常用的是顯示器和鍵盤構成,我們用戶打印和內核打印都從這個終端反映給用戶。所以,這裏,/dev/console是連接到/dev/tty0的,其實這裏有2個概念,console和tty這2個咚咚,怎麼實現,其實console這個結構中有個device,這裏其實就是tty0對應的一個虛擬終端設備。 如果,我們來個專門打印內核的設備(比如通過串口),我們把那個串口register_console,那麼/dev/console就到這個串口設備了。這時,內核打印就到這個串口設備了,而用戶的打印還是和上面的/dev/tty相關,如果/dev/tty對應/dev/tty0,那麼用戶打印還在窗口中出現。所以說/dev/console是用來外接控制檯的。

 

 

6.串行端口終端(/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)端口的設備上。可接串口來實驗。

即是相對與dos下的com1和com2等....

 總結一下:感覺概念還是比較模糊的,因爲可能是時間命名的緣故吧,有很多概念都很模糊吧!

首先:兩種模式:字符模式:對應的爲控制檯,設備文件爲/dev/tty1-6(是一個控制檯終端的設備文件),而/dev/tty0則是當前終端設備文件的別名(我覺得可以說是鏈接吧,即tty0就是指當前的設備文件)。圖形模式(Xwindow): 對應的應該是tty7,但是在Xwindow下終端(即輸入命令的窗口)對應的設備文件爲/dev/pts/0-(是一個僞終端設備文件)

 

關於dev/tty其實很簡單:就是當前終端設備的一個鏈接(有點像/dev/tty0吧,但是他好像更強大一點),我們可以做下這個實驗:

在Xwindow下打開多個終端(輸入命令的窗口):#tty命令,發現在各個窗口分別顯示爲# dev/pts/0  #dev/pts/1  #dev/pts/2....

然後在#dev/pts/0終端中輸入echo"test">/dev/pts/0 結果顯示test。然後你在#dev/pts/0終端中輸入echo"test">/dev/tty, 你會發現在當前窗口也顯示test字符串。也就是說dev/tty其實就是當前設備文件的一個鏈接。

 

關於/dev/console  應該來說更像一個緩衝結果吧,來實現對內核的打印,比如說內核把要打印的內容裝入緩衝區,然後由console來決定打印到哪裏吧(比如是tty0還是串口等等吧)。所以說/dev/console是用來外接控制檯的。

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