Linux 與 DevOps 常用高頻指令速查
引言:為什麼我們需要一份現代化的指令速查手冊?
Linux 命令列浩如煙海,許多開發者在日常維運和排查故障時,往往習慣機械性地複製貼上,遇到複雜場景(如金鑰管理、跳板機穿透、容器無 Shell 除錯、定時任務靜默失效)時容易陷入困境。
本文以 「真實生產與開發場景」 為導向,將分散的指令歸納為 5 大高頻實戰模組,助你建立清晰的命令列心智模型。
graph TD
Root["現代 DevOps 指令體系"]
Root --> A["1. SSH 遠端與金鑰矩陣"]
A --> A1["Ed25519 現代高強金鑰"]
A --> A2["~/.ssh/config 多主機與跳板機"]
A --> A3["本地與動態連接埠轉發"]
Root --> B["2. 定時任務與行程守護"]
B --> B1["Crontab 語法與環境變數避坑"]
B --> B2["Supervisord 行程崩潰自啟"]
Root --> C["3. 檔案與系統管理"]
C --> C1["ln 軟硬連結管理與安全刪除"]
C --> C2["date 時區與時間戳記轉換"]
C --> C3["磁碟與記憶體分析 (df / du / free)"]
Root --> D["4. 網路排查與命名空間"]
D --> D1["lsof 與 ss 連接埠連線定位"]
D --> D2["nsenter 穿透容器命名空間"]
Root --> E["5. 現代 CLI 生產力工具"]
E --> E1["ripgrep 極速文字檢索"]
E --> E2["fzf 命令列互動模糊檢索"]
E --> E3["jq JSON 資料切片與提取"]
一、 SSH 遠端連線與金鑰矩陣
1. 產生現代安全的 SSH 金鑰對(首選 Ed25519)
優先使用效能更好、安全性更高的 Ed25519 橢圓曲線演算法:
1# 產生 ed25519 金鑰對
2ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
3
4# 一鍵分發公鑰到遠端伺服器(免密碼登入)
5ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100
2. 優雅管理多主機:配置 ~/.ssh/config
在 ~/.ssh/config 中配置別名,免去手動輸入 IP 與連接埠:
1# 個人雲端伺服器
2Host cloud
3 HostName 1.2.3.4
4 User root
5 Port 2222
6 IdentityFile ~/.ssh/id_ed25519
7
8# 內網樹莓派 / HomeLab
9Host rpi
10 HostName 192.168.1.100
11 User pi
12 IdentityFile ~/.ssh/id_ed25519
13
14# 經由跳板機存取內網機器 (ProxyJump)
15Host internal-db
16 HostName 10.0.0.5
17 User dbadmin
18 ProxyJump cloud
配置後,只需輸入 ssh cloud 或 ssh internal-db 即可直接一鍵直連!
3. SSH 連接埠轉發
1# 本地連接埠轉發 (-L):將遠端伺服器的 3306 資料庫對應到本地 13306
2ssh -N -L 13306:127.0.0.1:3306 user@remote-server
3
4# 動態 SOCKS5 代理 (-D):把遠端機器變成輕量 SOCKS5 代理通道
5ssh -N -D 10808 user@remote-server
二、 定時任務與守護行程管理
1. Crontab 語法與關鍵避坑指南
Crontab 的標準時間格式為 5 段:分 時 日 月 週。
⚠️ Crontab 常見三大致命陷阱:
- 環境變數缺失:Crontab 預設的
PATH非常簡略,務必使用絕對路徑(如/usr/local/bin/python3),或在腳本開頭明確宣告export PATH=$PATH:/usr/local/bin;- 工作目錄問題:Cron 執行時預設在使用者家目錄,腳本內請先
cd /path/to/workdir;- 日誌輸出靜默遺失:務必重新導向標準輸出與錯誤輸出:
10 3 * * * /usr/bin/bash /opt/backup.sh >> /var/log/backup.log 2>&1
2. 使用 Supervisord 進行行程保活
1; /etc/supervisor/conf.d/my-app.conf
2[program:my-app]
3directory=/opt/my-app
4command=/usr/bin/python3 app.py
5autostart=true
6autorestart=true
7stderr_logfile=/var/log/my-app.err.log
8stdout_logfile=/var/log/my-app.out.log
9user=www-data
1sudo supervisorctl reread # 讀取新增配置
2sudo supervisorctl update # 更新並啟動新程式
3sudo supervisorctl status # 查看所有行程狀態
三、 檔案連結與系統時間操作
1. ln 軟連結與硬連結實戰
1# 建立軟連結(符號連結):ln -s <真實源檔案/目錄> <軟連結名稱>
2ln -s /mnt/data/music ~/Music
3
4# 刪除目錄軟連結時,嚴禁加結尾斜線!
5rm ~/Music # 正確:只刪除軟連結本身
6rm -rf ~/Music/ # 危險:可能會清空源目錄下的真實內容!
2. date 時間格式化與時間戳記轉換
1# 格式化輸出當前標準時間
2date +"%Y-%m-%d %H:%M:%S"
3
4# 將 Unix 時間戳記轉換為人類可讀時間
5date -d @1727258400 +"%Y-%m-%d %H:%M:%S" # (Linux)
6date -r 1727258400 +"%Y-%m-%d %H:%M:%S" # (macOS)
四、 容器與系統命名空間穿透 (nsenter)
在 Docker 維運中,許多精簡映像(如 Alpine 精簡版、Distroless)沒有內建 curl、bash 或 netstat。我們可以利用 nsenter 直接穿透進入容器命名空間:
1# 1. 獲取容器在宿主機上的真實 PID
2PID=$(docker inspect --format '{{ .State.Pid }}' <container_name_or_id>)
3
4# 2. 僅穿透進入容器的網路命名空間 (Network Namespace)
5# 在宿主機上直接使用宿主機的工具測試容器網路!
6sudo nsenter -t $PID -n ss -tulnp
7sudo nsenter -t $PID -n tcpdump -i eth0 port 80
8
9# 3. 完整穿透進入容器全部命名空間
10sudo nsenter -t $PID -m -u -i -n -p
五、 現代 CLI 生產力與效率工具集
| 場景 | 傳統指令 | 現代替代品 | 核心優勢 |
|---|---|---|---|
| 代碼/文字搜尋 | grep -r | rg (ripgrep) | 基於 Rust,極速多執行緒,自動忽略 .gitignore |
| 互動式模糊搜尋 | 純指令翻頁 | fzf | 模糊檢索歷史指令、檔名、Git 提交 |
| JSON 資料處理 | 手工解析 | jq | 命令列過濾、高亮與提取 JSON 欄位 |
| 磁碟空間排查 | du -sh * | ncdu / dust | 互動式目錄佔用分析與視覺化排序 |
| 系統資源監控 | top | btop / htop | 現代儀表板,CPU/記憶體/網路一覽無餘 |
1# 常用效率一行流:
2rg "DATABASE_URL" /opt/projects/
3history | fzf
4sudo lsof -i :8080