空垠尘

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 常見三大致命陷阱:

  1. 環境變數缺失:Crontab 預設的 PATH 非常簡略,務必使用絕對路徑(如 /usr/local/bin/python3),或在腳本開頭明確宣告 export PATH=$PATH:/usr/local/bin;
  2. 工作目錄問題:Cron 執行時預設在使用者家目錄,腳本內請先 cd /path/to/workdir;
  3. 日誌輸出靜默遺失:務必重新導向標準輸出與錯誤輸出:
    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 -rrg (ripgrep)基於 Rust,極速多執行緒,自動忽略 .gitignore
互動式模糊搜尋純指令翻頁fzf模糊檢索歷史指令、檔名、Git 提交
JSON 資料處理手工解析jq命令列過濾、高亮與提取 JSON 欄位
磁碟空間排查du -sh *ncdu / dust互動式目錄佔用分析與視覺化排序
系統資源監控topbtop / htop現代儀表板,CPU/記憶體/網路一覽無餘
1# 常用效率一行流:
2rg "DATABASE_URL" /opt/projects/
3history | fzf
4sudo lsof -i :8080
文章目錄