为什么 Linux 允许对其自身进行符号链接?

为什么 Linux 允许对其自身进行符号链接?

由于拼写错误,我发现这是允许的:ln -s useless useless

然后,正如预期的那样ls useless/*触发此错误消息:

ls:无法访问“无用/*”:符号链接级别太多

在什么情况下需要这样做,因此它被允许并ln因此接受它?

我正在测试它SLES 12.4

答案1

没有需要fr 这是允许的;它只是不关心符号链接指向什么,甚至不关心不存在的路径(或符号链接本身)。

人们可以想象禁止对不存在的路径建立符号链接,但会出现几个问题:

  • 没有对符号链接的反向引用,因此仍然可以构建到文件的符号链接,然后删除该文件以使符号链接悬空。
  • 符号链接可能指向已被卸载的不同文件系统。
  • 包含符号链接的文件系统可以同时安装在多个安装点上,其中一些符号链接指向现有路径,另一些则指向不存在的路径。
  • 指向绝对路径的符号链接可能指向某些进程的现有路径,而对于其他进程则为悬空路径,因为不同的进程可能具有不同的根目录。

一旦您拥有指向不存在路径的符号链接,您可以将符号链接重命名为它指向自身的符号链接。因此,如果您想禁止指向自身的符号链接,则需要限制重命名。

答案2

符号链接可以是任何东西,因为符号可以代表任意数量的事物、任意数量的程序/操作系统/人。就像物理世界中的符号一样,符号可以由任何东西组成,也可以为任何东西而设计。它们不需要验证,因为目标已经存在于系统上,或者用户可以通过任何方式通过他们的权限访问它。

如果你真的希望停止这种行为。您可以创建一个脚本来检查它是否会指向它自身,如果是则返回错误,如果不是则创建链接。创建脚本后,您可以为 ln 创建一个指向您的脚本的别名。

可能看起来像下面这样:

#!/bin/bash
if [ "$1" == "$2" ]
then 
echo "ERROR pointing to self!"
else
ln "$1" "$2"
fi

相关内容