我正在尝试使用符号链接。我做了一些阅读,发现了以下命令:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
创建和删除工作正常。但是更新不起作用。执行此命令后,符号链接将失效。
我在这里和那里读到不可能更新/覆盖符号链接。所以网上出现了相互矛盾的信息。谁是对的?如果可以更新/覆盖符号链接,我该如何实现?
更新
这是我的目录结构:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
从~/scripts/test/
,当我执行:
ln -s /remote_loc/site1 test_link
atest_link
已创建,我可以创建,ls -l
但它似乎已损坏(与我上面在问题中所说的相反)。
如何执行多目录级链接?
使用
-f
withln
将覆盖任何已经存在的链接,因此只要您拥有正确的权限,它就应该可以工作……它一直对我有用。您使用什么操作系统?好的,我发现我的错误在哪里:不应该把第一个
/
放在路径中。换句话说,我的问题中的命令应该是:
代替
考虑到我的情况。
首要问题:
引用你的话:
给定目录结构的问题:
并使用命令:
它是否在您的 $PWD 或当前工作目录中创建了一个符号链接,该链接指向位于 /remote_loc/site1 的 / 或根目录之外的不存在的文件
如果你的 PWD 在 ~/scripts/ 那么你应该使用这个:
ln -s remote_loc/site1 test_link
否则你可以使用完整的绝对路径,如:
ln -s /home/yourusername/remote_loc/site1 test_link
第二期:
引用你的话:
要回答你的问题“谁是对的”,我不确定你到底读了什么,或者是如何理解的。但是,以下内容应该有助于澄清:
使用不是目录的目标更新符号链接。
例子:
但是,如您所见,如果绝对路径在
ln
的参数中,它将给出绝对路径。当当前工作目录与链接的父目录不同时,需要提供完整路径。相对路径:
例子:
但是,如果目标是目录,则更新指向目录的链接将不起作用。
例子:
如您所见,尽管使用了
ln
上面 的参数中给出的绝对路径名而没有 -r 选项,符号链接仍然是相对于链接的。更新目录链接:
例子:
与以下内容形成对比: