![为什么 Linux 允许对其自身进行符号链接?](https://linux22.com/image/148897/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E5%85%81%E8%AE%B8%E5%AF%B9%E5%85%B6%E8%87%AA%E8%BA%AB%E8%BF%9B%E8%A1%8C%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%EF%BC%9F.png)
由于拼写错误,我发现这是允许的: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