命令列入門:為什麼要學它,以及基本檔案操作指令
為什麼命令列是最有效率的溝通方式
命令列是與電腦溝通最有效率的方式,等同於直接透過終端機(terminal)跟作業系統對話,中間沒有其他中介層。雖然也有人會說寫組合語言(assembly)才是更底層的方式,但那並不是一種有效率的溝通方式,所以講師仍然把命令列視為最快、最有效率的操作途徑。
命令列有幾個特性:
- 快:跟作業系統之間沒有溝通上的落差
- 一致:同一組指令,在這裡的終端機能跑,在之後要架設的伺服器上也能跑,甚至換到任何一台伺服器,只要作業系統支援對應的 shell 就能運作,可攜性非常高
- 低額外負擔:終端機平時就是安靜地等待輸入,收到指令就執行,執行完就結束,沒有多餘的東西
正因為今天大部分的操作都會在終端機裡進行,熟悉命令列是後續學習的基礎。
選擇終端機工具
講師使用的是 iTerm,最喜歡的功能是可以很方便地分割視窗(split panes),並用拖拉的方式排列多個視窗,畫面配置可以依需求自由調整。Mac 內建的終端機應用程式也完全堪用,實際使用哪一套工具影響不大,重點是後面要談的 shell 本身。
Windows 使用者若想執行這些指令,可以安裝 Linux 子系統(Linux Subsystem),安裝過程需要一段時間並且要重新啟動電腦,路徑表示法也會不同(Windows 用反斜線、Linux 用正斜線),但確實可以在 Windows 上執行這些指令。
基本指令列表
| 指令 | 作用 |
|---|---|
ls | 列出目前所在位置與當前目錄下的檔案 |
cd | 切換目錄(change directory) |
mkdir | 建立目錄 |
rmdir | 移除目錄 |
cat | 顯示檔案內容 |
man | 顯示程式的手冊頁 |
less | 分頁顯示檔案內容 |
touch | 建立空檔案 |
rm | 移除檔案 |
echo | 重複輸出輸入的內容 |
其中 rmdir 平常較少使用,因為如果目錄不是空的,rmdir 就無法刪除,這時必須改用 rm。
man 指令非常重要,因為每一個會用到的程式都有對應的手冊頁,記錄了完整的功能說明,但實際使用時會發現手冊頁的格式並不好閱讀解析,儘管如此,關鍵時刻它仍然能幫上大忙。
rm 平常會搭配 -rf 參數使用,代表遞迴(recursive)且強制(force)移除所有檔案。
touch 實際上做的事
touch 這個指令的名稱容易讓人誤以為它是用來建立空檔案,但它實際的作用其實是更新檔案「最後修改時間」。當對一個不存在的檔案執行 touch 時,作業系統會回報「找不到這個檔案的修改時間」,於是就順手把這個檔案建立出來,再更新其時間戳記,這才是空檔案被建立出來的真正原因。
這個行為跟 Linux 系統中檔案沒有固定「型別」的特性有關。在 Windows 中,每個檔案都有明確的型別,例如 .exe 可執行檔或 .dll 動態連結函式庫;但 Linux 中的檔案可以是任何型別,作業系統對一個檔名唯一在意的資訊,就只有它的名稱與最後存取時間,因此當這兩者都不存在時,直接建立一筆新記錄是最簡單的處理方式。
練習:目錄操作
- 切換到家目錄(home directory)
- 建立一個名為
temp的目錄 - 切換進入
temp - 列出目錄內容
- 建立一個名為
hello的檔案 - 再次列出目錄內容
- 切換出
temp - 刪除
temp目錄
複習
與電腦溝通最有效率的方式是什麼?
命令列是與電腦溝通最有效率的方式,能直接透過終端機與作業系統溝通
目錄與檔案操作的常見終端機指令有哪些?
常見指令包括:ls(列出目錄內容)、cd(切換目錄)、mkdir(建立目錄)、rmdir(移除目錄)、cat(顯示檔案內容)、touch(建立空檔案)、rm(移除檔案)、echo(重複輸出輸入內容)
哪個指令用來分頁顯示檔案內容?
less 指令用來分頁顯示檔案內容
man 指令在終端機中的主要用途是什麼?
man 指令提供程式的手冊頁,記錄程式功能,作為指令用法的參考文件
touch 指令建立檔案時實際做了什麼?
touch 指令主要是更新檔案的最後修改時間。當作用於不存在的檔案時,作業系統會在更新時間戳記的同時建立該檔案
小測驗
終端機中的 `ls` 指令做什麼?
列出目前目錄的內容哪個指令用來在終端機中建立空檔案?
touch`cd` 指令的用途是什麼?
切換目前所在的目錄哪個指令旗標組合常用來遞迴且強制移除所有檔案而不提示確認?
rm -rf終端機中的 `man` 指令做什麼?
顯示程式的手冊頁此文章是 FrontendMasters 上的 Full Stack Fundamentals, v3 課程筆記
