符号链接“ln”点斜杠扩展

符号链接“ln”点斜杠扩展

我想创建一个指向当前工作目录中的文件的符号链接。

假设我有一个顶级树,如下所示:

.
├── dir1
│   └── hello.so
└── dir2

2 directories, 1 file

我将工作目录更改为dir1.现在,我想创建hello.soin的符号链接dir2

我尝试一下ln -s ./hello.so ../dir2/。但是,这不起作用,因为它创建了到 的链接,而不是按照我的预期 ./hello.so扩展。./

ln -s ${PWD}/hello.so ../dir2/工作正常,但有点冗长。

我担心我可能误解了./扩展是什么,但我一直无法弄清楚我错在哪里。

如果这是我的环境特有的问题,我使用的是 Bash 5.0.2。我没能在这个ln人身上找到任何花哨的标志。

答案1

./不是扩展,它是字面相对路径:查找.当前目录中调用的条目,将其视为目录 ( /),然后从那里继续hello.so在其中查找。

每个目录都有一个.指向自身的条目。每个目录还有一个..指向其父目录(根目录除外)的条目。这些并不是特别特别:它们是普通的目录条目,就像常规文件和目录一样,只是它们是自动创建的。

符号链接存储一个文字它们内部的字符串值,并ln -s准确存储您赋予它的值,而不进行任何处理。这就是您看到的结果:./hello.so完全按照您的指示放入链接中。


如果您希望链接中包含完整路径,则需要提供完整路径,无论是直接$PWD写出$(pwd)还是直接写出。

但是,路径是相对于位置进行解释的,因此这将是该文件的有效链接:

ln -s ../dir1/hello.so dir2/hello.so

或任何其他您想要链接的位置的路径 -../dir1/hello.so都将以相同的方式存储在链接中。

在这种情况下,当访问链接时,../dir1/hello.so将相对于链接所在位置进行查找,并且它将找到您的文件。如果移动整个目录树,则这是稳健的,而绝对路径则不然。根据您想要实现的目标,其中任何一个都可能是适合您的选择。

答案2

dir1

ln -s ../dir1/hello.so ../dir2

dir2

ln -s ../dir1/hello.so .

(这里最后一个点是可选的)

从顶层目录:

ln -s ../dir1/hello.so dir2

第一个参数是符号链接本身的“内容”(所谓的来源在手册中)。在这种情况下,它使用文件所在位置的相对路径指向该文件。第二个参数是符号链接应该放置的位置。

相关内容