电竞比分网-中国电竞赛事及体育赛事平台

分享

Windows XP下創(chuàng)建目錄的符號鏈接

 sduwalker 2011-01-12
在Windows XP下創(chuàng)建目錄的符號鏈接

因為開發(fā)一個項目,需要類似linux的ln -s 一樣創(chuàng)建一個目錄的快捷方式。但是windows xp下沒有比較好的方法。于是google發(fā)現(xiàn)了這個小東西。Junction. 
詳見http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx 
一句話,Junction 就是windows下的ln -s. 

用法: 
To create a junction c:\Program-Files for "c:\Program Files": 
C:\>md Program-Files 
C:\>junction c:\Program-Files "c:\Program Files" 
To delete a junction, use the –d switch: 
junction -d c:\Program-Files 
下載附件解到c:\wondows\system32下。執(zhí)行上面的命令。即可。 
不信任我的包的朋友,請到上面提到的microsoft.com的網(wǎng)址里下載也可以。


使用微軟的Junction小工具在NTFS分區(qū)下實現(xiàn)文件和目錄的符號鏈接

學過操作系統(tǒng)原理或者Linux的朋友應該都知道鏈接分為兩種:一種是硬鏈接,一種是符號鏈接。Windows中的快捷方式就是符號鏈接在應用層的實現(xiàn)。不過他只完成了對文件的符號鏈接,對于目錄來說,他的快捷方式仍然是一個文件,無法對其進行目錄的操作。

(這里簡單解釋一下硬鏈接和符號鏈接的概念和區(qū)別:硬鏈接就是在目錄文件里只增加一個目錄項,指向目標文件。假設(shè)有A指向文件X,硬鏈接就是增加一個目錄項B再指向X,打開A或B就直接打開了X;刪除了A以后,X仍然在磁盤上,因為有B指向它;只有同時刪除了A和B以后,X才真正被刪除。而符號鏈接則增加了一個新的文件C,它的內(nèi)容是X的路徑,打開C的步驟是先打開C,讀出X的路徑,進而再打開X。刪除了C,X還在;但如果刪除了A,X就不在了)

NTFS引入了一項新技術(shù)Jucntion實現(xiàn)目錄的符號鏈接,可惜在XP中并未提供相關(guān)的工具。但我們可以在Vista/7中看到Juntion功能的具體實現(xiàn):Vista 的 C:\Documents and Settings 目錄和 C:\Users 目錄內(nèi)容完全一樣,如果對其中一個進行修改或者刪除,那么另外一個也會發(fā)生變化,就仿佛是鏡像一般。其實,C:\Documents and Settings 就是C:\Users 的一個符號鏈接,可能是由于微軟覺得C:\Documents and Settings 太長不好記,于是才把縮短成C:\Users 的吧。但是又考慮到兼容性問題,才做了一個符號鏈接實現(xiàn)兩個文件夾的同步。

=========================================================================================================
說了這么多廢話,現(xiàn)在說說怎么在XP下完成目錄的符號鏈接吧。首先先下載一個Junction的小工具(下載地址在文末),貌似是一個微軟sysinternals的程序員無聊時的作品。這是一個命令行工具,語法是"junction LinkDirectory ExistingDirectory",例如"junction d:\link c:\windows",這樣就在D盤建立了一個指向C:\windows的符號鏈接了。
有朋友可能要問了,這個工具有什么用呢?目前來看有以下幾個用途,更多的用法期待大家來發(fā)現(xiàn):
1.解決分區(qū)空間不夠的問題。比如C盤滿了,就把一個大文件夾(像是大的程序安裝文件夾)簡單地移動到D盤,然后在C盤創(chuàng)建一個和原來路徑一樣的符號鏈接。這樣既沒有兼容性問題,也解決的分區(qū)空間不夠的問題。
2.整理同類的文件夾。比如我在C盤D盤E盤都有文件夾存放電影,我想把它整合到F盤里,便于管理和訪問。就可以在F盤分別建立它們的符號鏈接,這樣就可以在F盤里觀看和管理電影啦~
3.便于同步操作。把要備份或者同步的目錄符號鏈接到同一個目錄Sync中,這樣每次只需對Sync目錄進行同步即可。
Just Enjoy It !
==========================================================================================================

