1. 程式人生 > >win7下ntfs檔案系統的軟連線和硬連結

win7下ntfs檔案系統的軟連線和硬連結

Windows 7下的mklink命令通過指定引數可以建立出不同形式的檔案或目錄連結,分為硬連結(hard link)、符號連結(symbolic link)和軟連結(目錄聯接)(junction)三種。

1.符號連結(symbolic link) 相當於快捷方式
  建立一個軟連結相當於建立一個檔案(或目錄),這個檔案(或目錄)用於指向別的檔案(或目錄),和win的快捷方式有些類似。刪除這個連結,對原來的檔案(或目錄)沒有影像沒有任何影響;而當你刪除原檔案(或目錄)時,再開啟連結則會提示“位置不可用”。

2.軟連結(目錄聯接)(junction) 源路徑變更不會失效
  作用基本和符號連結類似。區別在於,軟連結在建立時會自動引用原檔案(或目錄)的絕對路徑,而符號連結允許相對路徑的引用。

3.硬連結(hard link)
  建立一個硬連結相當於給檔案建立了一個別名,例如對1.TXT建立了名字為2.TXT的硬連結,若使用記事本對1.TXT進行修改,則2.TXT也同時被修改,若刪除1.TXT,則2.TXT依然存在,且內容與1.TXT一樣。

建立連結請注意:
1、建立檔案或目錄連結限於 NTFS 檔案系統,符號(軟)連結的建立可以跨檔案系統;
2、硬連結只能用於檔案,不能用於目錄,符號(軟)連結可以為目錄建立連結;
3、硬連結只能建立同一分割槽內的檔案指向;
4、硬連結不允許對空檔案建立連結,符號(軟)連結可以。

Mklink的引數定義

無引數指定:建立檔案的符號連結。無引數指定的預設情況下,建立的是檔案的符號連結,刪除連結檔案不會影響原始檔,
/d:建立目錄的符號連結符號連結(symbolic link)
/j:建立目錄的軟連結(目錄聯接)(junction)
/h:建立檔案的硬連結(hard link)

命令格式:mklink /d(定義引數) \MyDocs(連結檔案) \Users\User1\Documents(原檔案)

