天天看點

Linux下tty/pty/pts/ptmx詳解基本概念:Linux終端:

基本概念:

1> tty(終端裝置的統稱):

tty一詞源于Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用列印機鍵盤通過閱讀和發送資訊的東西,後來這東西被鍵盤與顯示器取代,是以現在叫終端比較合适。

終端是一種字元型裝置,它有多種類型,通常使用tty來簡稱各種類型的終端裝置。

2> pty(虛拟終端):

但是如果我們遠端telnet到主機或使用xterm時不也需要一個終端互動麼?是的,這就是虛拟終端pty(pseudo-tty)

3> pts/ptmx(pts/ptmx結合使用,進而實作pty):

pts(pseudo-terminal slave)是pty的實作方法,與ptmx(pseudo-terminal master)配合使用實作pty。

Linux終端:

在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則是另一個程式用于讀寫操作的邏輯裝置。

這 樣,兩個程式就可以通過這種邏輯裝置進行互相交流,而其中一個使用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)之前,為了得到大量的僞終端裝置特殊檔案,使用了比較複雜的檔案名命名方式。因為隻存在16個ttyp(ttyp0—ttypf) 的裝置檔案,為了得到更多的邏輯裝置對,就使用了象q、r、s等字元來代替p。例如,ttys8和ptys8就是一個僞終端裝置對。不過這種命名方式目前 仍然在RedHat等Linux系統中使用着。

但Linux 系統上的Unix98并不使用上述方法,而使用了”pty master”方式,例如/dev/ptm3。它的對應端則會被自動地建立成/dev/pts/3。這樣就可以在需要時提供一個pty僞終端。目錄 /dev/pts是一個類型為devpts的檔案系統,并且可以在被加載檔案系統清單中看到。雖然“檔案”/dev/pts/3看上去是裝置檔案系統中的 一項,但其實它完全是一種不同的檔案系統。

即: TELNET ---> TTYP3(S3: slave) ---> PTYP3(M3: master) ---> GETTY

=========================================================================

實驗:

1、在X下打開一個或N個終端視窗

2、#ls /dev/pt*

3、關閉這個X下的終端視窗,再次運作;比較兩次輸出資訊就明白了。

在RHEL4環境下: 輸出為/dev/ptmx /dev/pts/1存在一(master)對多(slave)的情況

=========================================================================

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則是目前所使用虛拟終端的一個别名,系統所産生的資訊會發送到該終端上。是以不管目前正在使用哪個虛拟終端,系統資訊都會發送到 控制台終端上。你可以登入到不同的虛拟終端上去,因而可以讓系統同時有幾個不同的會話期存在。隻有系統或超級使用者root可以向 /dev/tty0進行寫操作 即下例:

1、# tty(檢視目前TTY)
/dev/tty1
2、#echo "test tty0" > /dev/tty0
test tty0
           

5 虛拟終端(/dev/pts/n)

在Xwindows模式下的僞終端.

6 其它類型

Linux系統中還針對很多不同的字元裝置存在有很多其它種類的終端裝置特殊檔案。例如針對ISDN裝置的/dev/ttyIn終端裝置等。這裡不再贅述。

FAQ: 終端和控制台

RROM:http://blog.footoo.org/?p=73

Posted on Tuesday, November 28th, 2006 by CLIFF

吳晉 ([email protected])

FoOTOo OpenSource Lab

由于在很多朋友對終端的概念一直不是很清楚,是以寫了這個FAQ,希望能夠幫助大家了解這些概念。不妥之處,還請大家來信指出。

Q:/dev/console 是什麼?

A:/dev/console即控制台,是與作業系統互動的裝置,系統将一些資訊直接輸出到控制台上。目前隻有在單使用者模式下,才允許使用者登入控制台。

Q:/dev/tty是什麼?

A:tty裝置包括虛拟控制台,序列槽以及僞終端裝置。

/dev/tty代表目前tty裝置,在目前的終端中輸入 echo “hello” > /dev/tty ,都會直接顯示在目前的終端中。

Q:/dev/ttyS*是什麼?

A:/dev/ttyS*是串行終端裝置。

Q:/dev/pty*是什麼?

A:/dev/pty*即僞終端,所謂僞終端是邏輯上的終端裝置,多用于模拟終端程式。例如,我們在X Window下打開的終端,以及我們在Windows使用telnet 或ssh等方式登入Linux主機,此時均在使用pty裝置(準确的說應該pty從裝置)。

Q:/dev/tty0與/dev/tty1 …/dev/tty63是什麼?它們之間有什麼差別?

A:/dev/tty0代表目前虛拟控制台,而/dev/tty1等代表第一個虛拟控制台,例如當使用ALT+F2進行切換時,系統的虛拟控制台為/dev/tty2 ,目前的控制台則指向/dev/tty2

Q:如何确定目前所在的終端(或控制台)?

A:使用tty指令可以确定目前的終端或者控制台。

Q:/dev/console是到/dev/tty0的符号連結嗎?

A: 目前的大多數文本中都稱/dev/console是到/dev/tty0的連結(包括《Linux核心源代碼情景分析》),但是這樣說是不确切的。根據内 核文檔,在2.1.71之前,/dev/console根據不同系統的設定可以連結到/dev/tty0或者其他tty*上,在2.1.71版本之後則完 全由核心控制。目前,隻有在單使用者模式下可以登入/dev/console(可以在單使用者模式下輸入tty指令進行确認)。

Q:/dev/tty0與/dev/fb*有什麼差別?

A: 在Framebuffer裝置沒有啟用的系統中,可以使用/dev/tty0通路顯示卡。

Q:關于終端和控制台的差別可以參考哪些文本

A: 可以參考核心文檔中的 Documents/devices.txt 中關于”TERMINAL DEVICES” 的章節。另外,《Linux核心源代碼情景分析》的8.7節 以及《Operating Systems : Design and Implementation》中的3.9節(第3版中為3.8節)都對終端裝置的概念和曆史做了很好的介紹。另外在《Modern Operating system》 中也有對終端裝置的介紹,由于與《Operating Systems : Design and Implementation》的作者相同,是以文本内容也大緻相同。需要注意的一點是《Operating Systems : Design and Implementation》中将終端裝置分為3類,而《Modern Operating system》将終端硬體裝置分為2類,差别在于前者将 X Terminal作為一個類别。

PS:

隻有2410的2.6才叫ttySAC0,9200等的還是叫ttyS0

轉自:

http://blog.chinaunix.net/uid-22746363-id-384008.html

繼續閱讀