我在我的机器上浏览时发现了一个似乎指向 IP 地址的悬空符号链接。
lrwxr-xr-x@ 1 greatone greatone 14 Oct 21 12:36 RunningChromeVersion -> 106.0.5249.119
为什么程序会创建这样的链接?
答案1
这意味着链接没有指向文件根本– 它被“创造性地用于”其他目的,最有可能是作为锁定文件您的某个程序会使用它来检测同一程序是否已在运行。链接目标只是一些只有程序本身能理解的任意值;它并不意味着作为真实文件存在。
正常文件的读取或写入至少需要两个步骤:首先程序调用open()
,然后才调用read()
,这给其他程序在两次操作之间运行留下了不必要的机会。
虽然大多数操作系统都提供了协调对打开文件的独占访问的功能,但这通常仅限于本地文件 - 例如,Linux flock() 从历史上看无法通过 NFS 很好地工作(这在传统 Unix 环境中曾经非常重要,在这种环境中 /home 会通过 NFS 或 AFS 从中央服务器共享),并且 SFTP(SSHFS)根本不支持锁定。
另一方面,symlink()
内核函数将在一个步骤中创建一个具有指定“目标”值的链接(即,这是一个原子操作),而该readlink()
函数也将在一次调用中读取其目标 - 程序总是会得到一个完整的链接目标或一个“未找到”错误,两者之间没有任何内容。这导致一些程序使用符号链接来检测其配置目录是否已被另一个实例使用,即使在不同的机器上。
(“106.0.5249.119”不是 IP 地址 - 正如文件名所示,它是一个版本号Chrome 的“major.minor.build.revision”格式非常常见的在 Windows 上。
话虽如此,你会看到 Firefox 使用了同样的技巧做将 IP 地址放入其“锁定”符号链接目标中。)
答案2
该数字106.0.5249.119
是
桌面版 Chrome 稳定频道更新
从 2022 年 10 月 11 日起。
您发现的是一个 Chrome 内部文件,其目的可能是向安装程序指示其自己的版本号。它实际上不是符号链接,只是 Chrome 出于内部原因稍微滥用了符号链接功能。
尚不清楚该文件的用途以及 Google 为何认为这样做是个好主意。它可能有太多用途,我猜不出来。