分享

Windows 7下创建符号链接

 sduwalker 2011-01-18
相比使用过Linux的用户都非常熟悉Linux下经常用到的软链接。目录的软链接会给用户在使用上带来很多方便的地方,也更便于用户整理和规划自己电脑的硬盘。

先解释一下这种符号链接会给用户带来怎样的好处,首先这种符号链接和快捷方式一样,只是作为一个标记存在,并不占用磁盘空间,这样,作为目录的符号链接就有了很大作用,比如将C盘的Program Files目录,做一个符号链接,指向到D盘的Software目录。这样,很多程序即使安装到C盘的Program Files目录里,实际的储蓄位置确实D盘的Software目录。而C盘的Program Files目录看上去和普通目录并没有什么区别,可以进入目录,查看目录里的文件和子目录。但实际上,这些文件和文件夹都是在D盘Software文件夹中。

当然,很多人现在已经习惯了在安装软件的时候,修改盘符,直接安装到D盘,将一些绿色软件也直接放到D盘或其他分区使用。。。 但面对一些无法更改安装路径和一些将用户文件强行放置在C盘的软件,我们会觉得很不爽。。。比如Google的一些软件。。。

而如果你的系统是Windows7或者Vista(建议升级Win7),就可以通过mklink这个指令,来创建一些文件夹符号链接,来更改储蓄区域,有效的避免软件被强行安装到C盘的情况。

具体创建目录符号链接的指令如下(首先要确认是以管理员权限启动CMD,比如右键CMD程序,选择以管理员身份启动):

mklink /d 空格 符号链接目录 空格 目标目录 比如创建一个C盘GCD_SB目录指向到D盘BaiDu_SB2目录的符号链接的指令是: mklink /d c:\GCD_SB d:\BaiDu_SB2

需要注意的是,如果目录路径中如果包含空格,那么需要把目录的路径用用引号括起来。

比如创建C盘Program Files目录指向到D盘FuckGFW目录的符号链接指令是: mklink /d “c:\program files” d:\fuckgfw

另外还要注意,创建的符号链接的目录不能提前存在,也就是上面例子中的GCD_SB和Program Files目录不应该提前存在。 大家可以充分利用这种文件夹的软链接来整理和分配自己的硬盘。

---------------------------------------------------------------------------------------------
Windows7里也有符号链接咯

在安装完Windows7后,发现系统盘有些扛不住,太庞大啦,有9G多,单单Windows文件夹就7G多,比起以它的哥哥vista来说,Win7算是进步了不小,至少感觉开机的启动速度不是那么慢,运行效率是高很多,做一些优化设置,也能在老爷机上走起来。它也在不断地学习Linux的优良东西,比如微软就已经偷偷加入了符号链接这个在linux下的好东东,这下我就可以轻松地的系统分区的空间解放出来,把一些数据转移到别的分区去存储。

开机用WinPE重启,利用Fastcopy把C盘下的Program Files、ProgrmaData、Users文件全部拷贝到目标盘(Fastcopy设置里选中连同链接、属性、ACL这些选项,让它们一起拷过去)

删除C盘下的这些文件夹

打开命令窗口,建立软链接

cd \
mklink /d "Program Files" "D:\Program Files"(这就是在C盘建立一个到D:\Program Files的目录链接\Program Files)
mklink /d ProgramData E:\ProgramData
mklink /d Users E:\Users

开机重启进Win7,一切正常,所有的程序和用户数据都转移到目标盘去咯,对系统和程序来讲,啥东西都没改变,它们还是认C盘,但实际的数据已经是存放在它链接到的目录里去了。

C:\>DIR /A
驱动器 C 中的卷没有标签。
卷的序列号是 A8DA-B5FE

C:\ 的目录

2009/10/17 13:46    <DIR>                  $Recycle.Bin
2009/06/11 05:42                      24     autoexec.bat
2009/10/16 23:38    <DIR>                  Boot
2009/07/14 09:38            383,562      bootmgr
2009/10/16 23:38                 8,192      BOOTSECT.BAK
2009/06/11 05:42                      10      config.sys
2009/07/14 12:53    <JUNCTION>      Documents and Settings [C:\Users]
2009/07/30 16:21              171,136    grldr
2009/10/20 20:35     1,554,649,088 hiberfil.sys
2009/10/19 08:18    <DIR>                inetpub
2009/07/14 10:37    <DIR>                PerfLogs
2009/10/17 14:24    <SYMLINKD>     Program Files [D:\Program Files]
2009/10/17 14:05    <SYMLINKD>     ProgramData [E:\ProgramData]
2009/10/17 00:04    <DIR>                  Recovery
2009/10/20 11:40    <DIR>                 System Volume Information
2009/10/17 13:57    <SYMLINKD>     Users [E:\Users]
2009/10/20 17:16    <DIR>                 Windows
               6 个文件 1,555,212,012 字节
              11 个目录 2,844,176,384 可用字节

