iT邦幫忙

2026 iThome 鐵人賽

0
ChatGPT & Codex

從 Prompt Engineering 到 Copilot / Codex 實務 30 天系列 第 23 篇

Day 23:【終端機與指令】讓 AI 扮演 Linux / Git 指令字典:精準生成 find、grep、awk 與排查指令

  • 分享至 

  • xImage
  •  

完成了昨天 Git 協作與 PR 文件的自動化生成後,今天我們來到第四模組(全端、資料庫與 API 輔助開發)的收官篇。

在軟體工程師的日常工作中,除了在 IDE 裡面寫業務程式碼,另一大高頻場景就是命令列終端機(Terminal / CLI)。無論是連上 Linux 伺服器排查生產環境 Log、分析系統效能、批次處理伺服器上的組態檔案,還是拯救打架的 Git 分支,終端機指令都是工程師最強大的武器。

然而,Linux 的指令參數極其繁雜:

  • find 搜尋超過 100MB 且修改時間在 7 天前的檔案參數到底怎麼拼?
  • 想從幾十萬行的 Nginx 存取紀錄中,統計發出最多請求的前 10 個 IP,awk、sort、uniq 該怎麼串接管道(Pipe)?
  • 想把整個專案資料夾裡特定名稱的檔案做批次字串替換,sed 或 xargs 該如何安全下達?

過去遇到這些問題,工程師往往要在 Google、Stack Overflow 或晦澀的 man 手冊翻找半天。今天我們就來示範:如何讓 ChatGPT / Copilot 成為隨身帶在身上的「Linux 運維與 CLI 指令專家」,用白話文直接轉換成精準且安全的命令列腳本!


一、CLI 與 Linux 指令生成提示詞模板(CLI Prompting Template)

在伺服器上執行終端機指令具有一定破壞性(例如不小心的 rm 或 sed -i),因此提示詞中必須特別要求「安全防禦」與「乾跑測試(Dry Run)」:

【CLI 指令生成提示詞範本】
請扮演資深 Linux 系統運維(DevOps / SRE)與 Shell 腳本專家。

我的需求目標:[用白話清楚描述目標,例如:搜尋並分析特定 Log、批次替換字串、或修復 Git 歷史]
當前環境:[Ubuntu / Debian / macOS / CentOS],Shell 為 [Bash / Zsh]

請依序提供以下內容:

  1. 完整推薦指令:排版精簡,支援單行執行或管線串接(Piped Command)。
  2. 指令旗標拆解(Flags Explanation):逐一說明每個參數(如 -type, -mtime, -exec, -rn)的具體意義。
  3. 安全防呆與預檢(Dry Run):若涉及檔案修改或刪除,請先提供「僅預覽而不修改」的指令版本。
  4. 效能與替代方案:針對百萬行級別的大檔案或深度目錄,是否有更高效的現代工具推薦(如 ripgrep / fd)。

二、實戰案例一:從生產環境 Access Log 統計高頻惡意 IP

假設我們的 Web 伺服器遭受異常流量衝擊,日誌檔案 /var/log/nginx/access.log 正在瘋狂暴增。我們需要立刻找出**「訪問次數最高的前 10 個 IP 位址」**,以便設定防火牆規則封鎖。

AI 產出的標準指令與拆解:

[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 大的結果。

三、實戰案例二:大檔案清理與安全刪除(Dry Run 實踐)

伺服器磁碟空間即將見底(Disk Full),我們需要**「找出 /var/log/ 下所有大於 500MB 且超過 30 天未修改的 .log 檔案,並予以刪除」**。

AI 會特別強調「不要直接加 -delete」,而是先給出安全預檢步驟:

步驟 1:安全預覽(只查看檔案大小與名稱,不刪除)

find /var/log -type f -name "*.log" -mtime +30 -size +500M -exec ls -lh {} +

步驟 2:確認無誤後的正式刪除指令

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 時光機(找回誤刪分支或 Commit)

日常開發中常有人手殘下了 git reset --hard 或誤刪了尚未合併的分支。這時不要慌,讓 AI 告訴你如何從 Git 的底層黑洞撈回代碼:

【指令:查看所有指針移動紀錄】
git reflog

【指令:找回目標狀態並建立新分支】
git branch recovery-branch HEAD@{2}

AI 會清楚說明:Git 的 commit 即使在分支被刪除後,只要底層物件庫尚未被 GC 清理,透過 reflog 就能看到過去每一次 HEAD 指針的跳轉痕跡,一鍵挽回幾天的辛勤心血!


五、現代 CLI 神器推薦:ripgrep (rg) 與 fd

在面對數萬個代碼檔案的大型專案時,傳統的 grep 與 find 搜尋速度常顯得吃力。AI 通常會主動推薦使用現代 Rust 開發的極速工具:

  1. ripgrep (rg):自動忽略 .gitignore 與隱藏檔案,比傳統 grep 快上數倍:
    rg "PaymentStrategy" --type java
  2. fd:取代 find 的直覺檔案搜尋工具:
    fd -e log -S +100M

今日小結與預告

今天我們掌握了利用 AI 作為「CLI 智慧字典」的技巧,透過清楚的自然語言需求,生成精確、高效且帶有 Dry Run 防護的 Linux 與 Git 運維指令,大大降低了命令列操作的心理負擔。

到今天為止,第四模組(全端、資料庫與 API 輔助開發)正式告一段落!


上一篇
Day 22:【Git 協作輔助】自動撰寫 Conventional Commits 與專業 PR 摘要描述
下一篇
Day 24:【單元測試生成】用 AI 快速撰寫 JUnit 5 與 Mockito 測試案例:輕鬆把測試覆蓋率拉滿
系列文
從 Prompt Engineering 到 Copilot / Codex 實務 30 天 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言