The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用工具: Junction ( Windows 版的 Soft link )

玩過 Linux 的人都知道有個 ln 指令可任意建立 link ( 包括 hard links 與 symbolic links ),這是個很好用的東西,不過在 Windows 環境卻很少聽人提起有 "link" 的概念,而 Junction 就是用來建立 "link" 的工具。

"NTFS 連接點" ( NTFS junction point ) 是 NTFS 檔案系統提供的一種能力,可以讓某一個實體目錄(Target) 直接 Link (連結) 到另一個 對應的目錄(Junction Directory),這與建立「捷徑(ShortCut)」是個截然不同的概念。

你所建立的 "NTFS 連接點" 目錄跟你原本的目錄內容,完全一模一樣 (包括安全性設定),因為實際上這兩個目錄下的檔案是「完全相同」的一份資料,只是透過了 "NTFS 連接點" 建立了兩個目錄之間的連結。

而建立 "NTFS 連接點" 最大的好處就是這是一個「感覺」完全獨立的目錄,對「檔案總管」或「任何其他的程式」來說,根本不知道這目錄到底是不是一個 NTFS 連接點,而可以直接進行檔案、目錄操作。

再者,有些舊有的程式只能讀取固定目錄下的資料,若因為 C 槽硬碟空間不夠而將資料搬移後,程式可能就無法運作了,這時就可以透過 Junction 工具幫你建立 "NTFS 連接點",省時又省力!

Junction 的使用說明如下:

Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com

The first usage is for displaying reparse point information, and the
second usage is for creating or deleting a NTFS junction point:

usage: junction [-s] [-q] <file or directory>
       -q     Don't print error messages (quiet)

       -s     Recurse subdirectories

usage: junction [-d] <junction directory> [<junction target>]
       -d     Delete the specified junction
       example: junction d:\link c:\winnt

舉幾個簡單的例子。若你的實體目錄在 D:\MyDocument 而你要建立一個 "NTFS 連接點" 到 C:\Profiles\User1\MyDocs 目錄的話,就可以用以下指令完成:

junction c:\Profiles\User1\MyDocs "d:\tmp\My Documents"

這時你會得到以下訊息:

Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com

Created: c:\Profiles\User1\MyDocs
Targetted at: d:\tmp\My Documents

代表你已經成功建立 C:\Profiles\User1\MyDocs 目錄,而這個目錄是一個 "NTFS 連接點"。從檔案總管中,你完全無法看出這目錄到底是「真實目錄」或是「NTFS 連接點」,但你可以透過「命令提示字元模式」以 dir 指令查看此目錄是不是一個 "NTFS 連接點" (如下圖示)。

你可以透過「命令提示字元模式」以 dir 指令查看此目錄是不是一個 "NTFS 連接點"

若要刪除 "NTFS 連接點" 我發現有三種方式,要是你選錯方式,你的資料就會全部不見,所以使用上要小心謹慎,不要因為偷懶就用檔案總管進行刪除動作:

1. 使用標準的Junction 工具程式進行刪除 ( 建議用法 )

junction -d c:\Profiles\User1\MyDocs

2. 使用檔案總管進行刪除 ( 將"NTFS 連接點" 目錄丟進「資源回收筒」 ),當你用了這招刪除,事實上只是將 "NTFS 連接點" 移到「資源回收筒」而已,所以 "NTFS 連接點" 其實是還在的,所以你的來源目錄裡的檔案還會存在,不過當你「清空資源回收筒」時,包含你的原本的目錄下所有檔案都會一併被刪除!

將"NTFS 連接點" 目錄丟進「資源回收筒」

3. 使用檔案總管進行刪除 ( 使用 Shift + Delete 直接刪除 ),這也是最無藥可救的方式 (其實有藥),一次刪除殆盡,包含你的原本的目錄下所有檔案都會一併被刪除!

在特別提醒一點,如果你從 "NTFS 連接點" 的上層目錄開始刪除的話,你原本資料夾下的目錄一樣會消失喔。又如果你因為使用了 "NTFS 連接點" 而「忘記」有這件事還刪除此目錄的話,那真的算你倒楣了,檔案會全數消失!

如果不放心,還是建議各位不要使用,以免檔案遺失而不自知。不過對於一些罕見的使用情境,確實是一個很棒的解決方案。

相關連結