你照著安裝教學做了第一步:打開 Terminal。
然後你看到一個視窗,深色背景,左上角有一行字,結尾是一個符號,游標在閃。
教學的下一步是「輸入以下指令」。你輸入了,按了 Enter,畫面多了幾行字。但你不知道那幾行字是成功還是失敗,也不知道接下來該看哪裡。
這篇解決的就是這件事。它不是指令清單 —— 十行保命指令的清單與常見錯誤對照表在 Terminal、Shell、CLI:三個詞的差別 裡已經有了,這篇不重複。
這篇做的是把你眼前那個視窗逐行拆開,告訴你每一樣東西叫什麼名字、它在告訴你什麼。認得畫面,比背指令重要得多。
那個視窗裡其實有兩個東西
多數教學把 Terminal 當成一個東西講,所以新手永遠搞不清。它其實是兩層:
外面那一層是視窗,就是你打開的那個應用程式。它負責顯示字、接收你的鍵盤輸入、讓你調整字體大小與顏色。它自己什麼都不會做。這一層叫 Terminal(終端機)。
裡面跑著一個程式,負責讀懂你打的那一行、然後去執行。這一層叫 Shell(殼層)。macOS 近年預設是 zsh,多數 Linux 是 bash,Windows 常見的是 PowerShell。
「用打字而不是點滑鼠來指揮電腦」這種介面形式,叫 CLI(命令列介面)(命令列介面)。
這個區分不是學究式的。它有一個很實際的後果:錯誤訊息通常來自 shell,不是來自那個視窗。 而 zsh、bash、PowerShell 的語法不一樣 —— 變數怎麼寫、路徑用哪個符號分隔、引號的規則都不同。你從網路上抄到一段指令卻跑不動,最常見的原因是它是寫給另一種 shell 的。
怎麼知道自己在哪一種 shell 裡:看提示字元(下一段),或直接問它。
為什麼打字可以做事
這是最多人問、最少人回答的問題。答案比你以為的簡單,而且它不是魔法,是一個非常短的協議。
你打了一行字,按 Enter。shell 做的事是:
- 把這一行按空白切成好幾個詞。
- 第一個詞是「要跑哪個程式」。 shell 拿這個詞去一份地址清單(PATH 與路徑)裡找,找到對應的執行檔。
- 剩下的詞全部當成「交給那個程式的參數」。 shell 自己不解讀它們,原樣遞過去。
- 啟動那個程式,把它的輸出印在畫面上,等它結束。
- 印出提示字元,換你說了。
就這五步。所以:
- shell 不懂英文。 它不懂「幫我列出所有檔案」。它只懂「第一個詞是程式名,後面是參數」。
command not found的意思是第 2 步失敗了 —— 那份地址清單裡沒有任何一個資料夾含有叫這個名字的程式。它不代表你打錯了字(雖然也可能是),更不代表程式壞了。- 路徑含空格一定要加引號,因為第 1 步是按空白切的。
cd My Projects會被切成三個詞:cd、My、Projects,於是 shell 以為你要 cd 到名叫My的地方,還多給了一個它不需要的參數。 - 同一行指令在不同資料夾跑,結果會不同 —— 因為很多程式處理的是「目前所在目錄」裡的檔案。這就是下一段。
逐行拆解你看到的畫面
這是一個典型的 shell 工作階段(示意範例,不是任何特定工具的真實輸出):
Last login: Tue Sep 30 21:04:11 on ttys003
you@your-mac ~ % pwd
/Users/you
you@your-mac ~ % ls
Desktop Documents Downloads notes.txt
you@your-mac ~ % cd notes
you@your-mac ~/notes % ls
draft.md ideas.md todo.txt
you@your-mac ~/notes % cd ..
you@your-mac ~ %
逐行講:
Last login: ... —— 視窗打開時的問候語,告訴你上次登入是什麼時候。跟你要做的事完全無關,直接跳過。 很多人卡在這一行的 ttys003 上,那只是這個終端機連線的編號。
you@your-mac ~ % —— 這就是提示字元(prompt)。它由三個資訊組成:
| 部分 | 意思 |
|---|---|
you | 你的使用者帳號名稱 |
your-mac | 這台電腦的名稱 |
~ | 你目前所在的目錄(~ 是家目錄的縮寫) |
% | 結束符號:換你說了 |
zsh 的結束符號通常是 %,bash 通常是一般使用者顯示 $、管理員顯示 #,PowerShell 則是 PS 開頭加上目前路徑。這是分辨自己在哪種 shell 最快的方法。
pwd —— 你輸入的指令。畫面上它跟提示字元在同一行,所以看起來像是「you@your-mac ~ % pwd」一整串。前面那一段不是你打的,是它印的。 這個混淆非常常見。
/Users/you —— pwd 的輸出。它是「目前所在目錄」的完整地址。
第二個提示字元 you@your-mac ~ % —— 代表上一條指令已經結束,shell 準備好接下一條了。這是判斷「它跑完了沒有」的依據:看到新的提示字元出現,就是跑完了。沒有新提示字元、游標停在那裡閃,代表它還在跑(或卡住了)。
cd notes 之後,提示字元變成 you@your-mac ~/notes % —— 這是整段最重要的一個觀察:提示字元裡的第三段變了。 它在即時告訴你現在站在哪裡。你不需要記得自己做過什麼,看它就好。
cd .. 之後又變回 ~ —— .. 是「上一層」的意思。
那個看不見、卻一直在生效的東西
上面的 ~ 或 ~/notes,正式名稱是目前所在目錄(current directory),也叫工作目錄。
它是新手最常付出代價的一個概念,因為它在畫面上只佔提示字元裡的一小段,很容易被忽略,但它決定了幾乎所有指令的行為。
具體來說:
ls列的是這裡的檔案,不是你整個電腦的檔案cat notes.txt找的是這裡的notes.txt- 你叫 AI 工具「讀一下 report.pdf」,它找的是它被啟動時所在的那個目錄裡的 report.pdf
- 你建立的檔案會落在這裡
於是就有了那個經典事故:你在 A 資料夾建了一個檔案,然後 cd 到 B 資料夾,接著 ls 沒看到它,結論是「檔案不見了」。檔案好好的在 A。
所以有一個習慣值得從第一天就養成:每次要跑一個會動到檔案的指令之前,先看一眼提示字元,或跑一次 pwd。 一半的「指令跑完東西不見了」都是在錯誤的資料夾裡跑的。
關於「家目錄」~、絕對路徑與相對路徑、以及為什麼 Windows 用反斜線而 macOS 用斜線,有一整篇在講:檔案路徑。
五個指令,各自回答一個你一定會問的問題
十行清單在那篇保命指令的文章裡。這裡只挑五個,而且只講一件事:每個回答的是哪個問題,以及它印出來的東西該怎麼讀。
一、pwd —— 「我現在在哪?」
pwd
印出一行完整路徑,例如 /Users/you/projects。就這樣,不會有別的東西。
什麼時候用:任何會動到檔案的動作之前。以及任何「檔案找不到」的錯誤之後的第一個動作。
二、ls —— 「這裡有什麼?」
ls
ls -l
ls -la
裸 ls 只印名字。加 -l 變成一行一個檔案,並在名字左邊多出一串資訊;加 -a 才會列出以 . 開頭的隱藏檔(.env、.gitignore 這類,而 AI 工具的設定常常就是這種檔案)。
ls -l 的每一行怎麼讀(示意範例):
-rw-r--r-- 1 you staff 2048 Sep 30 21:04 notes.txt
| 部分 | 意思 |
|---|---|
| 開頭第一個字元 | - 是檔案,d 是資料夾 |
| 接著九個字元 | 權限位:誰可以讀、寫、執行。見 File Permission(檔案權限) |
you staff | 擁有者與群組 |
2048 | 檔案大小(位元組) |
Sep 30 21:04 | 最後修改時間 |
notes.txt | 名字 |
看到 Permission denied 的時候,你要看的就是那九個字元和擁有者 —— 不是去加 sudo。
三、cd —— 「去別的地方」
cd notes # 進到這裡底下的 notes 子資料夾
cd ~/projects # 到家目錄底下的 projects
cd .. # 回上一層
cd # 不加任何參數=回家目錄
cd - # 回到你上一次所在的目錄
cd 成功時什麼都不會印。 這是最多人以為「它沒反應」的地方 —— 它成功了,只是安靜。判斷方式:看提示字元裡的第三段有沒有變。
四、cat —— 「這個檔案裡寫什麼?」
cat notes.txt
把整個檔案內容印在畫面上。適合小檔案(設定檔、幾十行的筆記)。
檔案很長時會刷滿整個視窗、看不完。這種情況用 head -20 檔名(只看前 20 行)或 tail -20 檔名(只看後 20 行,看記錄檔最常用)。
五、--help —— 「這個指令自己會說什麼?」
某指令 --help
man ls
--help 是絕大多數命令列程式都支援的旗標,它印出這個程式自己的用法說明。man 是 macOS/Linux 的完整手冊(按 q 離開)。
這是最該養成習慣的一個。 它比搜尋引擎準,而且它講的一定是你手上這個版本的行為 —— 網路上搜到的說明可能對應另一個版本,而版本差異是指令跑不動的第二大原因。
三個對這個視窗的誤解
一、「我怕打錯把它弄壞。」
你打的字如果沒有對應到任何程式,shell 只會回一句「找不到這個指令」,然後什麼都不做。它不會壞、不會中毒、不需要重開機。
真正會出事的是會動檔案的指令 —— rm(刪除)、mv(移動/改名)、> (把輸出寫進檔案,會蓋掉原內容)。這些需要你主動打出來,而且多數會先問你。所以規則很簡單:看到 rm、sudo、chmod 777、> 這幾個關鍵字就停下來,先搞懂再按 Enter。 這件事在 那篇保命指令 裡有更完整的說明。
二、「它沒有輸出,代表失敗了。」
反過來。命令列工具的傳統是成功的時候安靜,失敗的時候才出聲。cd 成功不印東西、mv 成功不印東西、cp 成功不印東西。
想確認到底成功沒有,看結束代碼:跑完之後立刻 echo $?(PowerShell 是 $LASTEXITCODE),0 是成功。見 Exit Code(結束代碼),以及 怎麼讀一則錯誤訊息。
三、「我把視窗關掉,裡面在跑的東西就停了。」
不一定。背景處理程序與自己脫離視窗的服務會繼續跑 —— 繼續佔記憶體、佔網路連線,如果它在呼叫付費 API,繼續燒你的錢。見 Process(處理程序)。
要停一個正在跑的東西,用 Ctrl + C(這是中斷前景程序,不是關視窗)。
三十秒確認它在動
打開終端機,依序輸入這四條,每條按一次 Enter:
pwd
ls
cd
pwd
你應該看到的:
- 第一條印出一個路徑(多半是
/Users/你的帳號或C:\Users\你的帳號) - 第二條印出一串檔案與資料夾名字
- 第三條什麼都不印
- 第四條印出一個路徑
如果第一次和第四次印出的路徑一樣,代表你原本就在家目錄;如果不一樣,代表你原本在別的地方,而第三條把你帶回家了。
跑完這四條,你已經確認了三件事:視窗開了、shell 在回應你、你知道自己在哪。這三件事是之後每一個安裝教學的起點。
下一步
- 十行指令的完整清單、Windows 對照寫法、以及常見錯誤結尾行對照表:Terminal、Shell、CLI:三個詞的差別,與十行保命指令
- 路徑、
~、斜線與反斜線、含空格的檔案名:檔案路徑 - 畫面出現紅字時:怎麼讀一則錯誤訊息
- 指令跑不動時的判斷流程:裝完沒反應:五個檢查,照順序做完再重裝
- 先把詞認完:開始之前:你只需要先認識這 20 個詞