Linux 檔案系統操作的四大基石:mkdir(建立目錄)、touch(建立檔案/更新時間)、rm(刪除檔案/目錄)、rmdir(刪除空目錄)。本文系統整理四指令的完整參數表、核心語法、實戰範例、安全陷阱與最佳實務,構建檔案操作的標準化作業程序。

mkdir [選項]... 目錄...
| 參數 | 長參數 | 功能 | 範例 |
|---|---|---|---|
| -p | --parents | 遞迴建立父目錄鏈 | mkdir -p a/b/c |
| -m | --mode=模式 | 直接設定權限(覆蓋 umask) | mkdir -m 700 private |
| -v | --verbose | 顯示建立過程 | mkdir -pv a/b/c |
| -Z | --context | 設定 SELinux 安全內容 | mkdir -Z webroot |
# 單層目錄
mkdir test1
# 遞迴多層
mkdir -p project/{src,bin,doc,test/{unit,integration}}
# 指定權限建立
mkdir -m 2770 /shared/teamdata
chgrp developers /shared/teamdata
touch [選項]... 檔案...
| 參數 | 長參數 | 功能 |
|---|---|---|
| -a | --time=atime | 僅更新存取時間 |
| -m | --time=mtime | 僅更新修改時間 |
| -c | --no-create | 不建立新檔,僅更新既有檔案時間 |
| -d | --date=字串 | 指定日期時間(支援相對格式) |
| -t | --time=時間戳 | 指定格式 [[CC]YY]MMDDhhmm[.SS] |
| -r | --reference=檔案 | 參考檔案時間戳 |
# 建立空檔案
touch test.txt
# 批次建立
touch file{1..100}.log
# 更新時間不建立檔案
touch -c existing.txt
# 設定特定時間
touch -t 202312251200.00 release.txt
touch -d "2 days ago" log.txt
touch -r reference.txt target.txt
rm [選項]... 檔案/目錄...
| 參數 | 長參數 | 功能 | 風險等級 |
|---|---|---|---|
| -f | --force | 忽略不存在、不詢問、強制刪除 | 高 |
| -i | --interactive | 每個檔案詢問確認 | 低 |
| -I | 超過 3 個檔案或遞迴時詢問一次 | 中 | |
| -r, -R | --recursive | 遞迴刪除目錄及內容 | 極高 |
| -d | --dir | 刪除空目錄(同 rmdir) | 低 |
| -v | --verbose | 顯示刪除過程 | 低 |
| --no-preserve-root | 允許刪除根目錄(極度危險) | 致命 | |
| --preserve-root | 預設保護根目錄 | 安全 |
# 刪除單一檔案
rm file.txt
# 互動式刪除多個檔案
rm -i *.tmp
# 遞迴刪除目錄(高風險)
rm -rf /var/log/old_logs
# 安全模式:先預覽再執行
ls -la /var/log/old_logs
# 確認無誤後
rm -rf /var/log/old_logs
# 保護重要目錄:建立別名
alias rm='rm -I --preserve-root'
# 或函數
safe_rm() {
echo "即將刪除: $@"
read -p "確認? [y/N] " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf "$@"
}
rmdir [選項]... 目錄...
| 參數 | 長參數 | 功能 |
|---|---|---|
| -p | --parents | 遞迴刪除空父目錄鏈 |
| -v | --verbose | 顯示刪除過程 |
| --ignore-fail-on-non-empty | 忽略非空錯誤繼續 |
# 刪除空目錄
rmdir empty_dir
# 遞迴清理空目錄鏈
rmdir -p a/b/c # 刪除 c, 若 b 變空則刪除 b, 若 a 變空則刪除 a
# 批次清理專案空目錄
find /project -type d -empty -delete
| 操作 | 推薦指令 | 替代方案 | 注意事項 |
|---|---|---|---|
| 建立目錄 | mkdir -p | mkdir -p (冪等) | 指定 -m 設定權限 |
| 建立空檔案 | touch | > file, :> file | touch 可批次、可控制時間 |
| 刪除檔案 | rm -f | unlink | 目錄用 rm -rf |
| 刪除空目錄 | rmdir | rm -d | rmdir 語義明確、安全 |
| 刪除非空目錄 | rm -rf | find -delete | 極高風險,必須預覽確認 |
| 清理空目錄樹 | find -empty -delete | rmdir -p | find 更靈活 |
rsync -av 異地備份ls/find -print 確認清單rm -I 或 rm -irm -rf * 極易手誤alias rm='rm -I --preserve-root'chattr +i /etc/passwd| 指令 | 後果 | 教訓 |
|---|---|---|
rm -rf / | 系統毀滅 | --preserve-root 預設保護,但 --no-preserve-root 可繞過 |
rm -rf * .hidden | 刪除隱藏檔連帶父目錄 | 通配符不匹配隱藏檔,需明確處理 |
cd /tmp; rm -rf * | 若 cd 失敗則在錯誤目錄刪除 | 腳本用 cd /path && rm -rf * 短路 |
rm -rf /usr/lib | 系統庫遺失無法啟動 | 絕對路徑操作需三思 |
檔案系統操作是 Linux 管理的基石,mkdir/touch/rm/rmdir 四指令看似簡單,但參數組合與安全陷阱極深。建立標準化操作流程、封裝安全工具函數、培養「先預覽後執行」肌肉記憶,是從初學者邁向專業系統管理員的必經之路。
關閉 Linux screen 終端視覺鈴(閃屏)的暫時與永久方法
Linux 升級 MySQL 後報錯 conflicts with file 解決方案:移除舊 libs 衝突包
Ubuntu 解決「can't find libjava.so」錯誤:使用 PPA 安裝 Oracle Java 8 避免手動配置坑
Linux 用戶登出自動重設 hosts.allow/deny 限制 IP 登入 Shell 腳本實作
Linux VMware 虛擬磁盤在線擴容實戰:無需重啟識別新空間
CentOS 系統配置 Yum 源完整教程(以 163/網易源為例)