当提及NTFS时人们总是会想到这个文件系统的容错性(对坏区有自动屏蔽功能)和丰富的权限设置(配合Windows的用户权限设置能提高系统的安全性),但是NTFS同样具有Linux早就使用的Hard Link和Soft Link功能。在Windows 2000的NTFS v3就引入了类似的功能,只是不知道出于什么原因,微软一直都懒得提及,甚至连相应的工具都几乎懒得推广。
NTFS的Hard Link相当于给一个文件多个路径和文件名,不管访问哪个文件名都会链接到同样的数据,只有最后一个文件名被删除时这个文件的数据才会被删除,但是有个限制就是Hard Link被局限在同一个分区里头,无法跨区。
微软提供的Hard Link创建方式:
fsutil hardlink create <新文件名> <现有文件名>
Soft Link在微软的NTFS里头有另一个名字:symbolic link(符号链接)。它类似于Windows里头常用的.lnk快捷方式,但是微软也同样给出了限制:symbolic link只能应用于文件夹(包括卷),但可以跨分区使用(可以在D盘生成一个指向C盘某文件夹的symbolic link)。如果需要创建文件的symbolic link,那就请使用.lnk吧。
而文件夹的symbolic link效果和.lnk差不多,symbolic link本身是一个文件,用户一旦访问symbolic link的话就会自动跳转(Reparse)到目标文件夹,不过和.lnk不同的是,symbolic link是底层文件系统里头实现,对用户和程序透明——例如,文件夹B是文件夹A的symbolic link,那么程序访问B时就和访问A完全一样,就好像A里头的全部东西都改了路径到B下面了。不过相应的,如果你删除symbolic link(文件夹B)里头的某个文件,文件夹A里头相应的文件也会被删除的。2k/XP的Explorer似乎也对symbolic link支持不足,删除symbolic link本身好像也会删除A……
symbolic link有什么用?如果你的系统盘满了,或者空间不足以让某些程序运行时,就可以把一些在系统盘里头的文件夹移动到其他分区,然后制造一个symbolic link,这样既可以腾出空间,也可以让其他程序不至于出错。另外由于它基于NTFS文件系统,因此在一个操作系统生成的symbolic link也同样能被另一个操作系统识别。
虽然微软没有推广symbolic link,但是其实在2000已经开始有使用symbolic link了。
如果我们加载一个NTFS卷/分区,磁盘管理器会提示盘符或者是否装载到某个NTFS文件夹,选择后者其实就是生成一个指向该卷/分区的symbolic link。但是操作文件夹的symbolic link的工具,微软并没有直接提供在操作系统中,而是以Resource Kit的方式发布,最常用的工具就是命令行程序Linkd.exe
Linkd的使用方式很简单:
LINKD Source [/D] Destination
Source - Displays the Windows 2000 name targeted by Source
Source Destination - Links source directory to Destination directory or a Windows 2000 device or any valid Windows 2000 name
Source /D - Deletes Source, regardless of whether a link exists at source
/? - Prints this help message
Windows Server 2003 Resource Kit可以在微软网站下载到,在XP/Vista下也可以使用。
Linkd的问题:
不支持中文目录!而且查看symbolic link的能力也不足
被微软收编的Windows小工具集SysInternals(他推出的最为人所知的小工具就是Process Explorer)提供了和Linkd类似的工具:Junction
相关链接: http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx
Junction的使用方法:
Junction v1.04 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2005 Mark Russinovich
Systems Internals - http://www.sysinternals.com
The first usage is for displaying reparse point information, and the second usage is for creating or deleting a NTFS junction point:
usage: junction.exe [-s] [-q] <file or directory>
-q Don't print error messages (quiet)
-s Recurse subdirectories
usage: junction.exe [-d] <junction directory> [<junction target>]
-d Delete the specified junction
example: junction d:/link c:/winnt
生成一个symbolic link的语句:Junction <目录路径一> <目标目录路径>
<目录路径一>指向的目录 必须为空!如果路径一不存在则自动创建一个新目录
删除一个symbolic link的语句:Junction <symbolic link路径>
<目录路径一>指向的空目录会被删除,但是它指向的目标目录并不会受到影响
其他注意事项:
1.在2k/XP下,symbolic link目录看上去和操作起来和普通文件夹并没有任何差别,不过在Vista下该目录会出现快捷方式的小箭头。
2.同一个文件夹允许有多个symbolic link指向它,另外symbolic link也可能会造成层套情况(也就是用symbolic link指向了该目录上一级同名的目录),例如在D:/test下制造一个symbolic link名字同样叫test并且指向了D:/test,那么进入D:/test/test时就会显示D:/test的内容——在它里头也有一个Test目录,继续点击进入的话浏览器路径显示的是D:/test/test/test,但是内容还是和d:/test一样继续进入的话慢慢的会造成死循环……
NTFS的Hard Link相当于给一个文件多个路径和文件名,不管访问哪个文件名都会链接到同样的数据,只有最后一个文件名被删除时这个文件的数据才会被删除,但是有个限制就是Hard Link被局限在同一个分区里头,无法跨区。
微软提供的Hard Link创建方式:
fsutil hardlink create <新文件名> <现有文件名>
Soft Link在微软的NTFS里头有另一个名字:symbolic link(符号链接)。它类似于Windows里头常用的.lnk快捷方式,但是微软也同样给出了限制:symbolic link只能应用于文件夹(包括卷),但可以跨分区使用(可以在D盘生成一个指向C盘某文件夹的symbolic link)。如果需要创建文件的symbolic link,那就请使用.lnk吧。
而文件夹的symbolic link效果和.lnk差不多,symbolic link本身是一个文件,用户一旦访问symbolic link的话就会自动跳转(Reparse)到目标文件夹,不过和.lnk不同的是,symbolic link是底层文件系统里头实现,对用户和程序透明——例如,文件夹B是文件夹A的symbolic link,那么程序访问B时就和访问A完全一样,就好像A里头的全部东西都改了路径到B下面了。不过相应的,如果你删除symbolic link(文件夹B)里头的某个文件,文件夹A里头相应的文件也会被删除的。2k/XP的Explorer似乎也对symbolic link支持不足,删除symbolic link本身好像也会删除A……
symbolic link有什么用?如果你的系统盘满了,或者空间不足以让某些程序运行时,就可以把一些在系统盘里头的文件夹移动到其他分区,然后制造一个symbolic link,这样既可以腾出空间,也可以让其他程序不至于出错。另外由于它基于NTFS文件系统,因此在一个操作系统生成的symbolic link也同样能被另一个操作系统识别。
虽然微软没有推广symbolic link,但是其实在2000已经开始有使用symbolic link了。
如果我们加载一个NTFS卷/分区,磁盘管理器会提示盘符或者是否装载到某个NTFS文件夹,选择后者其实就是生成一个指向该卷/分区的symbolic link。但是操作文件夹的symbolic link的工具,微软并没有直接提供在操作系统中,而是以Resource Kit的方式发布,最常用的工具就是命令行程序Linkd.exe
Linkd的使用方式很简单:
LINKD Source [/D] Destination
Source - Displays the Windows 2000 name targeted by Source
Source Destination - Links source directory to Destination directory or a Windows 2000 device or any valid Windows 2000 name
Source /D - Deletes Source, regardless of whether a link exists at source
/? - Prints this help message
Windows Server 2003 Resource Kit可以在微软网站下载到,在XP/Vista下也可以使用。
Linkd的问题:
不支持中文目录!而且查看symbolic link的能力也不足
被微软收编的Windows小工具集SysInternals(他推出的最为人所知的小工具就是Process Explorer)提供了和Linkd类似的工具:Junction
相关链接: http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx
Junction的使用方法:
Junction v1.04 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2005 Mark Russinovich
Systems Internals - http://www.sysinternals.com
The first usage is for displaying reparse point information, and the second usage is for creating or deleting a NTFS junction point:
usage: junction.exe [-s] [-q] <file or directory>
-q Don't print error messages (quiet)
-s Recurse subdirectories
usage: junction.exe [-d] <junction directory> [<junction target>]
-d Delete the specified junction
example: junction d:/link c:/winnt
生成一个symbolic link的语句:Junction <目录路径一> <目标目录路径>
<目录路径一>指向的目录 必须为空!如果路径一不存在则自动创建一个新目录
删除一个symbolic link的语句:Junction <symbolic link路径>
<目录路径一>指向的空目录会被删除,但是它指向的目标目录并不会受到影响
其他注意事项:
1.在2k/XP下,symbolic link目录看上去和操作起来和普通文件夹并没有任何差别,不过在Vista下该目录会出现快捷方式的小箭头。
2.同一个文件夹允许有多个symbolic link指向它,另外symbolic link也可能会造成层套情况(也就是用symbolic link指向了该目录上一级同名的目录),例如在D:/test下制造一个symbolic link名字同样叫test并且指向了D:/test,那么进入D:/test/test时就会显示D:/test的内容——在它里头也有一个Test目录,继续点击进入的话浏览器路径显示的是D:/test/test/test,但是内容还是和d:/test一样继续进入的话慢慢的会造成死循环……
