我刚刚在这里阅读这篇文章:
答案非常有趣.他们似乎最终确定没有理由创建这样一个循环符号链接,因此它必须是错误创建的.如果这是真的,那么为什么它们被允许呢?是因为禁止它们的机制非常复杂或计算密集吗?
我不明白为什么会这样:我们不能只比较内存中的地址,看它是否与目标地址相同,然后如果它们是相同的,抛出一个错误?
编辑:可能在某些语言中会出现错误,除非您使用某种强制选项.在那些情况下,那么我的问题就变成了:为什么你会允许强制选择?
编辑:在@Wumpus Q Wembley的帮助下进行了一些进一步的研究,似乎在unix中确实不允许这样做并导致以下错误:
ln: ‘/usr/bin/apt-config’ and ‘/usr/bin/apt-config’ are the same file
但是,当符号链接到自身的文件已经是来自其他文件的符号链接时,这确实会发生.我不确定为什么这种行为是可取的?
- 保罗
我知道(并使用)循环符号链接有用的一种情况.这是一个极端的案例,但仍然.
有问题的符号链接位于/boot目录中,并且(循环地)指向自身,如下所示:
boot -> ./
Run Code Online (Sandbox Code Playgroud)
它是使用以下命令创建的:
ln -s . boot
Run Code Online (Sandbox Code Playgroud)
必要的原因如下:
当我设置各种Linux系统时,在某些情况下我使用单独的/boot分区,而在某些情况下- 我没有.
我有一个cookie-cutter grub.cfg文件,其内容如下:
menuentry "Gentoo GNU/Linux" {
echo "Loading Linux kernel"
linux /boot/vmlinuz root=...
echo "Loading initial ramdisk"
initrd /boot/initramfs
}
Run Code Online (Sandbox Code Playgroud)
如果我没有符号链接,则上述内容对于具有单独/boot分区的系统不起作用.对于那些我需要的系统:
menuentry "Gentoo GNU/Linux" {
echo "Loading Linux kernel"
linux /vmlinuz root=...
echo "Loading initial ramdisk"
initrd /initramfs
}
Run Code Online (Sandbox Code Playgroud)
注意/boot前面没有/vmlinuz和/initramfs.
原因是/boot分区是GRUB的根分区,并且位于根目录中.vmlinuzinitramfs /
而对于没有单独系统/boot分区,则系统根/分区也是对根分区GRUB,并vmlinuz和initramfs位于/boot目录.
使用符号链接后,我可以grub.cfg对两种类型的系统使用相同的内容.