链接“..”在父目录以外的地方执行其他奇怪的 fs 行为

链接“..”在父目录以外的地方执行其他奇怪的 fs 行为

条目“..”可以链接到父目录以外的其他位置吗?是否有可能导致“tar”产生这种奇怪的行为?

场景:我有一个针对嵌入式系统的预构建编译器,以 tar.gz 文件形式分发,它在 Ubuntu 10.04 中完美运行。在 VirtualBox VM 中测试升级到 Ubuntu 12.04 时,无法找到某些头文件。在探索文件以找出问题原因时,我注意到它在“/a/somewhat/convolved/../../path/../full/of/up/../references/”之后丢失了。进一步探索,我发现了一些奇怪的行为:

  • “ls /that/strange/../../path” 按预期显示了文件。

  • 在 bash 中输入“ls /that/strange/../../path”以获取“/that/strange/../../path”内的文件列表(即,在不运行“ls”的情况下触发文件名完成) )向我显示了不同的文件列表。

  • 当我手动修复解释“..”的路径时,两个输出是相同的。

我认为“ls”和文件名通配符查找文件的方式不同(opendir/readdir、glob 等)以及文件系统错误中的这些操作步骤之一。在虚拟机中运行 fsck 没有出现任何异常情况。在新虚拟机中再次安装编译器的结果相同。 “tar”没有返回错误。有人遇到这样的问题吗?

答案1

您的路径中的“目录”之一实际上是指向其他目录的符号链接吗?如果是这样,那么..将转到目标目录的父目录,而不是包含符号链接的目录。

..Bash 尝试通过重新解释为包含符号链接的目录来“修复”此问题。我确信有一种方法可以关闭这种烦人的行为,尽管我手头没有它,因为我不记得上次我个人不得不处理这个问题是什么时候。

相关内容