終端機與 CLI 技能
在 Linux 終端機中工作的參考 — 涵蓋從基本 bash 到容器編排及 AI 代理執行的完整技術棧。
如何使用此技能
此檔案涵蓋最常見的模式。如需詳細命令參考,請按需載入 references/ 中的相關檔案:
| 主題 | 參考檔案 |
|---|---|
| Bash 核心:管道、腳本、檔案系統、安裝、環境變數 | references/bash.md |
| 容器:Podman、Kubernetes (kubectl)、Helm | references/containers.md |
| HTTP 請求:curl | references/curl.md |
| AI 代理:aider-chat、claude CLI | references/agents.md |
1. 執行 bash 命令
command [options] [arguments]
# 依序執行 — 遇到第一個失敗即停止
cmd1 && cmd2 && cmd3
# 無論失敗與否皆執行
cmd1; cmd2; cmd3
# 將輸出擷取到變數
OUTPUT=$(command)
# 重新導向 stdout / stderr / 兩者
command > out.txt
command 2> err.txt
command &> all.txt
# 捨棄所有輸出
command > /dev/null 2>&1
2. 檢查工具是否存在
type -a tool_name # 所有找到 tool 的位置
apropos keyword # 尋找符合關鍵字的命令
which tool_name # PATH 上的第一個二進位檔
whereis tool_name # 二進位檔、原始碼及 man page 位置
3. 結合 &&
# 僅在先前的命令成功時才繼續
sudo apt update && sudo apt upgrade -y
# 安全地鏈結多個步驟
mkdir -p build && cd build && cmake ..
4. 使用 | 管道
# 將一個命令的 stdout 作為 stdin 傳遞給下一個命令
cmd1 | cmd2 | cmd3
# 常見模式
ls -la | grep ".conf"
ps aux | grep nginx
journalctl -u myservice | grep ERROR | tail -20
cat file.txt | wc -l
5. 使用 cat 讀取內容
cat file.txt # 將完整檔案輸出到 stdout
cat file1.txt file2.txt # 串接多個檔案
head -n 20 file.txt # 前 20 行
tail -n 20 file.txt # 後 20 行
tail -f /var/log/app.log # 即時追蹤日誌輸出
less file.txt # 分頁檢視(按 q 退出)
grep "pattern" file.txt # 符合模式的行
grep -r "pattern" ./dir/ # 在目錄中遞迴搜尋
grep -n "pattern" file.txt # 顯示行號
grep -i "pattern" file.txt # 不區分大小寫
6. 排序結果
sort file.txt # 字母順序(升序)
sort -r file.txt # 反向順序
sort -n file.txt # 數字排序
sort -k2 file.txt # 按第 2 欄排序
sort -t: -k3 -n /etc/passwd # 自訂分隔符 (:)、第 3 欄、數字排序
ls -la | sort -k5 -n # 依檔案大小排序 ls 輸出(第 5 欄)
7. 唯一結果
# uniq 僅移除*連續*重複 — 務必先進行排序
sort file.txt | uniq # 去除重複
sort file.txt | uniq -c # 計算出現次數
sort file.txt | uniq -d # 僅顯示重複行
sort file.txt | uniq -u # 僅顯示出現一次的行
# 典型管道:統計日誌中錯誤類型數量
cat app.log | grep ERROR | sort | uniq -c | sort -rn
8. 使用 heredoc 撰寫並執行腳本
# 內聯建立腳本檔案
cat << 'EOF' > myscript.sh
#!/bin/bash
set -euo pipefail # 遇到錯誤、未設定變數或管道失敗時退出
echo "Today: $(date +%Y-%m-%d)"
for i in 1 2 3; do
echo "Step $i"
done
EOF
chmod +x myscript.sh
./myscript.sh
# 或直接執行而不建立檔案
bash << 'EOF'
echo "內聯執行"
ls -la /tmp
EOF
腳本最佳實踐:
- 始終以
#!/bin/bash開頭 - 使用
set -euo pipefail作為安全預設 - 始終引用變數:使用
"$VAR"而非$VAR - 使用
$(...)取代反引號
9. 檔案系統 — 快速參考
# 導覽與檢查
pwd && ls -lah # 我在哪裡 + 這裡有什麼
tree -L 2 # 目錄樹(2 層深度)
find /path -name "*.log" # 依名稱搜尋
du -sh /path # 目錄的大小
df -h # 所有掛載點的磁碟使用量
# 建立 / 複製 / 移動 / 刪除
mkdir -p /path/to/dir # 建立(含父目錄)
cp -r src/ dst/ # 複製目錄
mv src dst # 移動或重新命名
rm -rf dir/ # 遞迴刪除(不可逆)
# 權限與擁有者
chmod +x file # 設為可執行
chmod 644 file # rw-r--r--
chown user:group file # 變更擁有者
# 連結
ln -s /target /link # 符號連結
readlink -f /link # 解析符號連結為真實路徑
# 掛載
mount # 列出所有啟用的掛載
lsblk # 區塊裝置樹
findmnt # 掛載點樹
→ 完整檔案系統參考:references/bash.md
10. 安裝與更新 — 快速參考
# APT
sudo apt update && sudo apt upgrade -y
sudo apt install -y package-name
# pip (Python)
pip install package --break-system-packages
# npm (Node.js)
npm install -g package-name
→ 完整安裝參考(snap、原始碼編譯、pip 選項):references/bash.md
11. 取得命令的說明
command --help # 內聯說明(最快)
man command # 完整 man page
apropos keyword # 搜尋 man page 摘要
whatis command # 一行描述
info command # GNU info 頁面(適用於 GNU 工具)
help cd # Shell 內建命令的說明
12. 環境變數 — 快速參考
export VAR="value" # 為目前 Shell 及其子程序設定
unset VAR # 移除變數
env # 列出所有環境變數
VAR=value command # 僅為單一命令設定
→ 變數持久化、載入 .env 檔案:references/bash.md
詳細參考
當你需要完整的命令覆蓋範圍時,請載入這些檔案:
references/bash.md— 完整檔案系統、安裝/更新、環境變數、腳本模式references/containers.md— Podman、kubectl、Helmreferences/curl.md— 用於 HTTP 請求的 curlreferences/agents.md— aider-chat 與 claude CLI