附:Junction下載地址:
http://download./Files/Junction.zip
http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx

參考文章:
http://www./bbs/viewthread.php?tid=3183
http://www./Unmi/archive/2007/11/26/163055.html
http://softbbs.pconline.com.cn/6346682.html
http://www./linux/article/unix/tigao/2009-04-14/16220.html
http://www./2009/0908/3681.html (Win7使用硬鏈接的例子)
http://wargrey./2009/09/25/36608/ (文末的討論很有趣)



符號鏈接、硬鏈接、快捷方式和Junctions

    UNIX系統(tǒng)支持符號鏈接和硬鏈接,也許大多數(shù)人都是在學習UNIX時第一次接觸這兩個概念的。DOS當初過于簡單,自然也不支持類似的概念。到了Windows的年代,產(chǎn)生了廣為使用的快捷方式。到Windows NT的時候,微軟逐步加入了對硬鏈接的支持。當然Windows中的實現(xiàn)還是不完全和UNIX一致。

1、UNIX中的符號鏈接(Symbolic links),可以鏈接目錄或文件、可以跨文件系統(tǒng)。創(chuàng)建符號鏈接時,不會增加目標文件的引用計數(shù)。刪除目標文件時,符號鏈接仍然存在,當然在使用它的時候會發(fā)現(xiàn)失效了。

3、Windows中的硬鏈接(Hard links),只能鏈接文件、不能鏈接目錄,而且不能跨文件系統(tǒng)。創(chuàng)建鏈接時,也會增加目標文件的引用計數(shù)(MSDN說最大可創(chuàng)建的硬鏈接數(shù)為1023)。這個和UNIX的硬鏈接類似。不過只能在NTFS文件系統(tǒng)中使用。創(chuàng)建硬鏈接的API為CreateHardLink()。

4、Windows中的快捷方式(Shortcuts),可以指向文件或目錄,也可以跨文件系統(tǒng)。符號鏈接仍然存在,當然在使用它的時候會發(fā)現(xiàn)失效了。它非常類似于UNIX的符號鏈接。

5、Windows中還有一個特殊的東西:Junctions。它只能指向目錄,也可以跨本機的文件系統(tǒng),但不能跨網(wǎng)絡文件系統(tǒng)。它類似于UNIX下的Mount。不過也只能在NTFS文件系統(tǒng)中使用。MSDN的知識庫文章“How to Create and Manipulate NTFS Junction Points”說明了如何用工具操縱Junctions,不過要在程序中使用Junctions,還是非常麻煩。這里有個很好的例子:Reparse points and junctions。

    不管是符號鏈接、硬鏈接,還是Junctions、Mount,都會給用戶帶來一定程序的方便,也會給我們帶來很多意想不到的麻煩。比如說,很多時候我們都需要遍歷一個目錄,并對遇到的目錄或文件做些操作。有時我們是在遍歷時修改文件的屬性,有時是修改它的名字,有時是想改變其內(nèi)容,還有的時候我們需要計算文件/目錄的大小。符號鏈接、硬鏈接等概念會可能我們的操作帶來不盡的煩惱。“Computing the size of a directory is more than just adding file sizes”還指出了更多需要注意的問題。

符號鏈接與硬鏈接有什么區(qū)別?
簡單的說:硬連接記錄的是目標的inode,符號連接記錄的是目標的 path。



Windows下的符號鏈接

換了新本本之后,不安于Windows Server 2003 R2了,之前也嘗試過Windows Vista / Windows 7 / Windows Server 2008,但最后都由于各種不爽的原因而放棄,主要還是電腦配置太差,這次終于有機會升級系統(tǒng)了,于是裝了Windows Server 2008 R2,用了兩個月感覺還不錯,各方面表現(xiàn)還算湊和,基本上還算爽。

發(fā)現(xiàn)2008R2的用戶目錄結(jié)構(gòu)有了點變化(Win7好像也相同),不再是以前那種 SYS:\Documents and Settings\xxx 了,改成了 SYS:\Users\xxx,即使是使用dir /a查看,有個隱藏的Documents and Settings也是指向[SYS:\Users]的JUNCTION。而且SYS:\User\xxx\之下的目錄結(jié)構(gòu)也有了大變化,之前Windows版本中的很多目錄都被移到了SYS:\User\xxx\AppData之下,SYS:\User\xxx\之下的目錄大都是一些用戶文件存放的目錄,以前都在“我的文檔”中,現(xiàn)在都被放到了用戶目錄中,一大堆“我的xx”目錄。

