NTFS 连接点和符号链接有啥区别?
Posted
技术标签:
【中文标题】NTFS 连接点和符号链接有啥区别?【英文标题】:What is the difference between NTFS Junction Points and Symbolic Links?NTFS 连接点和符号链接有什么区别? 【发布时间】:2012-02-20 23:42:52 【问题描述】:在高层次上,NTFS Junction Points 和 Symbolic Links 之间唯一明显的区别是,Junction 只能是目录,而 SymLink 也可以作为目标文件。
两者之间还有哪些不同之处?
(注意,我已经看过this question,而我正在寻找的是有点不同——这个问题是寻找一个赞成和反对名单,我正在寻找一组技术差异)
【问题讨论】:
【参考方案1】:符号链接具有更多功能,而由于其局限性,联结几乎似乎是一个遗留功能,但这些限制的安全含义特别是为什么联结可能比符号链接更受青睐。 远程定位使符号链接更实用,同时也提高了它们的安全性,而交叉点更安全,因为它们受限于本地路径。因此,如果您想要一个本地链接并且可以使用绝对路径,那么您可能最好使用交叉点;否则,请考虑使用符号链接来增加其功能。
*速度/复杂度差异的陈述来自Wikipedia entry on NTFS reparse points 中未经验证的陈述(很好读)。
**自从 Windows 10 创意者更新以来,可以enable Developer Mode to remove the admin restriction for NTFS symbolic links。
其他 NTFS 链接比较
这里有一些关于该主题的其他比较,但在考虑连接时,这些比较可能会产生误导,因为它们没有列出我在上面列出的好处。
Taken from here(很好的介绍性读物)
来自SS64 page on MKLink
关于术语的评论
连接点是重解析点(可以描述为符号链接)
NTFS 连接和 NTFS 符号链接实际上以相同的方式(重解析点)做同样的事情,除了前面提到的处理方式的差异。实际上,从技术上讲,Junction 是更一般意义上的“符号链接”,有时文档可能将 Junction 称为符号链接,as is the case here。在这种情况下,“符号链接”并不意味着不同于交汇点的 NTFS 符号链接(见下文)。
NTFS
尽管 OP 指定了这一点,但值得指出的是,“符号链接”是一个非常笼统的术语,并非特定于 NTFS。所以,具体来说,这个比较是关于 NTFS 连接与 NTFS 符号链接。
【讨论】:
连接点和符号链接都是重解析点,但连接点绝对不是符号链接!哦,这张桌子也有一个错误。连接点的目标在创建时必须存在,但它确实可能在以后被删除。 @0xC0000022L 是的,如果您说的是 NTFS 连接不是 NTFS 符号链接,那么您是对的。我可以看到我的措辞可能会被误解为这样说。我将进行编辑以澄清,但重点是,在这种情况下,“符号链接”是指 NTFS 符号链接,它们是更一般的“符号链接”概念的特定实现,连接点也属于该概念。您是否按照我发布的链接进行操作?并不是说 NTFS Junction 是 NTFS 符号链接,而是可以使用术语“符号链接”来描述 junction。 很公平,当提到这个概念时,它可能是一种思考方式。但我真的认为术语重解析点将这个概念带回家了,因为它更多地解释了 NT 对象管理器中发生的事情,并且这个概念远远超出了过去在 Unix 上的符号链接,例如(它们是普通文件带有特殊标志)。是的,我听说连接点被解释为“目录的符号链接”。 @0xC0000022L 另外,我没有看到您提到的有关表格错误的问题。您是指“可以指向不存在的目标”的特征吗?您是说至少在第一次创建联结时这是错误的吗?如果您确定在特定环境中是这种情况(可能是 Windows XP 或由于安全设置),我会记下这一点,但根据我的经验和文档(我刚刚在 Windows 10 上确认),连接可以始终以不存在的路径为目标,即使在创建时也是如此……可能存在限制此路径的安全设置。 路口不是遗留的。它们实现挂载点(绑定/卷),而不是符号链接。当在开放中解析路径时,系统会记住遍历的连接点,以便评估遍历安装点的相对符号链接。这些遍历需要像处理常规目录一样处理联结,而将符号链接解析为其目标路径。例如,说“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”。【参考方案2】:在功能上,在 Windows 中,一旦创建,就没有真正的区别。但是,它们之间在可以做什么方面存在显着差异。连接只能用于创建文件夹链接,无论是在同一驱动器上还是在不同驱动器上,但前提是这些驱动器位于本地系统上(您不能通过网络创建到文件夹的连接链接。) 符号链接但是,没有相同的限制。符号链接可用于链接到文件或文件夹,这些文件或文件夹可以位于同一系统(相同驱动器或不同驱动器)或网络共享上,并且可以使用相对位置符号(“\\system2 \foldera\file.txt"、"d:\foldera\file.txt"、"\\system2\foldera"、"d:\foldera" 或 "d:\foldera\folderb.." 以及生成的链接最后 2 个示例是相同的位置。)相对位置符号可以是“.”、“..”、当前驱动器相关函数(如果当前驱动器是 c:,则指定“\tempa\folderb”会导致链接到 c: \tempa\folderb,) 和当前目录相关(如果当前目录是 d:\foldera\folderb,则指定“d:file.txt”会导致指向 d:\foldera\folderb\file.txt 的链接。)
总结一下:连接点仅限于本地系统上的文件夹,而符号链接可以创建指向可通过 UNC 路径或本地系统访问的文件夹或文件的链接,这些位置的指定方式具有更多功能。符号链接基本上是连接点和硬链接的更通用的替代品。此外,在创建跨平台 UNC 路径链接时,符号链接与 Unix 和 Linux 兼容。
希望这能以令人满意的方式回答您的问题。 已编辑以更正印刷错误。
【讨论】:
【参考方案3】:除了来自 u8it 的出色回答:
如果有人对 Windows 10 中 Windows 文件资源管理器 的行为差异感兴趣:
拖放到目标目录:
symbolic link
:将symbolic link
移动到目标目录
junction
:将original directory
移动到目标目录
鼠标右键+属性:
symbolic link
:显示快捷方式属性
junction
:显示original directory
文件夹属性
鼠标左键单击左侧窗格(目录树):
symbolic link
:选择original directory
junction
:选择junction
【讨论】:
符号链接的创建需要管理员权限,而连接则不需要。 Windows 10 版本 10.0.17134.1130:在资源管理器中移动结点仅移动原始目录的内容。左键单击树中的符号链接不会选择原始目录。 这是非常有价值的见解,尤其是 junction: 将原始目录移动到目标目录 部分。我曾经尝试移动 (Ctrl+X, V) 一个连接点,以为它只会移动一个 pointer 对象,但它实际上删除/更改了我原来的目录!【参考方案4】:Link Shell Extension,http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html,是创建和查看多种链接的绝佳工具。它还具有出色的文档。
[在完整安装中,如果您正在查看高级链接,它会添加一个新的属性选项卡。 At 还为各种链接类型添加了图标覆盖箭头 - 如果这些未显示,请滚动到常见问题解答部分; Windows 仅支持 13 个叠加层;他展示了一个注册表解决方法。其信息有用性的一个示例:尝试获取您认为是文件夹但实际上是系统提供的连接链接的权限未成功,通常用于与旧版本的 Windows 兼容。]
在为本地系统上的目录创建时,联结和符号链接的作用基本相同。
但是:
它们在网络上的行为不同。此链接描述了这种行为:https://superuser.com/questions/343074/directory-junction-vs-directory-symbolic-link
如果您将 Junction Links 视为“在位置上欺骗操作系统的快捷方式”,那么您将很好地模拟它们的使用以及破坏它们的原因。主要区别在于,如果您复制符号链接或连接,它会复制目标,而不是(如快捷方式)仅复制包含指针的文件。与快捷方式一样,您可以在不删除目标文件/文件夹的情况下删除符号链接或连接链接。 [硬链接,该文件仅在删除最后一个链接后才被删除 - 包括从回收站中。查看 LSE 中的任何这些链接的属性标记,以查看硬链接的目标或引用计数。]
硬链接或快捷方式是唯一可以移动的链接类型,不会产生破坏或复制整个目标等副作用。移动目标总是会断开链接,尽管它们可以在属性选项卡中轻松更新(与 LSE 一起显示)或重新创建(如果复杂)使用 LSE。
符号链接的创建需要管理员权限,而连接则不需要。这加上 Junctions 的广泛内部操作系统使用表明 Windows 以一种直观的、预期的方式处理它们。 [一定要警惕系统文件夹的意外副作用(来自 Win 10 的经验)。]
[Link Shell Extension 的一些特定于备份的功能非常有用 - 简而言之,它可以在标准文件夹中创建多种类型的可更新符号链接结构,用于待定备份。]
【讨论】:
Link Shell Extension 看起来是一个很棒的工具。还有一个相关的轻量级实用程序,称为ln.exe...即使您不使用任何一个,只要阅读该网站的简单用户指南,您就会学到很多东西。 我认为您对 2016 年 4 月 2 日的编辑让事情变得不那么清楚了,Clay。我认为你的意思是这样的:“这些和'快捷方式'文件之间的主要区别在于,如果你......它复制目标,而不仅仅是包含指针的文件(如果你复制快捷方式会发生这种情况文件)”【参考方案5】:最近在 Windows 中引入了符号链接:从 Vista 开始。
不应将符号链接视为现有 NTFS“重解析点”技术的替代品。
Microsoft 解释说,符号链接的唯一目的是与 Unix 更兼容。
MSDN :“符号链接旨在帮助迁移和应用程序与 UNIX 的兼容性。Microsoft 已实现其符号链接以像 UNIX 链接一样发挥作用。”
Vista 也是第一个使用链接实现自身功能的操作系统。为了与旧文件夹名称兼容,C:\Documents and Settings
现在是指向C:\Users
的链接。
有趣的是,虽然 Vista 引入了符号链接,但这个“Documents and Settings
”技巧实际上是一个普通的旧连接。
【讨论】:
这个答案没有说明符号链接和连接之间的区别。 (因此我认为它根本不适用于这个问题) 从 Windows Vista 开始,符号链接取代了 Junctions(我们也知道,两者都是重解析点)【参考方案6】:我发现对差异最有用的地方:
http://blogs.msdn.com/b/junfeng/archive/2006/04/15/576568.aspx
http://www.hanselman.com/blog/MoreOnVistaReparsePoints.aspx
假设:Symlink 与 Windows 中的 Junction 一样,就像 Symlink 与 Unix 中的 Hardlink 一样。
http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link
Windows 7 和 Windows Vista 使用命令行实用程序 mklink 支持文件和目录的符号链接。与连接点不同,符号链接还可以指向文件或远程服务器消息块 (SMB) 网络路径。此外,NTFS 符号链接实现提供了对跨文件系统链接的全面支持。但是,启用跨主机符号链接的功能需要远程系统也支持它们,这实际上限制了它们对 Windows Vista 和更高版本的 Windows 操作系统的支持。
http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/
由 Windows 创建的符号链接与目录连接非常相似,但与目录连接不同,它可以指向文件或远程网络文件或目录。目标可以定义为相对于符号链接位置的路径,或当前卷或其他卷中的绝对路径。另请注意,指向文件的符号链接与指向目录的符号链接不同,目标必须与定义匹配。
【讨论】:
对于 Windows 7 的具体信息:msdn.microsoft.com/en-us/library/windows/desktop/… 接受的答案已经有三年了,但我想指出,NFTS 连接点与 Unix 中的硬链接相比,正如引用的假设所暗示的那样。这应该很明显,因为连接点不能引用文件,但硬链接可以。 NTFS 还支持硬链接(与结点不同),它们或多或少可以与 Unix 硬链接相媲美。 @elgonzo 完全同意。 AFAIK Unix 硬链接只能引用一个文件,所以它看起来根本不像 NTFS 目录连接。 “假设”没有意义,因为“普通”Unix 文件系统不允许硬链接到目录。只有特殊的文件系统才会这样做(例如,sysfs,通常挂载为/sys
)。以上是关于NTFS 连接点和符号链接有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章