关于Window 10的符号链接和硬链接是什么?如何使用?

内容纲要

什么是符号链接、硬链接?

  • 符号链接(Symbolic link)是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。符号链接等同于Linux中的软链接。
  • 硬链接(hard link) 就是一个文件的一个或多个文件名。

在对符号链接进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。

如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,但是它们将会指向一个不复存在的文件。这种情况被有时被称为被遗弃。

当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置

符号链接、硬链接如何使用?MKLINK命令

mklink命令格式

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

mklink命令教程

创建文件链接

E:\>mklink c:\1 c:\a\1.txt   拒绝访问。
E:\>mklink c:\2.txt   c:\a\1.txt
为 c:\2.txt <<===>> c:\a\1.txt 创建的符号链接

可见为文件创建链接时,符号链接文件的扩展名要和原文件保持一致。

E:\>mklink c:\a\1.txt d:\3.txt

当文件已存在时,无法创建该文件。

E:\>mklink d:\3.txt c:\a\1.txt
为 d:\3.txt <<===>> c:\a\1.txt 创建的符号链接

可见为文件创建链接时,必须是 “mklink   符号链接文件名 原文件名”的格式。

创建目录链接

E:\>mklink /d   c:\b d:\a

为 c:\b <<===>> d:\a 创建的符号链接。

虽然d:\a 目录不存在,但依然可以创建链接,很好很强大。但打开链接时,提示错误。

E:\>mklink /d d:\a c:\a

为 d:\a <<===>> c:\a 创建的符号链接

mklink /d 与 makelink /j 的异同

从 mklink 的帮助中可以看到,两者皆可以创建目录链接。细心的同学可以发现,前者是创建目录链接,而后者是创建目录联接。一字之差,有何分别?下面分别用这两种方式为同一目录创建链接:

E:\>mklink /j d:\a c:\a

为 d:\a <<===>> c:\a 创建的联接

E:\>mklink /d d:\b c:\a

为 d:\b <<===>> c:\a 创建的符号链接

下面显示D分区中的文件及目录列表:

E:\>dir d: /a

驱动器 D 中的卷是 soft
卷的序列号是 BE86-8884

D:\ 的目录


2009/06/11   10:00 <DIR>       $RECYCLE.BIN
2009/06/11   13:33 <SYMLINK>    1.txt [c:\a\1.txt]
2009/06/11   13:34 <JUNCTION>     a [c:\a]
2009/06/11   13:35 <SYMLINKD>     b [c:\a]
2009/06/11   12:54 <DIR>       Program Files
2009/06/11   09:58 <DIR>       System Volume Information
1 个文件              0 字节
5 个目录 31,089,442,816 可用字节
  • mklink 不加参数或加参数 /d 时,创建的链接文件为<SYMLINK>型(<SYMLINKD>代表链接到目录)。
  • 当加参数 /j 时,只能为目录创建联接,并且创建的联接文件为<JUNCTION>型。

微软自家使用的都是<JUNCTION>型,至于为何,留待考证。

链接文件的特性

  • 符号链接文件自身不能被 “复制”(只能通过特殊方法才能复制)
  • 当复制符号链接文件时,会将符号链接所链接的目标文件或目录进行复制,并非是复制符号链接文件本身。

如何实现符号链接文件的复制呢?

使用命令 copy /L

使用命令 xcopy /B ,采用xcopy命令并上参数 /B ,可以成功复制 <SYMLINK> 型的符号链接文件,而<JUNCTION>型链接却不能被复制。

参考链接:
https://www.cnblogs.com/rangeon/archive/2010/08/24/1807087.html
http://www.sys321.com/shouyou_zixun/200284.html
https://mos86.com/68542.html
https://zhuanlan.zhihu.com/p/56313494