這樣問題就來了,以前我都是直接把“我的文檔”通過“移動”操作挪到D:盤,現(xiàn)在要挪一大堆目錄,而且有的還不能挪動。Google之,找到很多相關(guān)文章,修改注冊表的方法本人不太喜歡,相比之下覺得這個老外的“How to Move your Windows User Profile to another Drive” 寫的很不錯,很好很強大!原來NTFS早就支持JUNCTION了,只是我一直不知道,寒自己一個!也可能是本人使用Linux的緣故吧,對使用符號鏈接尤為鐘情。很輕松的就把我的用戶目錄挪到了D:盤,mklink還真是很強大。這幾天又把我的OpenSSHServer的git庫目錄挪到了我的Workspace目錄,OpenSSHServer里只放了一個JUNCTION,然后又把經(jīng)常和移動硬盤同步的幾個目錄都mklink到一個目錄里,這樣以后就只要同步一個目錄就OK了,實在是太方便了!

今天心血來潮突然想試試mklink在XP下的表現(xiàn),反正是NTFS都是支持JUNCTION的。在2008R2的整個系統(tǒng)盤中搜索mklink.exe居然沒搜到,Google一下才知道,原來mklink是一個DOS的內(nèi)部命令!暈了,再Google“mklink XP”,搜到兩個工具junction.exe和linkd.exe,都可以實現(xiàn)目錄的JUNCTION,果然很好用!可惜自己卻一直都不知道,在這一點上看來是本人對Windows有偏見了,總覺得它太差。

關(guān)于目錄聯(lián)接<JUNCTION>和目錄符號鏈接<SYMLINKD>之本人體會:
mklink /j 創(chuàng)建目錄聯(lián)接<JUNCTION>,類似于硬鏈接,但又不是硬鏈接,它使用絕對路徑,創(chuàng)建的鏈接可移動到任意位置使用;
mklink /d 創(chuàng)建目錄符號鏈接<SYMLINKD>,它可以使用相對路徑,使用相對路徑創(chuàng)建的鏈接,移動位置后不能工作。
另,mklink /j 只用于創(chuàng)建目錄聯(lián)接<JUNCTION>,而符號鏈接可以創(chuàng)建文件的或目錄的均可。

最后,轉(zhuǎn)載一些關(guān)于mklink的文字,由于已經(jīng)搞不清最終的原作者了,在此原作者表示無上的敬意!

---------------------------------------------- 無敵分割線 ---------------------------------------------------------

一、何為 mklink

mklink 是何方神圣,值得專門作文講述?
如果用過 Linux ,那想必也看到過符號鏈接(這是一種特殊的文件),也用過 “ ln ” 這個鏈接命令,mklink 和 ln 的功能幾乎一樣。
mklink   便是用來創(chuàng)建符號鏈接的,這個命令并不知名,使用的人也不多。

自從 Vista 以后,微軟便在 widows中 偷偷地用起了這個工具 。在用戶目錄下,可以看到很多很像快捷方式的文件,當然這是隱藏的,但卻不能打開,其實這便是符號鏈接。

>dir C:\Users\wclu   /a
驅(qū)動器 C 中的卷是 win7
卷的序列號是 8CD0-A743

C:\Users\wclu 的目錄

2009/06/11   11:42 <DIR>       .
2009/06/11   11:42 <DIR>       ..
2009/06/11   00:04 <DIR>       AppData
2009/06/11   00:04 <JUNCTION>     Application Data [C:\Users\wclu\AppData\Roaming]
2009/06/11   00:04 <DIR>       Contacts
2009/06/11   00:04 <JUNCTION>     Cookies [C:\Users\wclu\AppData\Roaming\Microsoft\Windows\Cookies]
2009/06/11   10:05 <DIR>       Desktop
2009/06/11   00:04 <DIR>       Documents
2009/06/11   02:44 <DIR>       Downloads
2009/06/11   00:04 <DIR>       Favorites
2009/06/11   00:04 <DIR>       Links
2009/06/11   00:04 <JUNCTION>     Local Settings [C:\Users\wclu\AppData\Local]
2009/06/11   00:04 <DIR>       Music
2009/06/11   00:04 <JUNCTION>     My Documents [C:\Users\wclu\Documents]

