文档章节

mklink命令

Tensor丨思悟
 Tensor丨思悟
发布于 2016/03/24 14:51
字数 1814
阅读 26
收藏 0

  从 Vista 以后,微软将用户文件和用户的软件配置( AppData ) 明确划分开,并且全部存放在使用者的用户目录下。

  Linux早已这样做了,并且在Linux中可将 home 挂载为独立分区,而微软显然还没学到家。用户目录依旧和系统目录一起放在同一分区。

  如何将用户目录移动到非系统分区?这是本文的出发点。但本文的重心不在于此,而是 mklink ,一个命令。


一、何为 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]

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


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

 

从最开始的 “ >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等)都能直接作用于符号链接。用于读写文件内容的命令将会直接访问目标文件。


© 著作权归作者所有

Tensor丨思悟
粉丝 2
博文 91
码字总数 13253
作品 0
石景山
CTO(技术副总裁)
私信 提问
更改chrome临时目录(可举一反三)

mklink命令是Windows 7/vista下的一个类似于linux下In的命令,其作用是在NTFS文件系统中创建文件或目录的链接(类似于桌面快捷方式)。用这个命令可以将系统文件转移到非系统盘,从而避免重装...

thiefqw
2014/04/14
0
0
【转】如何修改Chrome缓存目录的地址

  本文转自:http://www.nowamagic.net/librarys/veda/detail/2573 C盘空间越来越小,在Win7里还标红了,心里看得不舒服,得想一些方法腾出一些空间。看了AppData,Chrome占了1G多的空间。...

无声胜有声
2015/09/22
0
0
Package Cache搬家

安装Visual Studio之后,系统(C)盘会多出一个目录C:ProgramDataPackage Cache,据说这个目录是不能删除的,但是可以转移到其他盘。 Google后发现2种方式: https://www.roelvanlisdonk.nl/201...

山里来的鱼
2016/10/08
295
0
基于 task 为 VSCode 添加自定义的外部命令

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/)...

謎之E菌
2018/08/27
0
0
当网盘遇到mklink.exe

  现在有越来越多的网友用上网盘了:国内的有金山快盘、360云盘;国外的有DropBox, SugarSync等。但无论使用哪种网盘,我们都是习惯了将需备份的各类文件放到这些工具指定的目录,使其实现...

apatriot
2012/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
7
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
12
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部