可能有很多小伙伴已經(jīng)知道通過 mklink
命令來創(chuàng)建 NTFS 磁盤上的各種鏈接;當(dāng)然,就算不知道 mklink
的鏈接,快捷方式應(yīng)該每個(gè)人都知道吧。mklink
的選項(xiàng)有很多種,但你可能在其他文章中難以找到對(duì)這些不同選項(xiàng)的不同效果和使用限制的準(zhǔn)確和統(tǒng)一描述。本文將介紹 Windows 系統(tǒng)中所有的鏈接方式,它們的優(yōu)缺點(diǎn)、使用條件和坑。
不同的鏈接方式
Windows Vista 開始帶來了 NTFS 符號(hào)鏈接(Symbolic Link),Windows 2000 開始就有了 NTFS 重解析點(diǎn)(Reparse Point),更早的 Windows 95 就有了快捷方式(Shortcut),再往前到 Windows 3.5 還有硬鏈接(Hard Link),他們都能實(shí)現(xiàn)給你不同的路徑訪問同一個(gè)文件或文件夾的功能。
mklink
使用 mklink
命令,你可以創(chuàng)建“硬鏈接(Hard Link)”、“目錄聯(lián)接(Junction Point)”和“符號(hào)鏈接(Symbolic Link)”。
> mklink創(chuàng)建符號(hào)鏈接。MKLINK [[/D] | [/H] | [/J]] Link Target
/D 創(chuàng)建目錄符號(hào)鏈接。默認(rèn)為文件
符號(hào)鏈接。
/H 創(chuàng)建硬鏈接而非符號(hào)鏈接。
/J 創(chuàng)建目錄聯(lián)接。
Link 指定新的符號(hào)鏈接名稱。
Target 指定新鏈接引用的路徑
(相對(duì)或絕對(duì))。
例如:
mklink /J current %APPDATA%\walterlv\packages\1.0.0
即在當(dāng)前目錄創(chuàng)建了一個(gè)指向 %APPDATA%\walterlv\packages\1.0.0
的目錄聯(lián)接。
因?yàn)閯?chuàng)建目錄聯(lián)接不需要管理員權(quán)限,所以特別適合給桌面應(yīng)用程序用來按版本管理某些包/工具集。有關(guān)使用 .NET/C# 來創(chuàng)建目錄聯(lián)接的方法,可以閱讀另一篇博客:
快捷方式
快捷方式是一個(gè)單純 Windows 操作系統(tǒng)用戶層面的功能,與 NTFS 文件系統(tǒng)沒有什么關(guān)系。不過其也能實(shí)現(xiàn)鏈接到另一個(gè)文件的功能。使用快捷方式的程序太多了,幾乎每個(gè)安裝包都會(huì)考慮往桌面或開始菜單扔幾個(gè)快捷方式。
快捷方式的本質(zhì)是一個(gè) lnk
后綴的文件,這個(gè)文件里面指向了如何打開目標(biāo)文件或文件夾的一些參數(shù),于是當(dāng)在文件資源管理器中打開快捷方式時(shí),就直接打開了目標(biāo)文件或文件夾(當(dāng)然,啟動(dòng)一個(gè)程序可能是大多數(shù)用法)。
其他
重解析點(diǎn)(Reparse Point)自 NTFS v3.0(隨 Windows 2000 推出)開始便一直存在于 Windows 操作系統(tǒng)中。除了我們前面提到的可通過 mklink
創(chuàng)建的那三種外,還有其他種類:
Volume Mount Ppoints
Distributed Link Tracking(DLT)
Data Deduplication
Hierarchical Storage Management(HSM)
Native Structured Storage(NSS)
Unix Doman Socket(socket)
System Compression
OneDrive
比較
可能單單說名字,你不一定能明白什么時(shí)候要用哪一種。于是我將這些鏈接的不同整理了出來貼在下面。
| 硬鏈接(Hard Link) | 目錄聯(lián)接(Junction Point) | 符號(hào)鏈接(Symbolic Link) |
---|
命令 | mklink /H Link Target | mklink /J Link Target | mklink /D Link Target |
作用 | 為某文件創(chuàng)建別名,可讓不同的路徑對(duì)應(yīng)同一個(gè)文件的數(shù)據(jù)。 |
|
|
鏈接到文件 | √ | × | × |
鏈接到文件夾 | × | √ | √ |
需要提升為管理員權(quán)限 | 需要 | 不需要 | 通常需要 [坑1] |
跨驅(qū)動(dòng)器卷(盤符) | × | √(僅本地計(jì)算機(jī)) | √(包括 SMB 文件或路徑) |
操作系統(tǒng)支持 | Windows NT 3.1 開始支持 Windows 2000 開始有 API createHardLink() Windows NT 6.0 開始能使用 mklink /H | Windows 2000+ | Windows Vista+ |
可鏈接到不存在的目標(biāo) | × | √ | √ |
可鏈接到相對(duì)目錄 | × | ×(可以使用相對(duì)路徑創(chuàng)建,但創(chuàng)建完即變絕對(duì)路徑) | √ |
刪除方法 | del | rd | rd / del |
當(dāng)鏈接被單獨(dú)刪除后 | 只有所有指向原始文件的硬鏈接和原始文件全部刪除后文件數(shù)據(jù)才會(huì)被刪除。 | Windows Vista 之后原始文件夾不受影響;Windows 2000/XP/2003 會(huì)導(dǎo)致原始子文件夾被刪除。 | 原始文件夾不受影響。 |
當(dāng)原始文件被單獨(dú)刪除后 | 硬鏈接依然能正常訪問到文件的數(shù)據(jù)。 | 目錄聯(lián)接失效,指向不存在的目錄。 | 符號(hào)鏈接失效,指向不存在的目錄。 |
[坑1]
: 在微軟的官方博客中已有說明:從 Windows 10 Insiders build 14972 開始,符號(hào)鏈接對(duì)開發(fā)者將不再需要管理員權(quán)限,這可以讓開發(fā)者像在 Linux 或 macOS 上一樣高效地工作。(通過如下圖所示的開關(guān)來決定此操作是否需要管理員權(quán)限,打開則無需管理員權(quán)限。)
額外的坑
如果你在開始菜單里面有快捷方式指向了一個(gè)目錄聯(lián)接(Junction Point)中的文件,那么在 Windows 10 操作系統(tǒng)更新后這個(gè)快捷方式便會(huì)消失。目前正在調(diào)查消失的原因,如果確認(rèn)是目錄聯(lián)接的 bug 或者開始菜單的 bug,就將進(jìn)展報(bào)告給微軟。
關(guān)于這個(gè) bug,詳見:
一般來說,閱讀本文應(yīng)該就理解了 mklink
的正確用法,也不應(yīng)該會(huì)出現(xiàn)我另一篇博客中的情況:
另外,附我使用目錄聯(lián)接/符號(hào)鏈接的一些用途:
參考資料
該文章在 2023/8/8 9:41:16 編輯過