考虑以下 :
x/
ph/
file1.txt -> ./../file1.txt
file1.txt
y/
ph/ -> /x/ph/ (this is full absolute path of x/ph)
file1.txt
/y/ph
是.ph
中文件夹的符号链接,是相对符号链接。x
file1.txt
它在文件夹中正常工作x
,但是如果你打开
/y/ph/file1.txt
而不是打开/y/file1.txt
它会打开/x/file1.txt
这里的目标是在多个地方拥有相同的目录(比如说一个程序)并具有不同的配置文件,而不必拥有该程序的多个副本。
根据ln
的帮助
符号链接可以保存任意文本;如果稍后解析,则相对链接将根据其父目录进行解释。
所以相对链接是相对于实际文件夹的路径而不是当前工作目录。问题是 :有没有什么办法可以解决这个问题?
测试用例:
mkdir x y x/ph
echo x1 > ./x/file1.txt
echo y1 > ./y/file1.txt
ln -s $(pwd)/x/ph ./y/ph
cd ./x/ph
ln -s ./../file1.txt
cd ../..
cat ./x/ph/file1.txt
cat ./y/ph/file1.txt
预期结果是,x1 y1
但你得到x1 x1
编辑:
为了使问题更清楚,请在一个空文件夹中运行测试用例。并在文件夹中尝试以下命令:
bor@borpc:~/tmp$ readlink -f ./x/ph/file.txt
/home/bor/tmp/x/ph/file.txt
bor@borpc:~/tmp$ readlink -f ./y/ph/file.txt
/home/bor/tmp/x/ph/file.txt
--------------^
我希望x
有y
。那就是使相对符号链接基于pwd
(当前工作目录或用于访问它的路径)而不是实际文件的实际路径进行解析。
如果可能的话,如何实现这种行为。
答案1
我有点困惑。你可能要创建一个从根目录(我的意思是/
)开始的符号链接。例如,
ln -s /root/try/d s
ls -l
total 0
-rw-r--r-- 1 root root 0 Apr 24 16:15 d
lrwxrwxrwx 1 root root 11 Apr 24 16:18 s -> /root/try/d
答案2
您无法使用符号链接执行此操作。符号链接无法以这种方式工作。相对符号链接将相对于链接文件本身,而不是您所在的路径。
不过,你可以用以下方法实现类似的效果:绑定安装:
[you@example example]$ mkdir x y x/ph y/ph
[you@example example]$ echo x1 > ./x/file1.txt
[you@example example]$ echo y1 > ./y/file1.txt
[you@example example]$ sudo mount --bind ./x/ph ./y/ph
[you@example example]$ cd ./x/ph
[you@example ph]$ ln -s ../file1.txt
[you@example ph]$ cd ../..
[you@example example]$ cat ./x/ph/file1.txt
x1
[you@example example]$ cat ./y/ph/file1.txt
y1