“目录连接”与“目录符号链接”?


392

在NTFS中:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认是文件符号链接。
/H 创建硬链接而不是符号链接。
/J 创建目录连接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。

  1. 目录结点目录符号链接难道不是一回事吗?

    mklink /D f1 f2和之间有什么区别mklink /J f1 f2

  2. 由于“目录”实际上只是一个文件,目录符号链接和文件符号链接之间有什么区别?


Answers:


364

尽管结点的行为类似,但它绝对不是目录符号链接。主要的区别是,如果你正在寻找一个远程服务器,结在服务器处理目录的符号链接在客户端进行处理。另请参见Matthew关于以下事实的评论:这意味着本地文件系统上的符号链接可以指向远程文件系统。

假设您在一台名为Alice的计算机上放置一个连接点c:\myjp和一个目录符号链接c:\mysymlink,都指向c:\targetfolder。使用Alice时,您不会发现它们之间有很大的区别。但是,如果您使用的是另一台名为Bob的计算机,则连接点

\\Alice\c$\myjp 将指向 \\Alice\c$\targetfolder

但是符号链接

\\Alice\c$\mysymlink 将指向 \\Bob\c$\targetfolder

(注意:默认情况下,系统不遵循远程卷上的符号链接,因此在大多数情况下,第二个示例实际上会导致“找不到文件”“由于符号链接类型被禁用而无法遵循符号链接。”

目录符号链接和文件符号链接之间的区别只是一个代表目录,一个代表文件。由于创建链接时链接的目标不需要存在,因此文件系统需要知道是否告诉应用程序它是目录。

还应注意,创建符号链接需要特殊特权(默认情况下,仅对提升的进程可用),而创建联结仅需要访问文件系统。


13
只是要清楚一点:目录结点和目录符号链接之间可能还存在其他微妙的功能差异。从用户(相对于开发人员)的角度来看,远程与本地事物最为明显。
哈里·约翰斯顿,

12
@MatthewSteeples的意思是,如果我创建一个符号链接C:\testlink(指向C:\test我的计算机上),并且有人远程访问我的计算机并单击C:\testlink,它将解析为C:\testHIS计算机上的内容,而如果我创建了一个目录结C:\testlink(指向C:\test(在我的计算机上),然后有人远程访问我的计算机并单击C:\testlink),它将导致他转到C:\test我的计算机上?还是我弄错了方向?
Pacerier,2011年

9
@Pacerier在这种情况下是的,但是符号链接使您可以在计算机上拥有一个指向网络共享的文件夹(因为它们是客户端解析的)。例如C:\ MyNetworkShare实际上可以指向\\ Alice \ Share
Matthew Steeples

6
@MatthewSteeples,但是我们不能创建一个C:\MyNetworkShare指向的目录连接\\Alice\Share吗?
Pacerier,2011年

8
@Pacerier,不,连接点必须是本地的。
哈里·约翰斯顿,

55

复杂的谈话会伤害大脑-我喜欢图表:

假设any MyLink是符号链接,any MyJunc是指向的结点Target as created

例如

mklink /D MyLink C:\T_Dir 用于创建指向目标目录的符号链接

mklink /J MyJunc C:\T_Dir 用于创建与目标目录的目录连接

语法mklink [/J,/D] [link path] [target path]在本地计算机上键入的位置


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

错误* 1-如果您取消阻止访问本地计算机上的远程符号链接,则此方法将起作用..但仅在取消阻止的本地计算机上


3
太奇怪了 甚至相对的符号链接也无法远程工作。例如,我创建一个目录d:\_tmp\data。像这样创建链接:d:\_tmp>mklink /d data-link data。远程用户可以完全访问其d:\_tmp所有子文件夹,但仍然无法打开d:\_tmp\data-link
Nux

4
这是因为当符号链接在客户端得到评估时,它将指向客户端而不是服务器上的d:\ _ tmp \ data。
apraetor

我认为它很奇怪的原因很明显。但我同意@Nux的看法,至少在相对符号链接的情况下,这很奇怪。
乔恩·库姆斯

Complex talk hurts brain -- I like charts我喜欢这句话,也喜欢图表。
路加福音

46

符号链接具有更多功能,而结点由于其局限性而似乎几乎是旧功能,但是这些限制的安全隐患明确说明了为什么可能会比符号链接更喜欢结点。远程定位使符号链接更具功能性,但同时也提高了其安全性,而结点可能会更安全,因为它们仅限于本地路径。因此,如果您需要本地链接并且可以使用绝对路径,那么最好使用结点;否则,请考虑符号链接以了解其附加功能。

在此处输入图片说明

**速度/复杂性差异的陈述来自Wikipedia条目中有关NTFS重新解析点的未经验证的陈述(不错的阅读)。*


其他NTFS链接比较

这是关于此主题的其他一些比较,但是在考虑路口时,这些比较可能会误导人,因为它们没有列出我上面列出的好处。

从这里拍摄(入门读物不错)

在此处输入图片说明

MKLink的SS64页面

在此处输入图片说明


关于Terminology的评论

连接点是符号链接

除了前面提到的处理方式上的差异外,结点和符号链接实际上是以相同的方式(重定点)执行相同的操作。实际上,从技术上讲,Junction是符号链接,有时文档可能将Junction称为符号链接,如此处的情况。因此,关于术语这只是要注意的事情。

NTFS

即使OP对此进行了指定,也值得指出的是,“符号链接”是一个非常通用的术语,并不特定于NTFS。因此,具体地说,此比较是关于NTFS交汇点与NTFS符号链接的。


3
有人测试了“连接”与“符号链接”的处理速度吗?
1000Gbps

利弊图表非常有帮助,谢谢!
GordonM
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.