科技 · 實用指南
rm -rf 仍顯示「Directory not empty」?先證明哪個項目持續回來
不要重複破壞性命令;先確認是否仍為同一目錄、哪個項目殘留或重建,以及負責者是程序、掛載、NFS 伺服器或 FUSE 驅動。

不要重複破壞性命令;先確認是否仍為同一目錄、哪個項目殘留或重建,以及負責者是程序、掛載、NFS 伺服器或 FUSE 驅動。
ENOTEMPTY 表示刪除時仍有項目,但不指出擁有者。 預設列表看似空白可能漏掉 dotfile,也不能證明遠端或並發狀態。
1. 凍結目標身分
保存完整命令、stderr、結束狀態、絕對路徑、父路徑、device、inode、檔案系統類型與掛載來源。以非破壞方式解析連結,確認失敗名稱仍指向同一物件。
不要由看似空白的 ls 推論安全。命令可能在不同 container 或 mount namespace,bind mount 可能遮住另一棵樹,名稱也可能在嘗試之間被替換。
2. 兩次擷取全部項目
列出 dot 項目與異常位元組名稱,但不要把輸出直接餵給 rm。製作兩份含時間的名稱、metadata 與 device/inode 快照,區分穩定子項與刪除後重建的名稱。
ENOTEMPTY 只表示刪除當下仍有項目,不解釋原因。再次操作前保存精確子項名稱及 .nfs 或 .fuse_hidden 模式。
3. 分類回復項目的擁有者
一般本機項目要找出建立它的程式或工作;.nfs 或 .fuse_hidden 佔位要找仍開啟底層檔案的程序;NFS 則與儲存負責人比較 client/server 視圖。
不要終止無關程序,也不要假設 sudo 能改變檔案系統狀態。建立者可立即回填,遠端或使用者空間檔案系統也可能保留 client 未顯示的名稱。
4. 套用最小修復
停止已證明的 writer、關閉已證明的 handle,或由儲存負責人修復遠端/FUSE 狀態。只刪除已驗證的子項與目錄,不擴大路徑、不跨檔案系統,也不盲目重建受管掛載點。
若批准替換目錄,先記錄 owner、mode、ACL、label、mount role 與 service ownership;只重建名稱不等於保留契約。
5. 驗證未再出現並保存證據
刪除後重做原始名稱與身分快照,等待已知 writer 或 cache 週期,從同一 namespace 與權威儲存視圖確認路徑持續不存在。
記錄原始 errno、責任程序或儲存層、動作、相關雜湊/metadata 與 rollback。反覆的 NFS/FUSE 分歧或 I/O 錯誤應升級,不要用重試隱藏。
