Windows 创建符号链接的命令 mklink
在 Linux 中,命令 ln
可以方便地创建符号链接,而符号链接在系统运行过程中也起到了很重要的作用。 符号链接,可以理解为也是一种文件或目录,有自己的名称,只不过访问这个文件或目录,等同于访问其目标。 在 Windows 中,可以采用 mklink
命令创建符号链接,也能实现和在 Linux 中类似的效果。
命令语法
根据官方文档, 该命令的语法如下(注意这是一个 Windows Command Prompt 命令,不能在 Powershell 中使用):
1 | mklink [[/d] | [/h] | [/j]] <link> <target> |
该命令中的两个参数 <link>
和 <target>
, <link>
是符号链接的名称,而 <target>
是链接目标的路径。 根据选项 [/d] [/h] [/j]
的不同该命令一共能创建四种符号链接:文件软链接、文件硬链接、目录软链接、目录联接。 参考始终的博客可知:
文件符号链接 | 文件硬链接 | 目录符号链接 | 目录联接 | |
---|---|---|---|---|
选项 | 无 | /h | /d | /j |
参数 | 文件 | 文件 | 目录 | 目录 |
修改同步 | 是 | 是 | 是 | 是 |
删除同步 | 否 | 否 | 否 | 否 |
资源管理器类型 | .symlink | 无特殊显示 | 文件夹 | 文件夹 |
资源管理器图标 | 快捷方式 | 无特殊显示 | 文件夹快捷方式 | 文件夹快捷方式 |
彻底删除源 | 删除源路径 | 删除所有硬链接 | 删除源路径 | 删除源路径 |
注意该命令运行需要管理员权限。
目录符号连接和目录联接
对于文件,符号连接和硬链接的区别比较明显,而且和 Linux 中的差不多。但是对于目录,有符号链接和联接两种模式,这两种模式看起来是一样的,有什么区别?
根据 Understanding NTFS Hard Links, Junctions and Symbolic Links](https://www.2brightsparks.com/resources/articles/NTFS-Hard-Links-Junctions-and-Symbolic-Links.pdf)) 中的介绍,这两种模式最大的区别在于使用的技术不同:
- 目录联接在 Windows 2000 中被引入,主要基于 NTFS 文件系统的 reparse points 特性实现。重定向的目标必须通过绝对路径定义,所有用于确定目标的信息都在这个路径里。而由于是基于 NTFS 文件系统实现的,所以目录联接只能用于本地路径。
- 目录符号链接在 Windows Vista 中被引入,是一种更高级的快捷方式。重定向的目标可以是本地路径,也可以是通过 SMB 协议挂在的网络路径。
因此,当需要挂在网络路径时,就需要使用 /d
参数创建目录符号链接。如果只是本地路径,那么使用 /j
或者 /d
都可以。
但是,当链接到 OneDrive 中的文件夹时,如果使用符号链接,会造成一些问题。如果文件没有被下载到本地,那么在双击运行时,资源管理器在下载文件后会产生文件冲突的错误。此时就只能使用 /j
选项,创建目录联接,才可以正常使用。