熱門分類
載入中…
目錄0%

🐧 Linux 指令使用全解析:從基礎到進階的實戰技巧(含時間戳記備份技巧)

    🐧 Linux 指令使用全解析:從基礎到進階的實戰技巧(含時間戳記備份技巧)

    在 Linux 系統管理日常工作中,熟練掌握各類指令不僅能提升效率,更能快速定位問題、自動化重複任務。本文從檔案操作、文本處理、程序與服務管理、網路診斷、權限與安全、進階腳本自動化六大面向,提供逐步說明、實際範例與驗證步驟,並特別加入「利用 date 指令打造帶時間戳記的自動備份檔名」實用技巧。最後結合貴部落格既有的技術文章作為延伸閱讀,助您建立完整的指令知識體系。


    📋 目錄

    1. 📁 基礎檔案與目錄操作
    2. 🔤 文本處理與資料過濾
    3. ⚙️ 程序與服務管理
    4. 🌐 網路診斷與監控
    5. 🔐 權限與安全強化
    6. 🤖 進階腳本自動化與除錯
    7. ⏰ 實用技巧:帶時間戳記的備份檔名
    8. 📚 延伸閱讀(站內相關文章)
    9. ✅ 結論與行動建議

    📁 一、基礎檔案與目錄操作

    掌握檔案與目錄的基本指令是所有後續操作的根基。

    • 列出目錄內容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

    ⚙️ 三、程序與服務管理

    透過 systemctljournalctl 監控服務狀態與日誌。

    • 查詢服務狀態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 服務正在運行)。

    🌐 四、網路診斷與監控

    使用 ssiplsof 快速定位網路問題。

    • 檢查聆聽端口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/shadowchmod 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"
    • 參數處理:使用 getoptsawk 解析選項。
    • 錯誤捕捉與回報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"

    指令解析:

    1. $(date +"%Y%m%d_%H%M%S"):Shell 會先執行這段,得到類似 20260612_181345 的字串。
    2. "....txt":加上副檔名,組合成完整的檔名 20260612_181345.txt
    3. 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 指令並非死記指令選項,而是理解其背後的設計哲學與適用情境。透過本文的逐步說明與實際驗證,您已經具備:

    1. 快速定位與處理檔案、文本、程序與網路問題的基礎工具。
    2. 能夠撰寫安全、可除錯的自動化腳本,並透過 cron 或 Ansible 進行排程。
    3. 知道如何利用權限管理與 sudo 規則降低風險,同時保持必要的操作彈性。
    4. 能夠參考貴部落格既有的深度技術文章,持續深化各指令的進階應用。

    行動建議

    • 每天選擇一個您不熟悉的指令(例如 lsofawk),花 15 分鐘閱讀其 man 頁並寫出一個小練習腳本。
    • 將常用的指令組合寫成個人 ~/bin 腳本庫,並加入 $PATH 以便快速呼叫。
    • 在測試環境中定期執行 sudo auditdausearch 檢查是否有未授權的指令執行。
    • 閱讀上述「延伸閱讀」中的文章,將指令知識與系統加固、監控與自動化結合起來,打造更穩固的 Linux 基礎設施。
    • 實作本節「帶時間戳記的備份檔名」技巧,將其納入日常備份或監控腳本中,確保歷史資料永不被覆蓋。

    持續練習與實踐,讓指令成為您解決問題的得力助手! 🚀

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級