Linux 指令浩如煙海,除了常用的 ls、cd、grep,還有許多「隱藏神器」能大幅提升效率。本文精選 10 個實用但較少被提及的指令,附上實際操作範例,助你成為命令列高手。
不用管道串 ps | grep | awk,直接:
$ pgrep -u hchen
22441
22444
等同 ps -ef | egrep '^hchen' | awk '{print $2}',但更快、更乾淨。
$ pstree
init-+-acpid
|-httpd---10*[httpd]
|-sshd---sshd---bash---pstree
`-mysqld_safe---mysqld---9*[{mysqld}]
一眼看清父子關係、執行緒數量,排查服務異常超方便。
支援開根號、三角函數、高精度浮點運算:
$ echo "sqrt(36)" | bc
6
$ echo "scale=4; sqrt(2)" | bc
1.4142
寫成腳本 sqrt 更方便:
#!/bin/bash
echo -e "sqrt($1)\nquit" | bc -q -i
$ ls -lh largefile.tar.gz
417M largefile.tar.gz
$ split -b 50m largefile.tar.gz LF_
$ ls -lh LF_*
50M LF_aa
50M LF_ab
...
17M LF_ai
合併還原:cat LF_* > largefile.tar.gz。
$ nl stdio.h | head -10
1 /* Define ISO C stdio ...
2 Copyright (C) 1991...
3 This file is part of the GNU C Library.
比 cat -n 更靈活,支援多種編號格式。
$ mkfifo /tmp/mypipe
$ ls -al > /tmp/mypipe & # 終端 1:寫入(阻塞)
$ head /tmp/mypipe # 終端 2:讀取(解除阻塞)
適用於進程間通訊、無暫存檔傳遞大量資料。
$ ldd /usr/bin/java
linux-gate.so.1 => (0x00cd9000)
libgcj.so.7rh => /usr/lib/libgcj.so.7rh (0x00ed6000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0022f000)
...
排查「缺少 .so 檔」、「版本衝突」的利器。
$ man bash | col -b > bash.txt
將 man page 的倒退鍵、底線等控制碼濾除,產生乾淨文字檔。
$ curl -s 'https://example.com/feed' > feed.xml
$ xmlwf feed.xml # 無輸出 = 通過
$ perl -pi -e 's//
/g' feed.xml
$ xmlwf feed.xml
feed.xml:13:23: mismatched tag
快速檢查 XML 結構是否完整。
$ lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 548 apache 4u IPv6 14300967 0t0 TCP *:http (LISTEN)
httpd 561 apache 4u IPv6 14300967 0t0 TCP *:http (LISTEN)
常用參數:-i(網路)、-p PID(指定進程)、-u user(指定用戶)。
| 指令 | 核心用途 | 典型場景 |
|---|---|---|
| pgrep | 依條件列出 PID | 腳本殺進程、監控 |
| pstree | 樹狀進程圖 | 服務依賴分析 |
| bc | 高精度計算 | 科學運算、腳本數學 |
| split | 切割大檔 | 傳輸限制、備份分卷 |
| nl | 加行號 | 程式碼審閱、日誌對照 |
| mkfifo | 具名管道 | IPC、串流處理 |
| ldd | 共享庫相依 | 部署除錯、缺庫排查 |
| col | 濾除控制碼 | man 轉純文字、日誌清洗 |
| xmlwf | XML 驗證 | API 回應驗證、配置檢查 |
| lsof | 開啟檔案/連線 | 端口佔用、檔案洩漏追蹤 |
善用 man <command> 深入探索每個指令的進階參數,這 10 倍工具將讓你的 Linux 日常操作事半功倍。