当涉及已安装的卷时,“rm”的行为不一致?

当涉及已安装的卷时,“rm”的行为不一致?

如果我运行以下命令序列:

mkdir dir
ln -s dir link
rm -r link/

我得到这个输出:

rm: cannot remove `link': Not a directory

我收到警告是因为我可以简单地发出rm -r link,或者更好的是,rm link.无论如何,该命令确实完成了工作(即删除了名为“关联”)。

在已安装的卷上执行此类操作时,情况有点不同,其中“目录“ 被替换为一些类似的”/媒体/我的电影在这种情况下,整个卷将被擦除,而不仅仅是上一个示例中的符号链接。

为什么会这样呢?这是 中的错误rm,还是预期的?为什么不一致?

更新:也许当我遇到这种情况时我感到头晕,因为当我现在尝试时,“目录“在其内容被删除的情况下未被删除,并且在这两种情况下(挂载目录和本地目录)。我使用的是 Linux2.6.32,我想我正在使用2.6.37然后。

答案1

在我的系统上(Debian;Linux 2.6;rm --version报告 GNU coreutils 8.5),无论是否目录是一个挂载点,下面删除文件, 但不是目录或者关联,并给我你看到的同样的错误:

# mkdir dir && touch dir/file && ln -s dir link
# rm -r link/
rm: cannot remove `link': Not a directory
# ls
dir  link
# ls -l dir
total 0

# mount .../scratch_filesystem dir
# touch dir/file
# rm -r link/
rm: cannot remove `link': Not a directory
# ls
dir  link
# ls -l dir
total 0

如果我没听错的话,你的rm -r link/命令不会删除文件, 除非目录/是一个挂载点。如果是这样的话,我认为您发现了一个错误rm。挂载点没有充分的理由改变其行为。

了解rm您正在使用的版本会很有趣。

相关内容