如果我运行以下命令序列:
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
您正在使用的版本会很有趣。