Linux中的tty、pts、pty等概念辨析
Linux中的tty、pts、pty等概念辨析
基本概念
tty、pty、pts、ptmx
- tty(終端設(shè)備的統(tǒng)稱):tty一詞源于Teletypes,或teletypewriters,原來指的是電傳打字機(jī),是通過串行線用打印機(jī)鍵盤通過閱讀和發(fā)送信息的東西,后來這東西被鍵盤和顯示器取代,所以現(xiàn)在叫終端比較合適。終端是一種字符型設(shè)備,他有多種類型,通常使用tty來簡稱各種類型的終端設(shè)備。
- pty(虛擬終端):
但是假如我們遠(yuǎn)程telnet到主機(jī)或使用xterm時(shí)不也需要一個(gè)終端交互么?是的,這就是虛擬終端pty(pseudo-tty) - pts/ptmx(pts/ptmx結(jié)合使用,進(jìn)而實(shí)現(xiàn)pty):
pts(pseudo-terminal slave)是pty的實(shí)現(xiàn)方法,和ptmx(pseudo-terminal master)配合使用實(shí)現(xiàn)pty。
tty[n]和ttyS[n]
-
tty[n] 一般是和物理的控制臺(tái)或物理的終端設(shè)備相聯(lián)系。例如在linux下tty1-6是控制臺(tái)下的六個(gè)虛擬終端,控制臺(tái)是指直接聯(lián)系到主機(jī)的顯示器+鍵盤/鼠標(biāo)。通常我們?cè)趌inux下看到的控制臺(tái)(console)是由幾個(gè)設(shè)備完成的。分別是/dev/tty[N](其中tty0就是/dev/console,而tty1,tty2就是不同的虛擬終端(virtual console)).通常使用熱鍵Alt+F[n](如Alt+F2)來在這些虛擬終端之間進(jìn)行切換。所有的這些tty設(shè)備都是由linux/drivers/char/console.c和vt.c對(duì)應(yīng)。
-
ttyS[n] 是串行端口終端(Serial PortTerminal)是使用電腦串行端口連接的終端設(shè)備。電腦把每個(gè)串行端口都看作是個(gè)字符設(shè)備。有段時(shí)間這些串行端口設(shè)備通常被稱為終端設(shè)備,因?yàn)槟菚r(shí)他的最大用途就是用來連接終端。ttyS1和ttyS2是第一個(gè)和第二個(gè)串口終端,即通過串行口連接的終端設(shè)備。但實(shí)際上今天真正的串行終端硬件幾乎見不到了,通常可以用windows下的超級(jí)終端程序和linux下的minicom這樣的模擬終端程序來模擬它。甚至ttyUSB0這樣的USB-串口轉(zhuǎn)換器的模擬串口也出現(xiàn)了。所以tty現(xiàn)在也不全是物理的設(shè)備了。
使用pty這樣的虛擬終端設(shè)備的主要有兩種:一種是由Xwindow下的模擬終端程序使用的,另一種就是通過網(wǎng)絡(luò)遠(yuǎn)程登錄上去的終端模擬程序使用的,如putty,SecuCRT之類。甚至你從一臺(tái)主機(jī)的控制臺(tái)tty1上用telnet/ssh登錄了另一臺(tái)聯(lián)網(wǎng)主機(jī),對(duì)于被連接的主機(jī),你使用的仍然是一臺(tái)pty——虛擬終端。
總而言之,物理和虛擬的區(qū)分已經(jīng)越來越模糊了,沒必要那么較真。Unix的設(shè)計(jì)的哲學(xué)就是“一切皆文件”,在使用上沒什么分別。像在PLAN9這樣的概念OS中,連網(wǎng)絡(luò)服務(wù)也都是文件了,更加的大一統(tǒng)了,其實(shí)不是挺好的嗎?
/dev/pty、/dev/tty[n]、/dev/console、/dev/pts/[n]、/dev/ptmx
第一個(gè)用戶登陸,console的設(shè)備文件為/dev/pts/0,第二個(gè)為/dev/pts/1,以此類推。這里的0、1、2、3不是具體的標(biāo)準(zhǔn)輸入或輸出,而是整個(gè)控制臺(tái)。你可嘗試 echo "aaaaaa" > /dev/pts0,這個(gè)在后面的實(shí)驗(yàn)部分會(huì)展示。
-
/dev/tty
當(dāng)前控制終端。/dev/tty 指的是當(dāng)前所處的終端,輸出到此的內(nèi)容只會(huì)顯示在當(dāng)前工作的終端顯示器上;可以使用命令ps –ax來查看進(jìn)程與哪個(gè)控制終端相連。對(duì)于你登錄的shell,/dev/tty就是你使用的終端,設(shè)備號(hào)是(5,0)。使用命令tty可以查看自己具體對(duì)應(yīng)哪個(gè)實(shí)際終端設(shè)備。/dev/tty有些類似于到實(shí)際所使用終端設(shè)備的一個(gè)聯(lián)接。 -
/dev/console 和 /dev/tty[n]
控制臺(tái)終端-系統(tǒng)控制臺(tái) 。在Linux系統(tǒng)中,計(jì)算機(jī)顯示器通常被稱為控制臺(tái)終端(Console)。它仿真了類型為Linux的一種終端(TERM=Linux),并且有一些設(shè)備特殊文件與之相關(guān)聯(lián):tty0、tty1、tty2等.當(dāng)你在控制臺(tái)上登錄時(shí),使用的是tty1。使用Alt+[F1—F6]組合鍵時(shí),我們就可以切換到tty2、tty3等上面去.tty1–tty6等稱為虛擬終端,而tty0則是當(dāng)前所使用虛擬終端的一個(gè)別名,即/dev/console就是tty0。系統(tǒng)所產(chǎn)生的信息會(huì)發(fā)送到該終端上。因此不管當(dāng)前正在使用哪個(gè)虛擬終端,系統(tǒng)信息都會(huì)發(fā)送到控制臺(tái)終端上。你可以登錄到不同的虛擬終端上去,因而可以讓系統(tǒng)同時(shí)有幾個(gè)不同的會(huì)話期存在.只有系統(tǒng)或超級(jí)用戶root可以向/dev/tty0進(jìn)行寫操作。 -
/dev/pts/[n] 和 /dev/ptmx
文件/dev/ptmx是一個(gè)字符文件,主數(shù)字為5,次數(shù)字為2,通常為模式0666,所有者組為root.root。它用于創(chuàng)建偽終端主對(duì)和從對(duì)。
當(dāng)進(jìn)程打開/dev/ptmx時(shí),它將獲得偽終端主設(shè)備(PTM)的文件描述符,并在/dev/pts目錄中創(chuàng)建偽終端從設(shè)備(PTS)。通過打開/dev/ptmx獲得的每個(gè)文件描述符都是一個(gè)獨(dú)立的PTM,具有自己的關(guān)聯(lián)PTS,可以通過將文件描述符傳遞給ptsname找到其路徑。
/dev/pts/[n] 是遠(yuǎn)程登陸(telnet,ssh等)后創(chuàng)建的控制臺(tái)設(shè)備文件所在的目錄。由于可能有好幾千個(gè)用戶登陸,所以/dev/pts其實(shí)是動(dòng)態(tài)生成的,不像其他設(shè)備文件是構(gòu)建系統(tǒng)時(shí)就已經(jīng)產(chǎn)生的硬盤節(jié)點(diǎn)(如果未使用devfs)。
/dev/tty[n]的偽終端跟/dev/pts/[n]的偽終端有什么區(qū)別?為什么/dev/tty[n]可以代表偽終端的情況下,還要分出/dev/pts/[n]的偽終端呢?邏輯上它們都是終端設(shè)備,屬于字符設(shè)備的一種,說到不同多半是歷史原因形成的,其實(shí)也沒什么大不了的區(qū)別。
實(shí)驗(yàn)
tty命令,可通過手冊(cè)查到:
tty - print the file name of the terminal connected to standard input
即打印連接到標(biāo)準(zhǔn)輸入的終端的文件名。
我們?cè)谀撑_(tái)機(jī)器下打開一個(gè)終端,并執(zhí)行l(wèi)s /dev/pt* 來查看設(shè)備目錄下的文件:
這時(shí),我們?cè)傩麻_一個(gè)終端,并再次執(zhí)行l(wèi)s /dev/pt*和在新終端下執(zhí)行tty:
很明顯,我們每次新開一個(gè)終端,就會(huì)在/dev/pts目錄下新生成一個(gè)設(shè)備文件,比如這次我們新生成的就是文件2。當(dāng)前終端的編號(hào)可以通過tty命令來查看。我們甚至可以在它們之間進(jìn)行交互,比如我們知道新打開的終端編號(hào)為2,那我們可以在原終端上向它輸出信息:
echo "hello" > /dev/pts/2這時(shí),在新打開的終端/dev/pts/2上,我們可以看到:
Ref:
https://www.cnblogs.com/zengkefu/p/5558851.html
http://blog.chinaunix.net/uid-17008081-id-2838360.html
https://www.cnblogs.com/zengkefu/p/5558840.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Linux中的tty、pts、pty等概念辨析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea连接跳板机_跳板机服务(jump
- 下一篇: Linux下C/C++程序编译链接加载过