1、概况
符号链接是 NTFS 中指向文件系统中的 另一个对象 的一类对象,被指向的对象叫做“目标 ”。
1-1、使用方式:
MKLINK [[/D] | [/H] | [/J]] 链接名称 目标
- /D(irectory) 创建目录符号链接而不是文件符号链接(default)
- /H(ard) 创建硬链接而不是符号链接(default)
- /J(oint) 创建目录连接点
- 【注意】无上面三个可选的参数为:文件软链接
- 链接名称(昵称) 指定新的符号链接名称
- 目标(链接源) 指定新链接引用的路径(绝对路径或者相对路径均可)
1-2、区别于联系
链接类型 | 命令 | 文件类型 | 文件路径 | 空间占用 | 可链接类型 | 本质 | win下是否可跨磁盘 | 访问方式 | 源文件与链接文件关联关系 |
---|---|---|---|---|---|---|---|---|---|
目录符号链接 | /d | .symlinkd | 相对/绝对 | 不占空间 | 仅目录 | 源目录进行引用(相当于快捷方式) | 跨本地/跨网络(共享目录) | 访问:本地通过点击链接目录/网络通过Tomcat可实现 | 源删链无效;链删不影响源;内部进行CRUD双向同步变化 |
目录连接点 | /j | .junction | 绝对路径 | 不占 | 只能是目录 | 同上,连接点 | 仅支持跨本地 | 同上 | 同上 |
硬链接 | /h | .源文件类型 | 绝对路径 | 占源文件一样空间 | 只能是文件 | 源文件拷贝 | 不可以 | 访问:本地通过所在磁盘/网络通过Tomcat实现 | 源删链无效!;链删源无影响;CRUD操作双向同步变化 |
快捷方式 | 批处理 | .lnk | 绝对路径 | 文件占几百k(源大小无关 | 文件、目录均可 | / | 跨本地磁盘 | 访问:本地跳转到文件所在磁盘路径 | 源删无效;只是创建了个快捷方式 |
直接说区别的话,其实就是同一件事的实现层级不同。
- 快捷方式(本身是一个文件):
- 里面说明了自身指向的文件的信息,Shell(外壳程序)可以读取这个文件然后执行对应跳转的操作。
- 软链接(是一个文件系统对象):
- 里面说明了自身指向的实际文件的文件系统路径,文件系统驱动负责读取这个信息然后“转发”对应的操作。
- 硬链接(直接引用文件系统对象)
- 比软链接的层级更低一点,直接引用文件系统对象而非路径。
- F、层级不同带来的差异,除了直观的处理这件事的东西不同,主要的差别还是越低层越透明和“隐蔽”,越高层对于用户而言则功能越丰富。
- 比如虽然同样是指向特定路径的文件,快捷方式需要特定的处理程序来处理,而软链接则直接用标准的文件系统API就可以正常使用。
- 同时,快捷方式可以添加信息自定义外观(图标)、指定执行环境(上下文、初始路径),而软链接则不行。
- 快捷方式还可以指向文件系统概念以外的目标,比如COM Object,软链接不行。
2、注意事项
- 使用 mklink 创建符号链接的时候,操作系统并不会检查目标是否存在。所以可以创建指向不存在的目标的符号链接。
- 注意尽可能不要使用符号链接嵌套。也就是在一个文件夹 A 中创建一个符号链接指向 A 自己。这会产生一个
无限循环递归的文件系统(Windows 下限制了路径长度最大为 128 个字节),会使大部分应用程在遍历文件夹目录的时候产生循环错误(因为对应用程序来说,文件夹的符号链接与普通的文件夹是完全一样的)