1、串行端口終端 /dev/ttySn

10多年的彰武網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整彰武建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“彰武網(wǎng)站設(shè)計”,“彰武網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
串行端口終端是使用計算機(jī)串行端口連接的終端設(shè)備。計算機(jī)把每個串行端口都看作是一個字符設(shè)備。有段時間這些串行端口設(shè)備通常稱為終端設(shè)備,因為那時它的最大用途就是用來連接終端。這些串行端口所對應(yīng)的設(shè)備名稱是/dev/tts/0、/dev/tts/1等,設(shè)備號分別是(4,0)、(4,1)等,分別對應(yīng)于DOS系統(tǒng)下的COM1、COM2等。若要向一個端口發(fā)送數(shù)據(jù),可以在命令行上把標(biāo)準(zhǔn)輸出重定向到這些特殊文件名上即可。
2、偽終端 /dev/pty/
偽終端是成對的邏輯終端設(shè)備。例如/dev/ptyp3和/dev/ttyp3。它們與實際物理設(shè)備并不直接相關(guān)。如果一個程序把ptyp3看作是一個串行端口設(shè)備,則它對該端口的讀寫操作會反映在該邏輯終端設(shè)備對應(yīng)的另一個ttyp3上面。而ttyp3則是另一個程序用于讀寫操作的邏輯設(shè)備。telnet主機(jī)A就是通過偽終端與主機(jī)A的登錄程序進(jìn)行通信。
3、控制終端 /dev/tty
控制終端是指能夠控制一個套設(shè)備或者幾套設(shè)備的終端控制器。如果當(dāng)前進(jìn)程有控制終端的話,那么/dev/tty就是當(dāng)前進(jìn)程的控制終端的設(shè)備特殊文件。可以使用命令ps
-ax來查看進(jìn)程與哪個控制終端相連。對于你登錄的shell,/dev/tty就是你使用的終端,設(shè)備號是(5,0)。使用命令tty可以查看它具體對應(yīng)哪個實際終端設(shè)備。/dev/tty有些類似于到實際所使用終端設(shè)備的一個聯(lián)接。
4、控制臺終端 /dev/ttyn,/dev/console
在Linux系統(tǒng)中,計算機(jī)顯示器通常被稱為控制臺終端。它仿真了類型與Linux的一種終端,并且有一些設(shè)備特殊文件與之相關(guān)聯(lián):tty0、tty1、tty2等。當(dāng)你在控制臺上登錄時,使用的是tty1。使用ALT+[F1-F6]組合鍵時,我們就可以切換到tty2、tty3等上面去。tty1-tty6等稱為虛擬終端,而tty0則是當(dāng)前所使用虛擬終端的一個別名,系統(tǒng)所產(chǎn)生的信息會發(fā)送到該終端上。因此不管當(dāng)前正在使用哪個虛擬終端,系統(tǒng)信息都會發(fā)送到控制臺終端上。/dev/console即控制臺,是與操作系統(tǒng)交互的設(shè)備,系統(tǒng)將一些信息直接輸出到控制臺上。目前只有在單用戶模式下,才允許用戶登錄控制臺。
5、虛擬終端 /dev/pts/n
在X Windows模式下的偽終端,比如在KUbuntu下用Konsole,就是用的虛擬終端,用tty命令可看到/dev/pts/1。
ttyS0~ ttyS3 (串行端口終端)指的是電腦的各個物理接口(這些都是串口,不是并口),外部的終端通過這些物理接口與電腦連接 ,從而實現(xiàn)和電腦進(jìn)行交互。
?例如:dmesg |grep tty可以查看開啟的接口(串口)
? ? ?目前連接遠(yuǎn)程服務(wù)器或者直接在服務(wù)器上面操作等都是通過創(chuàng)建虛擬終端的形式。比如pts/1 和tty1虛擬終端,其中tty表示直接登錄機(jī)器生成的而pts表示遠(yuǎn)程連接生成的。其中遠(yuǎn)程連接是通過sshd服務(wù)進(jìn)行創(chuàng)建session會話和bash進(jìn)程(所以可以看到有sshd進(jìn)程,同時虛擬終端可以創(chuàng)建多個,這是依賴ptmx功能,sshd通過與ptmx通訊,ptmx在和相對應(yīng)的pts通訊從而達(dá)到多個虛擬終端的效果)。
? ? 例如:在centos系統(tǒng)中的圖像界面中打開的terminal就是一個pts但是整個圖形界面是一個tty,centos切換到命令行界面后 輸入tty命令時輸出就是tty1或ttyn了,這時候的命令行界面與圖形界面的運(yùn)行級別是一樣的,通過命令行創(chuàng)建的所有進(jìn)程都是屬于tty1終端的。
? ? 注意: tty就是ttyS的虛擬版本,只是不需要通過外部線路進(jìn)行連接了。遠(yuǎn)程連接服務(wù)器需要sshd服務(wù),sshd和tty沒有聯(lián)系,遠(yuǎn)程連接是因為本地有終端模擬器,本機(jī)連接就需要內(nèi)核直接模擬一個模擬器了,所有遠(yuǎn)程是pts,本機(jī)是tty 。
?從上面的流程中可以看出來對用戶空間的程序來說它們沒有區(qū)別,都是一樣的;從內(nèi)核角度來看pts的另一端連接的是ptmx,而tty的另一端連接的是內(nèi)核的終端模擬器,ptmx和終端模擬器都只是負(fù)責(zé)維護(hù)會話和轉(zhuǎn)發(fā)數(shù)據(jù)包;再看看ptmx和內(nèi)核終端模擬器的另一端,ptmx的另一端連接的是用戶空間的應(yīng)用程序,如sshd、tmux等,而內(nèi)核終端模擬器的另一端連接的是具體的硬件,如鍵盤和顯示器。
SSH遠(yuǎn)程訪問---重點
這里的Terminal可能是任何地方的程序,比如windows上的putty,所以不討論客戶端的Terminal程序是怎么和鍵盤、顯示器交互的。由于Terminal要和ssh服務(wù)器打交道,所以肯定要實現(xiàn)ssh的客戶端功能。這里將建立連接和收發(fā)數(shù)據(jù)分兩條線路解釋,為了描述簡潔,這里以sshd代替ssh服務(wù)器程序:
建立連接:
1.Terminal請求和sshd建立連接。
2.如果驗證通過,sshd將創(chuàng)建一個新的session。
3.調(diào)用API(posix_openpt())請求ptmx創(chuàng)建一個pts,創(chuàng)建成功后,sshd將得到和ptmx關(guān)聯(lián)的fd,并將該fd和session關(guān)聯(lián)起來。
4.同時sshd創(chuàng)建shell進(jìn)程,將新創(chuàng)建的pts和shell綁定。
收發(fā)消息:
1.Terminal收到鍵盤的輸入,Terminal通過ssh協(xié)議將數(shù)據(jù)發(fā)往sshd。
2.sshd收到客戶端的數(shù)據(jù)后,根據(jù)它自己管理的session,找到該客戶端對應(yīng)的關(guān)聯(lián)到ptmx上的fd。
3.往找到的fd上寫入客戶端發(fā)過來的數(shù)據(jù)。
4.ptmx收到數(shù)據(jù)后,根據(jù)fd找到對應(yīng)的pts(該對應(yīng)關(guān)系由ptmx自動維護(hù)),將數(shù)據(jù)包轉(zhuǎn)發(fā)給對應(yīng)的pts。
5.pts收到數(shù)據(jù)包后,檢查綁定到自己上面的當(dāng)前前端進(jìn)程組,將數(shù)據(jù)包發(fā)給該進(jìn)程組的leader。
6.由于pts上只有shell,所以shell的read函數(shù)就收到了該數(shù)據(jù)包。
7.shell對收到的數(shù)據(jù)包進(jìn)行處理,然后輸出處理結(jié)果(也可能沒有輸出)。
8.shell通過write函數(shù)將結(jié)果寫入pts。
9.pts將結(jié)果轉(zhuǎn)發(fā)給ptmx。
10.ptmx根據(jù)pts找到對應(yīng)的fd,往該fd寫入結(jié)果。
11.sshd收到該fd的結(jié)果后,找到對應(yīng)的session,然后將結(jié)果發(fā)給對應(yīng)的客戶端。
SSH + Screen/Tmux
? 常用Linux的同學(xué)應(yīng)該對screen和tmux不陌生,通過它們啟動的進(jìn)程,就算網(wǎng)絡(luò)斷開了,也不會受到影響繼續(xù)執(zhí)行,下次連上去時還能看到進(jìn)程的所有輸出,還能繼續(xù)接著干活。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這種情況要稍微復(fù)雜一點,不過原理都是一樣的,前半部分和普通ssh的方式是一樣的,只是pts/0關(guān)聯(lián)的前端進(jìn)程不是shell了,而是變成了tmux客戶端,所以ssh客戶端發(fā)過來的數(shù)據(jù)包都會被tmux客戶端收到,然后由tmux客戶端轉(zhuǎn)發(fā)給tmux服務(wù)器,而tmux服務(wù)器干的活和ssh的類似,也是維護(hù)一堆的session,為每個session創(chuàng)建一個pts,然后將tmux客戶端發(fā)過來的數(shù)據(jù)轉(zhuǎn)發(fā)給相應(yīng)的pts。由于tmux服務(wù)器只和tmux客戶端打交道,和sshd沒有關(guān)系,當(dāng)終端和sshd的連接斷開時,雖然pts/0會被關(guān)閉,和它相關(guān)的shell和tmux客戶端也將被kill掉,但不會影響tmux服務(wù)器,當(dāng)下次再用tmux客戶端連上tmux服務(wù)器時,看到的還是上次的內(nèi)容。
Linux tty命令用于顯示終端機(jī)連接標(biāo)準(zhǔn)輸入設(shè)備的文件名稱。
在Linux操作系統(tǒng)中,所有外圍設(shè)備都有其名稱與代號,這些名稱代號以特殊文件的類型存放于/dev目錄下。你可以執(zhí)行tty(teletypewriter)指令查詢目前使用的終端機(jī)的文件名稱。
語法
tty [-s][--help][--version]
參數(shù)說明:
-s或--silent或--quiet 不顯示任何信息,只回傳狀態(tài)代碼。
--help 在線幫助。
--version 顯示版本信息。
實例
顯示當(dāng)前終端
# tty
/dev/pts/4
1、首先打開linux虛擬機(jī),運(yùn)行虛擬機(jī),在虛擬機(jī)中打開明令行。
2、其次使用killall通過程序的名字,來殺死進(jìn)程。
3、最后輸入命令就可以在原來的tty上殺死sleep了。
TTY設(shè)備包括虛擬控制臺,串口以及偽終端設(shè)備。
TTY是TeleTYpe的一個老縮寫。Teletypes,或者teletypewriters,原來指的是電傳打字機(jī),是通過串行線用打印機(jī)鍵盤通過閱讀和發(fā)送信息的東西,和古老的電報機(jī)區(qū)別并不是很大。之后,當(dāng)計算機(jī)只能以批處理方式運(yùn)行時(當(dāng)時穿孔卡片閱讀器是唯一一種使程序載入運(yùn)行的方式),電傳打字機(jī)成為唯一能夠被使用的“實時”輸入/輸出設(shè)備。最終,電傳打字機(jī)被鍵盤和顯示器終端所取代,但在終端或TTY接插的地方,操作系統(tǒng)仍然需要一個程序來監(jiān)視串行端口。一個getty“Get TTY”的處理過程是:一個程序監(jiān)視物理的TTY/終端接口。
在Linux中,TTY也許是跟終端有關(guān)系的最為混亂的術(shù)語。TTY是TeleTYpe的一個老縮寫。Teletypes,或者teletypewriters,原來指的是電傳打字機(jī),是通過串行線用打印機(jī)鍵盤通過閱讀和發(fā)送信息的東西,和古老的電報機(jī)區(qū)別并不是很大。之后,當(dāng)計算機(jī)只能以批處理方式運(yùn)行時(當(dāng)時穿孔卡片閱讀器是唯一一種使程序載入運(yùn)行的方式),電傳打字機(jī)成為唯一能夠被使用的“實時”輸入/輸出設(shè)備。最終,電傳打字機(jī)被鍵盤和顯示器終端所取代,但在終端或TTY接插的地方,操作系統(tǒng)仍然需要一個程序來監(jiān)視串行端口。一個getty“Get TTY”的處理過程是:一個程序監(jiān)視物理的TTY/終端接口。對一個虛擬網(wǎng)絡(luò)服務(wù)器(VNC)來說,一個偽裝的TTY(Pseudo-TTY,即假冒的TTY,也叫做“PTY”)是等價的終端。當(dāng)你運(yùn)行一個xterm(終端仿真程序)或GNOME終端程序時,PTY對虛擬的用戶或者如xterm一樣的偽終端來說,就像是一個TTY在運(yùn)行。“Pseudo”的意思是“duplicating in a fake way”(用偽造的方法復(fù)制),它相比“virtual”或“emulated”更能真實的說明問題。而在的計算中,它卻處于被放棄的階段。
tty也是一個Unix命令,用來給出當(dāng)前終端設(shè)備的名稱。
終端是一種字符型設(shè)備,它有多種類型,通常使用tty來簡稱各種類型的終端設(shè)備。
在Linux系統(tǒng)的設(shè)備特殊文件目錄/dev/下,終端特殊設(shè)備文件一般有以下幾種:
串行端口
串行端口終端(Serial Port Terminal)是使用計算機(jī)串行端口連接的終端設(shè)備。計算機(jī)把每個串行端口都看作是一個字符設(shè)備。有段時間這些串行端口設(shè)備通常被稱為終端設(shè)備,因為那時它的最大用途就是用來連接終端。這些串行端口所對應(yīng)的設(shè)備名稱是/dev/tts/0(或/dev/ttyS0),/dev/tts/1(或/dev/ttyS1)等,設(shè)備號分別是(4,0),(4,1)等,分別對應(yīng)于DOS系統(tǒng)下的COM1、COM2等。若要向一個端口發(fā)送數(shù)據(jù),可以在命令行上把標(biāo)準(zhǔn)輸出重定向到這些特殊文件名上即可。例如,在命令行提示符下鍵入:echo test /dev/ttyS1會把單詞”test”發(fā)送到連接在ttyS1(COM2)端口的設(shè)備上。
偽終端
偽終端(Pseudo Terminal)是成對的邏輯終端設(shè)備(即master和slave設(shè)備,對master的操作會反映到slave上)。
例如/dev/ptyp3和/dev/ttyp3(或者在設(shè)備文件系統(tǒng)中分別是/dev/pty /m3和 /dev/pty/s3)。它們與實際物理設(shè)備并不直接相關(guān)。如果一個程序把ptyp3(master設(shè)備)看作是一個串行端口設(shè)備,則它對該端口的讀/ 寫操作會反映在該邏輯終端設(shè)備對應(yīng)的另一個ttyp3(slave設(shè)備)上面。而ttyp3則是另一個程序用于讀寫操作的邏輯設(shè)備。telnet主機(jī)A就是通過“偽終端”與主機(jī)A的登錄程序進(jìn)行通信。
控制終端
如果當(dāng)前進(jìn)程有控制終端(Controlling Terminal)的話,那么/dev/tty就是當(dāng)前進(jìn)程的控制終端的設(shè)備特殊文件。可以使用命令”ps –ax”來查看進(jìn)程與哪個控制終端相連。對于你登錄的shell,/dev/tty就是你使用的終端,設(shè)備號是(5,0)。使用命令”tty”可以查看它具體對應(yīng)哪個實際終端設(shè)備。/dev/tty有些類似于到實際所使用終端設(shè)備的一個聯(lián)接。
控制臺
在Linux 系統(tǒng)中,計算機(jī)顯示器通常被稱為控制臺終端(Console)。它仿真了類型為Linux的一種終端(TERM=Linux),并且有一些設(shè)備特殊文件與之相關(guān)聯(lián):tty0、tty1、tty2 等。當(dāng)你在控制臺上登錄時,使用的是tty1。使用Alt+[F1—F6]組合鍵時,我們就可以切換到tty2、tty3等上面去。tty1–tty6等稱為虛擬終端,而tty0則是當(dāng)前所使用虛擬終端的一個別名,系統(tǒng)所產(chǎn)生的信息會發(fā)送到該終端上(這時也叫控制臺終端)。因此不管當(dāng)前正在使用哪個虛擬終端,系統(tǒng)信息都會發(fā)送到控制臺終端上。/dev/console即控制臺,是與操作系統(tǒng)交互的設(shè)備,系統(tǒng)將一些信息直接輸出到控制臺上。只有在單用戶模式下,才允許用戶登錄控制臺。
虛擬終端
在Xwindow模式下的偽終端.如在Kubuntu下用konsole,就是用的虛擬終端,用tty命令可看到/dev/pts/name, name為當(dāng)前用戶名。
其它類型
Linux系統(tǒng)中還針對很多不同的字符設(shè)備存在有很多其它種類的終端設(shè)備特殊文件。例如針對ISDN設(shè)備的/dev/ttyIn終端設(shè)備等。
tty設(shè)備包括虛擬控制臺,串口以及偽終端設(shè)備。
/dev/tty代表當(dāng)前tty設(shè)備,在當(dāng)前的終端中輸入 echo “hello” /dev/tty ,都會直接顯示在當(dāng)前的終端中。
Text Telephones (TTY)
聾啞人電話,在手機(jī)插入專用設(shè)備后支持收發(fā)文本,需網(wǎng)絡(luò)支持,中國網(wǎng)絡(luò)不支持TTY.
除聾啞模式外,還支持只聽不說(HCO)和只說不聽(VCO)兩種模式。
名稱欄目:包含tty命令linux的詞條
分享路徑:http://chinadenli.net/article34/dsgojpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站收錄、商城網(wǎng)站、搜索引擎優(yōu)化、虛擬主機(jī)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)