不可删除的目录

不可删除的目录

我尝试过的一切(始终具有超级用户权限)都失败了:

# 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命令中的初始警告消息已Input/output error改为Permission denied. (这个微小的差异本身就已经足够令人费解了,但是,无论如何......)

我怎样才能删除这个目录呢?

答案1

# 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 也受到了影响。

因此,您有一个由非 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
    

相关内容