NTFS符号链接

NTFS符号链接(Symbolic Link),又稱-{zh-cn:符号连结;zh-tw:符號鏈接}-,是NTFS文件系统中指向文件系统中的另一个对象的一类对象。被指向的对象叫做“目标”。它们可以像普通文件或目录一样操作,但所有对符号链接的操作都实际作用于目标对象。符号链接对用户而言是透明的,符号链接看上去和普通的文件和文件夹没有区别,操作方法也一模一样。NTFS符号链接的设计目的是为了和POSIX标准的操作系统兼容、並用來增進與舊版作業系統的相容性,它首次出现于Windows Vista。

NTFS文件系统定义了三种方法实现“链接”:

  • 硬链接(Hard link):多个文件平等地共享同一个MFT条目(inode);必须在同一个文件系统中。只能用于文件,不能用于目录。删除一个文件名字后,还可以用其它名字访问该文件。硬链接只能用于同一个磁盘分区内的文件。不能用于不存在的文件。
  • 符号链接(Symbolic Link):顾名思义,记录到目标对象(文件或目录)的路径。可以接受相对路径、远程SMB网络路径。从NTFS 3.1开始支持目录的符号链接。允许跨文件系统使用,但是对于跨主机的符号链接,还需要远程机器也支持这一功能才行。目标对象可为不存在的文件或目录。
  • NTFS连接点(NTFS junction point):类似于符号链接,但支持目录。只支持本地绝对路径。Windows 2000开始支持[https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006(v=vs.85).aspx]。

命令及其参数
在NT6内核的操作系统,例如Windows Vista或Windows 7中,符号链接可以由命令mklink创建,mklink是cmd.exe的内部命令,语法如下:

mklink [[/D] | [/H] | [/J]] link target

  • /D –创建指向目录的符号链接,如果不指定此参数,默认为创建文件符号链接。
  • /H –创建硬链接(Hardlink),或稱永久連結。
  • /J –创建NTFS连接点(Junction point)。
  • link –指定符号链接的名字
  • target –指定符号链接指向的对象的路径(相对或绝对皆可)。

和普通文件一样,删除符号链接也可以使用del命令,具体语法如下:

del filename

  • filename –要被删除的符号链接的名字

和普通目錄(資料夾)一样,删除目錄符号链接也可以使用rd命令,具体语法如下:

rd directoryname

  • directoryname –要被删除的符号链接的名字

需要提升為管理員權限才能建立符號連結。

复制链接的文件或目录时,使用copy /L或xcopy /B,可以复制这些符号链接,而不是复制文件或目录实体本身。
其他功能
符号链接可以指向不存在的对象,在创建符号链接时,系统并不会检查对象是否存在。
限制
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 應用程式的運作。

內建符號連結的範例
Windows Vista中預先建立了一些符號連結(Junction point),以增進與舊版作業系統(Windows XP)間的相容性,部分範例如下:

  • C:\Document and Settings → C:\Users(連接點)
  • C:\Users\All Users → C:\ProgramData(目錄符號連結)

参考资料與附註
外部链接
*[http://msdn2.microsoft.com/en-us/library/aa365680.aspx Documentation for NTFS symbolic links on MSDN]
*[http://msdn2.microsoft.com/en-us/library/aa363866.aspx CreateSymbolicLink function in the Win32 API]
*[http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html Link Shell Extension], which presents a graphical interface for creating hard and symbolic links as well as directory junctions
*[https://web.archive.org/web/20100716075342/http://homepage1.nifty.com/emk/symlink.html Symlink accessible driver for 2000/XP/2003],
*[http://technet.microsoft.com/zh-tw/library/cc754077(WS.10).aspx 符號連結(Microsoft Technet上的中文說明)]

评论 (0)

  • 还没有评论,来抢沙发吧。