## 一、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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up