linux的tty命令的詳細(xì)解釋
linux的tty命令的詳細(xì)解釋
Linux中的tty命令其實是打印連接到標(biāo)準(zhǔn)輸入的終端的文件名。下面由學(xué)習(xí)啦小編為大家整理了Linux的tty命令的詳細(xì)解釋,希望對大家有幫助!
linux的tty命令的詳細(xì)解釋
tty [選項]...
[功能]
打印連接到標(biāo)準(zhǔn)輸入的終端的文件名。
[描述]
命令項:
-s, --silent, --quiet: 什么也不打印,只是返回退出狀態(tài)碼。
--help: 打印幫助信息。
--version: 打印版本信息并退出。
返回的狀態(tài)碼:
0 表示標(biāo)準(zhǔn)輸入是一個終端。
1 表示標(biāo)準(zhǔn)輸入不是一個終端。
2 表示給定的參數(shù)是不正確的參數(shù)。
3 表示發(fā)生了寫錯誤。
linux的tty命令的詳解實例
*查看當(dāng)前的標(biāo)準(zhǔn)終端文件描述符號:
[quietheart@lv-k etc]$ tty
/dev/pts/6
這里,輸入tty之后,輸出"/dev/pts/6"就是當(dāng)前連接的終端對應(yīng)的文件描述符號,我們可以通過向這個文件,這樣會看到當(dāng)前終端會輸出我們寫入的數(shù)據(jù),例如:
[quietheart@lv-k etc]$ echo "mytest" >/dev/pts/6
mytest
可見,向/dev/pts/6文件寫入的內(nèi)容,直接顯示到我們的終端上面了。如果我在機(jī)器上面開了多個終端,然后我在別的終端中輸入上面的echo命令,那么將會看到對應(yīng)"/dev/pts/6"的終端上面會顯示相應(yīng)的字符了。
*運行tty什么也不輸出,然后查看其退出碼:
[quietheart@lv-k etc]$ tty -s
[quietheart@lv-k etc]$ echo $?
0
這里,使用shell的命令"echo $?"來顯示上一條命令的退出狀態(tài)碼。狀態(tài)碼的含義如下:
0 表示標(biāo)準(zhǔn)輸入是一個終端。
1 表示標(biāo)準(zhǔn)輸入不是一個終端。
2 表示給定的參數(shù)是不正確的參數(shù)。
3 表示發(fā)生了寫錯誤。
補充:有關(guān)linux的tty命令的其它知識
*基本概念:
1,tty(終端設(shè)備的統(tǒng)稱):
tty一詞源于Teletypes,或者teletypewriters,原來指的是電傳打字機(jī),是通過串行線用打印機(jī)鍵盤通過閱讀和發(fā)送信息的東西,后來這東西被鍵盤與顯示器取代,所以現(xiàn)在叫終端比較合適。終端是一種字符型設(shè)備,它有多種類型,通常使用tty來簡稱各種類型的終端設(shè)備。
2,pty(虛擬終端):
如果我們遠(yuǎn)程telnet到主機(jī)或使用xterm時,也需要一個終端交互,這就是虛擬終端pty(pseudo-tty)
3,pts/ptmx(pts/ptmx結(jié)合使用,進(jìn)而實現(xiàn)pty):
pts(pseudo-terminal slave)是pty的實現(xiàn)方法,與ptmx(pseudo-terminal master)配合使用實現(xiàn)pty。
*Linux終端:
在Linux系統(tǒng)的設(shè)備特殊文件目錄/dev/下,終端特殊設(shè)備文件一般有以下幾種:
1,串行端口終端(/dev/ttySn)
串行端口終端(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è)備上??山哟趤韺嶒灐?/p>
2,偽終端(/dev/pty/)
偽終端(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è)備。
這樣,兩個程序就可以通過這種邏輯設(shè)備進(jìn)行互相交流,而其中一個使用ttyp3的程序則認(rèn)為自己正在與一個串行端口進(jìn)行通信。這很象是邏輯設(shè)備對之間的管道操作。對于ttyp3(s3),任何設(shè)計成使用一個串行端口設(shè)備的程序都可以使用該邏輯設(shè)備。但對于使用ptyp3的程序,則需要專門設(shè)計來使用 ptyp3(m3)邏輯設(shè)備。
例如,如果某人在網(wǎng)上使用telnet程序連接到你的計算機(jī)上,則telnet程序就可能會開始連接到設(shè)備 ptyp2(m2)上(一個偽終端端口上)。此時一個getty程序就應(yīng)該運行在對應(yīng)的ttyp2(s2)端口上。當(dāng)telnet從遠(yuǎn)端獲取了一個字符時,該字符就會通過m2、s2傳遞給 getty程序,而getty程序就會通過s2、m2和telnet程序往網(wǎng)絡(luò)上返回”login:”字符串信息。這樣,登錄程序與telnet程序就通過“偽終端”進(jìn)行通信。通過使用適當(dāng)?shù)能浖?,就可以把兩個甚至多個偽終端設(shè)備連接到同一個物理串行端口上。
在使用設(shè)備文件系統(tǒng) (device filesystem)之前,為了得到大量的偽終端設(shè)備特殊文件,使用了比較復(fù)雜的文件名命名方式。因為只存在16個ttyp(ttyp0—ttypf) 的設(shè)備文件,為了得到更多的邏輯設(shè)備對,就使用了象q、r、s等字符來代替p。例如,ttys8和ptys8就是一個偽終端設(shè)備對。不過這種命名方式目前仍然在RedHat等Linux系統(tǒng)中使用著。
但Linux系統(tǒng)上的Unix98并不使用上述方法,而使用了”pty master”方式,例如/dev/ptm3。它的對應(yīng)端則會被自動地創(chuàng)建成/dev/pts/3。這樣就可以在需要時提供一個pty偽終端。目錄 /dev/pts是一個類型為devpts的文件系統(tǒng),并且可以在被加載文件系統(tǒng)列表中看到。雖然“文件”/dev/pts/3看上去是設(shè)備文件系統(tǒng)中的一項,但其實它完全是一種不同的文件系統(tǒng)。
即: TELNET ---> TTYP3(S3: slave) ---> PTYP3(M3: master) ---> GETTY
*實踐:
以下過程是在ubuntu上面的實踐結(jié)果。
1,虛擬終端/dev/tty*和偽終端/dev/pts/*:
假設(shè)5個xterm終端的話,會發(fā)現(xiàn)/dev下面有一個/dev/ptmx /和5個/dev/pts/*
而如果用"[Ctrl][Alt]F1"進(jìn)入一個終端的話,就會發(fā)現(xiàn)/dev下面多出一個/dev/tty1
2,查看終端的方法:
使用命令"tty"可以查看當(dāng)前對應(yīng)的終端,命令"ps -ax"可以查看所有程序以及對應(yīng)的終端。通過這個命令,發(fā)現(xiàn)如果多開一個screen程序,或者用telnet登陸之后,那么機(jī)器上面就會多一個/dev/pts/*??芍话銈谓K端用戶模擬終端程序。
3,向指定終端發(fā)送信息:
如果運行"echo hello >/dev/tty2",
那么"[Ctrl][Alt]F2"打開"/dev/tty2"對應(yīng)的終端,就會發(fā)現(xiàn)剛才發(fā)送的hello了。
注意,如果發(fā)送"echo -n ls >/dev/tty2"那么會顯示ls,但是回車之后,并沒有執(zhí)行l(wèi)s。可見:ttyN是代表linux的純命令行終端,而寫到這個終端的字符串只是做為這個終端的輸出,并沒有當(dāng)做終端的輸入處理。
如果運行"echo hello >/dev/pts/2",
那么,就可以在xterm的第二個窗口看到hello了??芍?,/dev/pts/n是Xwindows模式下的偽終端.