gpt4 book ai didi

symlink - 如果循环符号链接(symbolic link)没有用,那么为什么允许它们呢?

转载 作者:行者123 更新时间:2023-12-04 07:09:41 24 4
gpt4 key购买 nike

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

What are circular symlinks in Unix-like systems used for?

答案很有趣。他们似乎断定地说,没有理由创建这样一个循环符号链接(symbolic link),因此它一定是错误创建的。如果这是真的,那么到底为什么允许他们这样做呢?是因为禁止它们的机制过于复杂或计算量大吗?

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

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

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

ln: ‘/usr/bin/apt-config’ 和 ‘/usr/bin/apt-config’ 是同一个文件

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

-保罗

最佳答案

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

有问题的符号链接(symbolic link)位于 /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
}

如果我没有符号链接(symbolic link),以上内容将不适用于具有单独的 /boot 分区的系统。对于这些系统,我需要:

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

注意/vmlinuz/initramfs前面没有/boot

原因是 /boot 分区是 GRUBvmlinuzroot 分区和 initramfs 位于 root / 目录中。

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

有了符号链接(symbolic link),我可以为这两种类型的系统使用相同的 grub.cfg

关于symlink - 如果循环符号链接(symbolic link)没有用,那么为什么允许它们呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com