2021-02-27 分類(lèi): 網(wǎng)站建設(shè)
終端(Terminal)、控制臺(tái)(Console)、tty和shell,這些概念是我們經(jīng)常聽(tīng)到的概念。單獨(dú)說(shuō)一個(gè)概念,你可能七七八八說(shuō)一大堆。但具體說(shuō)到這幾個(gè)概念的區(qū)別,估計(jì)很多人都說(shuō)不上來(lái)。今天創(chuàng)新互聯(lián)就一起了解一下這幾個(gè)概念的差異。
我們先說(shuō)一下控制臺(tái)和終端,這些概念都有歷史淵源,如果從歷史上進(jìn)行了解,會(huì)更加的清晰的明白這些概念的差異。
早期計(jì)算機(jī)精貴,一臺(tái)主機(jī),連很多終端,終端為主機(jī)提供了人機(jī)接口,很多人都通過(guò)終端使用主機(jī)的資源。終端有字符啞終端和圖形終端兩種。
而控制臺(tái)是另一種人機(jī)接口。 不通過(guò)串行線(xiàn)路與主機(jī)相連,直接安在主機(jī)上,這是人控制主機(jī)的第一人機(jī)接口。
可以想象成主機(jī)上有塊面板,面板上方小燈閃,人得站著才能夠著它(控制臺(tái)),主機(jī)上面一些電纜延伸到很多人辦公桌的屏幕和鍵盤(pán)上(終端)。
為了更加清晰的了解這些概念,我們給出一個(gè)老爺機(jī)的實(shí)物圖,紅色方框是具體的說(shuō)明。
隨著硬件技術(shù)的飛速發(fā)展,過(guò)去那種多人使用同一臺(tái)計(jì)算機(jī)的時(shí)代已經(jīng)過(guò)去。但如果我們連接數(shù)據(jù)中心的服務(wù)器的話(huà),會(huì)出現(xiàn)多個(gè)人同時(shí)連接同一臺(tái)服務(wù)器的情況。但此時(shí)我們并不是通過(guò)硬件終端連接的,而是通過(guò)xshell或者Eterm等軟件進(jìn)行連接的。
隨著技術(shù)的發(fā)展,Linux操作系統(tǒng)在軟件層面保留了對(duì)硬件的兼容,因此在操作系統(tǒng)內(nèi)部出現(xiàn)了多種概念。下面本文逐個(gè)解釋一下這些概念的差異。
1. 名詞解釋
tty(teletype):電傳打字機(jī)
ttyS(tty serial) :tty + 串行
pty(pseudo-tty):偽君子 + tty=偽終端
pts(pseudo-terminal slave):偽君子 + 終端 + 女仆=偽終端從端
ptmx(pseudo-terminal master):偽君子 + 終端 + 主人=偽終端主端
1> tty(終端設(shè)備的統(tǒng)稱(chēng)):
tty一詞源于Teletypes,或teletypewriters,原來(lái)指的是電傳打字機(jī),是通過(guò)串行線(xiàn)用打印機(jī)鍵盤(pán)通過(guò)閱讀和發(fā)送信息的東西,后來(lái)這東西被鍵盤(pán)和顯示器取代,所以現(xiàn)在叫終端比較合適。
終端是一種字符型設(shè)備,他有多種類(lèi)型,通常使用tty來(lái)簡(jiǎn)稱(chēng)各種類(lèi)型的終端設(shè)備。
2> pty(虛擬終端):
但是假如我們遠(yuǎn)程telnet到主機(jī)或使用xterm時(shí)不也需要一個(gè)終端交互么?是的,這就是虛擬終端pty(pseudo-tty)
3> 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。
2. 分類(lèi)
3.類(lèi)別解釋
串行端口終端
歷史上只有這些串口設(shè)備才被叫做終端,也即現(xiàn)在的串行端口終端。計(jì)算機(jī)把每個(gè)串行設(shè)備看作一個(gè)字符設(shè)備。如你所知,Linux把設(shè)備當(dāng)作文件,對(duì)應(yīng)的設(shè)備文件名是ttyS。
偽終端/模擬終端
通過(guò)X Windows(圖形界面)、SSH、telnet等登入主機(jī)所用的終端。成對(duì)的邏輯終端設(shè)備,包含主端和從端。有兩套偽終端接口:
偽終端即假的,由模擬軟件(gnome-terminal,urxvt,mlterm,xterm、konsole等)模擬出來(lái)的終端,ctrl + alt + T出來(lái)的那個(gè)小黑框就是其中一種
對(duì)master的操作會(huì)反應(yīng)到slave上
控制終端
控制終端是指能夠控制一個(gè)、一套設(shè)備或者幾套設(shè)備的終端控制器;
/dev/tty是一個(gè)應(yīng)用程序概念,面對(duì)進(jìn)程;
/dev/tty會(huì)映射到當(dāng)前使用的終端,使用命令tty查看其當(dāng)前指向的“設(shè)備”
tty(控制終端)會(huì)映射到你正在使用的任何類(lèi)型的終端上,用tty命令查看
控制臺(tái)終端/virtual consoles虛擬控制臺(tái)
4. 其他名稱(chēng)解釋
啞終端(瘦客戶(hù)端)
早期的計(jì)算機(jī)終端是通過(guò)串行RS-232通信的,它只能解釋有限數(shù)量的控制碼(CR,LF
等),但沒(méi)有能力處理執(zhí)行特殊的轉(zhuǎn)義序列功能(如清行、清屏或控制光標(biāo)的位置)。
總之就是很有限,很基本的終端;
X Windows下按ctrl + alt + Fn(n為特定數(shù)字時(shí)是X Windows),其他時(shí)候按alt + Fn;
你得到的虛擬控制臺(tái)終端,就是模仿的字符啞終端。
智能終端(胖客戶(hù)端)
智能終端就是有能力處理轉(zhuǎn)義序列,也就是說(shuō)處理能力較強(qiáng)的終端機(jī)。
虛擬終端
本質(zhì)上現(xiàn)代的終端都虛擬化了,但虛擬終端可特指?jìng)谓K端,或者說(shuō)模擬終端
虛擬控制臺(tái)
與控制臺(tái)終端同義,注意不要混淆虛擬終端與虛擬控制臺(tái),虛擬終端廣義上包含虛擬控制臺(tái)。
現(xiàn)代控制臺(tái)
1. 控制臺(tái)與終端區(qū)別
在一些操作系統(tǒng)(比如Linux和FreeBSD)中console有多個(gè)tty(用特定的組合鍵能夠在這些tty之間切換)。有時(shí)他們的命名很混亂,操作系統(tǒng)文檔可能把那些tty叫做”console“ ”virtual console“ ”virtual terminal“等
/dev/console類(lèi)似一個(gè)一個(gè)緩沖結(jié)果,用來(lái)實(shí)現(xiàn)對(duì)內(nèi)核的打印,比如內(nèi)核把要打印的內(nèi)容裝入緩沖區(qū),然后由console來(lái)決定打印到哪里吧(如tty0或單用戶(hù)模式)。所以說(shuō)/dev/console是用來(lái)外接控制臺(tái)的。
2. Linux控制臺(tái)
/dev/console默認(rèn)是到/dev/tty0的鏈接(而tty0又指當(dāng)前虛擬控制臺(tái),即atl+Fn切換到哪);
即console -> tty0 -> ttyn;
/dev/console的指向可以改變,取決于系統(tǒng)配置,指向tty0,ttyn,或串行設(shè)備;
/dev/console仍然默認(rèn)映射到/dev/tty0;
但已完全由內(nèi)核管理,控制它的映射;
如果一個(gè)終端設(shè)備要實(shí)現(xiàn)console功能,必須在單用戶(hù)模式才能登入console,才可以向內(nèi)核注冊(cè)一個(gè)struct console結(jié)構(gòu)(內(nèi)核命令console=);
Ubuntu 18.04基于Linux內(nèi)核v4.15,屬于后一種,現(xiàn)在的情況
控制終端、tty0、console都是指向,但指向的范圍和順序不同
Shell,殼,與Linux的核kernel對(duì)應(yīng)。顧名思義就是機(jī)器的核心外面的一層殼,用于人機(jī)交互,只要是人與電腦之間交互的接口,就可以稱(chēng)為 Shell;
Shell=解釋器,那解釋什么呢?
誤解1:常見(jiàn)的對(duì)Shell 這個(gè)概念的誤解,認(rèn)為一定要是命令行的 Shell 才叫 Shell。其實(shí) ,我們熟悉的 GNOME、KDE 等圖形界面也都是 Shell,只不過(guò)是 GUI(圖形化) Shell。
誤解2:混同Shell與CLI(命令提示符),盡管指的是命令行下的Shell,這也是錯(cuò)的。對(duì)于命令行下的Shell,CLI命令提示符是Shell的核心,也是Shell負(fù)責(zé)交互的那一部分,但不是Shell的全部。對(duì)于圖形化的Shell,這一負(fù)責(zé)交互的部分,當(dāng)然由GUI,圖形界面來(lái)取代了。
GUI和CLI都是shell,shell既不屬于系統(tǒng)內(nèi)核,也與一般應(yīng)用程序不同,它屬于系統(tǒng)工具,可以算作操作系統(tǒng)的一部分,主要用來(lái)管理文件和運(yùn)行程序,并提供與用戶(hù)的交互。
用戶(hù) > (<) Shell > (<) 操作系統(tǒng)內(nèi)核
2. Shell有哪些
核是DOS,圖形化的殼叫Windows Explorer,命令行的殼叫command
核是Linux內(nèi)核
命令行的殼有bash(Linux一般默認(rèn)) 、sh 、csh 、ksh......
圖形化的殼有KDE、GNOME、CDE、 XFCE......
3. Shell與tty的關(guān)系
也即你向終端輸入命令(或GUI下點(diǎn)擊鼠標(biāo)),終端自己是不會(huì)解釋這些命令的,它只負(fù)責(zé)輸入輸出,而計(jì)算機(jī)是大爺,它只認(rèn)二進(jìn)制,不認(rèn)你的命令。真正把這些命令解釋成計(jì)算機(jī)明白的語(yǔ)言的是shell;
shell把一些信息適當(dāng)?shù)妮斔偷浇K端設(shè)備,也接收來(lái)自終端設(shè)備的輸入;
你每打開(kāi)一個(gè)終端,都會(huì)啟動(dòng)一個(gè)shell進(jìn)程與之關(guān)聯(lián)
在除了GUI占用的控制臺(tái)終端以外的字符啞終端上:shell進(jìn)程在用戶(hù)登陸之后才啟動(dòng)
shell進(jìn)程也可以沒(méi)有終端與之關(guān)聯(lián)
“在Ubuntu 18.04中,他們已經(jīng)改變了一些東西,你無(wú)法訪(fǎng)問(wèn)tty1,它總是顯示登錄屏幕。如果您已登錄,則無(wú)法訪(fǎng)問(wèn)tty2,因?yàn)樗鼘⒊蔀榈谝粋€(gè)登錄用戶(hù)的GUI。在tty7上顯示的兩個(gè)GUI的傳統(tǒng)已經(jīng)結(jié)束?!?/p>
1. ctrl + alt + T(被圖形化界面占用的tty2下的偽終端)
輸入tty
輸出/dev/pts/1
輸入echo "hello" > /dev/tty
輸出hello
輸入echo “hello” > /dev/tty0
輸出無(wú)
關(guān)機(jī)見(jiàn)hello
輸入echo “hello”> /dev/console
輸出無(wú)
關(guān)機(jī)見(jiàn)hello
2. ctrl + alt + F3(編號(hào)為tty3的虛擬控制臺(tái))
輸入tty
輸出tty3
輸入echo "hello" > /dev/tty
輸出hello
輸入echo “hello” > /dev/tty0
輸出hello
輸入echo “hello”> /dev/console
名稱(chēng)欄目:用了這么多年Linux,你清楚這些概念嗎?
轉(zhuǎn)載注明:http://jinyejixie.com/news14/103214.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、電子商務(wù)、定制網(wǎng)站、軟件開(kāi)發(fā)、品牌網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容