我需要一个符号链接,该符号链接可以相对于它所在的目录进行解析。用什么命令来创建这样的东西?
我需要一个符号链接,该符号链接可以相对于它所在的目录进行解析。用什么命令来创建这样的东西?
Answers:
ln -s ../some/other/file linkname
您提供的路径与文件一起存储。当您访问文件时,将查找存储的路径并相对于文件展开。创建链接时,它不知道您所在的目录。
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
因为它.
指向当前目录。
ln -s somedir/original-dir link-name
不起作用。它创建的目录名称link-name
包含无效的链接。有效的命令是ln -sr somedir/original-dir link-name
您需要了解的基本上是,符号链接更像是文本文件,而不是包含文件的目录条目。所以如果你
echo ../poo >/file/name
那很像
ln -s ../poo /file/name
系统根本不在乎是否/file/../poo
存在,它只是符号链接中的一段文本。当某些东西试图打开符号链接时,就是系统尝试解析它的时候。
如果您使用的是具有文件名补全功能的Shell,则即使您最终将其用作完全另一个目录中的符号链接的目标,此功能也会允许您完成相对于当前工作目录的文件名,从而使事情混乱。
<
以更改系统分配内存的方式。当然<
,该目录中没有命名的文件,这只是一种创建类似文件的小文件的廉价方法,该文件具有比该特定平台上的常规文本文件更吸引人的属性。
在OS X上,相对链接对我来说很棘手,即
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
两者都不起作用(创建了某些东西,但它不是目录)。我通过使用绝对路径创建了所需的链接。
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
我只是想进一步说明如何使用相对路径创建符号链接(带有详细示例)。
正如注释中提到的Ignacio Vazquez-Abrams一样,您必须指定相对于将创建符号链接的位置(而不是相对于当前目录)的文件/文件夹位置。
例
您在/usr/share/nginx/html/_src/learn
您将创建一个符号链接coding
在/usr/share/nginx/html
创建相对符号链接(理论):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
创建实际的相对符号链接:
sudo ln -s ./_src/learn/coding ../../coding
更多信息(相同示例)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding