NTFS联接点和符号链接有什么区别?

191

从高层次上看,NTFS连接点符号链接之间唯一明显的区别是,连接点只能是目录,而符号链接也可以指向文件。

这两者之间还有哪些不同之处?

(注意,我已经看到了这个问题,但我要找的有点不同--那个问题正在寻找一个利弊清单,我正在寻找一组技术差异)

6个回答

152

符号链接具有更多的功能,而连接点似乎是一种遗留功能,因为它们的限制,但正是这些限制的安全影响,使得连接点可能比符号链接更受欢迎。 远程定位使符号链接更加实用,但也提高了它们的安全性,而连接点更安全,因为它们被限制在本地路径中。因此,如果您想要一个本地链接并且可以使用绝对路径,那么使用连接点可能更好;否则,考虑使用符号链接以获得其增强的功能。

enter image description here

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

**自从Windows 10创作者更新以来,可以启用开发人员模式以删除NTFS符号链接的管理员限制


其他NTFS链接比较

以下是一些涉及此主题的其他比较,但在考虑到连接点时可能会产生误导,因为它们没有列出我上面所列出的益处。

来自此处(一个不错的入门阅读)

enter image description here

来自MKLink的SS64页面

enter image description here


术语注释

连接点是重解析点(可以描述为符号链接)

NTFS连接点和NTFS符号链接实际上以相同的方式执行相同的操作(重解析点),除了它们处理方式上的差异。事实上,从技术上讲,连接点是更一般意义上的“符号链接”,有时文档可能会将连接点称为符号链接,就像这里一样。在这种情况下,“符号链接”并不意味着NTFS符号链接,它与连接点不同(见下文)。

NTFS

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


3
@0xC0000022L,如果你说的是NTFS联接点不是NTFS符号链接,那么你是正确的。我可以看出我的措辞可能会被误解为这个意思。我会进行编辑以澄清,但重点是,在这种情况下,“符号链接”指的是NTFS符号链接,它们是更一般“符号链接”概念的特定实现,而Junctions也属于其中之一。你有看到我发布的链接吗?它并不是说NTFS联接点是NTFS符号链接,但术语“符号链接”可以用来描述联接点。 - u8it
3
联接不是遗留问题。它们实现挂载点(绑定/卷),而不是符号链接。当在一个打开的路径中解析路径时,系统会记住穿越的联接,以便评估经过挂载点的相对符号链接。这些穿越需要将联接处理为普通目录,而符号链接则被解析为其目标路径。例如,假设“C:\junction”和“C:\symlink”都指向“E:\spam”,而相对符号链接“E:\spam\eggs.txt”指向“.. \eggs.txt”,那么“C:\junction\eggs.txt”解析为“C:\eggs.txt”,而“C:\symlink\eggs.txt”解析为“E:\eggs.txt”。 - Eryk Sun
@ErykSun 哈哈,可能是相关的开发人员已经离开微软了。这个故事对于大多数软件公司来说并不算太奇怪;) ... 同意连接点不是符号链接,但是当使用比喻来解释概念时,使用(错误的)比较仍然可以有用地(表面上)解释概念。不确定这里是否适合进行“表面”的解释。 - 0xC0000022L
有一个第三方驱动程序可用于Windows XP,允许符号链接正常工作。 - Dwedit
“Security profile” 的意思是安全配置文件,而不是安全风险。 - user20151238
显示剩余6条评论

38

我认为下面这些地方对于区分的有用:

http://blogs.msdn.com/b/junfeng/archive/2006/04/15/576568.aspx

http://www.hanselman.com/blog/MoreOnVistaReparsePoints.aspx

假定: 在Windows中,符号链接与联接点相当于在Unix中,符号链接与硬链接相当。

http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link

Windows 7和Windows Vista使用命令行实用程序mklink支持对文件和目录进行符号链接。与联接点不同,符号链接还可以指向文件或远程Server Message Block(SMB)网络路径。此外,NTFS符号链接实现提供完全支持跨文件系统链接的功能。但是,启用跨主机符号链接的功能要求远程系统也支持它们,这实际上将其支持限制为Windows Vista和更高版本的Windows操作系统。

http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/

Windows创建的符号链接与目录联接非常相似,但与目录联接不同,它可以指向文件或远程网络文件或目录。目标可以定义为相对于符号链接位置的路径,也可以定义为当前卷或另一个卷中的绝对路径。还请注意,指向文件的符号链接与指向目录的符号链接不同,并且目标必须匹配定义。


1
有关Windows 7的具体信息,请访问:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa365006(v=vs.85).aspx - Joshua Drake
17
被接受的答案已经三年了,但我想指出NTFS连接点与Unix中的硬链接不同,正如引用的命题所暗示的那样。显然这是因为连接点不能引用文件,而硬链接可以。NTFS还支持硬链接(与连接点不同),它们或多或少相当于Unix硬链接。 - user2819245
@elgonzo 完全同意。据我所知,Unix硬链接只能引用文件,因此它看起来根本不像NTFS目录联接。 - Franklin Yu
“假设”毫无意义,因为“正常”的Unix文件系统不允许在目录上创建硬链接。只有特殊的文件系统才可以(例如sysfs,通常挂载为/sys)。 - kkm

28

在Windows中,就功能而言,创建后两者并没有真正的区别。但是它们在所能做的事情上有显著的差异。Junction可以仅用于创建指向文件夹的链接,无论是在同一驱动器上还是不同的驱动器上,但前提是这些驱动器位于本地系统上(您不能创建指向网络文件夹的junction链接)。而Symbolic Link则没有同样的限制。Symbolic Link可用于链接到同一系统上的文件或文件夹(同一驱动器或不同驱动器)或网络共享,并且可以使用相对位置符号(“\\system2\foldera\file.txt”、“d:\foldera\file.txt”、“\\system2\foldera”、“d:\foldera”或“d:\foldera\folderb..”,最后两个示例的结果链接到相同的位置)。相对位置符号可以是“.”、“..”、“当前驱动器相对函数”(如果当前驱动器为c:,则指定“\tempa\folderb”会链接到c:\tempa\folderb),以及“当前目录相对”(如果当前目录为d:\foldera\folderb,则指定“d:file.txt”会链接到d:\foldera\folderb\file.txt)。

总之,Junction Points仅限于本地系统上的文件夹,而Symbolic Links可以创建链接到通过UNC路径访问的文件夹或文件,在如何指定这些位置方面更具灵活性。Symbolic Links基本上是Junction Points和Hard Links的更多功能替代品。另外,符号链接与Unix和Linux兼容,在创建跨平台UNC路径的链接时非常方便。

希望这样回答您的问题可以令您满意。已编辑以更正排版错误。


16

除了 u8it 给出的绝佳答案:

如果有人对 Windows 10 中 Windows 文件资源管理器中的行为差异感兴趣:

拖放到目标目录:

  • 符号链接:移动 符号链接 到目标目录
  • 联接:移动 原始目录 到目标目录

鼠标右键单击 + 属性:

  • 符号链接:显示快捷方式属性
  • 联接:显示 原始目录 文件夹属性

在左侧窗格(目录树)中单击鼠标左键:

  • 符号链接:选择 原始目录
  • 联接:选择 联接

符号链接的创建需要管理员权限,而联接则不需要。 - Jinjinov
1
Windows 10 版本 10.0.17134.1130:在资源管理器中移动连接点只会移动原始目录的内容。单击树中的符号链接不会选择原始目录。 - SalgoMato
4
这是非常宝贵的见解,特别是“junction:将原始目录移动到目标目录”这一部分。我曾尝试过移动(Ctrl + X,V)一个连接点,以为它只是移动一个“指针”对象,但实际上它实际上删除/更改了我的原始目录! - Wappenull
@Wappenull - 这个连接点的意外行为可能是一个已修复的错误。在Windows 10 21H2 Build 19044.3086中,它按预期工作。连接点本身被移动,目标保持原位。 - Lumi

15

Link Shell Extension,http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html,是一个非常好的工具,可以创建和查看许多类型的链接,并且有很好的文档。

[在完整安装后,如果您查看高级链接,则会添加新的属性选项卡。还会为各种链接类型添加图标叠加箭头。如果这些不显示,请滚动到常见问题解答部分;Windows仅支持13个叠加图标;他展示了一个注册表解决方法。它的信息有用性示例:试图获取您认为是文件夹但实际上是系统提供的连接点链接的特权,通常用于与旧版Windows兼容的目的,但未成功。]

连接点和符号链接在本地系统上创建为目录时基本相同。

然而:

它们在网络上的行为不同。该链接描述了这种行为:https://superuser.com/questions/343074/directory-junction-vs-directory-symbolic-link

如果你把连接点链接想象成“欺骗操作系统位置”的快捷方式,那么你就会有一个很好的实际比喻,了解它们的用途和可能导致它们失效的原因。主要区别在于,如果你复制符号链接或连接点链接,它会复制目标,而不仅仅是包含指针的文件(类似于快捷方式)。与快捷方式一样,您可以删除符号链接或连接点链接,而不必删除目标文件/文件夹。【硬链接只有在最后一个链接被删除(包括从回收站中删除)时才会删除文件。在LSE中查看这些链接的属性标签,以查看目标或硬链接的引用计数】

硬链接或快捷方式是唯一可以移动而不会产生副作用(如破坏或复制整个目标)的链接类型。移动目标始终会破坏链接,但可以在属性选项卡中轻松更新它们(使用LSE显示),或者如果复杂,可以使用LSE重新创建。

创建符号链接需要管理员权限,而联接则不需要。这表明Windows在处理联接时具有直观、预期的方式,并且内部OS广泛使用联接。但是,请注意系统文件夹可能会产生意外的副作用(根据Win 10的经验)。

Link Shell Extension中一些备份特定功能非常有用-简而言之,它可以在标准文件夹中创建几种可更新的符号链接结构,以进行待备份。


而且Link Shell Extension看起来是一个很棒的工具。还有一个相关的轻量级实用程序叫做ln.exe...即使您不使用任何一个,仅从阅读网站的简明用户指南中,您也会学到很多东西。 - u8it
我认为你在2016年4月2日的编辑使得事情变得不太清晰了,Clay。我想你的意思是这样的:"这些文件与'shortcut'文件的主要区别在于,如果你......复制,它会复制目标,而不仅仅是包含指针的文件(这就是复制快捷方式文件时发生的事情)。" - Jon Coombs

5
近年来,在Windows操作系统中引入了符号链接:从Vista版本开始。
符号链接不应被视为现有NTFS“重解析点”技术的替代品。
微软解释说,符号链接的唯一目的是更兼容Unix系统。
MSDN表示:“符号链接旨在帮助迁移和与UNIX应用程序兼容。微软已经实现了其符号链接,使其像UNIX链接一样运行。”
Vista也是第一个将链接用于自身功能的操作系统。为了与传统文件夹名称兼容,C:\Documents and Settings现在是指向C:\Users的链接。
有趣的是,尽管Vista引入了符号链接,但这个“Documents and Settings”技巧实际上是一个普通的联接。

2
这个回答并没有说明符号链接和联接点之间的区别。因此,我认为它并不适用于这个问题。 - Billy ONeal
从Windows Vista开始,符号链接取代了连接点(我们知道,两者都是重解析点)。 - Aravind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接