Linux 愛用者,想必對 ln 命令不陌生。使用該命令,可以在 Linux 系統上建立針對檔案或目錄的符號鏈接,實現一個檔案 (目錄) 兩個名字的功能。
Windows 上也有一個類似功能的命令,它是 mklink。不過它的行為和 ln 不太一樣。此外,Windows 上還有「快捷方式」,此方式也能實現一個檔案 (目錄) 兩個名字的功能。但它和 mklink 建立的符號鏈接不一樣,它是 Windows 上特有的一種檔案格式,專門用來指向其它檔案 (目錄)。
mklink 命令語法
mklink 命令需要系統管理員權限,因此,以系統管理員身分來執行命令提示字元 (cmd.exe)。
執行 mklink 命令,不帶任何 flags 及 arguments,可以查看它的語法說明 (官方網頁版說明)。
Microsoft Windows [Version 10.0.22631.3235] (c) Microsoft Corporation. All rights reserved. D:\>mklink Creates a symbolic link. MKLINK [[/D] | [/H] | [/J]] Link Target /D Creates a directory symbolic link. Default is a file symbolic link. /H Creates a hard link instead of a symbolic link. /J Creates a Directory Junction. Link Specifies the new symbolic link name. Target Specifies the path (relative or absolute) that the new link refers to.
對照一下中文說明。
Microsoft Windows [Version 10.0.22631.3235] (c) Microsoft Corporation. All rights reserved. D:\>mklink 建立符號鏈接。 MKLINK [[/D] | [/H] | [/J]] Link Target /D 建立目錄符號鏈接。預設為檔案符號鏈接。 /H 建立硬鏈接而非符號鏈接。 /J 建立目錄聯結。 Link 指定新的符號鏈接名稱。 Target 指定新鏈接引用的路徑(相對或絕對)。
不帶參數 | /D 參數 | /H 參數 | /J 參數 | |
中文名稱 | 符號鏈接 | 符號鏈接 | 硬鏈接 | 聯接 |
英文名稱 | Symbolic Link | Symbolic Link | Hard Link | Junction |
作用對象 | 檔案 | 目錄 | 檔案 | 目錄 |
是否一定指向路徑 | 否 | 否 | 否 | 是 |
dir 類型 | SYMLINK | SYMLINK | 無特殊顯示 | JUNCTION |
資源管理器類型 | .symlink | 資料夾 | 無特殊顯示 | 資料夾 |
資源管理器圖標 | 快捷方式 | 資料夾快捷方式 | 無特殊顯示 | 資料夾快捷方式 |
修改同步 | 是 | 是 | 是 | 是 |
刪除同步 | 否 | 否 | 否 | 否 |
徹底刪除源 | 刪除源路徑 | 刪除源路徑 | 刪除所有硬鏈接 | 刪除源路徑 |
引用錯誤報錯 | 無 | 引用了一個不可用的位置 | - | 引用了一個不可用的位置 |
符號連結 (Symbolic Links)
符號連結類似於快捷方式,它指向另一個檔案或目錄。它不僅可以跨越不同的檔案系統,還可以指向網絡位置。
特點
- 符號連結可以跨磁碟分區 (例如 C, D 槽可以建立連結)。
- 如果目標檔案或目錄被刪除,符號連結仍然存在,但會指向一個不存在的位置。
目前 D:\Demo 目錄樹狀結構。
D:\Demo>tree /F Folder PATH listing Volume serial number is A610-B24E D:. TargetFile.txt No subfolders exist
目前 C:\Demo(共享資料夾) 目錄樹狀結構。
C:\Demo>tree /F Folder PATH listing Volume serial number is A610-B24E C:. TargetFile.txt No subfolders exist
範例一
使用 mklink 命令來產生符號鏈接名稱(LinkFile.txt)連結到 TargetFile.txt 檔案。
D:\Demo>mklink LinkFile.txt TargetFile.txt symbolic link created for LinkFile.txt <<===>> TargetFile.txt
使用 dir 命令查看符號鏈接名稱(LinkFile.txt)的類型是符號連結 <SYMLINK>。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 04:17 <DIR> . 2024/03/16 下午 04:17 <SYMLINK> LinkFile.txt [TargetFile.txt] 2024/03/16 下午 03:35 4 TargetFile.txt 2 File(s) 4 bytes 2 Dir(s) 352,502,214,656 bytes free
範例二
使用 mklink 命令來產生符號鏈接名稱(LinkFile.txt)連結到 C:\Demo\TargetFile.txt 檔案。
D:\Demo>mklink LinkFile.txt C:\Demo\TargetFile.txt symbolic link created for LinkFile.txt <<===>> C:\Demo\TargetFile.txt
使用 dir 命令查看符號鏈接名稱(LinkFile.txt)的類型是符號連結 <SYMLINK>。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 04:47 <DIR> . 2024/03/16 下午 04:47 <SYMLINK> LinkFile.txt [C:\Demo\TargetFile.txt] 2024/03/16 下午 03:35 4 TargetFile.txt 2 File(s) 4 bytes 2 Dir(s) 352,502,214,656 bytes free
範例三
使用 mklink /D 命令來產生符號鏈接名稱(LinkFolder)連結到 C:\Demo 目錄。
D:\Demo>mklink /D LinkFolder C:\Demo symbolic link created for LinkFolder <<===>> C:\Demo
使用 dir 命令查看符號鏈接名稱(LinkFolder)的類型是符號連結 <SYMLINK>。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 05:02 <DIR> . 2024/03/16 下午 05:02 <SYMLINKD> LinkFolder [C:\Demo] 2024/03/16 下午 03:35 4 TargetFile.txt 1 File(s) 4 bytes 2 Dir(s) 352,502,214,656 bytes free
範例四
使用 mklink /D 命令來產生符號鏈接名稱(LinkFolder)連結到 \\192.168.0.10\Demo 目錄。
D:\Demo>mklink /D LinkFolder \\192.168.0.10\Demo symbolic link created for LinkFolder <<===>> \\192.168.0.10\Demo
使用 dir 命令查看符號鏈接名稱(LinkFolder)的類型是符號連結 <SYMLINK>。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 05:15 <DIR> . 2024/03/16 下午 05:15 <SYMLINKD> LinkFolder [\\127.0.0.1\Demo] 2024/03/16 下午 03:35 4 TargetFile.txt 1 File(s) 4 bytes 2 Dir(s) 352,502,214,656 bytes free D:\Demo>mklink /D LinkFolder \\127.0.0.1\Demo symbolic link created for LinkFolder <<===>> \\127.0.0.1\Demo
硬連結 (Hard Links)
硬連結是指向檔案的另一個名稱。與原始檔案共享相同的實際數據。僅限於檔案,不能用於目錄。
特點
- 硬連結不能跨越不同的磁碟分區。
- 當所有硬連結都被刪除時,檔案的實際數據才會被刪除。
目前 D:\Demo 目錄樹狀結構。
D:\Demo>tree /F Folder PATH listing Volume serial number is A610-B24E D:. TargetFile.txt No subfolders exist
範例一
使用 mklink /H 命令來產生硬鏈接 (LinkFile.txt) 連結到 TargetFile.txt 檔案。
D:\Demo>mklink /H LinkFile.txt TargetFile.txt Hardlink created for LinkFile.txt <<===>> TargetFile.txt
使用 dir 命令查看。硬連結是與原始檔案共享相同的實際數據。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 06:40 <DIR> . 2024/03/16 下午 06:39 4 LinkFile.txt 2024/03/16 下午 06:39 4 TargetFile.txt 2 File(s) 8 bytes 1 Dir(s) 352,502,214,656 bytes free
連接點 (Junction Points)
連接點類似於目錄的符號連結,但僅限於本地電腦且只能用於目錄。
特點
- 連接點可以實現目錄之間的透明轉接。
- 不能跨越不同的磁碟分區。
目前 D:\Demo 目錄樹狀結構。
D:\Demo>tree /F Folder PATH listing Volume serial number is A610-B24E D:. └─TargetFolder New Text Document.txt
範例一
使用 mklink /J 命令來產生目錄聯結 (LinkFolder) 連結到 TargetFolder 目錄。
D:\Demo>mklink /J LinkFolder TargetFolder Junction created for LinkFolder <<===>> TargetFolder
使用 dir 命令查看目錄聯結 (LinkFolder) 的類型是連接點 <JUNCTION>。
D:\Demo>dir Volume in drive D has no label. Volume Serial Number is A610-B24E Directory of D:\Demo 2024/03/16 下午 06:29 <DIR> . 2024/03/16 下午 06:29 <JUNCTION> LinkFolder [D:\Demo\TargetFolder] 2024/03/16 下午 06:28 <DIR> TargetFolder 0 File(s) 0 bytes 3 Dir(s) 352,502,214,656 bytes free
Reference:https://liam.page/2018/12/10/mklink-in-Windows/
Reference:https://www.spatialgeolab.com/windows-links/
Reference:https://blog.walterlv.com/post/mklink-junction-in-dotnet.html