上述標紅色的文件,便是符號鏈接了(上述文件并非C:\Users\wclu目錄下全部文件) 。

Vista/Windows 7使用這些符號鏈接,是為了兼容XP等系統(tǒng)。

二、mklink 用法

mklink 只能在命令提示符 “CMD” 中使用。

>mklink /?
創(chuàng)建符號鏈接。

MKLINK [[/D] | [/H] | [/J]] Link Target

/D    創(chuàng)建目錄符號鏈接。黙認為文件
符號鏈接。
/H    創(chuàng)建硬鏈接,而不是符號鏈接。
/J    創(chuàng)建目錄聯(lián)接。
Link 指定新的符號鏈接名稱。
Target   指定新鏈接引用的路徑
(相對或絕對)。

注:上述的符號鏈接等同于Linux中的軟鏈接。

為了試驗 mklink 的功能,我在 C分區(qū)中創(chuàng)建目錄 a ,并在目錄中存放文件 1.txt。

創(chuàng)建文件鏈接
E:\>mklink c:\1 c:\a\1.txt拒絕訪問。

E:\>mklink c:\2.txt   c:\a\1.txt
為 c:\2.txt <<===>> c:\a\1.txt 創(chuàng)建的符號鏈接

可見為文件創(chuàng)建鏈接時,符號鏈接文件的擴展名要和原文件保持一致。

E:\>mklink c:\a\1.txt d:\3.txt
當文件已存在時,無法創(chuàng)建該文件。

E:\>mklink d:\3.txt c:\a\1.txt
為 d:\3.txt <<===>> c:\a\1.txt 創(chuàng)建的符號鏈接

可見為文件創(chuàng)建鏈接時,必須是 “mklink   符號鏈接文件名 原文件名”的格式。

創(chuàng)建目錄鏈接
E:\>mklink /d   c:\b d:\a
為 c:\b <<===>> d:\a 創(chuàng)建的符號鏈接

雖然d:\a 目錄不存在,但依然可以創(chuàng)建鏈接,很好很強大。但打開鏈接時,提示錯誤。

E:\>mklink /d d:\a c:\a
為 d:\a <<===>> c:\a 創(chuàng)建的符號鏈接

E:\>dir d: /a
驅(qū)動器 D 中的卷是 soft
卷的序列號是 BE86-8884

D:\ 的目錄

2009/06/11   10:00 <DIR>       $RECYCLE.BIN
2009/06/11   13:08 <SYMLINK>    3.txt [c:\a\1.txt]
2009/06/11   13:18 <SYMLINKD>     a [c:\a]
2009/06/11   12:54 <DIR>       Program Files
2009/06/11   09:58 <DIR>       System Volume Information
1 個文件              0 字節(jié)
4 個目錄 31,089,442,816 可用字節(jié)

當把D分區(qū)中的鏈接文件刪除時,C分區(qū)中的文件和文件夾不受任何影響。

三、mklink /d 與 makelink /j 的異同

從 mklink 的幫助中可以看到,兩者皆可以創(chuàng)建目錄鏈接。

細心的同學可以發(fā)現(xiàn),前者是創(chuàng)建目錄鏈接,而后者是創(chuàng)建目錄聯(lián)接。

一字之差,有何分別?

下面分別用這兩種方式為同一目錄創(chuàng)建鏈接:

E:\>mklink /j d:\a c:\a
為 d:\a <<===>> c:\a 創(chuàng)建的聯(lián)接

E:\>mklink /d d:\b c:\a
為 d:\b <<===>> c:\a 創(chuàng)建的符號鏈接

下面顯示D分區(qū)中的文件及目錄列表:

E:\>dir d: /a
驅(qū)動器 D 中的卷是 soft
卷的序列號是 BE86-8884

D:\ 的目錄

