国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Windows XP下創(chuàng)建目錄的符號(hào)鏈接
在Windows XP下創(chuàng)建目錄的符號(hào)鏈接

因?yàn)殚_發(fā)一個(gè)項(xiàng)目,需要類似linux的ln -s 一樣創(chuàng)建一個(gè)目錄的快捷方式。但是windows xp下沒有比較好的方法。于是google發(fā)現(xiàn)了這個(gè)小東西。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í)行上面的命令。即可。 
不信任我的包的朋友,請(qǐng)到上面提到的microsoft.com的網(wǎng)址里下載也可以。


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

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

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

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

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

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

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



符號(hào)鏈接、硬鏈接、快捷方式和Junctions

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

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

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

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

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

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

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



Windows下的符號(hào)鏈接

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

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

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

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

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

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

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

一、何為 mklink

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

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

>dir C:\Users\wclu   /a
驅(qū)動(dòng)器 C 中的卷是 win7
卷的序列號(hào)是 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]

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

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

二、mklink 用法

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

>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ì))。

注:上述的符號(hào)鏈接等同于Linux中的軟鏈接。

為了試驗(yàn) 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)建的符號(hào)鏈接

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

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

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

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

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

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

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

E:\>dir d: /a
驅(qū)動(dòng)器 D 中的卷是 soft
卷的序列號(hào)是 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 個(gè)文件              0 字節(jié)
4 個(gè)目錄 31,089,442,816 可用字節(jié)

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

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

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

細(xì)心的同學(xué)可以發(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)建的符號(hào)鏈接

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

E:\>dir d: /a
驅(qū)動(dòng)器 D 中的卷是 soft
卷的序列號(hào)是 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 個(gè)文件              0 字節(jié)
5 個(gè)目錄 31,089,442,816 可用字節(jié)

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

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

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

四、鏈接文件的特性

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

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

>xcopy /?    /B           對(duì)照鏈接目標(biāo)復(fù)制符號(hào)鏈接本身

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

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

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

E:\>dir e: /a
驅(qū)動(dòng)器 E 中的卷是 data
卷的序列號(hào)是 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 個(gè)文件              0 字節(jié)
4 個(gè)目錄 31,362,203,648 可用字節(jié)

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

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




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

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

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

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

在 Windows 2000 及以上版本里可以使用 fsutil hardlink create 這個(gè)復(fù)雜的命令來創(chuàng)建一個(gè) 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 文件)。

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

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

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

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

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

遺憾的是 Windows 并沒有提供對(duì) NTFS 的 symbolic link 完整支持的工具。“計(jì)算機(jī)管理”或者 MOUNTVOL 只能對(duì)某個(gè)卷的根目錄創(chuàng)建 symbolic link,而不是對(duì)任意目錄。幸運(yùn)的是我們可以使用 Sysinternals 提供的帶有源代碼的免費(fèi)命令行工具 junction.exe 來全功能的完成對(duì) NTFS symbolic link 的管理。當(dāng)然,微軟也還不至于太莫名其妙,它在 Windwos 2000 Resource Kit 里提供了一個(gè)命令行工具 linkd.exe 來完成這件事。不過它的查看 symbolic link 信息的功能不如 junction,因?yàn)椴恢С滞ㄅ浞妥幽夸洅呙琛?/p>

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

文中的某些基本概念和知識(shí)來源于以下兩個(gè)頁面:
http://answers.google.com/answers/threadview?id=341355
http://phorum.study-area.org/viewtopic.php?t=12235



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

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

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

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

       刪除符號(hào)鏈接 
  要?jiǎng)h除該符號(hào)鏈接則更為簡單,操作同刪除文件類似,不過,需要注意的是,這里刪除的只是符號(hào)鏈接,而非文件本身。
  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


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Win7系統(tǒng)命令講解-mklink命令
華為網(wǎng)盤愛同步多文件夾(跨磁盤)同步攻略
Windows 7 mklink命令詳解 — 系統(tǒng)研究博客
比較 Windows 上四種不同的文件(夾)鏈接方式(NTFS 的硬鏈接、目錄聯(lián)接、符號(hào)鏈接,和大家熟知的快捷方式)
Windows建立目錄軟連接
Mklink的參數(shù)及使用 - Benny Blog
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服