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

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

在 NTFS 上下文中:

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

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

  1. 不是一个目录连接点目录符号链接

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

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

答案1

连接点绝对不同于目录符号链接,尽管它们的行为类似。主要区别在于,如果您正在查看远程服务器,连接在服务器上处理目录符号链接在客户端处理。另请参见 Matthew 的评论,这意味着本地文件系统上的符号链接可以指向远程文件系统。

假设在名为 Alice 的机器上,您要放置一个连接点c:\myjp和一个目录符号链接c:\mysymlink,两者都指向c:\targetfolder。使用 Alice 时,您不会注意到它们之间有什么区别。但如果您使用的是另一台名为 Bob 的机器,那么连接点

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

但符号链接

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

(警告:默认情况下,系统不跟踪远程卷上的符号链接,因此在大多数情况下,第二个示例实际上会导致“文件未找到”或者“无法跟踪符号链接,因为其类型已被禁用。”

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

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

答案2

符号链接具有更多功能,而连接点由于其局限性几乎似乎是一个遗留功能,但这些限制的安全隐患正是连接点可能比符号链接更受青睐的原因。远程定位使符号链接更具功能性,但同时也提高了它们的安全性,而连接点可能被认为更安全,因为它们被限制在本地路径上。因此,如果您想要一个本地链接并且可以接受绝对路径,那么使用连接点可能更好;否则,请考虑使用符号链接以获得其附加功能。

连接点和符号链接的比较

*速度/复杂性的差异陈述来自有关 NTFS 重新解析点的 Wikipedia 条目(值得一读)。


其他 NTFS 链接比较

这里还有一些关于这个主题的其他比较,但是这些比较在考虑连接点时可能会产生误导,因为它们没有列出我上面列出的好处。

摘自此处(很好的入门读物)

NTFS 链接比较

MKLink 上的 SS64 页面

SS64 页面上的 MKLink 比较表


关于术语的评论

连接点是符号链接

除了上述处理方式的不同之外,连接点和符号链接实际上以相同的方式(重新解析点)执行相同的操作。事实上,从技术上讲,连接点是一种符号链接,有时文档可能会将连接点称为符号链接,就像这里的情况一样。所以,这只是关于术语需要注意的事情。

NTFS

尽管 OP 指定了这一点,但值得指出的是,“符号链接”是一个非常通用的术语,并非特定于 NTFS。因此,具体来说,此比较是关于 NTFS 连接与 NTFS 符号链接的。

答案3

复杂的谈话伤脑筋——我喜欢图表:

假设 anyMyLink是符号链接,anyMyJunc是指向 的连接点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 - 如果你在本地机器上解除了对远程符号链接的访问,那么这将起作用……但仅限于解除阻止的本地机器

相关内容