NTFS符号链接
NTFS符号链接(Symbolic Link),又称符号连结[1],是NTFS文件系统中指向文件系统中的另一个对象的一类对象。被指向的对象叫做“目标”。它们可以像普通文件或目录一样操作,但所有对符号链接的操作都实际作用于目标对象。符号链接对用户而言是透明的,符号链接看上去和普通的文件和文件夹没有区别,操作方法也一模一样。NTFS符号链接的设计目的是为了和POSIX标准的操作系统兼容、并用来增进与旧版作业系统的相容性,它首次出现于Windows Vista。
- 硬链接(Hard link):多个文件平等地共享同一个MFT条目(inode);必须在同一个文件系统中。只能用于文件,不能用于目录。删除一个文件名字后,还可以用其它名字访问该文件。硬链接只能用于同一个磁盘分区内的文件。不能用于不存在的文件。
- 符号链接(Symbolic Link):顾名思义,记录到目标对象(文件或目录)的路径。可以接受相对路径、远程SMB网络路径。从NTFS 3.1开始支持目录的符号链接。允许跨文件系统使用,但是对于跨主机的符号链接,还需要远程机器也支持这一功能才行。目标对象可为不存在的文件或目录。
- NTFS连接点(NTFS junction point)[2]:类似于符号链接,但支持目录。只支持本地绝对路径。[3]Windows 2000开始支持[1](页面存档备份,存于互联网档案馆)。
命令及其参数
在NT6内核的操作系统,例如Windows Vista或Windows 7中,符号链接可以由命令mklink
创建,mklink是cmd.exe
的内部命令,语法如下[4]:
mklink [[/D] | [/H] | [/J]] link target
/D
–创建指向目录的符号链接,如果不指定此参数,默认为创建文件符号链接。/H
–创建硬链接(Hardlink),或称永久连结[1]。/J
–创建NTFS连接点(Junction point)。link
–指定符号链接的名字target
–指定符号链接指向的对象的路径(相对或绝对皆可)。
和普通文件一样,删除符号链接也可以使用del
命令,具体语法如下:
del filename
filename
–要被删除的符号链接的名字
和普通目录(资料夹)一样,删除目录符号链接也可以使用rd
命令,具体语法如下:
rd directoryname
directoryname
–要被删除的符号链接的名字
需要提升为管理员权限才能建立符号连结。
复制链接的文件或目录时,使用copy /L
或xcopy /B
,可以复制这些符号链接,而不是复制文件或目录实体本身。
其他功能
符号链接可以指向不存在的对象,在创建符号链接时,系统并不会检查对象是否存在。[5]
限制
Windows 操作系统不支援在启动时使用符号连结,因此不应重新导向以下目录:
- 含有hiberfil.sys的目录(设定为不在根目录的时候)
- \Windows
- \Windows\system32
- \Windows\system32\Config
Windows Installer 对符号连结的支援不完整。如 \Windows\Installer 目录被重新导向,将导致多数使用 .msi 的 Windows Installer 发生 2755 及/或 1632 错误。
而下列目录可以重新导向:
- \Documents and Settings
- \ProgramData
- \Program Files
- \Program Files (x86)
- \Users
但是不建议重新导向 \Users 及 \ProgramData,因为这样做会影响 Windows Update 及 Microsoft Store 应用程式的运作。[6]
内建符号连结的范例
Windows Vista中预先建立了一些符号连结(Junction point),以增进与旧版作业系统(Windows XP)间的相容性,部分范例如下:
- C:\Document and Settings → C:\Users(连接点)
- C:\Users\All Users → C:\ProgramData(目录符号连结)
参考资料与附注
- ^ 1.0 1.1 Windows Vista繁体中文版内所使用的名称。
- ^ Junction Point在Windows繁体中文版内使用连接点的名称。
- ^ Quote: "Note that Windows does not support junctions to directories on remote shares." Sysinternals Junction documentation (页面存档备份,存于互联网档案馆)
- ^ mklink on a technet.microsoft.com. [2010-07-07]. (原始内容存档于2010-07-22).
- ^ 存档副本. [2010-07-07]. (原始内容存档于2010-07-10).
- ^ Relocation of the Users directory and the ProgramData directory to a drive other than the drive that contains the Windows directory. (原始内容存档于2015-02-10).
外部链接
- Documentation for NTFS symbolic links on MSDN(页面存档备份,存于互联网档案馆)
- CreateSymbolicLink function in the Win32 API(页面存档备份,存于互联网档案馆)
- Link Shell Extension(页面存档备份,存于互联网档案馆), which presents a graphical interface for creating hard and symbolic links as well as directory junctions
- Symlink accessible driver for 2000/XP/2003,
- 符号连结(Microsoft Technet上的中文说明)(页面存档备份,存于互联网档案馆)