ChatGPT解决这个技术问题 Extra ChatGPT

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

在高层次上,NTFS Junction PointsSymbolic Links 之间唯一明显的区别是连接只能是目录,而符号链接也可以作为目标文件。

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

(注意,我已经看过 this question 并且我正在寻找的是有点不同 - 这个问题正在寻找一个赞成和反对列表,我正在寻找一组技术差异)


C
Community

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

https://i.stack.imgur.com/Unr0S.png

*速度/复杂性差异的陈述来自 Wikipedia entry on NTFS reparse points 中未经验证的陈述(很好读)。

**自从 Windows 10 创意者更新以来,人们可以enable Developer Mode to remove the admin restriction for NTFS symbolic links

其他 NTFS 链接比较

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

Taken from here(很好的介绍性读物)

https://i.stack.imgur.com/a4Fcy.png

来自SS64 page on MKLink

https://i.stack.imgur.com/ihujz.png

对术语的评论

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

NTFS 连接和 NTFS 符号链接实际上以相同的方式(重新解析点)做同样的事情,除了前面提到的处理方式的差异。事实上,从技术上讲,Junction 是更一般意义上的“符号链接”,有时文档可能将 Junction 称为符号链接 as is the case here。在这种情况下,“符号链接”并不意味着不同于结点的 NTFS 符号链接(见下文)。

NTFS

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


连接点和符号链接都是重解析点,但连接点绝对不是符号链接!哦,这张桌子也有一个错误。连接点的目标在创建时必须存在,但它确实可能在以后被删除。
@0xC0000022L 是的,如果您说的是 NTFS 连接不是 NTFS 符号链接,那么您是对的。我可以看到我的措辞可能会被误解为这样说。我将进行编辑以澄清,但重点是,在这种情况下,“符号链接”是指 NTFS 符号链接,它们是更一般的“符号链接”概念的特定实现,连接点也属于该概念。您是否按照我发布的链接进行操作?并不是说 NTFS 连接是 NTFS 符号链接,而是可以使用术语“符号链接”来描述连接。
很公平,当提到这个概念时,它可能是一种思考方式。但我真的认为术语重解析点将这个概念带回家了,因为它更多地解释了 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”。
J
James Manning

我发现对差异最有用的地方:

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 创建的符号链接与目录连接非常相似,但与目录连接不同,它可以指向文件或远程网络文件或目录。目标可以定义为相对于符号链接位置的路径,或当前卷或其他卷中的绝对路径。另请注意,文件的符号链接与目录的符号链接不同,目标必须与定义匹配。


公认的答案已经三年了,但我想指出,NFTS 连接点与 Unix 中的硬链接相比,正如引用的假设所暗示的那样。这应该很明显,因为连接点不能引用文件,但硬链接可以。 NTFS 还支持硬链接(与联结不同),它们或多或少可以与 Unix 硬链接相媲美。
@elgonzo 完全同意。 AFAIK Unix 硬链接只能引用一个文件,所以它看起来根本不像 NTFS 目录连接。
“假设”没有意义,因为“普通”Unix 文件系统不允许硬链接到目录。只有特殊的文件系统才会这样做(例如,sysfs,通常挂载为 /sys)。
s
spottedmahn

从功能上讲,在 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 兼容。

希望这能以令人满意的方式回答您的问题。编辑以纠正印刷错误。


C
Community

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 日的编辑让事情变得不太清楚,克莱。我认为你的意思是这样的:“这些和'快捷方式'文件之间的主要区别在于,如果你......它复制目标,而不仅仅是包含指针的文件(如果你复制快捷方式会发生这种情况文件)”
C
Community

除了来自 u8it 的出色回答:

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

拖放到目标目录:

符号链接:将符号链接移动到目标目录

junction:将原目录移动到目标目录

鼠标右键+属性:

符号链接:显示快捷方式属性

junction:显示原始目录文件夹属性

左键单击左窗格(目录树):

符号链接:选择原始目录

junction:选择结点


创建符号链接需要管理员权限,而连接则不需要。
Windows 10 版本 10.0.17134.1130:在资源管理器中移动结点仅移动原始目录的内容。左键单击树中的符号链接不会选择原始目录。
这是非常有价值的见解,尤其是联结:将原始目录移动到目标目录部分。我曾经尝试移动 (Ctrl+X, V) 一个连接点,以为它只会移动一个指针对象,但它实际上删除/更改了我原来的目录!
A
A5C1D2H2I1M1N2O1R2T1

最近在 Windows 中引入了符号链接:从 Vista 开始。

不应将符号链接视为现有 NTFS“重解析点”技术的替代品。

Microsoft 解释说,符号链接的唯一目的是与 Unix 更兼容。

MSDN :“符号链接旨在帮助迁移和应用程序与 UNIX 的兼容性。Microsoft 已实现其符号链接,以便像 UNIX 链接一样发挥作用。”

Vista 也是第一个使用链接实现自身功能的操作系统。为了与旧文件夹名称兼容,C:\Documents and Settings 现在是指向 C:\Users 的链接。

有趣的是,虽然 Vista 引入了符号链接,但这个“Documents and Settings”技巧实际上是一个普通的旧连接。


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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