相对路径如何工作ln (-s or not)
?例如,如果我输入ln -s foo bar/banana.txt
这是什么意思? foo 与什么相关?因为它似乎与当前路径无关。另外,删除-s
与不删除有什么不同吗?我已经测试过了,结果对我来说没有意义,并且手册页似乎没有解释这一点。有人能解释一下吗?
答案1
有和没有是不一样的-s
。
之-s
内:
ln -s path/to/file some/dir/link
path/to/file
设置为符号链接目标some/dir/link
(或者some/dir/link/file
如果link
是目录)。
符号链接是一种特殊类型的文件,其中/包含/路径(可以是任何非 0 字节数组,某些系统甚至允许空字符串),该路径是符号链接的目标。ln
将其设置为第一个参数。
解析链接后(稍后使用链接时),路径将相对于(硬)链接到的path/to/file
目录(此处是通过其路径访问时)。link
some/dir
some/dir/link
some/dir/link
请注意,在命令运行path/to/file
时(或曾经)不需要存在。ln
而在:
ln path/to/file some/dir/link
它类似于:
cp path/to/file some/dir/link
是path/to/file
相对于正在运行的进程的当前工作目录ln
。
没有什么可以阻止您创建多个指向符号链接的(硬)链接。例如:
$ mkdir -p a b/c b/a
$ ln -s ../a b/L # b/L a symlink to "a"
$ ln b/L b/c/L
b/L
和b/c/L
是同一个文件:相同的 inode 但链接到两个不同的目录。它们都是带有 target 的符号链接../a
。但是当b/L
被解析时,它指向./a
while 当 时b/c/L
,它指向./b/a
。