用了這么多年Linux,你清楚這些概念嗎?

2021-02-27    分類: 網(wǎng)站建設(shè)

終端(Terminal)、控制臺(Console)、tty和shell,這些概念是我們經(jīng)常聽到的概念。單獨說一個概念,你可能七七八八說一大堆。但具體說到這幾個概念的區(qū)別,估計很多人都說不上來。今天創(chuàng)新互聯(lián)就一起了解一下這幾個概念的差異。

歷史淵源

我們先說一下控制臺和終端,這些概念都有歷史淵源,如果從歷史上進行了解,會更加的清晰的明白這些概念的差異。


早期計算機精貴,一臺主機,連很多終端,終端為主機提供了人機接口,很多人都通過終端使用主機的資源。終端有字符啞終端和圖形終端兩種。

而控制臺是另一種人機接口。 不通過串行線路與主機相連,直接安在主機上,這是人控制主機的第一人機接口。

可以想象成主機上有塊面板,面板上方小燈閃,人得站著才能夠著它(控制臺),主機上面一些電纜延伸到很多人辦公桌的屏幕和鍵盤上(終端)。

為了更加清晰的了解這些概念,我們給出一個老爺機的實物圖,紅色方框是具體的說明。


現(xiàn)在的情況

隨著硬件技術(shù)的飛速發(fā)展,過去那種多人使用同一臺計算機的時代已經(jīng)過去。但如果我們連接數(shù)據(jù)中心的服務器的話,會出現(xiàn)多個人同時連接同一臺服務器的情況。但此時我們并不是通過硬件終端連接的,而是通過xshell或者Eterm等軟件進行連接的。

隨著技術(shù)的發(fā)展,Linux操作系統(tǒng)在軟件層面保留了對硬件的兼容,因此在操作系統(tǒng)內(nèi)部出現(xiàn)了多種概念。下面本文逐個解釋一下這些概念的差異。

1. 名詞解釋

  • -------tty-------:代指所有終端設(shè)備
  • -------pyt-------:沒有實際設(shè)備的其他虛擬終端
  • --pts --ptmx--:兩者結(jié)合,進而實現(xiàn)pty,是pty的實現(xiàn)方法

tty(teletype):電傳打字機

ttyS(tty serial) :tty + 串行

pty(pseudo-tty):偽君子 + tty=偽終端

pts(pseudo-terminal slave):偽君子 + 終端 + 女仆=偽終端從端

ptmx(pseudo-terminal master):偽君子 + 終端 + 主人=偽終端主端

1> tty(終端設(shè)備的統(tǒng)稱):

tty一詞源于Teletypes,或teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱讀和發(fā)送信息的東西,后來這東西被鍵盤和顯示器取代,所以現(xiàn)在叫終端比較合適。

終端是一種字符型設(shè)備,他有多種類型,通常使用tty來簡稱各種類型的終端設(shè)備。

2> pty(虛擬終端):

但是假如我們遠程telnet到主機或使用xterm時不也需要一個終端交互么?是的,這就是虛擬終端pty(pseudo-tty)

3> pts/ptmx(pts/ptmx結(jié)合使用,進而實現(xiàn)pty):

pts(pseudo-terminal slave)是pty的實現(xiàn)方法,和ptmx(pseudo-terminal master)配合使用實現(xiàn)pty。

2. 分類


3.類別解釋

串行端口終端

歷史上只有這些串口設(shè)備才被叫做終端,也即現(xiàn)在的串行端口終端。計算機把每個串行設(shè)備看作一個字符設(shè)備。如你所知,Linux把設(shè)備當作文件,對應的設(shè)備文件名是ttyS。

偽終端/模擬終端

通過X Windows(圖形界面)、SSH、telnet等登入主機所用的終端。成對的邏輯終端設(shè)備,包含主端和從端。有兩套偽終端接口:

  • BSD
  • master(主端)為 pty[p-za-e][0-9a-f],slave(從端)為 tty[p-za-e][0-9a-f]
  • 由于在編程時想找到合適的終端需要逐個嘗試,所以使用逐漸減少
  • UNIX 98
  • ptmx作為master設(shè)備,每次打開獲得master的信息,動態(tài)生成pts/n
  • 并不與實際物理設(shè)備相關(guān),大多數(shù)系統(tǒng)選擇這個接口作為pty實現(xiàn)

