前兩天看到讀者留言說windows下有個(gè)命令mklink可以試試。這個(gè)命令我之前的確沒用過,試過之后發(fā)現(xiàn)原來windows下也有軟鏈接和硬鏈接之分。Linux 中的軟鏈接使用的比較多,一般當(dāng)成快捷方式用、特別是比較深的目錄。創(chuàng)建軟鏈接可以方便 cd 到不同目錄,同時(shí)也不會(huì)造成誤解,軟鏈接在顯示上會(huì)高亮比較明顯。刪除軟鏈接也不會(huì)造成任何不好的后果,并且是可追溯的,可以查看軟鏈接指向的目錄或文件。硬鏈接一般情況不要使用,因?yàn)樗鼰o法追溯。你修改了一個(gè)硬鏈接的文件內(nèi)容,同時(shí)會(huì)影響的所以指向該文件的硬鏈接。相當(dāng)于一個(gè)文件有不同的文件名,但它們都指向同一個(gè)文件,并且還很難查看它們直接的關(guān)系。沒有一張圖會(huì)告訴你哪些文件是相互關(guān)聯(lián)的。軟鏈接可以隨便用,硬鏈接最好做了登記后再用,不然會(huì)造成意外后果。軟鏈接可以用于文件或目錄,硬鏈接只能用于文件不能用于目錄,且無法跨文件系統(tǒng)。Windows 下的軟鏈接和硬鏈接與Linux類似,但大家用的很少。因?yàn)閳D形界面操作一般使用快捷方式就夠了。但快捷方式實(shí)際上是個(gè)二進(jìn)制文件(*.link),它只能被圖形化管理工具讀取。軟連接一般用于命令行或腳本中,快捷方式對(duì)命令行環(huán)境沒有幫助。Windows 下可以使用 mklnk 命令創(chuàng)建軟鏈接。它的幫助文檔為:C:\Users\Administrator>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ì))。
C:\Users\Administrator>
mklink /d gitrepo d:\gitRepo
在 windows 圖形界面下軟鏈接看起來像一個(gè)快捷方式:但在文件上它們屬于不同的文件,快捷方式在文件上是個(gè)二進(jìn)制文件,軟鏈接不是。我創(chuàng)建了一個(gè)快捷方式和一個(gè)軟鏈接,兩個(gè)文件放一起可以比較一下。
- /j 創(chuàng)建軟鏈接(早期實(shí)現(xiàn))
?我們使用 /d 和 /h 就行了,/d 可以指向文件和目錄,/h 只能指向文件且限定盤符只有在一個(gè)盤才能用和 linux 的規(guī)則一致。
/j 在文檔上與 /d 有區(qū)別,但實(shí)際測試沒有分別,它是 windows 早期版本的一種實(shí)現(xiàn),在 win10的行為 上與 /d 表現(xiàn)一致可以不用記。mklink 創(chuàng)建的軟鏈接在 git-bash 中也能用,但 mklink 只能在 cmd 中使用。原因是 mklink 不是一個(gè)可執(zhí)行文件,使用 where 和 everything 是找不到實(shí)體文件的。它和 cmd 中的 cd、type 命令有點(diǎn)像,類似 shell 中的內(nèi)置函數(shù)。推薦使用軟鏈接,盡量不用硬鏈接。軟鏈接基本搞清楚了,那如何在命令行創(chuàng)建快捷方式?DeepSeek 給出了一種實(shí)現(xiàn):$ cat /c/bin/CreateShortcut.vbs
Set ws = WScript.CreateObject("WScript.Shell")
Set sc = ws.CreateShortcut(WScript.Arguments(0))
sc.TargetPath = WScript.Arguments(1)
sc.Save
$ cat /c/bin/myln.bat
cscript //nologo "c:\bin\CreateShortcut.vbs" "%1" "%2"
c:\bin\myln.bat "快捷方式.lnk" d:\gitRepo
閱讀原文:原文鏈接
該文章在 2025/5/9 9:47:33 編輯過