rm 指令核心語法
rm [選項] 檔案或目錄...
關鍵參數對照表
| 參數 | 長參數 | 功能 | 風險等級 |
-f | --force | 忽略不存在檔案、不提示確認、覆蓋唯讀檔案 | 高 |
-r, -R | --recursive | 遞迴刪除目錄及其內容 | 極高 |
-i | --interactive | 逐一確認刪除 (y/yes 執行) | 低 |
-I | --interactive=once | 超過 3 個檔案或遞迴刪除時才確認一次 | 中 |
-v | --verbose | 顯示刪除進度 | 無 |
--no-preserve-root | | 允許刪除根目錄 極度危險 | 毀滅性 |
--preserve-root | | 預設啟用,拒絕刪除 / (安全預設) | 安全 |
常見使用場景與範例
刪除單一檔案 (不提示)
rm -f /var/log/httpd/access.log
刪除目錄樹 (含所有子目錄檔案)
rm -rf /var/log/httpd/access
# 等同
rm -r -f /var/log/httpd/access
互動式刪除多個檔案
rm -i *.tmp
# rm: remove regular file 'a.tmp'? y
# rm: remove regular file 'b.tmp'? n
刪除檔名含特殊字元的檔案
rm -- -filename-start-with-dash
rm ./-filename-start-with-dash
💀 經典災難案例與防範對策
| 錯誤指令 | 後果 | 防範措施 |
rm -rf / | 刪除整個系統 (現代 Linux 預設 --preserve-root 阻擋) | 別輸入;使用 safe-rm 套件攔截 |
rm -rf /home/user * | 空格導致同時刪除家目錄與當前目錄所有檔 | 變數加雙引號:rm -rf "$DIR" |
rm -rf ~ (在 root 下) | 刪除 /root 而非預期家目錄 | 明確路徑;cd 確認後再刪 |
find / -name "*.log" | xargs rm -rf | 檔名含空白/換行導致誤刪 | find ... -print0 | xargs -0 rm -f |
安全刪除最佳實務
- 先 ls 確認:
ls -la 目標路徑
- 使用 -i 或 -I:生產環境強制加參數
- 別名防呆:
alias rm='rm -I --preserve-root' 寫入 ~/.bashrc
- 安裝 safe-rm:
yum install safe-rm / apt install safe-rm,設定 /etc/safe-rm.conf 保護關鍵目錄
- 備份優先:重要資料刪除前先
cp -a 或快照
- 使用 trash-cli:
trash-put file 移至回收桶,支援 trash-restore
進階:安全刪除 (資料不可復原)
# 單檔案多次覆寫
shred -n 3 -z -u secret.txt
# 整顆磁碟 (謹慎!)
# shred -n 1 /dev/sdX # 僅適用 HDD,SSD 需用 blkdiscard 或廠商工具
結語
rm 是 Linux 最強大也最危險的指令之一。沒有回收桶、沒有撤銷鍵、沒有第二次機會。養成「先看、再確認、加參數、有備份」的肌肉記憶,才能在終端機前安心工作。記住:數據無價,謹慎操作。