Linux的使用者可能天天都會接觸到 Bash、Shell、控制檯、終端。它們之間有什麼不一樣嗎?本文爲你快速解釋這些概念以及它們的區別。html
首先咱們來弄清楚什麼是終端(terminal)。按照百度百科的解釋是:「經由通訊設施向計算機輸入程序和數據或接收計算機輸出處理結果的設備。」 聽起來彷佛有點晦澀,其實用臺式PC機來舉例就很容易理解了。一臺臺式機是由主機(機箱)和不少外圍設備組成的。主機裏邊包括主板、CPU、內存、硬盤、和其餘芯片等等。外圍設備包括顯示器、鼠標、鍵盤、耳機、麥克風、和攝像頭等等。這些外圍設備就被稱爲終端,負責向主機輸入數據的就叫輸入終端,好比鼠標、鍵盤、麥克風、攝像頭,負責接收主機輸出數據的設備就被稱做輸出終端,好比顯示器、耳機。面試
因此有兩個概念咱們這裏就清楚了:編程
計算機 = 主機 + 終端服務器
終端 = 輸入終端 + 輸出終端ssh
終端,除了能夠分爲輸入終端與輸出終端外,還能夠按照與主機的距離能夠本地終端和遠程終端,或者按照與主機的鏈接方式分紅物理終端和虛擬終端。編程語言
舉個例子,好比咱們在杭州的某個機房裏有一臺服務器,用VGA線接了一臺顯示器,用USB鏈接了鍵盤,那麼這臺顯示器和這個鍵盤就是服務器的本地終端。假如咱們在隔壁機房用串口線又接了一個顯示器和鍵盤,那它們就能夠稱爲遠程終端。不論是在本地機房仍是隔壁機房,由於這幾個終端和服務器都是經過物理設備直接鏈接的,因此它們都被稱爲物理終端。物理終端在 Linux中被標識爲 tty。它是teletype的縮寫,由於在計算機早期的時候,Ken Thompson 和 Dennis Ritchie用電傳打印機做爲他們 Unix 服務器的終端(參考《Linux,Unix,GNU 到底有什麼樣的淵源?》),因此這個名字就這樣被沿用了下來。spa
假如咱們在上海的家裏經過 ssh 遠程登錄杭州的服務器,那麼咱們在家中用的設備就是服務器的遠程終端,也是一個虛擬終端(由於沒有與服務器在本地用物理設備鏈接)。虛擬終端在 Linux 中用 pts (pseudo termial slave)來標識。用 who 命令能夠查看當前登錄系統的用戶,以及他們所使用的終端類型。操作系統
控制檯(console)與終端如今已經幾乎表示同一個意思了,可是在計算機發展的早期它們仍是有本質區別的。最初,大型計算機(可能有幾間屋子那麼大)只有一個終端,被稱爲」控制檯「,而它真的是一個控制檯,就像下面這張圖這樣,有不少的儀表和開關,技術人員就是經過它來對計算機發出指令。那個時候計算機雖然很大,但每次只能有一我的來操做,而且一次也只能運行一個程序。後來Ken Thompson 和 Dennis Ritchie發明了Unix,因而操做系統能夠同時運行多個程序,而且支持多個用戶同時登錄。這樣一來,僅有一個控制檯就顯得不夠了。由於控制檯又很貴,因此 Ken Thompson 和 Dennis Ritchie就用了相對便宜的電傳打字機做爲新增長的終端鏈接到他們的計算機上。雖然一臺計算機能夠鏈接不少個終端,但這裏邊只能有一個控制檯,而且控制檯的權限要遠大於其餘的終端,好比當系統發生啓動錯誤時,只有控制檯會顯示錯誤消息,而其餘終端不會;或者當系統進入單用戶登錄模式時,只有經過控制檯才能進行登錄,而經過其餘終端沒有辦法登錄。因此若是用一句話來總結控制檯與終端的區別,能夠說控制檯是計算機最先的以及權限最大的一個終端。htm
終端和主機雖然鏈接起來了,可是計算機仍是須要一個程序才能明白咱們輸入的命令,這個程序就是 Shell。咱們的命令就是經過終端輸入到 Shell 裏,再由 Shell 轉換成計算機明白的指令,而後計算機才能運行。blog
Shell 有不少種,咱們最經常使用的是 Bash,另外還有Csh, Ksh, Zsh等等。對於Bash,Linux的用戶應該天天都在使用,這裏就再也不展開介紹了。
控制檯、終端、Shell、Bash 這些名詞常常被你們混淆,雖然今天在不少場合它們常常被替換使用,你們也都明白,不過但願經過本文你們能夠弄清楚它們之間的區別和聯繫。
推薦閱讀:
掃碼關注公衆號獲取知識乾貨、增長面試經驗、瞭解程序人生