打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
解析Vista和Win7系统的符号链接和mklink命令(上)

本文部分内容来源于网文、维基百科和微软官方网站,已经本人整理,大部分不一一注明,在此表示感谢。

一、链接的概念和历史

链接(link)简单说就是给文件系统中的“元素”起的一个别名,这个元素可能是文件、目录或者卷等,对别名(也表现为文件或者目录)的一切读写访问都被文件系统透明的映射到实际的元素(被称为目标/target)上。这样可以用多个入口访问同一个内容,但只保存一份实际的目标就可以,不用创建多个副本,既节约磁盘空间,又方便系统管理。

链接大体分为软链接(Soft Link,又称符号链接-Symbolic Link)和硬链接(Hard Link)两种,简单说如果将目标删除或移动,软链接会失效,而删除或移动目标,硬链接不会失效。当然,由于文件系统的特性不同和操作系统提供的功能差异,实际的链接表现出的属性也会更加多样化,下文会更详细介绍windows系统下的链接特性。

链接功能最早出现在1978年DEC公司出品的操作系统RDOS中,很早就被各种类Unix(Unix-like)系统支持,并被列入POSIX操作系统标准中,Linux提供了命令ln用于建立链接,Linux文件管理的相关知识可以查阅这篇文章

微软对链接的支持姗姗来迟,从windows 2000的NTFS 3.0文件系统才开始出现,但操作系统提供的相关功能,在2000/xp系统中还不完善。2000/xp下的符号链接由命令linkd实现,挂载卷由mountvol命令实现,挂载(映射)网络驱动器由mount命令实现。linkd的一个替代品是第三方Winternals Software LP提供的Junction命令,据说比系统自带的强大,它也被集成到了不少xp启动盘的Win PE系统中。在vista后,linkd已经被mklink命令取代。此外在2000/xp下,用图形界面对符号链接进行操作,据说其效果与Win7不同,删除硬链接会同时删除目标,笔者没有深入考证或测试过,只在此处提醒请读者使用时注意。有关2000/xp下符号链接的更详细内容,可以参阅微软相关技术文档

二、Win7下创建符号链接

mountvol命令依然被Win7支持,用于将磁盘上的卷(分区)挂载到现有目录中,磁盘管理器也提供了图形界面下的同样功能。曾经有没用过Linux的程序员提问,如果硬盘分区很多,26个字母给驱动器不够分怎么办,答案就是把分区挂载到目录里。

mount命令Win7下已经不支持了,但由于资源管理器提供了“映射网络驱动器”的功能,所以没有也不影响什么。

上述两个命令功能简单,又有图形界面支持,不继续介绍了,下面说说最重要的命令,用于对文件和目录创建符号链接的mklink:

MKLINK [[/D] | [/H] | [/J]] Link Target

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

这是命令行窗口中队mklink命令提供的帮助信息,这个命令及参数都不区分大小写。Link就是链接的名称和路径,target是目标的文件名或路径(如果是文件夹),如果Link或target字符串中有空格,应当加双引号。不带参数,是对文件创建软链接(微软用了符号链接这个名词),带参数/h是对文件创建硬链接,带参数/d和/j都是对目录创建软链接,但略有差别。微软用的名词比较晦涩,下文剖析时为叙述方便,称用/d参数创建的链接为d型链接,称/j参数创建的为j型链接。

这个命令最标准的形式应当类似下面的例子:

    mklink  "e:\test\b.txt" "e:\test\a.txt"

    为e:\test\目录下的a.txt创建文件软链接b.txt。

    mklink /d "e:\test\bb" "e:\test\aa"

    为e:\test\目录下的子目录aa创建d型链接bb。

标准形式是链接和目标都使用绝对路径,链接和目标类型相同(同样是文件或同样是目录)。但也有一些不标准甚至明显错误的用法,也被命令所支持,下面一并列出(假设e:\test目录下有a.txt和aa目录两项)。

    E:\test>mklink  b.txt a.txt

    E:\test>mklink /h  b.txt a.txt

    E:\test>mklink /d cc aa

    E:\test>mklink /j cc aa

   上述命令都是正确的(当然有重名不行,执行第2、4条命令时,要把第1、3条命令生成的链接删掉,下同),对文件和目录建立链接都支持相对路径,注意此时已经移动到E:\test下了。创建链接后,对链接的访问与对目标访问效果也相同,对两者中任意一个的修改,也会体现在另一个上。

    mklink c.txt aa   

    mklink /d bb a.txt

    mklink /j cc a.txt

    上述命令都能成功执行,将一个文件链接到目录上,或者将目录链接到文件上,都是合法的,当然访问会出错。但下面这个命令不合法:

    E:\test>mklink /j c.txt aa

    也就是说不能对目录创建文件硬链接。

    此外,给一个不存在的目录创建d型和j型链接,以及给不存在的文件创建软链接都是合法的,但不能给不存在的文件创建硬链接。

    对目录进行递归链接也是可以的,比如执行这条命令:

    E:\test>mklink /j aa\bb aa

    当打开aa文件夹的时候会发现里面有个bb文件夹,打开bb里面还有bb……

三、对链接进行操作的效果

1. 对文件软链接操作

如果创建文件软链接时,目标采用了相对路径,用剪切-粘贴将链接移动到相同分区其他位置后,将无法打开,例如:

    E:\test>mklink  e:\test\b.txt a.txt

如果用绝对路径输入目标,将链接移动到相同分区其他位置后,不改变链接关系。也就是说链接文件依然能够访问,进行修改之后,修改也会体现在目标上。例如:

    E:\test>mklink  e:\test\b.txt e:\test\a.txt

    E:\test>mklink  b.txt e:\test\a.txt

无论用相对路径还是绝对路径创建文件软链接,将链接移动到其他分区,则变成一个独立文件,并不再与目标保持链接关系。相当于把目标复制到新位置(并重命名)。

无论用相对路径还是绝对路径创建文件软链接,将链接复制粘贴后,也将新生成一个独立文件。

重命名链接文件,不改变链接关系。

删除链接不影响目标文件。

2.对目录d型链接的操作

目录d型链接的特性与文件软链接大部分相同,但有一点差异:

无论用相对路径还是绝对路径创建d型链接,将链接移动(剪切)到其他分区,链接变成一个独立空文件夹。

此外需要注意,将链接复制时,目标目录下所有内容也跟着被复制。

3.对文件硬链接的操作

无论用相对路径还是绝对路径创建硬链接,将链接移动到相同分区其他位置都不改变链接关系。如果移动到其他分区,链接将变为一个独立文件。

复制硬链接与复制软链接效果相同。

重命名链接,不改变链接关系。

删除链接不影响目标。

4.对目录j型链接的操作

无论用相对路径还是绝对路径创建j型目录链接,通过剪切-粘贴(试图)对链接移动,无论移动至何处,将产生如下效果:

    原位置的链接依然存在,链接关系依然保持。

    链接在新位置变成了一个独立的文件夹,与原目标文件夹不再保持链接关系。

    目标文件夹中的全部内容都移到了新位置,目标文件夹变成空文件夹。

复制j型目录链接的效果与复制d型链接的效果相同。

重命名链接,不改变链接关系。

删除链接不影响目标。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mklink.exe用法及参数详解
windows mklink /d /h /j 精讲
【经验交流】说说Vista根目录下的Documents and Settings - Wi...
Windows XP下创建目录的符号链接
Windows 7 mklink命令详解 — 系统研究博客
Win7系统命令讲解-mklink命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服