🐧 Linux 指令使用全解析:從基礎到進階的實戰技巧(含時間戳記備份技巧)
在 Linux 系統管理日常工作中,熟練掌握各類指令不僅能提升效率,更能快速定位問題、自動化重複任務。本文從檔案操作、文本處理、程序與服務管理、網路診斷、權限與安全、進階腳本自動化六大面向,提供逐步說明、實際範例與驗證步驟,並特別加入「利用 date 指令打造帶時間戳記的自動備份檔名」實用技巧。最後結合貴部落格既有的技術文章作為延伸閱讀,助您建立完整的指令知識體系。
📋 目錄
- 📁 基礎檔案與目錄操作
- 🔤 文本處理與資料過濾
- ⚙️ 程序與服務管理
- 🌐 網路診斷與監控
- 🔐 權限與安全強化
- 🤖 進階腳本自動化與除錯
- ⏰ 實用技巧:帶時間戳記的備份檔名
- 📚 延伸閱讀(站內相關文章)
- ✅ 結論與行動建議
📁 一、基礎檔案與目錄操作
掌握檔案與目錄的基本指令是所有後續操作的根基。
- 列出目錄內容:
ls -lh顯示詳細資訊及人類可讀大小。 - 建立目錄:
mkdir -p /opt/myapp/logs-p確保父目錄同時建立。 - 複製與移動:
cp -a src/ dest/保留權限與連結;mv old.txt new.txt重新命名。 - 刪除檔案:
rm -i unwanted.log-i提示確認,避免誤刪。 - 搜尋檔案:
find /var/log -type f -name "*.log" -mtime +7找出超過 7 天的日誌檔。
✅ 驗證步驟:執行 find /tmp -type f -name "testfile" 應該返回您剛才建立的測試檔案路徑。
🔤 二、文本處理與資料過濾
日常工作中經常需要從日誌、設定檔或命令輸出中擷取特定資訊。
- grep 搜尋模式:
grep -n "ERROR" /var/log/syslog顯示錯誤行號。 - 正規表示法進階:
grep -E '^(Failed|Invalid)' auth.log擷取登入失敗紀錄。 - awk 欄位處理:
awk '{print $1,$5}' /etc/passwd顯示使用者與家目錄。 - sed 即時替換:
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config就地修改設定。 - cut 與 sort 組合:
cut -d: -f1 /etc/passwd | sort列出所有使用者帳號。
✅ 驗證步驟:執行echo "Hello World" | awk '{print $2}'應該輸出World。
⚙️ 三、程序與服務管理
透過 systemctl 與 journalctl 監控服務狀態與日誌。
- 查詢服務狀態:
systemctl status nginx。 - 啟用/停用開機自起:
systemctl enable docker/systemctl disable docker。 - 重載設定而不中斷服務:
systemctl reload sshd。 - 檢視日誌:
journalctl -u nginx --since "1 hour ago"最近一小時的 Nginx 日誌。 - 即時追蹤日誌:
journalctl -f -u sshd。 - 終止異常程序:
pkill -f "java.*-Xmx4g"或kill -9 $(pgrep -f badscript)。
✅ 驗證步驟:執行systemctl is-active cron應該回傳active(若 cron 服務正在運行)。
🌐 四、網路診斷與監控
使用 ss、ip 與 lsof 快速定位網路問題。
- 檢查聆聽端口:
ss -tlnp列出所有 TCP 聆聽端口及對應 PID。 - 顯示路由表:
ip route show。 - 網路介面統計:
ip -s link show eth0。 - 查詢特定 Port 被哪個程序佔用:
lsof -i :8080。 - 測試遠端連線:
nc -zv example.com 443檢查 TCP 連通性。 - 追蹤網路路徑:
mtr --report www.google.com。
✅ 驗證步驟:執行 ss -tlnp | grep :22 應該看到 sshd 監聽在 port 22。
🔐 五、權限與安全強化
正確設定檔案權限與使用 sudo 是維護系統安全的基礎。
- 檢視與修改權限:
ls -l /etc/shadow;chmod 600 /etc/shadow。 - 變更擁有者與群組:
chown www-data:www-data /var/www/html。 - 設定 SUID/SGID(慎用):
chmod u+s /usr/bin/passwd使一般使用者能變更密碼。 - sudo 權限規則:透過
visudo編輯/etc/sudoers,例如:john ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx。 - 審核登入紀錄:
last | head -20查看最近登入紀錄。 - 檢查開放端口與服務:
sudo netstat -tulnp(或ss -tulnp)確認無不必要的服務開放。
✅ 驗證步驟:執行sudo -l -U john應該顯示 john 可免密碼執行/usr/bin/systemctl restart nginx。
🤖 六、進階腳本自動化與除錯
將重複操作寫成腳本,並使用除錯技巧確保腳本穩健運行。
- 基本 Bash 腳本框架:
#!/usr/bin/env bash set -euo pipefail # 安全模式:遇錯即止、未定義變數報錯、管道失敗則退出 LOGFILE="/var/log/myscript.log" exec >> "$LOGFILE" 2>&1 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Script started" - 參數處理:使用
getopts或awk解析選項。 - 錯誤捕捉與回報:
trap 'echo "Error at line $LINENO"' ERR。 - 除錯模式:執行腳本前加上
bash -x script.sh可逐行顯示執行過程。 - 資料壓縮與備份:
tar -czf /backup/etc_$(date +%F).tar.gz /etc。 - 自動化排程:透過
crontab -e加入0 2 * * * /usr/local/bin/backup.sh每日凌晨 2 點執行備份。
✅ 驗證步驟:建立一個簡單的測試腳本~/test.sh,內容為echo "Hello",執行bash -x ~/test.sh應該看到每行被印出。
⏰ 七、實用技巧:帶時間戳記的備份檔名
在管理 Linux 伺服器或編寫自動化腳本(Shell Script)時,我們經常需要備份系統資訊、日誌檔案或資料庫。如果每次備份的檔名都一樣(例如 backup.txt),新的檔案就會覆蓋舊的檔案,導致歷史資料遺失。為了解決這個問題,最常見的做法就是在檔名中加入「時間戳記」(Timestamp)。以下示範如何結合 ip 指令與 date 指令,產生一個獨一無二的備份檔案。
1. 認識 date 指令的格式化
Linux 的 date 指令非常強大,它可以透過 + 參數來自訂輸出的格式。常用的代碼如下:
%Y:四位數年份(例如:2026)%m:兩位數月份(例如:06)%d:兩位數日期(例如:12)%H:24 小時制的小時(例如:18)%M:分鐘(例如:13)%S:秒(例如:45)
如果你只想取得今天的日期,可以輸入:
date +"%Y%m%d"
若希望更精確,加入時、分、秒,可以用底線 _ 連接:
date +"%Y%m%d_%H%M%S"
2. 常見的錯誤陷阱
當我們想把 ip a(查看網路介面資訊)的結果存成帶有時間的檔案時,直覺可能會這樣打:
ip a >> date +"%Y%m%d_%H%M%S".txt
為什麼會錯?
Shell 會先執行 ip a,然後試圖將結果附加(>>)到一個名叫 date 的檔案中。而後面的 +"%Y%m%d..." 會被當作是 ip 指令的參數,導致 ip 指令報錯說找不到這個命令。
3. 正確解法:命令替換 $(...)
要讓 Shell 先執行 date 指令,並把它的結果當作檔名的一部分,我們需要使用 命令替換(Command Substitution),也就是用 $(...) 把指令包起來。
ip a > "$(date +"%Y%m%d_%H%M%S").txt"
指令解析:
$(date +"%Y%m%d_%H%M%S"):Shell 會先執行這段,得到類似20260612_181345的字串。"....txt":加上副檔名,組合成完整的檔名20260612_181345.txt。ip a > ...:最後將ip a的執行結果,寫入(>)這個新生成的檔案中。
4. 實戰成果
執行完上述指令後,你可以使用 ls 查看目錄,會發現多了一個帶有精確時間的檔案:
ls -l
# -rw-r--r-- 1 user user 0 Jun 12 18:13 20260612_181345.txt
這個技巧不僅適用於 ip a,也可以應用在任何需要備份的指令上,例如 df -h(磁碟空間)或 free -m(記憶體使用量)。
記住這個萬用公式:
指令 > "$(date +"%Y%m%d_%H%M%S").txt"
這樣一來,你的每次執行都會產生一個獨一無二的檔案,再也不用擔心檔案被意外覆蓋了!
✅ 驗證步驟:執行df -h > "$(date +"%Y%m%d_%H%M%S").df.txt",然後用ls -t | head -1應該會看到剛才產生的 df 備份檔案。
📚 八、延伸閱讀(站內相關文章)
以下是貴部落格中與 Linux 指令使用緊密相關的文章,可作為深度學習與參考:
- Linux 加固:SELinux 與隱形網路 – 說明如何搭配指令強化系統安全。
- Linux 監控工具:top、htop、glances、nmon、dstat 指南 – 補充
top類指令的進階使用。 - Linux sysctl 與 Nginx 高併發調優 – 教您透過
sysctl調整核心參數。 - Linux 網路基礎完整指南 – 詳細解說
ip、ss與netstat差異。 - Proxmox 備份與 ZFS 離線還原策略 – 雖為虛擬化主題,但其中的
zfs與snapshot指令適用於一般 Linux 系統。 - Ansible 與 Netplan 批次管理靜態路由 – 展示如何用自動化工具統一執行網路指令。
- Linux Fail2Ban 進階指南 – 說明如何透過指令監控與封鎖惡意 IP。
✅ 九、結論與行動建議
掌握 Linux 指令並非死記指令選項,而是理解其背後的設計哲學與適用情境。透過本文的逐步說明與實際驗證,您已經具備:
- 快速定位與處理檔案、文本、程序與網路問題的基礎工具。
- 能夠撰寫安全、可除錯的自動化腳本,並透過 cron 或 Ansible 進行排程。
- 知道如何利用權限管理與 sudo 規則降低風險,同時保持必要的操作彈性。
- 能夠參考貴部落格既有的深度技術文章,持續深化各指令的進階應用。
行動建議:
- 每天選擇一個您不熟悉的指令(例如
lsof或awk),花 15 分鐘閱讀其man頁並寫出一個小練習腳本。 - 將常用的指令組合寫成個人
~/bin腳本庫,並加入$PATH以便快速呼叫。 - 在測試環境中定期執行
sudo auditd或ausearch檢查是否有未授權的指令執行。 - 閱讀上述「延伸閱讀」中的文章,將指令知識與系統加固、監控與自動化結合起來,打造更穩固的 Linux 基礎設施。
- 實作本節「帶時間戳記的備份檔名」技巧,將其納入日常備份或監控腳本中,確保歷史資料永不被覆蓋。
持續練習與實踐,讓指令成為您解決問題的得力助手! 🚀
沒有留言: