我是否应该在目录的符号链接中包含斜杠/?


Answers:


9

没有区别 (如果目标不是现有目录,则会有所不同。)

最终的斜线可能会因为shell的完成而结束:使用某些配置,ln -s tarTabSpacelink完成到ln -s target/ link


链接的问题似乎与路径中的多个连续斜杠有关,但与链接上的尾部斜杠无关。我不确定在这里有什么要说的。
mwfearnley's

实际上,我不应该这么说。在与该问题密切相关的共同关注点上,有很多话要说。我不认为这会一直导致这个结论。
mwfearnley's

@mwfearnley这是合乎逻辑的结果:如果foo -> bar/then foo/qux等于bar//qux。虽然问题的标题(正式而言)不包括foo -> bar/,但我还在那里的答案中讨论了这种情况。
吉尔斯(Gillles)“所以-别再作恶了”

嗨,谢谢您的回复。它告诉我包括符号链接的路径是等效的。它不一定告诉我如果我访问符号链接本身(不带斜杠),会发生什么,并且如果没有Unix专家,我不一定知道“等同”是什么意思或不意味着什么。
mwfearnley's

在至少一个极端的情况下,它有所作为,因此我不得不否决这个答案。
Flimm

27

我唯一能想到的是,它可以“保护”您免遭删除目录并创建文件的攻击。

[user@host linktest]$ mkdir test
[user@host linktest]$ ln -s test/ slash
[user@host linktest]$ ln -s test noslash
[user@host linktest]$ ls -l
total 4
lrwxrwxrwx 1 paul paul    4 Feb 21 21:00 noslash -> test
lrwxrwxrwx 1 paul paul    5 Feb 21 21:00 slash -> test/
drwxrwxr-x 2 paul paul 4096 Feb 21 20:59 test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: symbolic link to `test/'
[user@host linktest]$ rmdir test
[user@host linktest]$ file *slash
noslash: broken symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$ touch test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$

当目标被文件替换时,带有斜杠的版本会中断。


3

有趣的问题。我做了小测试:

$ mkdir dir
$ ln -s dir/ test_slash
$ ln -s dir test_noslash
$ ls -l
total 4
drwxr-xr-x 2 vrusinov vrusinov 4096 Feb 21 16:41 dir
lrwxrwxrwx 1 vrusinov vrusinov    3 Feb 21 16:41 test_noslash -> dir
lrwxrwxrwx 1 vrusinov vrusinov    4 Feb 21 16:41 test_slash -> dir/
$ strace ls test_slash 2> trace_slash
$ strace ls test_noslash 2> trace_noslash
$ wc -l trace_*
   79 trace_noslash
   79 trace_slash
$ diff -u trace_* | less

如您所见,系统调用的数量没有差异(至少对于ls而言),并且跟踪看起来非常相似。Howewer,这只是转储测试,我不确定-可能会有一些差异。


我也想知道,如果它确实有差别,但是为什么会额外斜线存储呢?
Tobias Kienzler 2011年

2

您的问题确实与ls程序的行为有关。

1)如果您ls -l $dir在$ dir实际上是符号链接的地方进行操作,则会获得有关符号链接的信息。

2)如果ls -lL $dir$ dir是指向目录的符号链接,则将获得有关目标目录的信息。

3)如果这样做,ls -l $dir/.将强制遵循符号链接并提供有关目标目录的信息。

4)如果这样做ls -l $dir/,则结果可能与#1相同或与#3相同,这取决于ls所使用的版本。我曾经习惯过像#1这样的旧版Solaris,而对Linux像#3这样的做法感到惊讶。

我应该选择哪一个呢?

如果您担心给定目录名是实际目录,而不是符号指向目录的链接,请使用斜杠。

如果您更关心目录中的文件而不是目录本身,请使用斜杠。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.