Linux 學習初期容易形成固有誤解,導致後續排錯與架構理解偏差。本文針對 /usr 目錄含義、tar 參數順序規則、通配符與正則表達式本質差異三大高頻誤區進行深度解析,建立正確心智模型。
/usr 代表 "User" 目錄?許多人直覺認為 /usr 是 "user" 縮寫,存放使用者資料。
/usr = Unix Software Resource(Unix 軟體資源目錄)
/ 為根分區,/usr 掛載第二顆磁碟存放「非開機必需」的軟體資源| 路徑 | 內容 | FHS 定位 |
|---|---|---|
/usr/bin | 非開機必需使用者指令 | 唯讀、可跨主機共享 |
/usr/sbin | 非開機必需系統管理指令 | 同上 |
/usr/lib | 函式庫檔案 | 同上 |
/usr/local | 本機自行編譯安裝的軟體(/usr/local/bin 等) | 例外:可寫入、不共享 |
/usr/share | 架構無關資料(文件、圖示、字型) | 唯讀、可共享 |
/home/username:一般使用者家目錄/root:root 使用者家目錄/srv:服務資料目錄(如網站根目錄)/var:變動性資料(日誌、快取、資料庫檔案)tar -jxvf filename.tar.bz2 中 f 必須緊貼檔名?認為 f 代表 filename,所以必須緊鄰檔名參數,其他參數順序可任意變換。
tar 採用 傳統選項語法(不帶連字號)與 GNU 長選項語法(雙連字號)並存:
f 後必須接檔名,但 f 本身在選項串中的位置決定檔名參數出現的位置tar -cvf archive.tar file1 file2(f 在最後,檔名緊接其後)tar -cf archive.tar -C /path file(f 後接檔名,-C 為獨立選項)tar --create --bzip2 --verbose --file=archive.tar.bz2 file1 file2
# 或簡寫
tar -cjvf archive.tar.bz2 file1 file2 # 習慣將 f 放最後,檔名緊跟
核心原則:只要 f 後緊跟檔名,選項字母順序可自由排列;但為可讀性,建議固定習慣順序(如 -czvf、-xzvf)。
| 特性 | Shell 通配符 | 正則表達式 |
|---|---|---|
| 處理層級 | Shell 展開階段(由 Shell 解析) | 程式內部引擎解析 |
| 適用場景 | 檔名匹配、路徑展開 | 文字搜尋、替換、驗證 |
* 含義 | 匹配任意字元(含零個),不跨目錄 | 量詞:前一元素出現 0 次或多次 |
? 含義 | 匹配單一任意字元 | 量詞:前一元素出現 0 或 1 次 |
[abc] 含義 | 匹配集合中任一字元 | 字元類別:匹配 a、b、c 任一 |
| 支援工具 | ls, cp, find -name, bash 延伸 | grep, sed, awk, perl, python, vim |
# Shell 通配符:列出所有 .txt 檔案
ls *.txt
# 正則表達式:grep 搜尋至少一個 'a' 開頭的行
grep '^a.*' file.txt
# 正則中 aa* 表示:a 後接零或多個 a(即至少一個 a)
echo "a" | grep -E 'aa*' # 匹配
echo "aaa" | grep -E 'aa*' # 匹配
echo "b" | grep -E 'aa*' # 不匹配
find -name 使用通配符非正則# 正確:find 使用 Shell 風格通配符
find /var/log -name "*.log"
# 錯誤:嘗試用正則語法
find /var/log -name "*.log$" # 會字面匹配檔名含 "$" 字元
# 正則匹配檔名需用 -regex
find /var/log -regex ".*\.log$"
精準的術語理解是高效排錯的基石。/usr 非用戶目錄、tar 參數順序有邏輯、通配符與正則屬不同抽象層級——釐清這三點,能避開 80% 的初學者陷阱,加速邁向 Linux 專家之路。