如果你剛開始學程式,打開電腦看到那個黑黑的畫面,你可能聽過「Console」、「Terminal」、「Shell」這些詞。
有些人會把它們混著用,有些教學文章又好像在講不同的東西。
到底它們是什麼?有什麼差別?
這篇文章會從歷史開始講起,幫你一次搞清楚這三個詞的意思,以及它們之間的關係。
從大型主機時代說起:Console 和 Terminal 的由來
要理解 Console 和 Terminal,我們得先回到電腦剛發明的年代。
那個時候,不是每個人都有自己的電腦。
一間大學、一間銀行、或一家大公司,通常只有一台很大的電腦,叫做「大型主機(Mainframe)」。
當學生、教授、或員工需要用電腦的時候,他們不會直接走到那台大電腦前面操作。
他們會透過一個小型的硬體裝置,遠端連上那台大電腦。
這個小型硬體裝置,就叫做 Console(主控台)。
Console 是什麼?
你可以把 Console 想像成一台 PlayStation 遊戲機。
它就是一個硬體,由鍵盤、螢幕、和一個小處理器組成。
差別在於,PlayStation 跑的是遊戲,而早期的 Console 跑的是各種軟體。
其中最重要的一個軟體,就叫做 Terminal(終端機)。
Terminal 是什麼?
Terminal 是一個跑在 Console 上面的軟體。
它的功能很單純:幫你跟大型主機溝通。
你透過鍵盤輸入指令,Terminal 會把指令送到大型主機,大型主機處理完之後,再把結果送回來,顯示在你的螢幕上。
簡單來說:
- Console = 硬體(鍵盤 + 螢幕 + 小處理器)
- Terminal = 跑在 Console 上的軟體(負責跟大型主機溝通)

現代已經沒有真正的 Console 和 Terminal 了
現在每個人都有自己的電腦,不需要靠大型主機了。
所以真正的 Console(那個小硬體)已經不存在了。
真正的 Terminal(跟大型主機溝通的軟體)也不需要了。
但這兩個詞還是活著,而且現在它們指的是同一個東西:終端機模擬器(Terminal Emulator)。
終端機模擬器是什麼?
終端機模擬器就是你在電腦上打開的那個「黑色視窗」。
它模擬了以前 Terminal 的功能,讓你可以用打字的方式跟電腦互動。
常見的終端機模擬器有這幾個:
- Terminal:macOS 內建的終端機模擬器
- iTerm2:macOS 上很受歡迎的第三方終端機模擬器
- Hyper:用 HTML、CSS、JavaScript 做的終端機模擬器,跨平台可用
- VS Code 的整合式終端:直接內建在程式碼編輯器裡面的終端機
這就是為什麼你會聽到有人說「打開 Console」,也有人說「打開 Terminal」,其實他們講的是同一件事——打開終端機模擬器。
終端機模擬器只是外觀,真正在工作的是 Shell
這是很多初學者搞混的地方。
終端機模擬器只是一個圖形介面(GUI),它本身不會執行任何指令。
它負責的事情就是「畫面」相關的所有東西。
比如說,你看到的那個視窗的標題列、視窗的大小、背景顏色是黑色還是白色、字體用什麼、字體大小多少、游標長什麼樣子——這些全部都是終端機模擬器在管的。
你選擇不同的終端機模擬器,改變的就是這些外觀上的東西。
舉個例子,macOS 內建的 Terminal 預設是白色背景。
iTerm2 可以設定成半透明的背景。
Hyper 因為是用網頁技術做的,可以裝各種主題外掛讓畫面變得很花俏。
VS Code 的整合式終端則是直接嵌在編輯器裡面,跟你的程式碼在同一個畫面上。
但不管畫面長怎樣,當你在終端機裡面打了一行指令然後按下 Enter,終端機模擬器做的事情只有一件:把你打的那行字,轉交給背後的 Shell。
Shell 才是真正在工作的程式。
Shell 會做這幾件事:
- 讀取你的指令:你打了什麼字,Shell 會去解讀這行字是什麼意思。
- 執行指令:Shell 判斷完之後,會去呼叫對應的程式。比如你輸入
ls,Shell 就會去呼叫作業系統提供的程式,幫你列出目前資料夾裡面有哪些檔案。 - 回傳結果:程式執行完之後,Shell 會把結果送回來。
- 交給終端機模擬器顯示:終端機模擬器收到結果之後,就把它顯示在畫面上讓你看到。
所以整個流程是這樣的:
終端機模擬器從頭到尾都只負責「顯示」,Shell 才是那個真正在「做事」的角色。
這也是為什麼,不管你用哪個終端機模擬器(Terminal、iTerm2、Hyper、VS Code),只要背後跑的是同一個 Shell,你能用的指令和功能就是一模一樣的。
反過來說,如果你在同一個終端機模擬器裡面切換成不同的 Shell,你會發現能用的指令和行為就不一樣了。
不同的 Shell 有不同的能力
Shell 有很多種,每一種理解的指令不太一樣,提供的功能也不同。
以下用兩個常見的 Shell 來示範它們的差異:Zsh 和 Bash。
提示符(Prompt)的差異
當你打開終端機,看到的那一行等你輸入指令的文字,就叫做「提示符(Prompt)」。
不同的 Shell 會顯示不同的提示符。
舉例來說,即使你用同一個終端機模擬器,切換到 Zsh 和 Bash 時,提示符的樣子會完全不同。
這是因為提示符是由 Shell 控制的,不是由終端機模擬器控制的。
指令理解能力的差異
不同的 Shell 能理解的指令也不一樣。
舉個例子,在 Zsh 裡面:
- 輸入
~然後按 Enter,Zsh 會自動幫你切換到家目錄(Home Directory) - 輸入
-然後按 Enter,Zsh 會帶你回到上一個待過的目錄
但在 Bash 裡面:
- 輸入
~然後按 Enter,Bash 雖然知道~代表家目錄,但不會自動幫你切換過去 - 輸入
-然後按 Enter,Bash 會告訴你它不認得這個指令
在 Bash 裡面,你需要明確地輸入 cd ~ 才能切到家目錄,輸入 cd - 才能回到上一個目錄。
這就是不同 Shell 之間的差異——它們各自支援不同的語法和快捷方式。
小結
最後來整理一下這篇文章的重點:
歷史上的意義:
- Console:早期的硬體裝置,用來遠端連線大型主機
- Terminal:跑在 Console 上的軟體,負責跟大型主機溝通
現代的意義:
- Console 和 Terminal 這兩個詞現在指的是同一個東西:終端機模擬器(Terminal Emulator)
- 終端機模擬器只是圖形介面,負責顯示畫面
- 真正在背後執行指令的是 Shell
Shell 的重點:
- 不同的 Shell(像是 Zsh、Bash)有不同的功能和指令支援
- 不管用哪個終端機模擬器,只要 Shell 一樣,能用的指令就一樣
下次有人跟你說「打開 Terminal」或「打開 Console」,你就知道他們其實在講同一件事了。