命令列到底是什麼
那個嚇人的黑色視窗,只是一個讓你給電腦逐行輸入指令的地方。在那裡聆聽的程式叫做 外殼程式(shell):你輸入一條命令,按下 Enter,它就去辦事,然後打字回應你。可以把它想成你在給電腦傳訊息,而不是用滑鼠點它。
外殼程式不能直接碰硬體。它把你真正的請求往下傳給 核心(kernel)——作業系統最底層的核心,由它真正去打開檔案、讀寫磁碟、執行程式。你對外殼程式說話,外殼程式再悄悄轉告核心。
看懂提示字元
在你輸入任何東西之前,外殼程式會先顯示一小行,叫做提示字元(prompt)。它通常以一個美元符號 `
你的第一行命令列
你的第一行命令列
`
你的第一行命令列
四處走動:你的地圖
你的檔案存放在一層套一層的資料夾裡,就像大樓裡一間套一間的房間。三條命令就是你全部的地圖。`pwd` 在問「我站在哪裡?」`ls` 在問「這個房間裡有什麼?」而 `cd` 的意思是「走進那個房間。」說真的,你需要的差不多就這些。
$ pwd /Users/you/projects $ ls notes.txt website photos $ cd website $ pwd /Users/you/projects/website
動手做事,以及那張隱形成績單
要執行一條命令,你就輸入它的名字然後按 Enter——就這麼簡單。`mkdir photos` 會新建一個叫 photos 的資料夾;`echo hello` 只是把 hello 這個詞印回給你看。外殼程式辦完事、顯示結果,再把提示字元交還給你,好讓你繼續下一條。
這裡有一點新手很少注意到:每條命令結束時都會悄悄交回一個退出碼(exit code)。0 代表成功;其他任何數字都意味著出了問題。你平時看不到它,但腳本和工具一直在讀它,用來決定要不要繼續往下走。
$ ls notes.txt notes.txt $ echo $? 0
進階招式:管道、旗標和腳本
管道(pipe)寫作 `|`,它把兩條命令接起來,讓第一條的輸出變成第二條的輸入——就像把兩根花園水管接到一起。`ls | wc -l` 先列出你的檔案,再把這份清單直接送進一個計數器,於是你得到的是一個整潔的總數,而不是一大堵檔名的牆。
大多數命令還接受旗標(flag)——以短橫線開頭的小開關,用來改變行為。`ls -l` 顯示詳細列表;`ls -a` 顯示隱藏檔案。通常你還能把它們疊在一起,比如 `ls -la`。旗標就是一條命令悄悄勝任許多活兒的祕訣。
當你把一堆命令存進一個檔案,你就做出了一個腳本。但在系統肯執行它之前,你得用檔案權限(file permissions)把它標記為「可執行」——下面的 `+x` 字面意思就是「允許執行」。這就好比一份食譜:能讀,和廚房被允許去做,是兩回事。
$ chmod +x deploy.sh $ ./deploy.sh
連到另一台機器
有時候你想操控的電腦並不在你面前——它是遠方某個資料中心裡的一台伺服器。SSH 就是那條安全的隧道,讓你在那台遠端機器上打開一個命令列,像坐在它面前一樣打字。你用一行 `ssh [email protected]` 這樣的命令連上去,從那一刻起,你的命令就在那邊執行,而不是這邊。
在任何機器上,無論本地還是遠端,有些設定存放在環境變數(environment variables)裡——這是外殼程式揣在兜裡的帶名字的值,比如 `HOME` 或 `PATH`。命令透過讀取它們來知道東西在哪。你其實已經見過一個了:`$?` 就是一個保存著上一個退出碼的特殊變數。
小結:一張活命速查表
現在你已經夠用了:四處走動、查看東西、讓電腦幹活——全靠打字。把下面這幾條命令記牢,找一個你不介意隨便折騰的資料夾試一試,那塊黑屏就會從嚇人變成你最快的工具。
- pwd——我現在在哪?
- ls——這裡有哪些檔案?(加 -la 看全部)
- cd 資料夾——進去;cd .. 往上;cd ~ 回家目錄。
- echo $?——上一條命令成功了嗎?(0 = 成功)
- 命令1 | 命令2——把一條的輸出用管道送給下一條。
- chmod +x 檔案——讓你的腳本可以執行。