2010年11月3日星期三

mklink.exe用法及参数详解

mklink 用于创建 NTFS 文件系统中文件或目录的链接,其效果和 unix 系统下的 ln 命令类似,
可以从底层(文件系统)实现文件或目录的快捷方式或别名,以这种方式创建的文件或目录链接对于应用程序是透明的;
通过指定参数可以创建出不同形式的文件或目录链接,具体分为硬链接、软链接和符号链接三种,
下面是这个命令的参数及说明(参数格式请直接在 cmd 下运行 mklink 查看)。
  • 默认情况:文件的符号链接
    如没有参数指定,则创建文件的符号链接,删除文件链接不会影响目标文件,且创建链接时允许目标文件不存在[1]
  • 目录的符号链接(SYMLINKD) /D
    该参数可以创建目录的符号链接,删除目录链接不会影响目标目录,且创建链接时允许目标目录不存在;
  • 目录的软链接(JUNCTION) /J
    该参数可以创建目录的软链接(联接),作用基本和符号链接类似[2],NT6系统的用户目录就是以这种形式存在的;
  • 文件的硬链接 /H
    该参数可以创建文件的硬链接,即一个文件的多个别名[3],NT6系统WinSXS目录下的大部分文件是以这个形式存在的; 


[1] 创建符号链接和软链接时允许目标文件或目录不存在,此时若访问链接文件会得到一个“位置不可用”的提示,
     若之后重新将目标文件或目录补上(路径、名称一致即可),则该链接仍然有效;
[2] 目录符号链接和软链接的区别在于,软链接在创建时会自动引用目标目录的绝对路径,而符号链接允许相对路径的引用,
     如分别用 mklink /D dira tdir 和 mklink /J dirb tdir 创建 dira、dirb 对 tdir 的符号链接和软链接,
     之后将 dira、dirb 移动到其它目录下,则访问 dira 时会提示“位置不可用”,访问 dirb 时仍然正常指向 tdir;
     而分别用 mklink /D dira c:demotdir 和 mklink /J dirb c:demotdir 创建 c:demotdir 的符号链接和软链接,
     再将这两个目录链接移动到其它目录下,则 dira 和 dirb 均可正常指向 c:demotdir;
     由此可见当创建目录链接时对目标目录使用绝对路径,D 和 J 两个参数实现的目录链接效果是一样的;
[3] 只能创建文件的硬链接,使用 /H 参数创建目录的硬链接时会提示拒绝访问;
     硬链接是同一个文件的不同别名,例如对 a.txt 创建了 b.txt 和 c.txt 两个硬链接,
     此时 a.txt、b.txt 和 c.txt 均是同一个文件的别名,若删除其中任意一个或两个,
     则剩下的那个文件(无论是事先存在还是之后创建)不受影响,仍然指向原先那个文件。
最后再说几点:
创建文件或目录链接仅限于 NTFS 文件系统,且链接只能针对同一个磁盘上的文件或目录;
硬链接只能创建对本分区文件的引用,即不可创建跨分区的文件硬链接;
通过硬链接创建的别名文件在统计大小时会按原文件的大小计算,而软链接和符号链接大小均为零;
硬链接在创建时会事先检测目标文件是否存在,即不允许空链接的存在。

没有评论:

发表评论