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