tty命令詳解

  

 基礎命令學習目錄首頁html

 

原文連接:http://blog.chinaunix.net/uid-9525959-id-2001836.htmllinux

[功能] shell

打印鏈接到標準輸入的終端的文件名。 ubuntu

 

[描述] windows

命令項: 網絡

-s, --silent, --quiet: 什麼也不打印,只是返回退出狀態碼。 post

--help: 打印幫助信息。 學習

--version: 打印版本信息並退出。 ui

 

返回的狀態碼: spa

0 表示標準輸入是一個終端。 

1 表示標準輸入不是一個終端。 

2 表示給定的參數是不正確的參數。 

3 表示發生了寫錯誤。 

 

[舉例] 

*查看當前的標準終端文件描述符號: 

[quietheart@lv-k etc]$ tty 

/dev/pts/6 

這裏,輸入tty以後,輸出"/dev/pts/6"就是當前鏈接的終端對應的文件描述符號,咱們能夠經過向這個文件,這樣會看到當前終端會輸出咱們寫入的數據,例如: 

[quietheart@lv-k etc]$ echo "mytest" >/dev/pts/6 

mytest 

可見,向/dev/pts/6文件寫入的內容,直接顯示到咱們的終端上面了。若是我在機器上面開了多個終端,而後我在別的終端中輸入上面的echo命令,那麼將會看到對應"/dev/pts/6"的終端上面會顯示相應的字符了。 

 

*運行tty什麼也不輸出,而後查看其退出碼: 

[quietheart@lv-k etc]$ tty -s 

[quietheart@lv-k etc]$ echo $? 

這裏,使用shell的命令"echo $?"來顯示上一條命令的退出狀態碼。狀態碼的含義以下: 

0 表示標準輸入是一個終端。 

1 表示標準輸入不是一個終端。 

2 表示給定的參數是不正確的參數。 

3 表示發生了寫錯誤。 

 

[其它] 

*基本概念: 

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系統下的COM一、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從遠端獲取了一個字符時,該字符就會經過m二、s2傳遞給 getty程序,而getty程序就會經過s二、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 

 

*實踐:

如下過程是在ubuntu上面的實踐結果。 

1,虛擬終端/dev/tty*和僞終端/dev/pts/*: 

假設5個xterm終端的話,會發現/dev下面有一個/dev/ptmx /和5個/dev/pts/* 

而若是用"[Ctrl][Alt]F1"進入一個終端的話,就會發現/dev下面多出一個/dev/tty1 

 

2,查看終端的方法: 

使用命令"tty"能夠查看當前對應的終端,命令"ps -ax"能夠查看全部程序以及對應的終端。經過這個命令,發現若是多開一個screen程序,或者用telnet登錄以後,那麼機器上面就會多一個/dev/pts/*。可知,通常僞終端用戶模擬終端程序。 

 

3,向指定終端發送信息: 

若是運行"echo hello >/dev/tty2", 

那麼"[Ctrl][Alt]F2"打開"/dev/tty2"對應的終端,就會發現剛纔發送的hello了。 

注意,若是發送"echo -n ls >/dev/tty2"那麼會顯示ls,可是回車以後,並無執行ls。可見:ttyN是表明linux的純命令行終端,而寫到這個終端的字符串只是作爲這個終端的輸出,並無當作終端的輸入處理。 

 

若是運行"echo hello >/dev/pts/2", 

那麼,就能夠在xterm的第二個窗口看到hello了。可知,/dev/pts/n是Xwindows模式下的僞終端. 

 

參考資料: 

http://blog.csdn.net/freeman1975/archive/2009/10/19/4696781.aspx 

"info tty" 

"man tty

[功能] 

打印鏈接到標準輸入的終端的文件名。 

 

[描述] 

命令項: 

-s, --silent, --quiet: 什麼也不打印,只是返回退出狀態碼。 

--help: 打印幫助信息。 

--version: 打印版本信息並退出。 

 

返回的狀態碼: 

0 表示標準輸入是一個終端。 

1 表示標準輸入不是一個終端。 

2 表示給定的參數是不正確的參數。 

3 表示發生了寫錯誤。 

 

[舉例] 

*查看當前的標準終端文件描述符號: 

[quietheart@lv-k etc]$ tty 

/dev/pts/6 

這裏,輸入tty以後,輸出"/dev/pts/6"就是當前鏈接的終端對應的文件描述符號,咱們能夠經過向這個文件,這樣會看到當前終端會輸出咱們寫入的數據,例如: 

[quietheart@lv-k etc]$ echo "mytest" >/dev/pts/6 

mytest 

可見,向/dev/pts/6文件寫入的內容,直接顯示到咱們的終端上面了。若是我在機器上面開了多個終端,而後我在別的終端中輸入上面的echo命令,那麼將會看到對應"/dev/pts/6"的終端上面會顯示相應的字符了。 

 

*運行tty什麼也不輸出,而後查看其退出碼: 

[quietheart@lv-k etc]$ tty -s 

[quietheart@lv-k etc]$ echo $? 

這裏,使用shell的命令"echo $?"來顯示上一條命令的退出狀態碼。狀態碼的含義以下: 

0 表示標準輸入是一個終端。 

1 表示標準輸入不是一個終端。 

2 表示給定的參數是不正確的參數。 

3 表示發生了寫錯誤。 

 

[其它] 

*基本概念: 

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系統下的COM一、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從遠端獲取了一個字符時,該字符就會經過m二、s2傳遞給 getty程序,而getty程序就會經過s二、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 

 

*實踐:

如下過程是在ubuntu上面的實踐結果。 

1,虛擬終端/dev/tty*和僞終端/dev/pts/*: 

假設5個xterm終端的話,會發現/dev下面有一個/dev/ptmx /和5個/dev/pts/* 

而若是用"[Ctrl][Alt]F1"進入一個終端的話,就會發現/dev下面多出一個/dev/tty1 

 

2,查看終端的方法: 

使用命令"tty"能夠查看當前對應的終端,命令"ps -ax"能夠查看全部程序以及對應的終端。經過這個命令,發現若是多開一個screen程序,或者用telnet登錄以後,那麼機器上面就會多一個/dev/pts/*。可知,通常僞終端用戶模擬終端程序。 

 

3,向指定終端發送信息: 

若是運行"echo hello >/dev/tty2", 

那麼"[Ctrl][Alt]F2"打開"/dev/tty2"對應的終端,就會發現剛纔發送的hello了。 

注意,若是發送"echo -n ls >/dev/tty2"那麼會顯示ls,可是回車以後,並無執行ls。可見:ttyN是表明linux的純命令行終端,而寫到這個終端的字符串只是作爲這個終端的輸出,並無當作終端的輸入處理。 

 

若是運行"echo hello >/dev/pts/2", 

那麼,就能夠在xterm的第二個窗口看到hello了。可知,/dev/pts/n是Xwindows模式下的僞終端. 

 

參考資料: 

http://blog.csdn.net/freeman1975/archive/2009/10/19/4696781.aspx 

"info tty" 

"man tty

相關文章
相關標籤/搜索