1. 程式人生 > >linux下tty,控制檯,虛擬終端,串列埠,console(控制檯終端)詳解

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

首先:

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是用來外接控制檯的。

先寫到這裡吧!這是我參考資料得到的,如果有錯了大家都都幫忙啊。