在 NTFS 上下文中:
MKLINK [[/D] | [/H] | [/J]] Link Target
/D
创建目录符号链接。默认为文件符号链接。
/H
创建硬链接而不是符号链接。
/J
创建目录连接。
Link
指定新的符号链接名称。
Target
指定新链接引用的路径(相对或绝对)。
不是一个目录连接点和目录符号链接?
mklink /D f1 f2
和有什么区别mklink /J f1 f2
?由于“目录”实际上只是一个文件,目录符号链接和文件符号链接之间有什么区别?
答案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
尽管 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 - 如果你在本地机器上解除了对远程符号链接的访问,那么这将起作用……但仅限于解除阻止的本地机器