2009/06/11   10:00 <DIR>       $RECYCLE.BIN
2009/06/11   13:33 <SYMLINK>    1.txt [c:\a\1.txt]
2009/06/11   13:34 <JUNCTION>     a [c:\a]
2009/06/11   13:35 <SYMLINKD>     b [c:\a]
2009/06/11   12:54 <DIR>       Program Files
2009/06/11   09:58 <DIR>       System Volume Information
1 個文件              0 字節(jié)
5 個目錄 31,089,442,816 可用字節(jié)

mklink 不加參數(shù)或加參數(shù)   /d   時,創(chuàng)建的鏈接文件為<SYMLINK>型(<SYMLINKD>代表鏈接到目錄)。

當加參數(shù)   /j   時,只能為目錄創(chuàng)建聯(lián)接,并且創(chuàng)建的聯(lián)接文件為<JUNCTION>型,兩種類型的鏈接文件有顯著區(qū)別:

從最開始的 “ >dir C:\Users\wclu   /a ” 可以看出,微軟自家使用的都是<JUNCTION>型,至于為何,留待考證。

四、鏈接文件的特性

剛剛講述了如何用 mklink 創(chuàng)建鏈接文件,那么接下來重點講述如何鏈接文件的特性,既然是特性,那就是與眾不同了。

符號鏈接文件自身不能被 “復制”(只能通過特殊方法才能復制)
當復制符號鏈接文件時,會將符號鏈接所鏈接的目標文件或目錄進行復制,并非是復制符號鏈接文件本身。
如何實現(xiàn)符號鏈接文件的復制呢?
>copy /?
/L           如果源是符號鏈接,請將鏈接復制
到目標而不是源鏈接指向的實際文件。

>xcopy /?    /B           對照鏈接目標復制符號鏈接本身

/* d:\1.txt 為<SYMLINK>型符號鏈接 */
E:\>xcopy d:\1.txt e:\1.txt   /b
目標 E:\1.txt 是文件名
還是目錄名
(F = 文件,D = 目錄)? F
D:\1.txt
復制了 1 個文件

/* d:\a 為<JUNCTION>型符號鏈接 */
E:\>xcopy d:\a e:\a /B
目標 E:\a 是文件名
還是目錄名
(F = 文件,D = 目錄)? D
復制了 0 個文件

/* d:\b 為<SYMLINKD>型符號鏈接 */
E:\>xcopy d:\b e:\b /B
目標 E:\b 是文件名
還是目錄名
(F = 文件,D = 目錄)? D
復制了 0 個文件

E:\>dir e: /a
驅(qū)動器 E 中的卷是 data
卷的序列號是 FEEE-FB51

E:\ 的目錄

2009/06/11   10:00 <DIR>       $RECYCLE.BIN
2009/06/11   13:33 <SYMLINK>    1.txt [c:\a\1.txt]
2009/06/11   13:34 <DIR>       a
2009/06/11   13:35 <SYMLINKD>     b [c:\a]
2009/06/11   09:58 <DIR>       System Volume Information
1 個文件              0 字節(jié)
4 個目錄 31,362,203,648 可用字節(jié)

可見采用xcopy命令并上參數(shù) /B ,可以成功復制 <SYMLINK> 型的符號鏈接文件,而<JUNCTION>型鏈接卻不能被復制。

符號鏈接文件的透明性
符號鏈接的操作是透明的:對符號鏈接文件進行讀寫的程序會表現(xiàn)得直接對目標文件進行操作。
普通的文件操作命令(如cp、rm等)都能直接作用于符號鏈接。用于讀寫文件內(nèi)容的命令將會直接訪問目標文件。




在 Linux 使用的 ext2 等文件系統(tǒng)里,都有 hard link 與 symbolic link 的功能,這個功能簡單的說就是讓我們可以用多個路徑去訪問同一個文件或者目錄。比如說讓 /vmlinuz 和 /boot/vmlinuz-2.6.7-1-38 表示的是同一個文件。但 hard link 和 symbolic link 還是有區(qū)別的(廢話)。

