Linux的使用者可能每天都會接觸到 Bash、Shell、控制台、終端。它們之間有什麼不同嗎?本文為你快速解釋這些概念以及它們的區別。 什麼是終端 首先我們來弄清楚什麼是終端(terminal)。按照百度百科的解釋是:“經由通信設施向電腦輸入程式和數據或接收電腦輸出處理結果的設備。” 聽起來似 ...
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 這些名詞經常被大家混淆,雖然今天在很多場合它們經常被替換使用,大家也都明白,不過希望通過本文大家可以弄清楚它們之間的區別和聯繫。
推薦閱讀:
掃碼關註公眾號獲取知識乾貨、增加面試經驗、瞭解程式人生