NTFS符號連結

NTFS符號連結(Symbolic Link),又稱符號鏈接[1],是NTFS檔案系統中指向檔案系統中的另一個對象的一類對象。被指向的對象叫做「目標」。它們可以像普通檔案或目錄一樣操作,但所有對符號連結的操作都實際作用於目標對象。符號連結對用戶而言是透明的,符號連結看上去和普通的檔案和資料夾沒有區別,操作方法也一模一樣。NTFS符號連結的設計目的是為了和POSIX標準的作業系統相容、並用來增進與舊版作業系統的相容性,它首次出現於Windows Vista

NTFS檔案系統定義了三種方法實現「連結」:

  • 硬連結(Hard link):多個檔案平等地共用同一個MFT條目(inode);必須在同一個檔案系統中。只能用於檔案,不能用於目錄。刪除一個檔案名字後,還可以用其它名字訪問該檔案。硬連結只能用於同一個磁碟分區內的檔案。不能用於不存在的檔案。
  • 符號連結(Symbolic Link):顧名思義,記錄到目標對象(檔案或目錄)的路徑。可以接受相對路徑、遠端SMB網絡路徑。從NTFS 3.1開始支援目錄的符號連結。允許跨檔案系統使用,但是對於跨主機的符號連結,還需要遠端機器也支援這一功能才行。目標對象可為不存在的檔案或目錄。
  • NTFS連接點(NTFS junction point)[2]:類似於符號連結,但支援目錄。只支援本地絕對路徑。[3]Windows 2000開始支援[1]頁面存檔備份,存於互聯網檔案館)。

命令及其參數

在NT6內核的作業系統,例如Windows VistaWindows 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 /Lxcopy /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 UpdateMicrosoft Store 應用程式的運作。[6]

內建符號連結的範例

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

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

參考資料與附註

  1. ^ 1.0 1.1 Windows Vista繁體中文版內所使用的名稱。
  2. ^ Junction Point在Windows繁體中文版內使用連接點的名稱。
  3. ^ Quote: "Note that Windows does not support junctions to directories on remote shares." Sysinternals Junction documentation頁面存檔備份,存於互聯網檔案館
  4. ^ mklink on a technet.microsoft.com. [2010-07-07]. (原始內容存檔於2010-07-22). 
  5. ^ 存档副本. [2010-07-07]. (原始內容存檔於2010-07-10). 
  6. ^ Relocation of the Users directory and the ProgramData directory to a drive other than the drive that contains the Windows directory. (原始內容存檔於2015-02-10). 

外部連結