萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 進階玩家必知的 10 個冷門但強大命令

熟悉 ls、cd、grep 是入門,掌握以下 10 個「知名度不高但解決特定問題極其高效」的命令,能讓你在終端機操作上更上一層樓。

  1. pgrep / pkill — 進程名稱精準查殺

    替代 ps aux | grep xxx | awk '{print $2}' 的繁瑣管線。

    pgrep -u root nginx      # 列出 root 執行的 nginx PID
    pkill -f "python.*script.py" # 依完整命令列模式殺進程
    pgrep -a ssh             # 顯示 PID 與完整命令列
  2. pstree — 視覺化進程樹

    一眼看清父子進程關係,排查 Fork 炸彈或服務啟動關係神器。

    pstree -p -a            # 顯示 PID 與完整參數
    pstree -u               # 顯示用戶切換
  3. bc / dc — 終端機內的精密計算器

    支援任意精度算術、進制轉換、函數定義。bc 為中綴語法 (類 C),dc 為後綴 (RPN)。

    echo "scale=10; sqrt(2)" | bc      # 開根號,10 位小數
    echo "ibase=16; obase=2; FF" | bc    # 16 進位轉 2 進位
    # 互動模式下可定義函數、迴圈
  4. split / csplit — 大檔案分割神器

    將巨大日誌/備份檔切分為小塊,便於傳輸、並行處理或上傳限制大小的存儲。

    split -b 100M -d large.log chunk_   # 按 100MB 分割,數字後綴
    split -l 10000 -d large.log chunk_  # 按 10000 行分割
    csplit -f sec_ log.txt '/^SECTION/' '{*}' # 依正則分割 (如按章節)
  5. nl — 給輸出加行號

    閱讀程式碼、腳本、編譯錯誤輸出時,行號是定位關鍵。

    nl -ba script.sh        # 為所有行編號 (含空行)
    cat -n script.sh        # 替代方案
    nl -ba script.sh | sed -n '50,100p' # 結合篩選行範圍
  6. mkfifo — 建立命名管道 (FIFO) 實現進程通訊

    無需臨時檔案,實現 Shell 管線的「非線性」連接,適合多進程協作。

    mkfifo mypipe
    # 終端 1: 生產者
    ls -R / > mypipe
    # 終端 2: 消費者
    grep "\.conf$" < mypipe
    # 甚至可跨網路: ssh user@host "cat > mypipe" < local_file
  7. ldd — 動態連結庫依賴檢視

    排查「找不到共享庫」、「版本衝突」、「二進制無法執行」的首選工具。

    ldd /usr/bin/nginx
    # 輸出: linux-vdso.so.1 => ... /lib/x86_64-linux-gnu/libpcre.so.3 => ...
    ldd -v /path/to/binary  # 詳細版本資訊
    LD_DEBUG=libs ./binary  # 極度詳細的動態鏈接器除錯輸出
  8. col — 過濾控制字元,淨化 Man Page 輸出

    將含反白/底線控制碼的 man 頁轉為純文字,便於存檔、搜尋、列印。

    man bash | col -b > bash_manual.txt  # -b 移除退格鍵字元
    man ls | col -bx | grep -A5 -B5 "SORT"
  9. xmlwf — XML 井格性 (Well-formedness) 驗證

    快速檢查 XML 結構是否合法 (標籤閉合、巢狀正確),無需完整 Schema 驗證。

    xmlwf config.xml        # 正常無輸出,錯誤顯示行號與描述
    curl -s https://api.example.com/data.xml | xmlwf -
  10. lsof — 列出進程開啟的檔案 (一切皆檔案)

    系統偵查瑞士刀:找佔用埠口、追蹤檔案鎖、發現被刪除但佔用空間的檔案。

    lsof -i :80             # 佔用 80 埠的進程
    lsof -p              # 某進程開啟的所有檔案
    lsof +L1                  # 列出連結數為 0 (已刪除但未釋放) 的檔案
    lsof -u www-data          # 特定用戶開啟的檔案

總結

這些命令各自解決一類「用常規工具很麻煩、寫腳本太重」的痛點。將它們納入工具箱,下次遇到對應場景時,你會發現一條命令搞定原本需要十行腳本的工作。

copyright © 萬盛學電腦網 all rights reserved