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 這些名詞經常被大家混淆,雖然今天在很多場合它們經常被替換使用,大家也都明白,不過希望通過本文大家可以弄清楚它們之間的區別和聯絡。
推薦閱讀:
掃碼關注公眾號獲取知識乾貨、增加面試經驗、瞭解程式人生