## 一、Shell 是什麼? **Shell** 是一種操作作業系統的工具,負責接收指令並與作業系統(特別是 kernel)溝通。它是「人類與作業系統之間的橋樑」,無論你是打指令、按按鈕、還是執行一段程式碼,只要背後透過文字指令與系統溝通,通常都會經過 shell。 <div style="display: flex; justify-content: center"> <img src="https://hackmd.io/_uploads/BklOkP5Tyg.png" style="margin: auto" /> </div> ### Shell 的功能: - 接收使用者輸入的指令(不論是打的還是由程式產生的) - 解析並執行這些指令 - 管理程式執行、檔案操作、流程控制等 > Shell 是「溝通者」,負責將來自人類或程式的操作轉交給作業系統執行。 > ## 二、誰可以操作 Shell? ### 人類 - **透過 CLI**:開啟終端機(Terminal)、打 `cd`, `ls`, `git` 等 - **透過 GUI**:點選「Build 專案」、「發佈網站」等按鈕,實際上可能會觸發 shell 背後執行腳本 ### 應用程式 - 透過程式語言(Node.js、Python、C++ 等)呼叫 shell 指令,完成部署、壓縮、封包管理等工作 - GUI 工具(例如 Visual Studio)其實會呼叫 shell 或執行預設腳本來完成任務 > 無論是人類還是應用程式,最終都是「請求 shell 來執行事」。 > ## 三、Shell 與 CLI、GUI、Terminal 的關係 - **CLI(Command-Line Interface)**:是一種「與電腦互動的方式」,以打字輸入文字指令為主。 - **Shell**:是一種實際執行指令的程式,通常透過 CLI 與使用者互動。 - **Terminal(終端機)**:是一個「容器程式」,讓你與 shell 互動的視窗。開啟 Terminal,其實就是在啟動一個 shell 的 CLI 環境。 - **GUI(Graphical User Interface)**:用滑鼠點按的方式與系統互動,但很多 GUI 背後其實也會呼叫 shell 執行指令。 | 名詞 | 中文說法 | 涵蓋的範圍 | 備註 | | --- | --- | --- | --- | | **Shell** | 殼程式 / 指令解譯器 | 指像 bash、zsh、PowerShell、fish、cmd 這些「用來解釋你輸入指令的軟體」 | 這是最直接的技術名詞 | | **CLI(Command-line Interface)** | 命令列介面 | 指整體操作方式,包括終端機 + shell | 更泛,指的是「用文字輸入操作」的介面方式 | | **Terminal** | 終端機 | 顯示 shell 的視窗介面 | VS Code 的 Terminal、macOS 的 Terminal.app 都是 | | **Command-line tools** | 命令列工具 | 在 shell 裡執行的程式 | 像 `git`、`node`、`curl`、`npm` 都是 CLI 工具 | | **REPL** | 互動式指令環境 | 比如你打開 `node`、`python`、`irb` 進入互動環境 | 雖然也是 CLI 形式,但跟 shell 還是不同東西 | ### 簡化圖: ``` 人類 → CLI(打字) → Shell → GUI(按鈕)→ Shell 應用程式 → API / System call → Shell CLI(由 Terminal 啟動) ``` ## 四、Command-Line Tools 是什麼? **Command-Line Tools(命令列工具)** 指的是在 CLI 環境中使用的工具或應用程式。它們不是 shell 本身,而是 shell 呼叫來執行的外部程式。 ### 範例: - `git`、`curl`、`node`、`python`、`docker`、`ffmpeg` - 它們本身是應用程式,但設計用於文字指令操作介面 > 🛠️ shell 是主持人,command-line tools 是被叫上台表演的來賓。 > ## 五、REPL 是什麼? **REPL(Read-Eval-Print Loop)** 是一種互動式的程式語言執行環境。你可以即時輸入一段程式語法,它會馬上執行,並印出結果。 ### 常見 REPL: - `node`(JavaScript) - `python`(Python) - `irb`(Ruby) ### 注意: - REPL 與 Shell 不同,它是語言本身提供的互動式介面,不一定能操作整個作業系統(例如 `cd`, `ls`)。 - 它是某種「語言的小型 shell」,但功能受限於該語言本身。 > Shell 是作業系統的控制中心,而 REPL 是程式語言的互動沙盒。 > ## 六、常見的 Shell 類型 | Shell 名稱 | 適用平台 | 特點 | | --- | --- | --- | | bash | Linux / macOS | 最常見,支援腳本與變數操作 | | zsh | macOS 預設 | 語法進階、自動補全美化 | | fish | 跨平台 | 即時提示、簡化語法、無需配置 | | PowerShell | Windows / Linux / macOS | 支援物件導向、整合 .NET | | cmd | Windows | 傳統命令列介面,功能有限但常見 | > 每種 shell 就像是不同的翻譯器,幫你把你的想法交給系統處理。 > ## 七、什麼是 Shell Script? Shell script 是一種將多條 shell 指令寫進一個檔案中(通常副檔名為 `.sh`),讓系統一次自動執行整段流程。 ### 用途: - 自動部署、建置 - 系統備份、檔案管理 - 開發流程簡化(建資料夾、打包等) ### 範例: ``` #!/bin/bash mkdir my_project cd my_project touch index.html ``` > Shell script 就像是一份「操作流程清單」,讓系統一次完成你要的任務。 > ## 八、應用程式也能操作 Shell? 是的!Shell 並不只為人而設計,也可以被應用程式呼叫。 ### 使用方式: - **Node.js**:`child_process.exec("ls -al")` - **Python**:`subprocess.run(["ls", "-al"])` - **C / C++**:`system("ls -al")` ### GUI 與 Shell 的關聯: - 很多圖形化按鈕其實會觸發底層的 shell 指令 - 例如 Visual Studio 按下「打包」,實際上執行的是 `msbuild` 或 `dotnet publish` > Shell 就像是「系統任務的入口」,任何程式都可以找它幫忙做事。 > ## 總結:Shell 是互動與執行的核心角色 - Shell 是用來執行系統指令的工具,是「執行面」的主體 - CLI 是與 Shell 互動的方式之一(GUI 也是) - 不只人可以操作 shell,應用程式也可以呼叫它來執行工作 - 有多種 shell 可選,根據平台與需求彈性選擇 - shell script 可以自動化 shell 操作,提升效率 - Terminal 是啟動 CLI / Shell 的應用程式 - Command-line tools 是 shell 呼叫來完成任務的外部程式 - REPL 是語言層級的互動執行介面,不等同於 shell > Shell 是一種通用執行者,是人與程式都能派任務給它的「系統操作員」。 >
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.