mkdir dir1 # 單層
mkdir -p a/b/c/d # 遞歸建立父目錄 (最常用)
mkdir -m 750 private_dir # 指定權限 (rwxr-x---)
mkdir -v project/{src,bin,doc,test} # 大括號展開批量建立
mkdir --parent /home/user/.config/app # 同 -p
常見錯誤:目錄已存在報錯 → 加 -p 抑制錯誤;權限不足 → 檢查父目錄寫入權限或 sudo。
rmdir empty_dir # 僅限空目錄
rmdir -p a/b/c # 遞歸刪除空父目錄 (c 空→刪除→b 空→刪除→a 空→刪除)
rmdir --ignore-fail-on-non-empty dir # 忽略非空錯誤 (配合 -p)
非空目錄刪除請用 rm -r 或 rm -rf (極度謹慎)。
cd # 回家目錄 ($HOME)
cd /absolute/path # 絕對路徑
cd relative/path # 相對路徑
cd .. # 父目錄
cd ../.. # 祖父目錄
cd - # 切回上一個工作目錄 (OLDPWD)
cd ~user # 切換到指定用戶家目錄
cd "$(dirname "$0")" # 腳本所在目錄 (需 source 或 . 執行)
CDPATH 變數:export CDPATH=.:~:/projects:/var/www 讓 cd dirname 在多路徑搜尋,類似 PATH。
pwd # 邏輯路徑 (跟隨符號連結)
pwd -P # 物理路徑 (解析符號連結)
pwd -L # 強制邏輯路徑 (預設)
差異示例:/home/user/link_dir -> /mnt/data/real_dir,在 link_dir 內 pwd 顯示 /home/user/link_dir,pwd -P 顯示 /mnt/data/real_dir。
| 類別 | 參數 | 功能 | 組合範例 |
|---|---|---|---|
| 顯示範圍 | -a, --all | 顯示所有 (含 . 和 ..) | ls -la |
-A, --almost-all | 顯示隱藏檔但不顯示 . 和 .. | ls -lA | |
-d, --directory | 目錄本身而非內容 | ls -ld /etc | |
-R, --recursive | 遞歸顯示子目錄 | ls -R /etc | head -30 | |
| 輸出格式 | -l | 長格式 (權限、連結數、擁有者、群組、大小、時間、名稱) | ls -lh |
-h, --human-readable | 人類可讀大小 (K, M, G) | ls -lh | |
-1 | 單欄輸出 (管道處理友好) | ls -1 | wc -l | |
-C | 多欄輸出 (終端預設) | ls -C | |
-m | 逗號分隔流式輸出 | ls -m | |
--color[=WHEN] | 彩色 (auto/always/never) | ls --color=always | less -R | |
| 排序 | -t | 按修改時間新→舊 | ls -lt |
-r, --reverse | 反向排序 | ls -ltr (舊→新,最新在底部) | |
-S | 按大小大→小 | ls -lSh | |
-X | 按副檔名字母序 | ls -lX | |
-U | 不排序 (目錄順序) | ls -U | |
| 時間戳選擇 | -c | 按狀態變更時間 (ctime) 排序/顯示 | ls -lc |
-u | 按最後存取時間 (atime) 排序/顯示 | ls -lu | |
--time=WORD | atime/ctime/mtime/birth/access | ls -l --time=birth | |
--time-style=STYLE | long-iso, full-iso, locale, +FORMAT | ls -l --time-style=long-iso | |
--sort=WORD | none (-U), size (-S), time (-t), version (-v), extension (-X) | ls --sort=version | |
| 文件標識 | -F, --classify | 目錄 /、執行 *、連結 @、管道 |、socket = | ls -F |
-p | 目錄後加 / (不標記其他) | ls -p | |
-i, --inode | 顯示 inode 號 | ls -li | |
-n, --numeric-uid-gid | 數字 UID/GID 而非名稱 | ls -ln | |
| 過濾 | -B, --ignore-backups | 忽略 ~ 結尾備份檔 | ls -B |
-I, --ignore=PATTERN | 忽略符合模式 (不進入目錄) | ls -I '*.tmp' | |
--hide=PATTERN | 隱藏符合模式 (但仍進入目錄) | ls --hide='*.log' |
drwxr-xr-x 2 user group 4096 Jan 15 10:30 Documents
││││││││││ │ │ │ │ │
││││││││││ │ │ │ │ └─ 名稱
││││││││││ │ │ │ └─ 修改時間 (mtime)
││││││││││ │ │ └─ 大小 (位元組,目錄為塊數)
││││││││││ │ └─ 群組名
││││││││││ └─ 擁有者名
│││││││││└─ 硬連結數 (目錄含 . 和 .. 至少 2)
││││││││└─ 其他權限 (rwx)
│││││││└─ 群組權限 (r-x)
││││││└─ 擁有者權限 (rwx)
│││││└─ 類型: d=目錄 -=文件 l=符號連結 b=塊設備 c=字符設備 p=管道 s=socket
││││└─ 替代執行位 (S/s) — setuid/setgid 無執行權
│││└─ 粘滯位 (T/t) — 目錄刪除保護
││└─ SetGID (g/s) — 目錄繼承群組、文件以群組權限執行
│└─ SetUID (u/s) — 文件以擁有者權限執行
└─ (保留)
# 找出最大的 10 個文件
find /var/log -type f -exec ls -lh {} + | sort -k5 -hr | head -10
# 或
du -ah /var/log | sort -hr | head -10
# 列出所有可執行文件
find /usr/local/bin -type f -executable -ls
# 顯示目錄樹 (僅目錄)
ls -d */ | column
# 或
tree -d -L 2
# 統計文件類型數量
find /etc -type f | xargs file | cut -d: -f2 | sort | uniq -c | sort -nr
# 顯示完整時間戳 (含秒、奈秒)
ls -l --time-style=full-iso
# 2024-01-15 10:30:45.123456789 +0800
chmod 755 file # 數字法: rwxr-xr-x
chmod u+x,g-w,o=r file # 符號法: 精確控制
chmod -R u+rwX,go=rX dir # 遞歸: X=目錄或已有執行位才加 x
chown user:group file # 修改擁有者:群組
chown -R user:group dir # 遞歸
chgrp group file # 僅修改群組
熟練這些命令與參數組合,是 Linux 日常操作、腳本編寫、故障排查的基本功。建議建立個人 cheatsheet 或使用 tldr/cheat 工具快速查閱。