cover

上篇 講了 Zsh 配置和 alias 分類。這篇講真正上 server 的時候你需要知道的指令——不是每天都用,但出事的時候能自己查、自己修,不用每次都等後端或 SRE 來救你。

先講結論

前端工程師上 server 最常做的事就三個:查磁碟滿了沒、追 log 找錯誤、傳檔案。把這三件事搞熟,你在 on-call 的時候就不會只能乾瞪眼。

磁碟:Server 掛掉的頭號原因

Server 跑到磁碟滿了,比你想的常見得多:

df -h                          # 整體磁碟使用量
du -sh *                       # 當前目錄各資料夾大小
du -sh * | sort -rh | head -10 # 找出最肥的前 10 個

通常兇手不是程式碼,是 log 檔。某個瘋狂寫 log 的服務把 /var/log 塞爆,整台機器就死了。先用 df -h 確認哪個 partition 爆了,再用 du 追蹤到底是哪個資料夾在吃空間。

Log 追蹤:Debug 的第一步

# 即時追蹤(部署完必開)
tail -f /var/log/app.log
 
# 搜尋特定錯誤(前後 3 行 context)
grep -n -C 3 "TypeError" /var/log/app.log
 
# 遞迴搜尋整個資料夾
grep -r "keyword" /path/to/folder

tail -f 大概是 debug 時最常用的指令。部署完開一個 terminal 盯著 log,第一時間就能抓到報錯。如果你的 shell 有裝 rg(ripgrep),搜尋速度比 grep 快一個數量級——上篇的 alias 已經設好了。

這裡有個小技巧:出問題的時候先別急著看 code,先看 log。很多時候錯誤訊息已經把答案寫在那裡了,只是你沒去讀。

系統監控

free -m        # 記憶體使用量(MB)
uname -a       # 系統基本資訊
nproc          # CPU 核心數

上篇已經把 top 映射到 htop,所以直接打 top 就是更好的介面。

SSH:少打很多字的方法

上篇有 SSH alias(sshgensshlist),但真正省時間的是 ~/.ssh/config

Host my-server
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/id_work
    Port 22

設好之後,ssh my-server 就能連——不用每次都打 ssh deploy@192.168.1.100 -i ~/.ssh/id_work。上篇的 Git Clone Wrapper 也是基於這個機制。

SCP 檔案傳輸

# 本機 → 遠端
scp local-file.txt user@server-ip:/remote/path/
 
# 遠端 → 本機
scp user@server-ip:/remote/file.txt ./local-path/

如果設好了 SSH config,可以直接用 Host 別名:scp file.txt my-server:/tmp/

Windows 對應指令

如果你的開發機是 Windows:

netstat -ano | findstr :8080    # 查 Port
taskkill /F /PID <PID>          # 砍 Process

不過說真的,Windows 上建議裝 WSL,然後用 Linux 指令。人生苦短,少跟 PowerShell 纏鬥。

設計重點回顧

回顧上下兩篇,整套 shell 配置的設計邏輯:

  1. 模組化.zshrc 只載入,新工具加 .zsh 檔就好
  2. 安全預設rm/mv/cp-i,防手殘
  3. 現代工具fd/rg/htop 取代老三樣,速度碾壓
  4. 多身份管理 — Git Clone Wrapper + SSH config,clone 時選身份

終端機配置就像健身——投入的時間不會馬上看到效果,但持續做六個月後你會覺得之前沒配的自己是個野蠻人。