最後,至於刪除建立的連結,跟刪除檔案一樣使用”DEL”命令。 ntfs磁碟格式有個高階特性——軟連結和硬連結! 他們有什麼區別我就不具體說了,網上很多(其實是讓我說我也說不出來)。 我稍微具體說下mklink這個命令。 mklink 便是用來建立符號連結的,這個命令並不知名,使用的人也不多。 自從 Vista 以後,微軟便在 widows中 偷偷地用起了這個工具 。 在使用者目錄下,可以看到很多很像快捷方式的檔案,當然這是隱藏的,但卻不能開啟,其實這便是符號連結。 mklink 用於建立 NTFS 檔案系統中檔案或目錄的連結,以從底層(檔案系統)實現檔案或目錄的快捷方式或別名, 以這種方式建立的檔案或目錄連結對於應用程式是透明的; 通過指定引數可以創建出不同形式的檔案或目錄連結,具體分為硬連結、軟連結和符號連結三種, 下面是這個命令的引數及說明(引數格式請直接在 cmd 下執行 mklink 檢視)。 預設情況:檔案的符號連結 如沒有引數指定,則建立檔案的符號連結,刪除檔案連結不會影響目標檔案,且建立連結時允許目標檔案不存在[1]; 目錄的符號連結(SYMLINKD) /D 該引數可以建立目錄的符號連結,刪除目錄連結不會影響目標目錄,且建立連結時允許目標目錄不存在; 目錄的軟連結(JUNCTION) /J 該引數可以建立目錄的軟連結(聯接),作用基本和符號連結類似[2],NT6系統的使用者目錄就是以這種形式存在的; 檔案的硬連結 /H 該引數可以建立檔案的硬連結,即一個檔案的多個別名[3],NT6系統WinSXS目錄下的大部分檔案是以這個形式存在的; [1] 建立符號連結和軟連結時允許目標檔案或目錄不存在,此時若訪問連結檔案會得到一個“位置不可用”的提示,      若之後重新將目標檔案或目錄補上(路徑、名稱一致即可),則該連結仍然有效; [2] 目錄符號連結和軟連結的區別在於,軟連結在建立時會自動引用目標目錄的絕對路徑,而符號連結允許相對路徑的引用,      如分別用 mklink /D dira tdir 和 mklink /J dirb tdir 建立 dira、dirb 對 tdir 的符號連結和軟連結,      之後將 dira、dirb 移動到其它目錄下,則訪問 dira 時會提示“位置不可用”,訪問 dirb 時仍然正常指向 tdir;      而分別用 mklink /D dira c:\demo\tdir 和 mklink /J dirb c:\demo\tdir 建立 c:\demo\tdir 的符號連結和軟連結,      再將這兩個目錄連結移動到其它目錄下,則 dira 和 dirb 均可正常指向 c:\demo\tdir;      由此可見當建立目錄連結時對目標目錄使用絕對路徑,D 和 J 兩個引數實現的目錄連結效果是一樣的; [3] 只能建立檔案的硬連結,使用 /H 引數建立目錄的硬連結時會提示拒絕訪問;      硬連結是同一個檔案的不同別名,例如對 a.txt 建立了 b.txt 和 c.txt 兩個硬連結,      此時 a.txt、b.txt 和 c.txt 均是同一個檔案的別名,若刪除其中任意一個或兩個,      則剩下的那個檔案(無論是事先存在還是之後建立)不受影響,仍然指向原先那個檔案。 最後再說幾點: 建立檔案或目錄連結僅限於 NTFS 檔案系統,且連結只能針對同一個磁碟上的檔案或目錄; 硬連結只能建立對本分割槽檔案的引用,即不可建立跨分割槽的檔案硬連結; 通過硬連結建立的別名檔案在統計大小時會按原檔案的大小計算,而軟連結和符號連結大小均為零; 硬連結在建立時會事先檢測目標檔案是否存在,即不允許空連結的存在。 應用: 1備份搜狗高速瀏覽器的配置檔案(對於經常重灌系統的同學來說,我認為這還是很不錯的一個方法) 搜狗高速瀏覽器的配置檔案預設在C:\Users\zx\AppData\Roaming\SogouExplorer,不能自己設定存放位置,我們可以執行以下命令:mklink /D C:\Users\zx\AppData\Roaming \SogouExplorer D:\Junction\SogouExplorer,將C:\Users\zx\AppData\Roaming\SogouExplorer這個目錄 對映到D:\Junction\SogouExplorer這個目錄,以後重灌什麼的,直接運 行這個命令就OK了,配置什麼的都會和以前一樣。 這個大家可以發揮發揮,舉一反三,比如備份cookies什麼的也不是不可以的(WIN7旗艦版下親測)。但是怎麼把系統預設的那個Cookies資料夾給替換掉就看大家自己本事了。 2轉移臨時資料夾的位置,以減少磁碟碎片的產生 mklink /D C:\Users\zx\AppData\Local\Temp D:\Junction\Temp 補充下: Sysinternals Suite中也有個叫Junction的小工具,也可以建連結,但它和mklink貌似有點區別。 因為Junction語法更簡單些,我一直用它來建連結,我運行了這個命令Junction C:\Users\zx\AppData\Local\Temp D:\Junction\Temp 貌似一直都沒發現有問題,直到有一天,我發現我的windows照片檢視器打不開任何圖片了,提示什麼無許可權什麼的錯誤,具體什麼我忘了,囧!後來還遇到ChromePlus擴充套件無法安裝,一裝擴充套件ChromePlus就崩潰…… 經過好長時間的探索,才發現是Junction C:\Users\zx\AppData\Local\Temp D:\Junction\Temp這個命令惹的禍,用mklink C:\Users\zx\AppData\Local\Temp D:\Junction\Temp就沒問題,再囧一個! 後來知道大名鼎鼎的Nirsoft有個小工具可以檢視特定目錄下的連結,ntfslinksview,可以在這裡下載到 http://www.nirsoft.net/utils/ntfs_links_view.html 執行後發現它對mklink建的連結顯示是正確的,軟連結或硬連結,然而用junction的,是吧,型別就顯示為junction,然後對目標資料夾什麼的顯示貌似也有問題,很是無語。 不知道是Junction這個工具的bug還是什麼,或者它和mklink原本就機理不同?無從得知! 所以我還是推薦使用mklink啦,畢竟是系統自帶的,相容性更好!