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

Pac*_*ier 489 windows ntfs filesystems symbolic-link

在 NTFS 的上下文中:

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

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

  1. 目录结点不是与目录符号链接完全相同吗?

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

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

Har*_*ton 444

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

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

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

但符号链接

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

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

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

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

  • 需要明确的是:目录连接和目录符号链接之间可能存在其他更细微的功能差异。从用户(相对于开发人员)的角度来看,远程与本地的事情是最明显的。 (18认同)
  • @MatthewSteeples 你的意思是如果我创建一个符号链接`C:\testlink`(它指向我电脑上的`C:\test`)并且有人远程访问我的电脑并点击`C:\testlink`,它会解析到 HIS 计算机上的 `C:\test`,而如果我创建一个目录连接 `C:\testlink`(指向我计算机上的 `C:\test`),并且有人远程访问我的计算机并单击`C:\testlink`) 会引导他到我电脑上的 `C:\test` 吗?还是我弄错了? (15认同)
  • @Pacerier,不,连接点必须是本地的。 (12认同)
  • @Pacerier 在这种情况下是的,但是符号链接允许您在计算机上拥有一个指向网络共享的文件夹(因为它们已在客户端解析)。例如 C:\MyNetworkShare 实际上可以指向 \\Alice\Share (10认同)
  • @MatthewSteeples 但我们不能创建一个目录结点 `C:\MyNetworkShare` 也指向 `\\Alice\Share` 吗? (8认同)
  • @Pacerier 没错。在您的示例中,您已经找到了正确的方法 (3认同)
  • @Matthew ic,这意味着符号链接是无用的 (2认同)
  • @Mallow 我认为一切都在 *Alice* 的电脑上。*Bob* 只是一个访问 *Alice* 的客户端 (2认同)
  • @Daan:符号链接跨 SMB 的事实记录在 [SMB 的新增功能?](https://technet.microsoft.com/en-us/library/ff625695(v=ws.10).aspx) 中。我不知道有任何文档明确指出连接点没有,但它们的实现方式是固有的,我确实找到了 [创建 SYSVOL 根和暂存区连接点](https://technet. microsoft.com/en-us/library/cc794939(v=ws.10).aspx) 否则将无法工作。(不过,大多数情况下,这只是经验。) (2认同)

u8i*_*8it 113

符号链接具有更多功能,而联结由于其局限性而几乎似乎是一个遗留功能,但这些限制的安全含义正是联结可能比符号链接更受欢迎的原因。远程定位使符号链接功能更强大,但也提高了它们的安全性,而连接点可能被认为更安全,因为它们仅限于本地路径。因此,如果您想要一个本地链接并且可以使用绝对路径,那么您可能最好使用连接点;否则,请考虑为其附加功能添加符号链接。

在此处输入图片说明

**速度/复杂性差异的声明来自维基百科条目中关于 NTFS 重解析点的未经验证的声明(很好读)。*


其他 NTFS 链接比较

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

取自这里(很好的介绍性阅读)

在此处输入图片说明

来自MKLink 上的 SS64 页面

在此处输入图片说明


关于术语的评论

连接点是符号链接

结点和符号链接实际上以相同的方式(重解析点)做同样的事情,除了前面提到的它们处理方式的差异。事实上,从技术上讲,Junction 是一个符号链接,有时文档可能将一个 Junction 称为符号链接,就像这里的情况。所以,这只是关于术语的一些注意事项。

NTFS

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

  • 有人测试过 Junctions 与 Symbolic Links 的处理速度吗? (7认同)
  • 优缺点图表非常有帮助,谢谢! (3认同)

Sti*_*ony 73

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

假设 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 ***
Run Code Online (Sandbox Code Playgroud)

错误* 1 - 如果您在本地机器上解锁对远程符号链接的访问,那么这将起作用..但仅在它被解锁的本地机器上

  • 那是因为当符号链接在客户端进行评估时,它将指向客户端上的 d:\\_tmp\data,而不是服务器。 (5认同)
  • 那太奇怪了。即使是相对符号链接也不能远程工作。例如,我创建了一个目录 `d:\_tmp\data`。像这样创建链接:`d:\_tmp>mklink /d data-link data`。远程用户可以完全访问 `d:\_tmp` 及其所有子文件夹,但他仍然无法打开 `d:\_tmp\data-link`。 (3认同)
  • `复杂的谈话伤脑筋——我喜欢图表`我喜欢这句话,也喜欢图表。 (3认同)