如果循环符号链接没有用,那为什么允许它们呢?

2024-05-02

我刚刚在这里读这篇文章:

类 Unix 系统中的循环符号链接有何用途? https://stackoverflow.com/questions/12680821/what-are-circular-symlinks-in-unix-like-systems-used-for

答案很有趣。他们似乎得出结论,没有理由创建这样一个循环符号链接,因此它一定是错误创建的。如果这是真的,那么到底为什么他们被允许呢?是因为禁止它们的机制过于复杂或计算密集型吗?

我不明白为什么会出现这种情况:我们不能只比较内存中的地址,看看它是否与目标地址相同,然后如果相同,则抛出错误?

编辑:也许在某些语言中会出现错误,除非您使用某种强制选项。在这些情况下,我的问题就变成了:为什么你会允许强制选择?

编辑:在@Wumpus Q Wembley的帮助下进行了一些进一步的研究,看来这在unix中确实是不允许的,并导致以下错误:

ln: ‘/usr/bin/apt-config’ and ‘/usr/bin/apt-config’ are the same file

但是,当符号链接到自身的文件已经是来自其他文件的符号链接时,确实会发生这种情况。我不确定为什么这种行为是可取的?

-Paul


我知道(并使用过)一种循环符号链接很有用的情况。这是一个极端的情况,但尽管如此。

有问题的符号链接位于/boot目录并(循环)指向自身,如下所示:

boot -> ./

它是使用以下命令创建的:

ln -s . boot

其必要性理由如下:

当我设置各种 Linux 系统时,在某些情况下我会使用单独的/boot分区和某些 - 我不这样做。

我有一个饼干模具grub.cfg文件,内容如下:

menuentry "Gentoo GNU/Linux" {
    echo "Loading Linux kernel"
    linux /boot/vmlinuz root=...
    echo "Loading initial ramdisk"
    initrd /boot/initramfs
}

如果我没有符号链接,则上述内容不适用于具有单独的系统/boot分割。对于这些系统我需要:

menuentry "Gentoo GNU/Linux" {
    echo "Loading Linux kernel"
    linux /vmlinuz root=...
    echo "Loading initial ramdisk"
    initrd /initramfs
}

注意不存在/boot在...前面/vmlinuz and /initramfs.

这样做的原因是/boot分区是root分区为GRUB and vmlinuz and initramfs位于root /目录。

然而,对于没有单独的系统/boot分区,将system root /分区也是根分区GRUB, and vmlinuzinitramfs位于/boot目录。

符号链接到位后,我可以使用相同的grub.cfg对于这两种类型的系统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果循环符号链接没有用,那为什么允许它们呢? 的相关文章

随机推荐