还没考查它的循环链接下去会是什么结果,也不知为什么微软它自己默认是使用Junction这种类型的目录联结,而不是目录链接。

---------------------------------------------------------------------------------------------
详解 Mklink 命令:在 Windows Vista / Win7 中使用符号链接详解

One of the long-awaited features in Windows Vista was the ability to use symbolic links, the way you can in linux. Sadly, they don’t work quite as well as they could, but it’s a big upgrade from prior versions, and has solved a number of problems for me already.
对 Windows Vista 一个长久期待的功能就是能像在 linux 中那样使用符号链接(symbolic links)。尽管他们工作得并不像我们想象得那样好,相比以往的操作系统来说,已经是大大的进步,并且已经解决了我不少问题。

Using the mklink Command
使用 mklink 命令

The command that you need to use is mklink, which you’ll use from the command line. Just type it on the command line to see the options: 
你需要使用的命令是 mklink,这是一个在DOS命令行运行的命令。直接在命令提示符后键入此命令并回车即可看到相关选项参数:

C:\Users\geek>mklink
Creates a symbolic link.
MKLINK [[/D] | [/H] | [/J]] Link Target
        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

在IsaacZ的中文版Win7下显示为:

C:\Users\IsaacZ>mklink
创建符号链接。
MKLINK [[/D] | [/H] | [/J]] Link Target
        /D      创建目录符号链接。默认为文件
                符号链接。
        /H      创建硬链接,而不是符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径
                (相对或绝对)。

For instance, if you wanted to make the folder C:\Users\Geek\TestFolder available from C:\TestFolder as well, you could use the following command. 
例如,如果你想通过 C:\TestFolder 这个路径访问到 C:\Users\Geek\TestFolder ,你可以使用如下命令:

C:\>mklink /D C:\TestFolder C:\Users\Geek\TestFolder (回车)
symbolic link created for C:\TestFolder <<===>> C:\Users\Geek\TestFolder

在IsaacZ的中文版Win7下显示为:

C:\Users\IsaacZ>mklink /D C:\TestFolder C:\Users\Geek\TestFolder
为 C:\TestFolder <<===>> C:\Users\Geek\TestFolder 创建的符号链接

Now if you look in C:\TestFolder directory, you’ll see whatever files were in the other directory. 
现在你打开 C:\TestFolder  目录,会看到 C:\Users\Geek\TestFolder 里的所有内容。

Understanding the Options.
理解各个选项。

MKLINK link target
MKLINK   链接名称  目标文件(夹)名

Using the command without any extra options creates a soft link to a file.
直接使用以上命令,不带任何附加参数,则创建对一个文件的软链接。

/D creates a symbolic link, or a soft link. 
/D 参数创建一个符号链接,或者叫软链接。

This essentially acts like a shortcut to a folder in prior versions of Windows, except you don’t have to use an actual shortcut.
这个在本质上作用相当于一个指向文件文件夹的快捷方式,像以前的Windows一样。只是有一点不同:你不必使用一个真实存在的快捷方式。

/H creates a hard link, which points directly to the file.
/H 创建一个硬链接,直接指向文件。

This option can’t be used for folders directly for some reason, you’ll have to use the next option.
这个选项因为某种原因不能直接用于对文件夹的链接。要达到链接文件夹的目的,必须使用下一个选项。

/J creates a “Directory Junction”
/J 创建一个“目录联接”

A Directory Junction is actually just a hard link to a directory. This is a feature that existed prior to Vista as well. If you are trying to symlink to a directory using a hard link, then you should use this option.
一个“目录联接”实际上就是一个指向文件夹的硬链接。这是在 Vista 之前版本的操作系统就存在的功能。如果你想用硬链接的方式为一个目录创建符号链接,那你应该使用这个选项。

Understanding Hard vs Soft Links
理解硬链接和软链接

Hard Link
硬链接

A hard link directly points to the file, and acts to the operating system as if it is the file itself. You’ll want to use this option the majority of the time if you are trying to fake an application’s directory.
一个硬链接直接指向文件,对操作系统来说,仿佛这个硬链接就是被目标文件本身。如果你想伪装一个应用程序文件夹的路径,大多时候会想到用这个选项。

Soft Link
软链接

A soft link is essentially a shortcut to a file or folder – if you are using Windows explorer, you’ll be redirected to the directory if you double-click on a shortcut, it won’t pretend its part of the filesystem. You can still directly reference or open a file with the symlinked path, and it mostly works.
一个软链接本质上是指向一个文件或文件夹的快捷方式——如果你使用Windows资源管理器,当你双击一个快捷方式时,会被转向到它实际指向的文件夹,并不会伪装成文件系统的一部分。尽管如此,你仍然可以通过符号链接路径直接引用或打开一个文件,且大部分情况下都会生效。

