Shell 與終端機是什麼?

什麼是 Shell?

在 Linux 的世界裡,你會不斷聽到「Shell」這個詞。Shell 是一個程式,它接收你用文字輸入的指令,傳遞給作業系統核心(Kernel)執行,然後把結果顯示出來。

用比喻來說:如果 Linux 核心是一間餐廳的廚房,Shell 就是服務生——它接受你的點餐(指令),傳達給廚房,再把菜端回來給你。

  你(使用者)
      ↓  輸入指令
  ┌─────────────────┐
  │     Shell       │  解讀指令、展開變數、處理管線
  └─────────────────┘
      ↓  呼叫系統
  ┌─────────────────┐
  │  Linux Kernel   │  實際執行工作(讀寫檔案、管理程序)
  └─────────────────┘
      ↓  回傳結果
  ┌─────────────────┐
  │     Shell       │  格式化後顯示給你
  └─────────────────┘

終端機(Terminal)vs Shell ── 傻傻分不清?

很多人把「終端機」和「Shell」混著說,其實它們是不同的東西:

名詞是什麼例子
終端機
Terminal Emulator
提供文字輸出入介面的視窗程式,負責顯示字元和接收鍵盤輸入 GNOME Terminal、Konsole、iTerm2、Windows Terminal、PuTTY
Shell 在終端機裡執行的命令解讀器程式,真正解析並執行你的指令 bash、zsh、fish、sh、ksh
💡 一個比喻:終端機是電視螢幕,Shell 是電視裡播放的節目。螢幕只負責顯示,真正有內容的是節目。

各種 Shell 的比較

Linux 上有好幾種不同的 Shell,各有特色:

Shell特色適合誰
bash
Bourne Again Shell
Linux 最常見的預設 Shell,穩定、相容性最好,幾乎所有 Linux 系統都預設安裝 所有人(特別是伺服器管理);本站範例皆以此為準
zsh
Z Shell
功能是 bash 的超集,自動補全強大,Oh My Zsh 有豐富外掛,macOS Catalina 後預設 開發者、追求生產力的使用者
fish
Friendly Interactive Shell
語法更直觀、即時語法高亮、自動建議,開箱即用,但與 bash/sh 語法不完全相容 Linux 新手、桌面環境使用者
sh
POSIX Shell
最基本的 POSIX Shell,功能最精簡,幾乎所有 Unix/Linux 都有 撰寫跨平台腳本(#!/bin/sh)

本站所有範例以 bash 為準(Ubuntu/Debian 預設),學會 bash 的概念後,其他 Shell 都能快速上手。

如何開啟終端機

Ubuntu / Debian 桌面版

透過 SSH 遠端連線(最常見的伺服器使用方式)

$ ssh 使用者名稱@伺服器IP位址
使用者名稱@伺服器IP's password:
Welcome to Ubuntu 22.04.3 LTS
使用者名稱@myserver:~$

輸入密碼後(輸入時畫面不顯示),就會進入遠端伺服器的 Shell。

WSL(Windows Subsystem for Linux)

在 Windows 10/11 上,可以安裝 WSL,在 Windows Terminal 中執行真正的 Linux Shell,非常適合在 Windows 上學習 Linux 指令。

解讀命令提示符(Prompt)

進入終端機後,你會看到類似這樣的一行文字等著你輸入,這叫做命令提示符(prompt)

alice@myserver:~$

各個部分的意義:

部分說明
alice目前登入的使用者名稱
@「在……上」(at)的意思
myserver這台電腦的主機名稱(hostname)
:分隔符號
~目前所在目錄,~ 代表家目錄(/home/alice)
$一般使用者的提示符。若顯示 # 代表你是 root(超級管理員)
⚠️ 看到 # 提示符,代表你正以 root 身份操作。Root 對整個系統有完全控制權,一個錯誤的指令就可能造成無法復原的損害。初學時請在一般使用者($)模式下練習。

常用快捷鍵

這些快捷鍵在 bash 中無處不在,務必熟記:

快捷鍵功能重要程度
Tab自動補全指令名稱或路徑(按兩次顯示所有選項)⭐⭐⭐⭐⭐ 最重要
/ 瀏覽歷史指令⭐⭐⭐⭐⭐
Ctrl+C中斷目前執行的指令(強制停止)⭐⭐⭐⭐⭐
Ctrl+L清除畫面(等同 clear⭐⭐⭐⭐
Ctrl+A游標移到行首⭐⭐⭐
Ctrl+E游標移到行尾⭐⭐⭐
Ctrl+D登出當前 Shell(輸入結束)⭐⭐⭐
Ctrl+Z暫停目前的前景工作(放入背景)⭐⭐
Ctrl+R搜尋歷史指令⭐⭐⭐

Tab 補全是最重要的習慣

Tab 補全是 Linux 效率的核心。舉例:輸入 ls /etc/ngi 後按 Tab,Shell 會自動補全為 ls /etc/nginx/,省去大量打字時間,也避免拼字錯誤。