偽終端即假的,由模擬軟件(gnome-terminal,urxvt,mlterm,xterm、konsole等)模擬出來的終端,ctrl + alt + T出來的那個小黑框就是其中一種

對master的操作會反應到slave上

控制終端

控制終端是指能夠控制一個、一套設(shè)備或者幾套設(shè)備的終端控制器;

/dev/tty是一個應用程序概念,面對進程;

/dev/tty會映射到當前使用的終端,使用命令tty查看其當前指向的“設(shè)備”

  • X Windows下(圖形化界面):映射到pts,也即你開啟的是偽終端
  • 啞字符界面下(alt + Fn):映射到tty1-6中的一個,也即控制臺虛擬終端

tty(控制終端)會映射到你正在使用的任何類型的終端上,用tty命令查看

控制臺終端/virtual consoles虛擬控制臺

  • 控制臺終端(/dev/ttyn)是在系統(tǒng)視頻監(jiān)視器上全屏的顯示終端;
  • 其特殊性在于系統(tǒng)自動創(chuàng)建了64或6或10個(說法不一),且與cosloe關(guān)聯(lián);
  • tty0較特殊,指向當前控制臺終端,即你正在使用的ttyn;有些ttyn,如tty1,tty2可能由圖形化界面占用;
  • 圖形界面下:alt + Fn(ttyn)切換
  • 啞終端下:ctrl + alt + Fn(ttyn)切換

4. 其他名稱解釋

啞終端(瘦客戶端)

早期的計算機終端是通過串行RS-232通信的,它只能解釋有限數(shù)量的控制碼(CR,LF

等),但沒有能力處理執(zhí)行特殊的轉(zhuǎn)義序列功能(如清行、清屏或控制光標的位置)。

總之就是很有限,很基本的終端;

X Windows下按ctrl + alt + Fn(n為特定數(shù)字時是X Windows),其他時候按alt + Fn;

你得到的虛擬控制臺終端,就是模仿的字符啞終端。

智能終端(胖客戶端)

智能終端就是有能力處理轉(zhuǎn)義序列,也就是說處理能力較強的終端機。

虛擬終端

本質(zhì)上現(xiàn)代的終端都虛擬化了,但虛擬終端可特指偽終端,或者說模擬終端

  • 串行端口終端需要外接一個真的物理上的終端,一般個人PC很少用到
  • 控制終端比較特殊,是對其他的終端映射和管理,指的是當前用到的那個終端
  • 控制臺終端也叫虛擬控制臺,可以理解為虛擬終端的高權(quán)限版本
  • 所以,一般人在PC上會打開的都屬于虛擬終端

虛擬控制臺

與控制臺終端同義,注意不要混淆虛擬終端與虛擬控制臺,虛擬終端廣義上包含虛擬控制臺。

現(xiàn)代控制臺


1. 控制臺與終端區(qū)別

  • 控制臺:直接連到機器上的物理主終端(primary teminal)
  • 終端:文本的輸入輸出環(huán)境
  • console:/dev/console是系統(tǒng)控制臺,必須打開支持控制臺的物理實際設(shè)備;本質(zhì)上是一種訪問內(nèi)核的方式;一邊基于PC的顯示器鍵盤等物理控制臺,一邊面向用戶。

在一些操作系統(tǒng)(比如Linux和FreeBSD)中console有多個tty(用特定的組合鍵能夠在這些tty之間切換)。有時他們的命名很混亂,操作系統(tǒng)文檔可能把那些tty叫做”console“ ”virtual console“ ”virtual terminal“等

/dev/console類似一個一個緩沖結(jié)果,用來實現(xiàn)對內(nèi)核的打印,比如內(nèi)核把要打印的內(nèi)容裝入緩沖區(qū),然后由console來決定打印到哪里吧(如tty0或單用戶模式)。所以說/dev/console是用來外接控制臺的。

2. Linux控制臺

  • 過去

/dev/console默認是到/dev/tty0的鏈接(而tty0又指當前虛擬控制臺,即atl+Fn切換到哪);

即console -> tty0 -> ttyn;

/dev/console的指向可以改變,取決于系統(tǒng)配置,指向tty0,ttyn,或串行設(shè)備;

  • 現(xiàn)在(Linux 2.1.71開始)

/dev/console仍然默認映射到/dev/tty0;