Using Symlinks from a Network Share
从网络共享位置使用符号链接

One of the things that’s been extensively discussed is that you cannot use the Vista symlinks from another operating system (not surprising), but you cannot use them from a network share either. This is troublesome if you expect to use this feature on a web server or a file server.
一个广泛讨论的问题是你不能从另外一个操作系统使用Vista的符号链接(这不奇怪),你也不能从一个网络共享位置使用它。如果你想在一个web服务器或文件服务器上使用这个功能,这一点比较烦人。

Deleting Symlinks
删除符号链接

To delete a symlink, you can just delete the link. Just make sure you don’t delete the original file.
要删除符号链接,你只需要删除创建的链接文件就可以了。确保别删除了原始文件就好。

此文是针对Vista的,现在流行WIN7,可能有些功能已经更新。关于这个 mklink 的应用以及软链接和硬链接的详解,请参考IsaacZ后续发布的文章。

---------------------------------------------------------------------------------------------
Win7/Vista下mklink祥解

一、何为 mklink
如果用过 Linux ,那想必也看到过符号链接(这是一种特殊的文件),也用过 “ ln ” 这个链接命令,mklink 和 ln 的功能几乎一样。mklink  便是用来创建符号链接的,这个命令并不知名,使用的人也不多。自从 Vista 以后,微软便在 widows中 偷偷地用起了这个工具 。在用户目录下,可以看到很多很像快捷方式的文件,当然这是隐藏的,但却不能打开,其实这便是符号链接。

>dir C:\Users\wclu  /a
驱动器 C 中的卷是 win7
卷的序列号是 8CD0-A743

C:\Users\wclu 的目录

2009/06/11  11:42    <DIR>          .
2009/06/11  11:42    <DIR>          ..
2009/06/11  00:04    <DIR>          AppData
2009/06/11  00:04    <JUNCTION>     Application Data [C:\Users\wclu\AppData\Roaming]
2009/06/11  00:04    <DIR>          Contacts
2009/06/11  00:04    <JUNCTION>     Cookies [C:\Users\wclu\AppData\Roaming\Microsoft\Windows\Cookies]
2009/06/11  10:05    <DIR>          Desktop
2009/06/11  00:04    <DIR>          Documents
2009/06/11  02:44    <DIR>          Downloads
2009/06/11  00:04    <DIR>          Favorites
2009/06/11  00:04    <DIR>          Links
2009/06/11  00:04    <JUNCTION>     Local Settings [C:\Users\wclu\AppData\Local]
2009/06/11  00:04    <DIR>          Music
2009/06/11  00:04    <JUNCTION>     My Documents [C:\Users\wclu\Documents]

上述标红色的文件,便是符号链接了(上述文件并非C:\Users\wclu目录下全部文件) 。

Vista/Windows 7使用这些符号链接,是为了兼容XP等系统。

二、mklink 用法
mklink 只能在命令提示符 “CMD” 中使用。

>mklink /?
创建符号链接。

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

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

注:上述的符号链接等同于Linux中的软链接。

为了试验 mklink 的功能,我在 C分区中创建目录 a ,并在目录中存放文件 1.txt。

创建文件链接
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 创建的符号链接

E:\>dir d: /a
驱动器 D 中的卷是 soft
卷的序列号是 BE86-8884

D:\ 的目录

2009/06/11  10:00    <DIR>          $RECYCLE.BIN
2009/06/11  13:08    <SYMLINK>      3.txt [c:\a\1.txt]
2009/06/11  13:18    <SYMLINKD>     a [c:\a]
2009/06/11  12:54    <DIR>          Program Files
2009/06/11  09:58    <DIR>          System Volume Information
1 个文件              0 字节
4 个目录 31,089,442,816 可用字节

当把D分区中的链接文件删除时,C分区中的文件和文件夹不受任何影响。

三、mklink /d 与 mlink /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>型,两种类型的链接文件有显著区别:

从最开始的 “ >dir C:\Users\wclu  /a ” 可以看出,微软自家使用的都是<JUNCTION>型,至于为何,留待考证。

四、链接文件的特性
刚刚讲述了如何用 mklink 创建链接文件,那么接下来重点讲述如何链接文件的特性,既然是特性,那就是与众不同了。

符号链接文件自身不能被 “复制”(只能通过特殊方法才能复制)
当复制符号链接文件时,会将符号链接所链接的目标文件或目录进行复制,并非是复制符号链接文件本身。
如何实现符号链接文件的复制呢?
>copy /?
/L           如果源是符号链接,请将链接复制
到目标而不是源链接指向的实际文件。

>xcopy /?      /B           对照链接目标复制符号链接本身

