Linux的使用者可能每天都會接觸到 Bash、Shell、控制台、終端。它們之間有什麼不同嗎?本文為你快速解釋這些概念以及它們的差別。
什麼是終端
首先我們來弄清楚什麼是終端(terminal)。按照百度百科的解釋是:“經由通信設施向計算機輸入程式和資料或接收計算機輸出處理結果的裝置。” 聽起來似乎有點晦澀,其實用台式PC機來舉例就很容易了解了。一台桌上型電腦是由主機(機箱)和很多外圍裝置組成的。主機裡邊包括主機闆、CPU、記憶體、硬碟、和其他晶片等等。外圍裝置包括顯示器、滑鼠、鍵盤、耳機、麥克風、和攝像頭等等。這些外圍裝置就被稱為終端,負責向主機輸入資料的就叫輸入終端,比如滑鼠、鍵盤、麥克風、攝像頭,負責接收主機輸出資料的裝置就被稱作輸出終端,比如顯示器、耳機。

是以有兩個概念我們這裡就清楚了:
計算機 = 主機 + 終端
終端 = 輸入終端 + 輸出終端
終端的類型
終端,除了可以分為輸入終端與輸出終端外,還可以按照與主機的距離可以本地終端和遠端終端,或者按照與主機的連接配接方式分成實體終端和虛拟終端。
舉個例子,比如我們在杭州的某個機房裡有一台伺服器,用VGA線接了一台顯示器,用USB連接配接了鍵盤,那麼這台顯示器和這個鍵盤就是伺服器的本地終端。假如我們在隔壁機房用序列槽線又接了一個顯示器和鍵盤,那它們就可以稱為遠端終端。不管是在本地機房還是隔壁機房,因為這幾個終端和伺服器都是通過實體裝置直接連接配接的,是以它們都被稱為實體終端。實體終端在 Linux中被辨別為 tty。它是teletype的縮寫,因為在計算機早期的時候,Ken Thompson 和 Dennis Ritchie用電傳列印機作為他們 Unix 伺服器的終端(參考《Linux,Unix,GNU 到底有什麼樣的淵源?》),是以這個名字就這樣被沿用了下來。
假如我們在上海的家裡通過 ssh 遠端登陸杭州的伺服器,那麼我們在家中用的裝置就是伺服器的遠端終端,也是一個虛拟終端(因為沒有與伺服器在本地用實體裝置連接配接)。虛拟終端在 Linux 中用 pts (pseudo termial slave)來辨別。用 who 指令可以檢視目前登陸系統的使用者,以及他們所使用的終端類型。
什麼是控制台
控制台(console)與終端現在已經幾乎表示同一個意思了,但是在計算機發展的早期它們還是有本質差別的。最初,大型計算機(可能有幾間屋子那麼大)隻有一個終端,被稱為”控制台“,而它真的是一個控制台,就像下面這張圖這樣,有很多的儀表和開關,技術人員就是通過它來對計算機發出指令。那個時候計算機雖然很大,但每次隻能有一個人來操作,并且一次也隻能運作一個程式。後來Ken Thompson 和 Dennis Ritchie發明了Unix,于是作業系統可以同時運作多個程式,并且支援多個使用者同時登陸。這樣一來,僅有一個控制台就顯得不夠了。因為控制台又很貴,是以 Ken Thompson 和 Dennis Ritchie就用了相對便宜的電傳打字機作為新增加的終端連接配接到他們的計算機上。雖然一台計算機可以連接配接很多個終端,但這裡邊隻能有一個控制台,并且控制台的權限要遠大于其他的終端,比如當系統發生啟動錯誤時,隻有控制台會顯示錯誤消息,而其他終端不會;或者當系統進入單使用者登陸模式時,隻有通過控制台才能進行登陸,而通過其他終端沒有辦法登陸。是以如果用一句話來總結控制台與終端的差別,可以說控制台是計算機最早的以及權限最大的一個終端。
什麼是 Shell 和 Bash
終端和主機雖然連接配接起來了,但是計算機還是需要一個程式才能明白我們輸入的指令,這個程式就是 Shell。我們的指令就是通過終端輸入到 Shell 裡,再由 Shell 轉換成計算機明白的指令,然後計算機才能運作。
Shell 有很多種,我們最常用的是 Bash,另外還有Csh, Ksh, Zsh等等。對于Bash,Linux的使用者應該每天都在使用,這裡就不再展開介紹了。
最後
控制台、終端、Shell、Bash 這些名詞經常被大家混淆,雖然今天在很多場合它們經常被替換使用,大家也都明白,不過希望通過本文大家可以弄清楚它們之間的差別和聯系。
推薦閱讀:
《一篇文章看清楚 Linux 的職業發展方向》
《2020年你最需要掌握的11種程式設計語言》
《微軟:懸賞10萬美金破解 Linux 系統》
《安卓到底是不是Linux》
《在 Linux 系統中如何管理 systemd 服務》
《Linux的運作級别與目标》
《軟連結 vs. 硬連結》
歡迎大家關注我的微信公衆号,擷取知識幹貨、增加面試經驗、了解程式人生。
回複【面試】,擷取技術大廠面試寶典