如何在 Linux 中创建相对符号链接?

Jer*_*ose 85 linux symbolic-link command-line

我需要一个对于它所在目录解析的符号链接。使用什么命令来创建这样的东西?

Jer*_*ose 98

  1. 转到您希望链接驻留的目录
  2. 运行命令 ln -s ../some/other/file linkname

您提供的路径与文件一起存储。当您访问文件时,会查找并扩展相对于文件的存储路径。它不知道您在创建链接时所在的目录。

  • 不,你没有。您只需要确保指定相对于链接名称的位置而不是当前目录。 (25认同)
  • 帮助理解:您提供的路径与文件一起存储。当您访问文件时,会查找并扩展相对于文件的存储路径。它不知道您在创建链接时所在的目录。 (5认同)
  • 完全等效:`ln -s ../some/other/file /some/dir/linkname` (2认同)
  • 您也可以只执行“ln -s ./file linkname”,因为“.”指的是当前目录,而不是向下浏览目录并再次向上。 (2认同)

小智 41

最新版本的 GNU coreutils' ln (>= 8.16) 支持--relative(or -r) 选项,这意味着您可以ln -s使用 2 个绝对或相对(相对于您的工作目录)路径调用,它会找出正确的相对路径写入符号链接。

  • 谢谢。当您进行交叉编译并且需要构建主机上的绝对路径但目标上的相对路径时,`-r` 选项很有用。 (2认同)

tri*_*eee 5

您基本上需要了解的是,符号链接更像是文本文件,而不是包含文件的目录条目。所以如果你

echo ../poo >/file/name
Run Code Online (Sandbox Code Playgroud)

那么这非常类似于

ln -s ../poo /file/name
Run Code Online (Sandbox Code Playgroud)

系统根本不在乎是否/file/../poo存在,它只是放入符号链接的一段文本。当某些东西试图打开符号链接时,系统就会尝试解析它。

如果您使用具有文件名补全功能的 shell,则此功能可能会造成混乱,因为它允许您补全相对于当前工作目录的文件名,即使您最终将其用作完全另一个目录中的符号链接的目标。