如何删除 .fuse_hidden* 文件?

Lan*_*ndo 38 linux files console fuse deleting

我有一个小型 Linux 服务器(Debian Squeeze),它运行一个 Samba 服务器,该服务器配置为与一些 Windows 机器共享一些文件夹。在尝试从 Windows 中删除目录之一时,我收到“无法删除文件夹”错误。

我试图从 linux 的控制台中删除目录我得到了一个类似的错误:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty
Run Code Online (Sandbox Code Playgroud)

我列出了目录的内容并找到了一个名为 .fuse_hidden 的文件,后跟一个十六进制数 (000bd8c100000185)。

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185
Run Code Online (Sandbox Code Playgroud)

我试图删除 .fuse_hidden 文件,但立即创建了一个新文件(注意十六进制数的变化)。

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 Midnight Commander 删除文件但没有成功。

到目前为止,我发现的其他解决方案涉及 GUI,而我只有控制台。

任何建议表示赞赏。

And*_*w B 63

这类似于删除另一个系统在 NFS 挂载上打开的文件时发生的情况。问题是该文件已从文件系统中删除,而其“链接计数”大于 1,这意味着其他进程仍将其保持打开状态。

  • 登录文件物理所在的系统。(无网络安装)
  • 执行lsof dir-name/.fuse_hidden000bd8c100000185以找出哪些进程将文件句柄保持打开状态。
  • 如果有意义,请终止这些进程,或者弄清楚您可以执行哪些步骤来“优雅地”释放打开的文件句柄而不终止进程。

通常,当您删除本地文件系统上另一个进程已打开的文件时,操作系统会遵守您的请求并将其从目录树中删除,但该树指向的 inode 仍被操作系统视为正在使用中。每次打开一个文件时,它的“链接数”加一,只有当链接数达到零时才真正释放空间。

当您遇到这种性质的问题时,这意味着操作系统出于某种原因决定从目录树中删除该文件:通常是因为它有理由相信它仍然需要被无法访问的东西访问使用直接 inode 号。它最初似乎符合,但在幕后操作系统将其重命名为具有隐藏的点前缀,以便仍然可以通过某种形式的文件系统路径寻址来访问它。当链接计数为零时,空间仍将被释放,但该对象将保留在目录中,直到链接消失。