Linux
如何刪除 .fuse_hidden* 文件?
我有一個小型 Linux 伺服器(Debian Squeeze),它執行一個配置為與一些 Windows 機器共享一些文件夾的 Samba 伺服器。在嘗試從 Windows 中刪除其中一個目錄時,我收到“無法刪除文件夾”錯誤。
我試圖從 linux 的控制台中刪除目錄,但遇到了類似的錯誤:
# rm dir-name -rf rm: cannot remove `dir-name': Directory not empty
我列出了目錄的內容並找到了一個名為 .fuse_hidden 的文件,後跟一個十六進制數字 (000bd8c100000185)。
# ls -la dir-name -rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185
我試圖刪除 .fuse_hidden 文件,但立即創建了一個新文件(注意十六進制數更改)。
# rm dir-name/.fuse_hidden000bd8c100000185 # ls -la dir-name -rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186
我還嘗試使用 Midnight Commander 刪除文件,但沒有成功。
到目前為止我發現的其他解決方案涉及 GUI,我只有控制台。
任何建議表示讚賞。
這類似於刪除另一個系統在 NFS 掛載上打開的文件時發生的情況。問題是該文件已從文件系統中刪除,而其“連結計數”> 1,這意味著其他程序仍將其保持打開狀態。
- 登錄到文件物理所在的系統。(無網路掛載)
- 執行
lsof dir-name/.fuse_hidden000bd8c100000185
以找出保持文件句柄打開的程序。- 如果有意義就終止這些程序,或者找出可以執行哪些步驟來“優雅地”釋放打開的文件句柄而不終止程序。
通常,當您刪除本地文件系統上另一個程序已打開的文件時,作業系統會遵守您的請求並將其從目錄樹中刪除,但該樹指向的 inode 仍被作業系統視為正在使用。每次打開文件時,其“連結計數”都會增加 1,並且只有在該連結計數達到零時才真正釋放空間。
當您遇到這種性質的問題時,這意味著作業系統出於某種原因決定不從目錄樹中刪除該文件:通常是因為它有理由相信它仍然需要被無法訪問的東西訪問利用直接inode編號。它最初似乎符合要求,但在幕後作業系統將其重命名為具有隱藏的點前綴,因此仍然可以通過某種形式的文件系統路徑定址訪問。當連結計數為零時,空間仍將被釋放,但該對象將保留在目錄中,直到連結消失。