Hard link 表示,它和原文件名指向的是存儲設(shè)備上同一個文件內(nèi)容。就好像這個文件內(nèi)容有多個文件名一樣,每個文件名有相等地位。刪除其中任何一個之后,事實上文件內(nèi)容并不會被刪除掉,仍然可以用其他的名稱來訪問這個文件。只有當最后一個指向這個文件內(nèi)容的文件名被刪除掉之后,文件內(nèi)容才被刪除。也就是說,一個文件的 hard link 跟此文件本來的名稱并沒有任何本質(zhì)上的區(qū)別。需要注意的是,因為每個分區(qū)(partition)上都可能有相同的存儲位置地址,所以 hard link 必須跟被 link 的文件在同一個分區(qū)上。另外,目錄不支持 hard link。Symbolic link 也稱 soft link,它類似于 Windows 里的快捷方式 .lnk 文件。它本身是一個單獨的文件,而這個文件的內(nèi)容是它所指向的文件的路徑。一般的程序存取 symbolic link 時存取的并不是它本身的內(nèi)容,而是它所指向的文件的內(nèi)容。當某個文件被刪除掉后,它的 symbolic link 就無法存取到這個文件了,因為文件本身已經(jīng)被刪除了。也就是說,一個文件的 symbolic link 跟此文件的文件名或者內(nèi)容都是完全不同的兩個東西。Symbolic link 可以鏈接任何本地可以訪問到的文件或者目錄路徑。

以上這些是我對 hard link 和 symbolic link 的理解,我試圖用跟文件系統(tǒng)無關(guān)和盡量通俗易懂的語言來解釋這兩個概念。但如果你是一個軟件開發(fā)者或者系統(tǒng)管理員或者僅僅是想知道更詳細的東西,強烈建議你去看看這個帖子。

OK,概念解釋清楚了。那么,NTFS 3.0 (Windows 2000 使用的 NTFS 的版本)事實上是支持 hard link 和 symbolic link 的,雖然 Windows 里沒有比較容易使用的相關(guān)工具,而且 Explorer 對待 symbolic link 也有很奇怪的行為。

在 Windows 2000 及以上版本里可以使用 fsutil hardlink create 這個復雜的命令來創(chuàng)建一個 hard link,用法倒是很簡單:

fsutil hardlink create <新文件名> <現(xiàn)有文件名>

也可以使用 GNU utilities for Win32 中的 ln 來創(chuàng)建 hard link。這是一些 GNU 工具的 Win32 移植版本,非常好用。另外 Cygwin 里的 ln 不但可以創(chuàng)建 hard link 也可以創(chuàng)建 symbolic link (在 Windows 里就是快捷方式 .lnk 文件)。

當然,如果你想在自己的程序里創(chuàng)建 hard link,那也是很容易的,只需要一個很簡單的 API 函數(shù):

