Files
不可刪除的目錄
我嘗試過的一切(始終具有超級使用者權限)都失敗了:
# rm -rf /path/to/undeletable rm: cannot remove ‘/path/to/undeletable’: Is a directory # rmdir /path/to/undeletable rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy # lsof +D /path/to/undeletable lsof: WARNING: can't stat(/path/to/undeletable): Permission denied lsof 4.86 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s] [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names] Use the ``-h'' option to get more help information.
當我在沒有超級使用者權限的情況下嘗試上述任何方法時,結果基本相同。唯一的區別是
lsof
命令的初始 WARNING 消息有Input/output error
而不是Permission denied
. (這個微小的差異本身已經足夠令人費解了,但是,無論如何……)我怎樣才能刪除這個目錄?
# rm -rf /path/to/undeletable rm: cannot remove ‘/path/to/undeletable’: Is a directory
rm
呼叫stat(2)
來檢查/path/to/undeletable
是目錄(由 刪除rmdir(2)
)還是文件(由 刪除unlink(2)
。由於stat
呼叫失敗(我們將在一分鐘內了解原因),rm
決定使用unlink
,這解釋了錯誤消息。# rmdir /path/to/undeletable rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy
“設備或資源忙”,而不是“目錄不為空”。所以問題是該目錄被某些東西使用,而不是它包含文件。最明顯的“被某物使用”是它是一個掛載點。
# lsof +D /path/to/undeletable lsof: WARNING: can't stat(/path/to/undeletable): Permission denied
這證實
stat
了目錄上的失敗。為什麼root會沒有權限?這是 FUSE 的一個限制:除非使用該allow_other
選項掛載,否則 FUSE 文件系統只能由與提供 FUSE 驅動程序的程序具有相同使用者 ID 的程序訪問。甚至根也受到了打擊。所以你有一個非 root 使用者掛載的 FUSE 文件系統。你想讓我做什麼?
- 很可能您只是對該目錄感到惱火併想要解除安裝它。根可以做到這一點。
umount /path/to/undeletable
- 如果您想擺脫掛載點但保留掛載,請使用
mount --move
. (僅限 Linux)mkdir /elsewhere/undeletable chown bob /elsewhere/undeletable mount --move /path/to/undeletable /elsewhere/undeletable mail bob -s 'I moved your mount point'
- 如果要刪除該文件系統上的文件,請使用
su
或任何其他方法切換到該使用者,然後刪除文件。su bob -c 'rm -rf /path/to/undeletable'
- 如果要在不中斷掛載的情況下刪除掛載點隱藏的文件,請創建另一個沒有掛載點的視圖並從那裡刪除文件。(僅限 Linux)
mount --bind /path/to /mnt rm -rf /mnt/undeletable/* /mnt/undeletable/.[!.]* /mnt/undeletable/..?* umount /mnt