为什么在遇到 $HOME 时“rmdir -p --ignore-fail-on-non-empty”会失败?

ens*_*ens 2 coreutils

请考虑以下命令:

cd /
mkdir -p ~/a/b
touch ~/a/content
# Removes dir 'b' and stops at 'a' because it's non-empty.
# (This is the expected behavior.)
rmdir -p --ignore-fail-on-non-empty ~/a/b

rm ~/a/content
mkdir -p ~/a/b
# Fails with error: "rmdir: failed to remove directory '/home/myhome'".
rmdir -p --ignore-fail-on-non-empty ~/a/b
Run Code Online (Sandbox Code Playgroud)

为什么rmdir最后一步会失败?为什么它试图删除非空 $HOME而不是停止?

zep*_*lin 5

这是什么man rmdir说:

--ignore-fail-on-non-empty

忽略每个因为目录非空而导致的失败

即除了目录为空之外,由于其他错误而无法删除目录,仍将报告。

由于普通用户通常没有足够的权限进行修改/home(包括删除他们自己的主目录),因此rmdir在调用时会遇到“权限被拒绝”错误。

您可以通过尝试轻松确认这一点:

rmdir ~
Run Code Online (Sandbox Code Playgroud)

这将导致:

rmdir: failed to remove '/home/youruser': Permission denied
Run Code Online (Sandbox Code Playgroud)