Windows 中的硬連結、目錄聯接(軟連結)、符號連結、快捷方式

czwy發表於2024-09-30

在Linux檔案系統中經常提及硬連結(Hard Link)和符號連結(Symbolic Link),Windows中也可以建立連結,但由於豐富的圖形介面操作,很少提及連結。Windows 的 NTFS 檔案系統支援三種連結:硬連結(Hard Link)、符號連結(Symbolic Link)和目錄連結(junction point),此外還有一個大家非常熟悉連結機制:快捷方式。

建立連結

建立連結可以透過 dos 命令 mklink 或者 powershell 中的New-Item 建立。
mklink命令的使用說明如下圖所示。預設是建立檔案符號連結,使用/D 引數則是建立目錄的符號連結,使用 /H 是建立硬連結,使用/J是建立目錄聯結,也稱為軟連結(soft link)。
image

使用 powershell 建立連結的方式如下:

New-Item <連結路徑> -ItemType <連結型別> -Target <連結目標>

其中 ItemType 的取值可選:HardLink、SymbolicLink、Junction

幾種連結的區別

與 Linux 的檔案系統中的 inode 與 block 類似,在 NTFS 檔案系統中資料物件也賦予了獨一無二的檔案 ID 以及與之對應的檔案路徑,檔案路徑和檔案 ID 對應,檔案 ID 和資料物件繫結,最終才呈現為可供使用者開啟、編輯的檔案。

快捷方式(shortcut)

快捷方式以.lnk檔案方式存在,檔案大小僅有幾百位元組,與原始檔案大小無關。適用於 Explorer 等應用程式,並非 NTFS 內建機制,從Win95開始得到支援。FAT32也支援。適用於檔案、目錄,只能使用絕對路徑。可以跨磁碟機代號,可以跨主機,可以使用UNC路徑、網路驅動器。

符號連結

符號連結是將自己連結到一個目標檔案或目錄的路徑上。當系統識別到符號連結時,它會跳轉到符號連結所指向的目標中去,而不改變此時的檔案路徑。
image

符號連結從Vista開始得到支援,NTFS內建機制。適用於檔案,目錄。可以理解為另一種形式的快捷方式(shortcut),檔案大小為0位元組和不佔用空間。可以使用相對/絕對路徑,可以跨磁碟機代號,跨主機,可以使用UNC路徑和網路驅動器。

硬連結

硬連結和符號連結的原理完全不同,符號連結是指向目標路徑的連結,而硬連結則是指向目標資料物件的連結。因為一個卷中的資料物件都有一個獨一無二檔案 ID,也可以說硬連結是指向目標檔案 ID 的連結。
image

硬連結從Windows NT4開始得到支援,是NTFS內建機制,FAT32不支援。只適用於檔案,只能使用絕對路徑。本身無檔案,不佔用額外空間。hardlink與targetfile必須位於同一卷,可以簡單理解成不能跨磁碟機代號。

目錄聯接

目錄聯接從Windows2000/XP開始得到支援,是NTFS內建機制。只適用於目錄。只能使用絕對路徑。目錄連結透過重分析點實現,目錄連結可以跨卷,但是不能跨主機。

詳細對比

幾種連結方式詳細比較如下表所示

