硬链接和软链接介绍:
硬连接指向的是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 右键扩展工具:
下载地址:http://url.cn/Ps5SJx(xp汉化版本,win7版本请自行搜索)
Win7中的方法:
一、使用mklink命令:
二、也可使用LinkShellExtension win7版本,请用户自行google。