gpt4 book ai didi

linux - 如何制作完美的死符号链接(symbolic link)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:23 24 4
gpt4 key购买 nike

在Linux或Unix系统中,很容易产生死符号链接(symbolic link)。只需指向一个不存在的文件:

$ ln -sf dummy dead-link

这个问题是你可以很容易地通过这样做来破坏它:

$ touch dummy

您可以通过将其指向自身来创建一个:

$ ln -sf dead-link dead-link

然而,这通常会产生递归问题,并且这种循环依赖可能会在其他试图跟踪链接的脚本中产生问题。

$ find . -folow -type l
find: ‘./dead-link’: Too many levels of symbolic links

问题是否可以创建一个死链接,它不能在循环符号链接(symbolic link)链中解析,不能通过触摸文件来破坏,更重要的是:

$ [[ ! -e dead-link ]] && [[ -h dead-link ]] && yes
yes

$ readlink -f dead-link

失败

最佳答案

我有两个建议:

1 - 也许这有点作弊,但是:

$ NAME=$(yes | head -n 256 | tr -d '\n')
$ echo ${#NAME} # length of the string "$NAME"
256
$ echo $NAME
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
$ ln -s $NAME dead-link
$ [[ ! -e dead-link ]] && [[ -h dead-link ]] && echo yes
yes
$ readlink -f dead-link; echo $? # 0 if readlink succeeds, 1 if failed
1
$ cat dead-link
cat: dead-link: File name too long
$ touch $NAME
touch: cannot touch 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy': File name too long

所以没有循环依赖(无论如何我都不会担心),但是你会得到“文件名太长”的错误...

这是利用 Linux 对文件名 255 个字符的限制。

2 - 滥用 /proc:

$ ln -s /proc/dead dead-link
$ [[ ! -e dead-link ]] && [[ -h dead-link ]] && echo yes
yes
$ readlink -f dead-link; echo $? # 0 if readlink succeeds, 1 if failed
/proc/dead
0
$ cat dead-link
cat: dead-link: No such file or directory
$ touch /proc/dead
touch: cannot touch '/proc/dead': No such file or directory

这个假设(而且是正确的)procfs 挂载在 /proc 上并且内核没有神奇地决定在其中创建一个名为 dead 的文件 -没有其他人可以做到。

请注意,与 /dev 不同,没有人可以从用户空间写入 /proc

实际上,这个甚至可能更便携。

关于linux - 如何制作完美的死符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57935142/

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