日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 终端(TTY)

發(fā)布時(shí)間:2023/12/20 linux 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 终端(TTY) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TTY 是 Teletype Teletypewriter 的縮寫(xiě),原來(lái)是指電傳打字機(jī),后來(lái)這種設(shè)備逐漸鍵盤(pán)和顯示器取代。不管是電傳打字機(jī)還是鍵盤(pán)顯示器,都是作為計(jì)算機(jī)的終端設(shè)備存在的,所以 TTY 也泛指計(jì)算機(jī)的終端(terminal)設(shè)備。

為了支持這些 TTY 設(shè)備,Linux 實(shí)現(xiàn)了一個(gè)叫做 TTY 的子系統(tǒng)。所以 TTY 既指終端,也指 Linux 的 TTY 子系統(tǒng),當(dāng)然 TTY 還有更豐富(混亂)的含義,本文試圖把它們解釋清楚。本文中演示部分使用的環(huán)境為 ubuntu 18.04。

硬件終端 terminal(TTY)

早期的終端(terminal) 是一臺(tái)獨(dú)立于計(jì)算機(jī)的機(jī)器(teletype 即, TTY),大概像下面的樣子:

它終端通過(guò)線纜與計(jì)算機(jī)連接,并完成計(jì)算機(jī)的輸入輸出功能:

現(xiàn)在物理終端實(shí)際上已經(jīng)滅絕了,我們看到的所有 TTY 都是模擬視頻終端,即軟件仿真出來(lái)的終端。可以通過(guò) toe -a 命令查看系統(tǒng)支持的終端類型,不要奇怪,這是一個(gè)挺長(zhǎng)的列表。

控制臺(tái) console

提到終端就不能不提控制臺(tái) console。控制臺(tái)的概念與終端含義非常相近,其實(shí)現(xiàn)在我們經(jīng)常用它們表示相同的東西,但是在計(jì)算機(jī)的早期時(shí)代,它們確實(shí)是不同的東西。


一些數(shù)控設(shè)備(比如數(shù)控機(jī)床)的控制箱,通常會(huì)被稱為控制臺(tái),顧名思義,控制臺(tái)就是一個(gè)直接控制設(shè)備的面板,上面有很多控制按鈕。

在計(jì)算機(jī)里,把那套直接連接在電腦上的鍵盤(pán)和顯示器就叫做控制臺(tái)。而終端是通過(guò)串口連接上的,不是計(jì)算機(jī)自身的設(shè)備,而控制臺(tái)是計(jì)算機(jī)本身就有的設(shè)備,一個(gè)計(jì)算機(jī)只有一個(gè)控制臺(tái)。

計(jì)算機(jī)啟動(dòng)的時(shí)候,所有的信息都會(huì)顯示到控制臺(tái)上,而不會(huì)顯示到終端上。這同樣說(shuō)明,控制臺(tái)是計(jì)算機(jī)的基本設(shè)備,而終端是附加設(shè)備。計(jì)算機(jī)操作系統(tǒng)中,與終端不相關(guān)的信息,比如內(nèi)核消息,后臺(tái)服務(wù)消息,都可以顯示到控制臺(tái)上,但不會(huì)顯示到終端上。比如在啟動(dòng)和關(guān)閉 Linux 系統(tǒng)時(shí),我們可以在控制臺(tái)上看到很多的內(nèi)核信息(下圖來(lái)自 vSphere Client 中的 "Virtual Machine Console"):

現(xiàn)在終端和控制臺(tái)都由硬件概念,逐漸演化成了軟件的概念。

簡(jiǎn)單的說(shuō),能直接顯示系統(tǒng)消息的那個(gè)終端稱為控制臺(tái),其他的則稱為終端(控制臺(tái)也是一個(gè)終端)。或者我們?cè)谄綍r(shí)的使用中壓根就不區(qū)分 Linux 中的終端與控制臺(tái)。

下面的例子是通過(guò) /dev/console 文件向控制臺(tái)發(fā)送消息,這個(gè)這個(gè)例子我們可以看到控制臺(tái)與終端的一點(diǎn)點(diǎn)不同之處。
打開(kāi) vSphere Client 中的 "Virtual Machine Console"(即控制臺(tái)),默認(rèn)顯示的是 tty1:

通過(guò)其他的終端向 /dev/console 中寫(xiě)入字符串 "hello world":
root@esearch:~# echo "hello world" > /dev/console

字符串顯示在了控制臺(tái)中。然后通過(guò) Ctrl + Alt + F2 把控制臺(tái)中的終端切換到 tty2,再次向 /dev/console 寫(xiě)入字符串:
root@esearch:~# echo "hello world" > /dev/console

這次字符串寫(xiě)到了 tty2 中,這說(shuō)明 Linux 總是把寫(xiě)入 /dev/console 的內(nèi)容會(huì)顯示在控制臺(tái)中當(dāng)前的虛擬終端(tty1-tty6)里。

TTY 設(shè)備

從歷史上看,終端剛開(kāi)始就是終端機(jī),配有打印機(jī),鍵盤(pán),帶有一個(gè)串口,通過(guò)串口傳送數(shù)據(jù)到主機(jī)端,然后主機(jī)處理完交給終端打印出來(lái)。電傳打字機(jī)(teletype)可以被看作是這類設(shè)備的統(tǒng)稱,因此終端也被簡(jiǎn)稱為 TTY(teletype 的縮寫(xiě))。
如下圖所示(下圖來(lái)自互聯(lián)網(wǎng)):

