Linux 指令分為「內建指令」與「外部指令」兩大類,理解其差異與呼叫機制,有助於撰寫高效率腳本與排除指令不存在的疑難雜症。

| 類型 | 載入時機 | 執行效率 | 範例 |
|---|---|---|---|
| 內建指令 | Shell 啟動時載入記憶體,常駐 | 高(無需 fork/exec) | cd, echo, pwd, type, enable |
| 外部指令 | 需求時從硬碟讀取(/bin, /usr/bin 等) | 較低(需建立子行程) | ls, cat, grep, vim, systemctl |
type [-afptP] name...
type cd → cd is a shell builtintype -t cd → builtintype -p ls → /usr/bin/ls(僅顯示外部指令路徑)type -a ls → 同時顯示別名、內建、外部所有同名指令enable -a:列出所有內建指令。enable cmd:若為內建指令無輸出;若非內建則報錯 not a shell builtin。Shell 尋找指令的順序:
hash -l:顯示 Hash 表內容(格式:builtin hash -p /path/cmd cmd)。hash -r:清空 Hash 表(修改指令位置後需執行)。hash -d cmd:刪除特定指令記錄。$ type cat
cat is /usr/bin/cat
$ cat file.txt
$ hash -l
builtin hash -p /usr/bin/cat cat
$ type cat
cat is hashed (/usr/bin/cat)
$ hash -r
$ type cat
cat is /usr/bin/cat
注意:Hash 表僅記錄外部指令,內建指令不在其中。
[[ ... ]] 而非 test、printf 而非 echo)。$HOME/.local/bin 並加入 PATH,避免污染系統目錄。掌握指令分類與解析機制,能讓你更精準地控制 Shell 行為,撰寫更健壯的自動化腳本。