BOOL CreateHardLink(
  LPCTSTR lpFileName,
  LPCTSTR lpExistingFileName,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

前兩個參數(shù)的意思就不用解釋了,最后一個參數(shù)的用途暫時保留,必須為 NULL。

對于 symbolic link,NTFS 只支持對目錄的 symbolic link,微軟把它稱作 junction。但是對于文件的 symbolic link,微軟也有提供解決方案,那就是快捷方式(Shortcut,.lnk 文件)。不過 symbolic link 和快捷方式不是一個層次上的東西,前者是底層文件系統(tǒng)的功能,后者是應用層的功能。

在“管理工具”中的“計算機管理”里的“磁盤管理”里我們可以將一個卷裝載到一個 NTFS 卷上的某個空目錄里,這實際上就是為被裝載卷的根目錄建立一個以該空目錄名為名的 symbolic link。也可以用命令行工具 MOUNTVOL 來完成這項工作。

遺憾的是 Windows 并沒有提供對 NTFS 的 symbolic link 完整支持的工具。“計算機管理”或者 MOUNTVOL 只能對某個卷的根目錄創(chuàng)建 symbolic link,而不是對任意目錄。幸運的是我們可以使用 Sysinternals 提供的帶有源代碼的免費命令行工具 junction.exe 來全功能的完成對 NTFS symbolic link 的管理。當然,微軟也還不至于太莫名其妙,它在 Windwos 2000 Resource Kit 里提供了一個命令行工具 linkd.exe 來完成這件事。不過它的查看 symbolic link 信息的功能不如 junction,因為不支持通配符和子目錄掃描。

需要注意的是,Explorer 對待 symbolic link 有一個很奇怪的行為。那就是,在 Explorer 里一個 symbolic link 跟被它 link 的目錄沒有區(qū)別,刪除這個 symbolic link 將會刪除被 link 的目錄下的所有文件!而著名的強大的方便的擴展性強的(原諒我在這里用了這么多修飾詞,我確實太喜歡 TC 了。)文件管理工具 Total Commander 則沒有這個問題。

文中的某些基本概念和知識來源于以下兩個頁面:
http://answers.google.com/answers/threadview?id=341355
http://phorum./viewtopic.php?t=12235



Windows Vista中的符號鏈接完全解析
相信使用過Unix的朋友都會對符號鏈接印象深刻,通過符號鏈接,可以方便地創(chuàng)建指向文件系統(tǒng)中其他文件的快捷方式,這在很多時候能夠給操作帶來極大的便利。不過,在Windows系統(tǒng)中,想要實現(xiàn)類似的功能則麻煩得多,雖然微軟自Windows 2000開始,便為NTFS卷引入了對名為Junction Point的symbolic link(符號鏈接)的支持,但是,在圖形界面下往往工作不太正常,很多時候不得不使用插件以保證該功能能夠使用。而且,Junction Point還有一個致命的缺陷,無論在Windows 2000 還是后續(xù)的Windows XP和Server 2003中,NTFS Junction Point只能被用于文件夾和卷,而不能用于文件。
  在Windows Vista中,微軟終于讓NTFS卷支持可以指向文件的符號鏈接 (symbolic link),至少從這個角度說,Windows Vista提供了接近于Unix的功能,相信這可以取悅部分Unix愛好者。
  在Windows Vista中創(chuàng)建符號鏈接 (symbolic link) 
  Windows Vista中專門提供了一個創(chuàng)建符號鏈接的工具,MkLink ,不過,只可在命令行中運行,而不是圖形界面。
  進入命令行
  要使用MkLink工具創(chuàng)建符號鏈接,必須首先進入到命令行窗口,并需提升至管理員權(quán)限。
  在開始菜單中右鍵單擊命令提示符 (Command Prompt)圖標,從彈出菜單中選擇“以管理員運行 (Run as Administrator)”

     MkLink命令的參數(shù)
  在命令提示符下輸入如下命令將顯示該工具的相應格式與參數(shù)。
  MkLink /?

     創(chuàng)建指向文件的符號鏈接 
  要創(chuàng)建指向某個文件的符號鏈接,只需依循相應的命令,如下圖所示,我們來創(chuàng)建一個指向MSPaint.exe,名為TestSymLink的符號鏈接。
  MKLINK TestSymLink %SystemRoot%\system32\mspaint.exe

       創(chuàng)建完成后,可以用Dir命令來查看一下:

       刪除符號鏈接 
  要刪除該符號鏈接則更為簡單,操作同刪除文件類似,不過,需要注意的是,這里刪除的只是符號鏈接,而非文件本身。
  DEL TestSymLink



Junction Introduction

Windows 2000 and higher supports directory symbolic links, where a directory serves as a symbolic link to another directory on the computer. For example, if the directory D:\SYMLINK specified C:\WINNT\SYSTEM32 as its target, then an application accessing D:\SYMLINK\DRIVERS would in reality be accessing C:\WINNT\SYSTEM32\DRIVERS. Directory symbolic links are known as NTFS junctions in Windows. Unfortunately, Windows comes with no tools for creating junctions—you have to purchase the Win2K Resource Kit, which comes with the linkd program for creating junctions. I therefore decided to write my own junction-creating tool:JunctionJunction not only allows you to create NTFS junctions, it allows you to see if files or directories are actually reparse points. Reparse points are the mechanism on which NTFS junctions are based, and they are used by Windows' Remote Storage Service (RSS), as well as volume mount points.

Please read this Microsoft KB article for tips on using junctions.

Notethat Windows does not support junctions to directories on remote shares.

If you want to view reparse information, the usage forJunction is the following:

 

Using Junction

Use junction to list junctions:

Usage: [-s]

-s    Recurse subdirectories

Examples:

To determine if a file is a junction, specify the file name:

junction c:\test

To list junctions beneath a directory, include the –s switch:

junction -s c:\

To create a junction c:\Program-Files for "c:\Program Files":

C:\>md Program-Files

C:\>junction c:\Program-Files "c:\Program Files"

To delete a junction, use the –d switch:

junction -d c:\Program-Files


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多