熟练使用NTFS的文件链接技术

硬链接和软链接介绍:

硬连接指向的是I节点(inode),而软连接指向的是路径(path) ,又称符号链接。
硬链接可理解为对I节点的引用,最初的文件名与所有的硬链接地位是对等的,比如为文件 a 建立了硬链接 b、c、d。那么a、b、c、d之中只要有一个文件未删除,这个文件就可通过未删除的名称访问的。你也可以认为每个文件都可认为至少有一个硬链接,就是说a也是一个硬链接。

软链接特性上有些类似于快捷方式,比如为原文件 a 建立了软链接 b、c、d。删除b、c 或 d 访问到 a,但是只要删除了 a,软链接就不可用了。但是 windows 下的快捷方式只能在资源管理器中有用,它只是一个 lnk 文件,如果是一个目录的快捷方式,它是不能通过 cd 命令或路径进入。

硬链接文件有两个限制(Unix/Linux 和 Windows 均如此)
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。

本文的内容关键在 Windows 下如何建立软硬链接。
熟悉过 Unix/Linux 都应该知道,Unix/Linux 用 ln 建立硬链接,ln -s 建立软链接,那么 Windows 下是如何做到的呢?

xp和win7采用不同的方式,其中xp方式如下: 

一、只能适用于 NTFS 文件系统。

1)使用命令 fsutil hardlink创建硬链接。

语法:
fsutil hardlink create NewFileName ExistingFileName

参数:
create 建立现有文件和新文件之间的 NTFS 硬链接。NTFS 硬链接与 POSIX 硬链接相似。
NewFileName 指定要将创建硬链接的文件。
ExistingFileName 指定要从中创建硬链接的文件。

如果你想在自己的程序里创建硬链接,那也是很容易的,只需要一个很简单的 win32 API 函数:

1 BOOL CreateHardLink(
2     LPCTSTR lpFileName,
3     LPCTSTR lpExistingFileName,
4     LPSECURITY_ATTRIBUTES lpSecurityAttributes
5 ); 

2)使用junction创建软链接。

NTFS只支持对目录的软链接,微软把它称作 junction。但是对于文件的软链接,微软也有提供了类似的解决方案,那就是快捷方式(Shortcut,.lnk 文件)。不过软链接和快捷方式不是一个层次上的东西,前者是底层文件系统的功能,后者是应用层的功能。

在 http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx 下载 junction.exe。

junction 的命令语是:
junction  LinkDirectory ExistingDirectory

例如:junction d:\link c:\winnt
将为c:\winnt 建立一个链接目录 d:\link,C和D分区都要是 NTFS 格式,在资源管理器和 dir 列示中 d:\link 都以目录的面目存在的。d:\link 就像是 c:\winnt 的一个引用一般,删除 d:\link 目录中的内容也就是删除了 c:\winnt 中的内容,但删除 d:\link 本身是不会影响到 c:\winnt 的。

相应的,在程序中也有一个 API 函数 CreateSymbolicLink 支持创建软链接,不过来得太晚了,要 Windows VISTA 和 Windows Server 2008 那样的版本才支持,先还是别想了,API 原型是:

1 BOOL WINAPI CreateSymbolicLink(
2   __in  LPCWSTR lpSymlinkFileName,
3   __in  LPCWSTR lpTargetFileName,
4   __in  DWORD dwFlags
5 );

参数:
lpSymlinkFileName 要创建的符号链接名称.
lpTargetFileName 符号链接所对应目标的名称.
dwFlags 标识目标是文件还是目录. 取值0x0 代表是文件,SYMBOLIC_LINK_FLAG_DIRECTORY或0x1 代表是目录。

二、借助于更为方便的工具。

使用LinkShellExtension 右键扩展工具:

熟练使用NTFS的文件链接技术熟练使用NTFS的文件链接技术熟练使用NTFS的文件链接技术

下载地址:http://url.cn/Ps5SJxxp汉化版本,win7版本请自行搜索)

Win7中的方法:

一、使用mklink命令:

熟练使用NTFS的文件链接技术

二、也可使用LinkShellExtension win7版本,请用户自行google。

熟练使用NTFS的文件链接技术

上一篇:Spring ApplicationContext 初始化流程


下一篇:Linux : hostapd基本配置