完成了昨天 Git 協作與 PR 文件的自動化生成後,今天我們來到第四模組(全端、資料庫與 API 輔助開發)的收官篇。
在軟體工程師的日常工作中,除了在 IDE 裡面寫業務程式碼,另一大高頻場景就是命令列終端機(Terminal / CLI)。無論是連上 Linux 伺服器排查生產環境 Log、分析系統效能、批次處理伺服器上的組態檔案,還是拯救打架的 Git 分支,終端機指令都是工程師最強大的武器。
然而,Linux 的指令參數極其繁雜:
find 搜尋超過 100MB 且修改時間在 7 天前的檔案參數到底怎麼拼?awk、sort、uniq 該怎麼串接管道(Pipe)?sed 或 xargs 該如何安全下達?過去遇到這些問題,工程師往往要在 Google、Stack Overflow 或晦澀的 man 手冊翻找半天。今天我們就來示範:如何讓 ChatGPT / Copilot 成為隨身帶在身上的「Linux 運維與 CLI 指令專家」,用白話文直接轉換成精準且安全的命令列腳本!
在伺服器上執行終端機指令具有一定破壞性(例如不小心的 rm 或 sed -i),因此提示詞中必須特別要求「安全防禦」與「乾跑測試(Dry Run)」:
【CLI 指令生成提示詞範本】
請扮演資深 Linux 系統運維(DevOps / SRE)與 Shell 腳本專家。
我的需求目標:[用白話清楚描述目標,例如:搜尋並分析特定 Log、批次替換字串、或修復 Git 歷史]
當前環境:[Ubuntu / Debian / macOS / CentOS],Shell 為 [Bash / Zsh]
請依序提供以下內容:
假設我們的 Web 伺服器遭受異常流量衝擊,日誌檔案 /var/log/nginx/access.log 正在瘋狂暴增。我們需要立刻找出**「訪問次數最高的前 10 個 IP 位址」**,以便設定防火牆規則封鎖。
[Shell 指令:統計 Top 10 IP]
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
【參數逐層解析】:
awk '{print $1}':以預設空白作為分隔符,僅擷取每一行日誌的第一個欄位(即訪客 IP)。sort:將 IP 排序,讓相同 IP 集中在一起,這是後續 uniq 統計的先決條件。uniq -c:計算相鄰重複 IP 的出現次數,並在開頭輸出累計次數。sort -nr:-n 代表按數值大小(而非字典順序)比對,-r 代表由大到小降冪排序。head -n 10:僅截取排名前 10 大的結果。伺服器磁碟空間即將見底(Disk Full),我們需要**「找出 /var/log/ 下所有大於 500MB 且超過 30 天未修改的 .log 檔案,並予以刪除」**。
AI 會特別強調「不要直接加 -delete」,而是先給出安全預檢步驟:
find /var/log -type f -name "*.log" -mtime +30 -size +500M -exec ls -lh {} +
find /var/log -type f -name "*.log" -mtime +30 -size +500M -delete
【AI 提醒的防踩坑細節】:
-type f:嚴格限定只抓取「一般檔案(File)」,避免誤判目錄。-mtime +30:代表最後修改時間距離現在「大於 30 天」。-size +500M:限定大小超過 500 Megabytes。ls -lh 檢視檔案清單的習慣,能杜絕誤刪關鍵資料的慘劇。日常開發中常有人手殘下了 git reset --hard 或誤刪了尚未合併的分支。這時不要慌,讓 AI 告訴你如何從 Git 的底層黑洞撈回代碼:
【指令:查看所有指針移動紀錄】
git reflog
【指令:找回目標狀態並建立新分支】
git branch recovery-branch HEAD@{2}
AI 會清楚說明:Git 的 commit 即使在分支被刪除後,只要底層物件庫尚未被 GC 清理,透過 reflog 就能看到過去每一次 HEAD 指針的跳轉痕跡,一鍵挽回幾天的辛勤心血!
在面對數萬個代碼檔案的大型專案時,傳統的 grep 與 find 搜尋速度常顯得吃力。AI 通常會主動推薦使用現代 Rust 開發的極速工具:
ripgrep (rg):自動忽略 .gitignore 與隱藏檔案,比傳統 grep 快上數倍:fd:取代 find 的直覺檔案搜尋工具:今天我們掌握了利用 AI 作為「CLI 智慧字典」的技巧,透過清楚的自然語言需求,生成精確、高效且帶有 Dry Run 防護的 Linux 與 Git 運維指令,大大降低了命令列操作的心理負擔。
到今天為止,第四模組(全端、資料庫與 API 輔助開發)正式告一段落!