Linux 中的 console terminal tty pty pts 有哪些區別?

時間 2021-05-31 03:32:47

1樓:藍貓淘氣三千問

說起這幾個東西,需要提一下幾十年前的計算機。40幾年前,計算機有點大,就像下圖那樣:

這麼大的計算機需要控制台(console)來配置、管理和監控,所以就有了下面這個東東(console):

控制台需要連線顯示裝置,當時的技術要求連線顯示裝置的線纜要短,所以控制台一般和主機放在一起。

當多使用者使用主機時候,不可能一起擠在乙個房間裡去搶輸入輸出裝置吧。所以就有了遠端連線的終端(terminal),就是下圖這個東西:

tty原意是遠端輸入機(teletypewriter)的意思。現在在unix系統中,tty的意思是 text terminal 的意思。unix系統中的tty跟下圖的東東沒什麼關係了。

上面給出的物理裝置在Unix-like系統中依然存在,只不過被抽象成了裝置檔案了(device file),畢竟Unix中一切皆檔案。在 /dev 目錄下,可以找到他們的影子。

/dev/console 是乙個字元型的裝置檔案。

$ ls -l /dev/console

crw------- 1 root root 5, 1 Sep 1 20:25 /dev/console

在 GNU/Linux 和 Mac OS X 上,都有terminal程式,開啟乙個 terminal 程式就對應乙個 tty (text terminal) 裝置檔案。做乙個實驗驗證一下。

開啟乙個 terminal:

$ echo 'haha' > /dev/tty

haha

往 /dev/tty 寫入內容會在當前terminal裡回顯。

如果同時存在兩個terminal呢?再開啟乙個terminal試試看:

$ echo 'haha' > /dev/tty

haha

同樣再當前terminal回顯,但是回頭看看乙個terminal,並沒有顯示『haha』。

其實每次開啟terminal時會有個唯一的tty檔案與其對應,上面第一次開啟的terminal 對應的是 /dev/ttys000, 第二次開啟的terminal對應的是/dev/ttys001

。而 /dev/tty 會根據當前活動的terminal去找到對應檔案ttys000或者ttys001。

基於上面的解釋,可以實現在乙個terminal上向另外乙個terminal上寫內容:

在第乙個terminal上執行:

$ echo haha > /dev/ttys001

haha 會顯示在第二個terminal上。

知道了tty,pty(pseudo tty)偽tty(text terminal)就沒什麼玄妙的了。pty在什麼場景下用到呢?使用 ssh 客戶端遠端連線到伺服器系統上,那麼使用者操作的文字介面就是乙個虛擬終端,對應乙個/dev/ptys。

dev/pty可以有多個,比如 /dev/ptys1, /dev/ptys2等,對應多個ssh連線。

利用上面的知識,可以在偽終端上向其他使用者傳送訊息,同樣其他使用者可以傳送訊息過來,簡直就是IM通訊工具啊。

例項:1. 使用w命令找到當前系統登入的使用者以及其所在的偽終端。

$ wlijianyo pts/28 172.23.0.

48 14:56 0.00s 0.

40s 0.04s sshd: lijianyong [priv]

damon pts/30 172.23.0.48 15:36 1:58m 0.06s 0.06s -bash

輸出的第一列是使用者名稱,第二列是其偽終端。

2. 給使用者發訊息

$ echo 'hello damon, how about go out for fun this evening?' > /dev/pts/30

其實有個Linux工具write可以做同樣的事兒,可以試試看。

在開啟對第乙個終端上(pts/28)執行:

write lijianyong pts/30

然後進入「等待你輸入訊息「對狀態,繼續輸入,回車後輸入對內容會顯示在 pts/30終端上。

順便提一下,write 命令受 mesg 命令影響。mesg 控制著其他使用者是否有權向你的終端寫入訊息。當對方(比如pts/30)上執行了 mesg n命令,表示關閉其他使用者當寫入許可權。

這時如果使用write lijianyong pts/30就傳送訊息了。

但是可用通過向 /dev/pts/30 寫入訊息繞過 mesg 的限制。

Linux 系統 proc meminfo 中的 DirectMap2M DirectMap4k 是什麼意思?

海楓 如果了解Linux的虛擬記憶體機制,就會清楚以下事實 1 32位系統,核心態虛擬空間 3G,3G 896M 這段空間為線性對映空間,它直接對映到 0,896M 物理空間,這個空間在OS執行過程中永遠也不會變 2 64位系統,這個線性空間變大了,物理記憶體有多大,線性空間就有多大,這個對映也是不...

Linux系統中,extlinux conf這個檔案是幹什麼的?

超級描邊已部署 搜了一下,貌似是syslinux引導的配置檔案電腦啟動時,會先載入MBR usr lib syslinux mbr.bin 然後MBR查詢那些活動的分割槽 標註了可啟動的 找到這個分割槽後,卷啟動記錄程式 VBR volume boot record 將被執行。如果是ext2 3 4...

為什麼linux中sched autogroup enabled開啟後會造成效能下降?

參考sched 7 sched 7 Linux manual page The effect of autogrouping is that the two groups will each receive half of the CPU cycles.That is,the video playe...