/* d:\1.txt 为<SYMLINK>型符号链接 */
E:\>xcopy d:\1.txt e:\1.txt  /b
目标 E:\1.txt 是文件名
还是目录名
(F = 文件,D = 目录)? F
D:\1.txt
复制了 1 个文件

/* d:\a 为<JUNCTION>型符号链接 */
E:\>xcopy d:\a e:\a /B
目标 E:\a 是文件名
还是目录名
(F = 文件,D = 目录)? D
复制了 0 个文件

/* d:\b 为<SYMLINKD>型符号链接 */
E:\>xcopy d:\b e:\b /B
目标 E:\b 是文件名
还是目录名
(F = 文件,D = 目录)? D
复制了 0 个文件

E:\>dir e: /a
驱动器 E 中的卷是 data
卷的序列号是 FEEE-FB51

E:\ 的目录

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    <DIR>          a
2009/06/11  13:35    <SYMLINKD>     b [c:\a]
2009/06/11  09:58    <DIR>          System Volume Information
1 个文件              0 字节
4 个目录 31,362,203,648 可用字节

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

符号链接文件的透明性
符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。
普通的文件操作命令(如cp、rm等)都能直接作用于符号链接。用于读写文件内容的命令将会直接访问目标文件。

---------------------------------------------------------------------------------------------
Junction和symbolic link的比较

Junction其实比symbolic link要古老,从2000就开始支持,symbolic link是从vista开始支持的。
Junction只能做目录链接,而且只支持本地目录。
symbolic link不仅可以做目录和文件链接,更NB的是还支持做网络链接(SMB)。虽说可以跨文件系统,但前提是目标系统也要支持symbolic link。。。

维基上解释的很详细:
http://en./wiki/Symbolic_link(可以直接看NTFS Junction points和Windows 7 & Vista symbolic link那两节)

---------------------------------------------------------------------------------------------
mklink命令详细介绍

  Windows 7下的mklink命令通过指定参数可以建立出不同形式的文件或目录链接,分为硬链接(hard link)、符号链接(symbolic link)和软链接(联接)(junction)三种。

  1. 符号链接(symbolic link)
  建立一个软链接相当于建立一个文件(或目录),这个文件(或目录)用于指向别的文件(或目录),和win的快捷方式有些类似。删除这个链接,对 原来的文件(或目录)没有影像没有任何影响;而当你删除原文件(或目录)时,再打开链接则会提示“位置不可用”。

  2. 软链接(联接)(junction)
  作用基本和符号链接类似。区别在于,软链接在建立时会自动引用原文件(或目录)的绝对路径,而符号链接允许相对路径的引用。

  3. 硬链接(hard link)
  建立一个硬链接相当于给文件建立了一个别名,例如对1.TXT创建了名字为2.TXT的硬链接,若使用记事本对1.TXT进行修改,则 2.TXT也同时被修改,若删除1.TXT,则2.TXT依然存在,且内容与1.TXT一样。

  建立链接请注意:
  1、建立文件或目录链接限于 NTFS 文件系统,符号(软)链接的建立可以跨文件系统;
  2、硬链接只能用于文 件,不能用于目录,符号(软)链接可以为目录建立链接;
  3、硬链接只能建立同一分区内的文件指向;
  4、硬链接不允许对空文件建立链接,符 号(软)链接可以。

  mklink的参数定义

  无参数指定:建立文件的符号链接。无参数指定的默认情况下,建立的是文件的符号链接,删除链接文件不会影响源文件,
  /d:建立目录的符号链 接符号链接(symbolic link)
  /j:建立目录的软链接(联接)(junction)
  /h:建立文件的硬链接(hard link)
  命令格式:mklink /d(定义参数) \MyDocs(链接文件) \Users\User1\Documents(原文件)
  最后,至于删除建立的链接,跟删除文件一样使用”DEL”命令。

  Mklink命令用途 - 转移系统中的用户设置文件

  Windows 7中将用户设置与系统文件分离,所有的用户设置及用户文件都存储在C盘下的User目录(在中文版Windows 7中显示为“用户”目录),重装系统后所有的系统设置及用户文件都会消失。
  Windows 7安装完成后可以将C盘下的User目录转移到非系统分区,如D盘,这样,重装系统后只要重新将C盘下的User目录链接到D盘即可。我们在创建链接后系 统在访问C:/User目录其实是在访问D:/User目录。
  命令如下:
  1.复制User目录到D盘:robocopy "C:\Users" “D:\Users" /E /COPYALL /XJ
  2.强制删除User目录:rmdir "C:\Users" /S /Q
  3.创建C盘下的User的软件链 接,链接到D盘User目录:mklink /J "C:\Users" "D:\Users"
  重装系统后只需重复第二条和第三条命令及可。有了这条命令就再也不怕重新系统了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多