Windows系统中的软链接和硬链接

Windows系统中的软链接和硬链接


Linux系统下有一个很好用的命令 ln ,它允许我们为文件在其他目录创建一个同步链接,它就像创建了一个相同的文件,而且不占用存储空间。
这不就是Windows下的快捷方式么……然而并不是。
Windows下常用的快捷方式严格来说是另外一个文件,后缀名为 .lik ,是占用存储空间的,只不过系统处理这个文件时使用了一些有色眼镜,这里就不多赘述了。
那么,有没有一款……
当然是有的,而且Windows自己在C盘偷偷用了好多。
同样,如果我们嫌C盘太挤,也可以自己把相关目录链接到DEF盘里去,但是要注意酌情作死喔。

创建符号链接命令

1
2
3
4
5
6
7
MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认为文件符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。

示例

  • 假如我们有这么一个目录 C:\Users\GF47\Documents\A
1
2
3
4
5
6
7
8
C:\Users\GF47\Documents\A>tree /f
文件夹 PATH 列表
卷序列号为 A888-2E49
C:.
source.txt

└─SourceDir
source2.txt
  • 创建一个新目录 C:\Users\GF47\Documents\B

  • 为目录 A 中的 source.txt 文件和 SourceDir 文件夹创建普通的快捷方式,放到目录 B 中。

  • 同样在目录 B 中为它们创建符号链接。

1
2
3
4
5
C:\Users\GF47\Documents\B>mklink _s_source.txt ..\A\source.txt
_s_source.txt <<===>> ..\A\source.txt 创建的符号链接

C:\Users\GF47\Documents\B>mklink /D _s_Source ..\A\SourceDir
_s_source <<===>> ..\A\SourceDir 创建的符号链接
  • 创建硬链接
1
2
3
4
5
C:\Users\GF47\Documents\B>mklink /H _h_source.txt ..\A\source.txt
_h_source.txt <<===>> ..\A\source.txt 创建了硬链接

C:\Users\GF47\Documents\B>mklink /H _h_SourceDir ..\A\SourceDir
拒绝访问。

文件夹的硬链接是不允许地,因为文件散落在硬盘的不同角落里,硬链接文件夹这种神奇操作……无法想象。
更正:咩咩的文件夹的硬链接居然也是可以的,/J 创建的链接其实就是文件夹的硬链接……

  • 结果如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\GF47\Documents\B>dir
驱动器 C 中的卷没有标签。
卷的序列号是 A888-2E49

C:\Users\GF47\Documents\B 的目录

2019/01/13 17:36 <DIR> .
2019/01/13 17:36 <DIR> ..
2019/01/13 17:35 1,011 source.txt - 快捷方式.lnk
2019/01/13 17:35 923 SourceDir - 快捷方式.lnk
2019/01/13 17:05 2,002 _h_source.txt
2019/01/13 17:32 <SYMLINKD> _s_Source [..\A\SourceDir]
2019/01/13 17:31 <SYMLINK> _s_source.txt [..\A\source.txt]
4 个文件 3,936 字节
3 个目录 157,768,110,080 可用字节
  • 修改 source.txt[_s_source.txt][_h_source.txt] 的任意一个,都会影响其它两个。

  • 移动 A 目录中的原始文件和文件夹,B 目录中软链接的 _s_source.txt_s_Source 失效了,快捷方式则能正确链接到原文件和文件夹上,而且 _h_source 也可以正常链接……

  • 把原始文件和文件夹移回 A 目录中,所有的链接都恢复正常。

  • 删除 A 目录中的原始文件和文件夹,B 目录中除了硬链接的 _h_source.txt 之外,全部失效,_h_source.txt 则保持原有内容。

更正:原始文件被删除后,文件的快捷方式并没有失效,居然自动链接到 _h_source.txt 这个硬链接上去了,有点6。看来硬链接是在磁盘上做了什么神奇操作。

  • 分析分析

软链接文件和文件夹显然不占空间,硬链接严格来说也不占新空间,它只是原始文件的另外一个入口,而快捷方式都占用新空间,而且大小和原文件文件夹无关。