私が試したすべて(常にスーパーユーザー権限で)が失敗しました:
# 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
が失敗したことを確認します。ルートに権限がないのはなぜですか?これが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
_