shortcut hard link junction point symbolic link
建立方式 右鍵 -> 建立快捷方式 mklink /H Link Target mklink /J Link Target mklink /D Link Target
存在方式 以.lnk檔案方式存在,適用於Explorer等應用程式。非NTFS內建機制,從Win95開始得到支援。FAT32支援。 NTFS內建機制,從Windows NT4開始得到支援。FAT32不支援。 NTFS內建機制,從Windows2000/XP開始得到支援。是 NTFS 3.0 及以上檔案系統(Windows 2000 及以上系統)的特性,它是連結本地目錄(可跨卷)的訪問點,透過交接點的操作都會被系統對映到實際的目錄上。透過建立交接點,可以在保證一個目錄例項(目錄的一致性)的前提下,允許使用者或程式從本地檔案系統中的多個位置訪問此目錄。 NTFS內建機制,從Vista開始得到支援。檔案型別是.SYMLINK
適用範圍 同時適用於檔案、目錄,只能使用絕對路徑。 只適用於檔案,只能使用絕對路徑。 只適用於目錄。只能使用絕對路徑。即使建立junction point時使用了相對路徑,儲存到NTFS中時將隱式轉換成絕對路徑。 同時適用於檔案、目錄。這是一種超級shortcut,檔案大小為0位元組和不佔用空間。
使用限制 可以跨磁碟機代號,可以跨主機,可以使用UNC路徑、網路驅動器。 hard link與targetfile必須位於同一volume,可以簡單理解成不能跨磁碟機代號。 junction point必須與target directory位於同一local computer,可以簡單理解成不能跨主機, 在local computer範圍內,可以跨磁碟機代號。不能使用UNC路徑;假設Z是透過網路對映生成的磁碟機代號,同樣不適用於Z。 可以使用相對、絕對路徑。假設建立symbolic link時使用了相對路徑,儲存到NTFS中的就是相對路徑,不會隱式轉換成絕對路徑。可以跨磁碟機代號,可以跨主機,可以使用UNC路徑、網路驅動器。
移動能力 本身有檔案,可以複製,移動等操作。 / / /
檔案 檔案大小僅有幾百位元組, 跟原檔案大小無關,檔案型別是.lnk。 本身無檔案,為檔案建立多入口。由於不同的檔案指向的是同樣的資料,所以無論給同一個檔案建立多少個硬連結,他們佔整個卷的資料大小都是一樣的。 對交接點內檔案和子目錄的“建立、刪除、修改”等操作都被對映到對應的目錄中的檔案和子目錄上,對交接點的“複製、貼上、剪下、配置 ACL”,只會影響此交接點,在同一卷內移動交接點,只會影響此交接點,但在不同卷間移動交接點,會將此交接點轉換為正常目錄,並且交接點對應目錄下的所有內容都會被移動。 符號連結(Symlink,Softlink)是對檔案或目錄的引用,實際上符號連結本身是一個“記錄著所引用檔案或目錄的絕對或相對路徑”的特殊檔案,透過符號連結的操作都會被重定向到目標檔案或目錄。對符號連結和快捷方式的“讀、寫、遍歷”等操作都會被重定向到目標檔案或目錄,但對它們的“複製、刪除、移動、配置 ACL”等操作只針對自身。
關聯 刪除shortcut,不影響target。 在Explorer中刪除hard link,不影響targetfile。刪除target file,不影響hardlink。事實上由於hard link的語義,此時剩下的hardlink就是原始資料的唯一訪問點。只有當一個檔案 ID 對應的所有硬連結被刪除時,資料才真正被標記為刪除。 刪除target directory,junction point仍將存在,但失效了,變得不可用。這個很好理解,因為此時junction point指向不存在的目錄。 在Explorer中刪除symboliclink,不影響target。刪除target,symboliclink仍將存在,但失效了,變得不可用。它們可以像普通檔案一樣操作,但所有對符號連結的操作都實際作用於目標物件。符號連結對使用者而言是透明的,符號連結看上去和普通的檔案和資料夾沒有區別,操作方法也一模一樣(更類似於 Linux 的軟連結)。

連結的應用

  • 硬連結:可以在不復制檔案的情況下,實現檔案的快速訪問以及檔案的備份,還可以防止重要檔案誤刪,因為刪除的是檔案的連結,而非檔案資料本身。
  • 符號連結:可以把一個路徑對映到另一個路徑,或者指向遠端檔案或目錄,甚至可以透過網路連線到其他計算機上的檔案。
  • 目錄聯接:實現路徑重定向,當訪問連結目錄時,系統會自動重定向到實際目錄,例如:Vista的"C:\Documents and Settings"是指向"C:\Users"的junctionpoint,這樣一些使用了硬編碼"C:\Documents and Settings"的老程式可以在Vista上正常工作。此外,還可以解決Windows檔案路徑長度限制帶來的問題(從 Windows 10 版本 1607 開始,可以透過設定登錄檔以及應用程式清單啟用長路徑)。

參考

  1. https://learn.microsoft.com/zh-cn/windows/win32/fileio/hard-links-and-junctions
  2. https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-item?view=powershell-7.4
  3. https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later

相關文章