在xp系统下,junction命令要用微软开发的小程序 junction.exe实现,从http://live.sysinternals.com/可以下载。
现在Windows Vista之后的系统自带了mklink的功能。
Windows操作系统启动时不支持符号链接。所以不应该对下列文档夹重定向:
目录包含了hiberfil.sys (如果被配置在根目录以外)
\Windows
\Windows\system32
\Windows\system32\Config
Windows Installer不完整支持符号链接。对\Windows\Installer重定向会导致多数基于.msi的Windows installers失败报告error 2755 或 error 1632.
可以重定向下列目录:
\Documents and Settings
\ProgramData
\Program Files
\Program Files (x86)
\Users
但是对\Users与\ProgramData重定向不被推荐,因为会打破Windows Update与Windows Store Apps.
Windows Vista中预先创建了一些符号链接(Junction point),以增进与旧版操作系统(Windows XP)间的兼容性,部分示例如下:
C:\Document and Settings → C:\Users(连接点)
C:\Users\All Users → C:\ProgramData(目录符号链接)
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 创建目录符号链接。默认为文档符号链接。
/H 创建硬链接,而不是符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。
默认情况:
文档的符号链接(SYMLINKD),如没有参数指定,则创建文档的符号链接,删除文档链接不影响目标文档,且创建链接时允许目标文档不存在;
目录的符号链接(SYMLINKD) /D该参数可以创建目录的符号链接,删除目录链接不会影响目标目录,且创建链接时允许目标目录不存在;
目录的软链接(JUNCTION) /J 该参数可以创建目录的软链接(联接),作用基本和符号链接类似,NT6系统的用户目录就是以这种形式存在的;
文档的硬链接 /H 该参数可以创建文档的硬链接,即一个文档的多个别名,NT6系统WinSXS目录下的大部分文档是以这个形式存在的;
NTFS符号链接(Symbolic Link),又称符号链接,是NTFS文档系统中指向文档系统中的另一个对象的一类对象。
被指向的对象叫做“目标”。它们可以像普通文档一样操作,但所有对符号链接的操作都实际作用于目标对象。
符号链接对用户而言是透明的,符号链接看上去和普通的文档和文档夹没有区别,操作方法也一模一样。
NTFS符号链接的设计目的是为了和POSIX标准的操作系统兼容、并用来增进与旧版操作系统的兼容性,它首次出现于Windows Vista。
Windows 2000开始就有的NTFS连接点,只能用于目录,且只能用于本地文档系统。
而符号链接既可以指向本地文档,也可以指向远程SMB网络路径。
NTFS连接点只支持本地驱动器的绝对路径,但NTFS符号链接允许使用相对路径。
还有,NTFS符号链接允许跨文档系统使用,但是对于跨主机的符号链接,还需要远程机器也支持这一功能才行。
硬链接只能用于文档,不能用于目录。
硬链接相当于一个实体文档有多个彼此平等的名字。
删除一个文档名字后,还可以用其它名字访问该文档。
硬链接只能用于同一个磁盘分区内的文档。
硬链接不能用于空文档,而符号链接可以用于空文档或空目录。
符号链接(Symlink,Softlink)是对文档或目录的引用,实际上符号链接本身是一个
“记录着所引用文档或目录的绝对或相对路径”的特殊文档,通过符号链接的操作都会被重定向到目标文档或目录。
交接点(Junction),也称为“再分析点”,是 NTFS 3.0 及以上文档系统(Windows 2000 及以上系统)的特性,
它是链接本地目录(可跨卷)的访问点,通过交接点的操作都会被系统映射到实际的目录上。
通过创建交接点,可以在保证一个目录实例(目录的一致性)的前提下,允许用户或程序从本地文档系统中的多个位置访问此目录。
对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文档或目录;
但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身;
符号链接不但可以应用于本地系统,还可以应用 UNC 路径。
对交接点内文档和子目录的“创建、删除、修改”等操作都被映射到对应的目录中的文档和子目录上;
对交接点的“复制、粘贴、剪切、配置 ACL”,只会影响此交接点;
在同一卷内移动交接点,只会影响此交接点;但在不同卷间移动交接点,会将此交接点转换为正常目录,并且交接点对应目录下的所有内容都会被移动;
通过“资源浏览器(Explorer.exe)”和“命令行 del”等工具删除交接点时,会同时删除对应目录下的所有内容(但不会删除目录);
可通过“linkd.exe /d”安全的删除交接点;但在 vista 及以后的系统中,对交接点的删除会被正确的处理。
符号链接 symlink 与 交接点 junction 在重定向对目录下的子目录和文档的操作上基本没有什么区别。
它们两最大的区别在于 符号链接 symlink 可以用于引用文档,而 交接点 junction 只能引用目录。
创建符号链接和软链接时允许目标文档或目录不存在,此时若访问链接文档会得到一个“位置不可用”的提示,
若之后重新将目标文档或目录补上(路径、名称一致即可),则该链接仍然有效;
目录符号链接和软链接的区别在于,软链接在创建时会自动引用目标目录的绝对路径,而符号链接允许相对路径的引用,
如分别用 mklink /D dira tdir 和 mklink /J dirb tdir 创建 dira、dirb 对 tdir 的符号链接和软链接,
之后将 dira、dirb 移动到其它目录下,则访问 dira 时会提示“位置不可用”,访问 dirb 时仍然正常指向 tdir;
而分别用 mklink /D dira c:\demo\tdir 和 mklink /J dirb c:\demo\tdir 创建 c:\demo\tdir 的符号链接和软链接,
再将这两个目录链接移动到其它目录下,则 dira 和 dirb 均可正常指向 c:\demo\tdir;
由此可见当创建目录链接时对目标目录使用绝对路径,D 和 J 两个参数实现的目录链接效果是一样的
只能创建文档的硬链接,使用/H 参数创建目录的硬链接时会提示拒绝访问;
硬链接是同一个文档的不同别名,例如对
a.txt 创建了b.txt 和c.txt 两个硬链接,此时 a.txt、b.txt 和 c.txt 均是同一个文档的别名,
若删除其中任意一个或两个,则剩下的那个文档(无论是事先存在还是之后创建)不受影响,仍然指向原先那个文档。
创建文档或目录链接仅限于 NTFS 文档系统,且链接只能针对同一个磁盘上的文档或目录;
硬链接只能创建对本分区文档的引用,即不可创建跨分区的文档硬链接;
通过硬链接创建的别名文档在统计大小时会按原文档的大小计算,而软链接和符号链接大小均为零;
硬链接在创建时会事先检测目标文档是否存在,即不允许空链接的存在。
通过mklink命令的帮助信息,可以看到mklink可以创建目录和文档链接。
比如D:\temp目录下有目录dir1,我想在当前目录下创建到dir1目录的软链接,可以使用如下命令来操作:
mklink /D dir2 dir1
mklink /J dir3 dir1
上面两个命令都可以实现到dir1的软链接,参数/D和/J是创建目录软链接必须的,目前来说着两个参数都可以实现目录软链接,
而且应用过程中也没有发现有什么区别的地方,唯一的区别就是dir2和dir3链接的类型不懂,可以通过dir命令查看得到结果如下:
2011/05/17 14:05 <DIR> dir1
2011/05/24 13:07 <JUNCTION> dir2 [D:\temp\dir1]
2011/05/24 13:07 <SYMLINKD> dir3 [dir1]
我们可以发现dir1是DIR类型(这个是我们创建的实际目录),dir2是JUNCTION类型,而dir3是SYMLINKD类型,这个或许是区别,但应用中效果一样。
说完了目录软链接,文档当然也可以创建软链接了,而且还可以创建硬连接,比如d:\temp目录下有abc.txt文档,我要创建到这个文档的软链接的命令如下:
mklink abc1.txt abc.txt
这样我们就创建了一个到abc.txt文档的软链接abc1.txt,对于文档还可以创建硬链接,硬链接个人感觉用处不大,因为创建硬链接是磁盘上空间是增加了双倍,
对于硬链接而言,修改硬链接文档和原始文档的内容都会相互影响,即内容是一致的但空间占用确是双份的。使用如下命令创建硬链接:
mklink /H abc2.txt abc.txt
文档的软链接和硬链接的类型查看如下(用dir命令):
2011/05/24 13:33 7 abc.txt
2011/05/24 13:30 <SYMLINK> abc1.txt [abc.txt]
2011/05/24 13:33 7 abc2.txt
发现硬链接和普通的文档没有什么区别,唯一的区别就是修改的内容会直接影响到原始文档。
顺带补充一句,软链接的目录和文档都可以直接删除,不会影响到原始目录和文档的,这个也非常方便,
而且软链接的目录和文档图标上都有一个小箭头,很好区分。
使用/D创建的连接是类似于linux下的软连接,不占存储空间;
使用/J创建的连接类似于Linux下的硬连接,占用同源文档一样的存储空间;
Link和Target文档夹内容一模一样,如果你对其中任意一个文档夹里面的内容做修改,另一个也会相应的改变。
通过创建符号链接(symbolic)磁盘空间使用量没有改变哦,因为只是实现连接罢了,并不是将原文档复制以及同步。
使用连接目录时就像使用原目录一样,就像实实在在有这个目录一样,程序不会发现连接目录与普通目录有何不同,这是一般的文档夹快捷方式是不行的。
与快捷方式的相同与不同之处:
快捷方式无论目标是文档还是目录,生成的都是新的有内容的 .lnk 文档,
打开时是打开的源路径,直接编辑则是编辑 .lnk 文档的内容,源文档/目录不受影响。
MKLINK 生成的文档和目录都是 0 字节,但访问时仍然是新文档/目录的路径,且编辑操作编辑的是源文档/目录;
原理相当于网盘的同步,只不过不通过网络、不占用空间。
删除两者生成的目标文档/目录都不会对源文档/目录产生影响。但删除源文档/目录后,新路径都不再可用。
https://www.pianshen.com/article/5071559095/
Saturday, February 3, 2024
mklink的用法
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment