通過 mklink 命令可以創建文件或文件夾的鏈接,而這種鏈接跟快捷方式是不一樣的。然而我們還可能會遇到其使用過程中的一些坑,本文將整理這些坑並提供解決方法。
0x00 背景介紹:mklink
mklink
可以像創建快捷方式一樣建立文件或文件夾的鏈接,但不同於快捷方式的是,mklink
創建的鏈接絕大多數程序都不會認為那是一個鏈接,而是一個實實在在的文件或文件夾。
例如,為 D:\OneDrive\Foo
文件夾創建鏈接到 D:\Foo
,那么 D:\OneDrive\Foo
中有一個 .git
文件時,絕大多數程序都會以為 D:\Foo
中也存在 .git
文件,而且文件內容一模一樣。
mklink
可以創建符號鏈接、硬鏈接和目錄鏈接。在 cmd
中輸入 mklink
即可看到以下這樣的幫助信息。
C:\Users\lvyi>mklink
創建符號鏈接。
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 創建目錄符號鏈接。默認為文件
符號鏈接。
/H 創建硬鏈接而非符號鏈接。
/J 創建目錄聯接。
Link 指定新的符號鏈接名稱。
Target 指定新鏈接引用的路徑
(相對或絕對)。
具體的使用不是本文的重點,可以閱讀本文末尾的參考資料了解,這里只給出他們之間的大體區別。
使用方式 | 適用於 | 快捷方式小箭頭 |
---|---|---|
不帶參數 | 文件 | 有 |
/D | 文件夾 | 有 |
/J | 文件夾 | 有 |
/H | 文件 | 無 |
上面的表格順序,從上到下的行為從越來越像快捷方式到越來越像兩個獨立的文件夾。
0x01 坑:PowerShell 中沒有 mklink 命令
是的,PowerShell 中就是中沒有 mklink 命令。如果要在 powershell 中使用 mklink,那么得先敲 cmd
進入 cmd
之后再使用 mklink
命令。
如果你是一個重度強迫症患者,那么可以編寫一個 powershell 的擴展函數來實現:Creating a Symbolic Link using PowerShell - Learn Powershell - Achieve More。
0x02 坑:權限
默認我們的用戶賬戶是 Administrators
組的,會繼承它的權限設定。正常情況下,我們使用 mklink
是可以成功執行的。但如果文件系統的設置比較奇怪或者重裝過系統,那么可能出現沒有權限的錯誤。
C:\Users\lvyi>mklink /D D:\Foo D:\OneDrive\Foo
你沒有足夠的權限執行此操作。
這時,使用管理員權限啟動 cmd
是最簡單的做法。不過也可以考慮在 本地安全策略(secpol.msc)\本地策略\用戶權利分配
中添加當前用戶。