但已完全由內(nèi)核管理,控制它的映射;

如果一個終端設(shè)備要實現(xiàn)console功能,必須在單用戶模式才能登入console,才可以向內(nèi)核注冊一個struct console結(jié)構(gòu)(內(nèi)核命令console=);

Ubuntu 18.04基于Linux內(nèi)核v4.15,屬于后一種,現(xiàn)在的情況

控制終端、tty0、console都是指向,但指向的范圍和順序不同

什么是Shell

Shell,殼,與Linux的核kernel對應。顧名思義就是機器的核心外面的一層殼,用于人機交互,只要是人與電腦之間交互的接口,就可以稱為 Shell;

Shell=解釋器,那解釋什么呢?

  • 交互式:等待你的命令,執(zhí)行你提交的命令(不止是命令行下的鍵盤輸入,還有圖形界面下的鼠標輸入)
  • 非交互式:不與你交互,直接讀取放在文件中的命令并執(zhí)行,這種放在文件中的命令,也被叫做腳本

誤解1:常見的對Shell 這個概念的誤解,認為一定要是命令行的 Shell 才叫 Shell。其實 ,我們熟悉的 GNOME、KDE 等圖形界面也都是 Shell,只不過是 GUI(圖形化) Shell。

誤解2:混同Shell與CLI(命令提示符),盡管指的是命令行下的Shell,這也是錯的。對于命令行下的Shell,CLI命令提示符是Shell的核心,也是Shell負責交互的那一部分,但不是Shell的全部。對于圖形化的Shell,這一負責交互的部分,當然由GUI,圖形界面來取代了。

GUI和CLI都是shell,shell既不屬于系統(tǒng)內(nèi)核,也與一般應用程序不同,它屬于系統(tǒng)工具,可以算作操作系統(tǒng)的一部分,主要用來管理文件和運行程序,并提供與用戶的交互。

用戶 > (<) Shell > (<) 操作系統(tǒng)內(nèi)核

2. Shell有哪些

  • Windows 9X下:

核是DOS,圖形化的殼叫Windows Explorer,命令行的殼叫command

  • Linux下:

核是Linux內(nèi)核

命令行的殼有bash(Linux一般默認) 、sh 、csh 、ksh......

圖形化的殼有KDE、GNOME、CDE、 XFCE......

3. Shell與tty的關(guān)系

  • tty是與計算機的輸入輸出相關(guān)的
  • Shell是與內(nèi)核相關(guān)的

也即你向終端輸入命令(或GUI下點擊鼠標),終端自己是不會解釋這些命令的,它只負責輸入輸出,而計算機是大爺,它只認二進制,不認你的命令。真正把這些命令解釋成計算機明白的語言的是shell;

shell把一些信息適當?shù)妮斔偷浇K端設(shè)備,也接收來自終端設(shè)備的輸入;

你每打開一個終端,都會啟動一個shell進程與之關(guān)聯(lián)

在除了GUI占用的控制臺終端以外的字符啞終端上:shell進程在用戶登陸之后才啟動

shell進程也可以沒有終端與之關(guān)聯(lián)

對前面內(nèi)容的實驗

“在Ubuntu 18.04中,他們已經(jīng)改變了一些東西,你無法訪問tty1,它總是顯示登錄屏幕。如果您已登錄,則無法訪問tty2,因為它將成為第一個登錄用戶的GUI。在tty7上顯示的兩個GUI的傳統(tǒng)已經(jīng)結(jié)束。”

1. ctrl + alt + T(被圖形化界面占用的tty2下的偽終端)

輸入tty

輸出/dev/pts/1

輸入echo "hello" > /dev/tty

輸出hello

輸入echo “hello” > /dev/tty0

輸出無

關(guān)機見hello

輸入echo “hello”> /dev/console

輸出無

關(guān)機見hello

2. ctrl + alt + F3(編號為tty3的虛擬控制臺)

輸入tty

輸出tty3

輸入echo "hello" > /dev/tty

輸出hello

輸入echo “hello” > /dev/tty0

輸出hello

輸入echo “hello”> /dev/console

名稱欄目:用了這么多年Linux,你清楚這些概念嗎?
轉(zhuǎn)載注明:http://www.bm7419.com/news14/103214.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、電子商務、定制網(wǎng)站、軟件開發(fā)、品牌網(wǎng)站制作品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)