UART 驅(qū)動(dòng)
如上圖所示,物理終端通過(guò)電纜連接到計(jì)算機(jī)上的 UART(通用異步接收器和發(fā)射器)。操作系統(tǒng)中有一個(gè) UART 驅(qū)動(dòng)程序用于管理字節(jié)的物理傳輸。

行規(guī)范
上圖中內(nèi)核中的 Line discipline(行規(guī)范)用來(lái)提供一個(gè)編輯緩沖區(qū)和一些基本的編輯命令(退格,清除單個(gè)單詞,清除行,重新打印),主要用來(lái)支持用戶在輸入時(shí)的行為(比如輸錯(cuò)了,需要退格)。

TTY 驅(qū)動(dòng)
TTY 驅(qū)動(dòng)用來(lái)進(jìn)行會(huì)話管理,并且處理各種終端設(shè)備。

UART 驅(qū)動(dòng)、行規(guī)范和 TTY 驅(qū)動(dòng)都位于內(nèi)核中,它們的一端是終端設(shè)備,另一端是用戶進(jìn)程。因?yàn)樵?Linux 下所有的設(shè)備都是文件,所以它們?nèi)齻€(gè)加在一起被稱為 "TTY 設(shè)備",即我們常說(shuō)的 TTY。

從軟件仿真終端到偽終端

后來(lái)的終端慢慢演變成了鍵盤(pán) + 顯示器。如果我們要把內(nèi)容輸出到顯示器,只要把這些內(nèi)容寫(xiě)入到顯示器對(duì)應(yīng)的 TTY 設(shè)備就可以了,然后由 TTY 層負(fù)責(zé)匹配合適的驅(qū)動(dòng)完成輸出,這也是 Linux 控制臺(tái)的工作原理(下圖來(lái)自互聯(lián)網(wǎng)):

上圖中,TTY 驅(qū)動(dòng)和行規(guī)范的行為與前面的示例類似,但不再有 UART 或物理終端。相反,軟件仿真出視頻終端,并最終被渲染到 VGA 顯示器。注意,這里出現(xiàn)了軟件仿真終端,它們是運(yùn)行在內(nèi)核態(tài)的。顯示器和 vSphere Client "Virtual Machine Console" 中的 tty1-tty6 都是軟件仿真終端

/dev/tty1-/dev/tty6 是這些仿真終端在文件系統(tǒng)中的表示,程序通過(guò)對(duì)這些文件的讀寫(xiě)實(shí)現(xiàn)對(duì)仿真終端的讀寫(xiě)。

如果我們?cè)谟脩艨臻g也進(jìn)行終端仿真,情況會(huì)變得更加靈活,下圖是 xterm 及其克隆的工作方式(下圖來(lái)自互聯(lián)網(wǎng)):

為了便于將終端仿真移入用戶空間,同時(shí)仍保持 TTY 子系統(tǒng)(TTY 子系統(tǒng)指 TTY 驅(qū)動(dòng)和行規(guī)范)的完整,偽終端被發(fā)明了出來(lái)(pseudo terminal 或 pty)。偽終端在內(nèi)核中分為兩部分,分別是 master side 和 在 TTY 驅(qū)動(dòng)中實(shí)現(xiàn)的 slave side。注意上圖中的 xterm,這是一個(gè)運(yùn)行在用戶態(tài)的終端仿真程序,比如 Ubuntu Desktop 中的 GNOME Terminal:

當(dāng)創(chuàng)建一個(gè)偽終端時(shí),會(huì)在 /dev/pts 目錄下創(chuàng)建一個(gè)設(shè)備文件:

如果是通過(guò) PuTTY 等終端仿真程序通過(guò) SSH 的方式遠(yuǎn)程連接 Linux,那么終端仿真程序通過(guò) SSH 與 PTY master side 交換數(shù)據(jù)。

終端與偽終端的區(qū)別

至此我們可以得出這樣的結(jié)論:現(xiàn)在所說(shuō)的終端已經(jīng)不是硬件終端了,而是軟件仿真終端(終端模擬軟件)。
關(guān)于終端和偽終端,可以簡(jiǎn)單的理解如下:

  • 真正的硬件終端基本上已經(jīng)看不到了,現(xiàn)在所說(shuō)的終端、偽終端都是軟件仿真終端(即終端模擬軟件)

  • 一些連接了鍵盤(pán)和顯示器的系統(tǒng)中,我們可以接觸到運(yùn)行在內(nèi)核態(tài)的軟件仿真終端(tty1-tty6)

  • 通過(guò) SSH 等方式建立的連接中使用的都是偽終端

  • 偽終端是運(yùn)行在用戶態(tài)的軟件仿真終端

總結(jié)

通過(guò)本文我們可以了解到,真正的硬件終端基本上已經(jīng)看不到了。在一些連接了鍵盤(pán)和顯示器的系統(tǒng)中(當(dāng)然也包括一些 vsphere 等虛擬環(huán)境),我們可以接觸到運(yùn)行在內(nèi)核態(tài)的軟件仿真終端。而我們使用最多的則是偽終端。

本文參考:

https://www.cnblogs.com/sparkdev/p/11460821.html

侵權(quán)刪


推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語(yǔ)言

我的知識(shí)小密圈

關(guān)注公眾號(hào),后臺(tái)回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤(pán)鏈接。

歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~

總結(jié)

以上是生活随笔為你收集整理的Linux 终端(TTY)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。