gpt4 book ai didi

linux - 这是关于具有一个源和多个目标的 Linux 软链接(soft link) :)

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

假设我们在不同位置有多个不同版本的同一文件夹,如下所示:

  • /in/some/location/version1
  • /different/path/version2
  • /third/place/version3

它们的每个版本都包含callerFile,这是一个我们无法控制其工作功能的预编译可执行文件。此 callerFile 将创建和编辑一个名为 cache

的文件夹
  • /some/fourth/destination/cache

所以我们在每个版本的设置之间存在矛盾,所以我想做的是将 /some/fourth/destination/cache 转换为具有 3 个不同目的地的链接

  • /some/fourth/destination/cache --> /in/some/location/version1/cache
  • /some/fourth/destination/cache --> /different/path/version2/cache
  • /some/fourth/destination/cache --> /third/place/version3/cache

例如:

  • 如果 /in/some/location/version1/callerFile 调用 /some/fourth/destination/cache 它应该重定向到 /in/some/location/version1/缓存
  • 如果 /different/path/version2/callerFile 调用 /some/fourth/destination/cache 它应该重定向到 /different/path/version2/缓存
  • 如果 /third/place/version3/callerFile 调用 /some/fourth/destination/cache 它应该重定向到 /third/place/version3/缓存

那么,如何在 Ubuntu 12.04 64 位操作系统上执行此操作?

最佳答案

假设您无法控制 callerFile 实际执行的操作,我的意思是它执行它想要执行的操作并且始终保持不变,因此结论是您需要修改它的环境。这将是一个相当高级的技巧,一般需要深入的 Linux 内核和 Unix 编程经验,你应该考虑一下是否值得。它还需要在您的 callerFile 二进制文件所在的机器上具有 root 权限。

我建议的解决方案是创建一个可执行文件(或一些调用 exec() 系列函数之一的脚本),这将基于“mount -o bind”准备特殊环境(或确保它已准备好使用)或 unshare() 系统调用。

如前所述,使用所谓的“执行上下文”是相当高级的技巧。从理论上讲,您也可以尝试一些类似 autofs 的解决方案,但是您可能会得到相同的结果,并且 bindmount/unshare 可能比某些 FS 检测守护进程更有效。出于同样的原因,我不建议深入研究 FUSE。玩一些带有符号链接(symbolic link)的过于复杂的游戏可能也不是办法。

http://www.kernel.org/doc/Documentation/unshare.txt

注意:无论“callerFile”二进制文件做什么,我很确定它不会检查自己的文件名,这使得可以用中间的其他内容替换它,这将在“callerFileRenamed”上执行 exec()。

据我了解,基本上您想要的是通过相同的事件获得不同的结果,通过事件本身外部的某些条件来区分,例如,基于例如,在同一目录中为“ls”返回不同的列表。发出“ls”命令但未修改某些 ./ls 程序二进制文件的用户的 UID。

关于linux - 这是关于具有一个源和多个目标的 Linux 软链接(soft link) :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688906/

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