close

Linux 愛用者,想必對 ln 命令不陌生。使用該命令,可以在 Linux 系統上建立針對檔案或目錄的符號鏈接,實現一個檔案(目錄)兩個名字的功能。

 

Windows 上也有一個類似功能的命令,它是 mklink。不過它的行為和 ln 不太一樣。此外,Windows 上還有「快捷方式」,此方式也能實現一個檔案(目錄)兩個名字的功能。但它和 mklink 建立的符號鏈接不一樣,它是 Windows 上特有的一種檔案格式,專門用來指向其它檔案(目錄)。

 


 

mklink 命令語法

 

mklink 命令需要系統管理員權限,因此,以系統管理員身分來執行命令提示字元(cmd.exe)。

 

執行 mklink 命令,不帶任何 flagsarguments,可以查看它的語法說明(官方網頁版說明)。

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

arrow
arrow

    mitblog 發表在 痞客邦 留言(0) 人氣()