我有以下目录树
/
|-- server
| |-- cstrike
| | | |-- hltv -> ../../hltv
| |-- [other files]
|-- 27015
| |-- hltv
| |-- server -> ../server
|-- 27016
| |-- hltv
| |-- server -> ../server
- 我想要
27015/server
和27016/server
链接到/server
。 - 另外,我希望
27015/server/cstrike/hltv
链接到27015/hltv
,同样也
27016/server/cstrike/hltv
希望链接到27016/hltv
。
正如您可能已经假设的不存在的2701{5,6}/server/cstrike/hltv
点。/hltv
如果不是,您能否建议我该使用哪种工具ln
?/server
是一个目录,而不是设备,所以我想mount
在这种情况下不是一个选项。
答案1
删除/2701x/server
符号链接;在其位置创建文件夹;用于设置到每个的“绑定挂载” 。mount -o bind
/server
/2701x/server
使用findmnt
查看您已设置的挂载,并确保将挂载添加到您的 /etc/fstab 中,以便它们在重启后仍然可用。
链接目标是总是相对于链接的“物理”位置,而不是“逻辑”位置。换句话说,只有在路径内的所有先前的符号链接都已解析后,才会解析链接目标。另一方面,挂载(包括绑定挂载)在不同的级别工作,并且对符号链接解析代码“不可见”;绑定挂载将看起来像“物理”位置。
不过,还有另一种方法可以实现这一点,而无需绑定挂载:反转布局并让每个目录都有它自己的 server
目录及其自己的server/cstrike/hltv
符号链接,而仅使用符号链接进行重复数据删除/2701x/server/[other files]
。例如:
/
├─27015/
│ └─server/
│ ├─cstrike/
│ │ └─hltv
│ └─other_stuff -> ../../server/other_stuff
├─27016/
│ └─server/
│ ├─cstrike/
│ │ └─hltv
│ └─other_stuff -> ../../server/other_stuff
└─server/
└─other_stuff/