硬連結概念
硬連結,一個檔案有幾個檔案名稱(用ln命令實現多個檔案名稱),我們就說該檔案的連結數為幾。由定義可知,此連結數可以是1, 這表明該檔案只有一個檔案名稱。總之,硬連結就是讓多個不在或者同在一個目錄下的檔案,同時能夠修改同一個檔案,其中一個修改後,所有與其有硬連結的檔案都一起修改了。
關於Windows系統的硬連結
簡介
Windows系統的硬連結是一種針對檔案的特殊捷徑,只不過這種捷徑的實現和一般的捷徑不一樣,是NTFS檔案系統特有的屬性之一,在Linux下面,也有類似的機制。認識了硬連結究竟是怎么一回事,理解硬連結的兩個限制就容易多了。
1、硬連線適用於在同一個卷的檔案級別,不允許給目錄創建硬連結;
2、硬連線是不能跨卷的,只有在同一檔案系統中的檔案之間才能創建連結。
Windows系統的硬連結,系統屬性測試
WindowsVista/Windows7自帶了創建硬連線的命令:mklink.exe,利用這個命令,我們可以給指定的檔案創建硬連線:下面的命令將在link.txt和source.txt之間建立硬連線關係
C:\Users\hoii\Desktop》mklink/hlink.txtgb.txt
為link.txt《《===》》gb.txt創建了硬連結
注意上面的例子:link.txt本是一個不存在的檔案,但是當執行完mklink命令以後,link.txt檔案也就被創建了。其實,link.txt是一個虛假的檔案,它是在檔案系統層面上對gb.txt檔案的一個映射,而link.txt是不占硬碟空間的。
關於硬碟空間的占用問題,可以這樣測試:
1、給硬碟劃分一個新分區,空間只有2GB
2、在這個分區的test目錄裡面新建了一個1.9GB大小的檔案,此時剩餘空間是0.1GB
3、用mklink命令給這個1.9GB大小的檔案建立了一個硬連線
4、檢查這個分區的剩餘空間,還是0.1GB,但是如果用資源管理器看test目錄的屬性,會發現有2個檔案,總大小是3.8GB(整個分區才2GB,能夠容納3.8GB大小的檔案嗎?顯然不可能了)
還是針對上述的例子,如果我們把原始的檔案gb.txt刪除以後,link.txt檔案還是會繼續存在的,且內容就是source.txt的檔案內容。也就是說,我們刪除gb.txt,實際上刪除的僅僅是這種連線關係,檔案本身還是沒有被操作的。
關於硬連線,最後一個需要介紹的內容是:當硬連線建立以後,硬連線雙方任何一個對象被修改,都會造成對應的連線對象被修改。例如上面的例子:如果修改了link.txt,那么gb.txt檔案也會同步被修改,反之亦然。這一點和SHELL層面的捷徑不同,SHELL層面的捷徑檔案LNK僅僅是一個指示關係,修改LNK檔案並不影響LNK檔案指向的對象,修改LNK檔案指向的對象也不會影響LNK檔案。
硬連結在Windows系統下的套用
1.節省硬碟空間。同樣的檔案,只需要維護硬連線關係,不需要進行多重的拷貝,這樣可以節省硬碟空間。2.重命名檔案。重命名檔案並不需要打開該檔案,只需改動某個目錄項的內容即可。
3.刪除檔案。刪除檔案只需將相應的目錄項刪除,該檔案的連結數減1,如果刪除目錄項後該檔案的連結數為零,這時系統才把真正的檔案從磁碟上刪除。
4.檔案更新。如果涉及檔案更新,只需要先在WinSxS目錄裡面下載好一個新版本,然後修改Windows\System32下面同名檔案的硬連線關係,從舊版本的硬連線指向新版本的硬連線,這樣就能夠快速的完成檔案的更新工作,而不需要進行檔案的複製,速度也會快不少。
5.卸載補丁。遇到需要補丁卸載的情況,只需要把硬連線指向改為舊版本就可以了,沒有檔案替換的問題。而且建立了硬連線關係的檔案之間的修改是同步的,因此只要有一方被修改了,另一方也會得到修改。
篇幅關係,不再贅述。
關於Linux系統的硬連結
硬連結的定義
Linux 檔案系統最重要的特點之一是它的檔案連結。連結是對檔案的引用,這樣您可以讓檔案在檔案系統中多處被看到。不過,在 Linux 中,連結可以如同原始檔案一樣來對待。連結可以與普通的檔案一樣被執行、編輯和訪問。對系統中的其他應用程式而言,連結就是它所對應的原始檔案。當您通過連結對檔案進行編輯時,您編輯的實際上是原始檔案。連結不是副本。有兩種類型的連結:硬連結和符號連結(軟連結)。硬連結只能引用同一檔案系統中的檔案。它引用的是檔案在檔案系統中的物理索引(也稱為 inode)。當您移動或刪除原始檔案時,硬連結不會被破壞,因為它所引用的是檔案的物理數據而不是檔案在檔案結構中的位置。硬連結的檔案不需要用戶有訪問原始檔案的許可權,也不會顯示原始檔案的位置,這樣有助於檔案的安全。如果您刪除的檔案有相應的硬連結,那么這個檔案依然會保留,直到所有對它的引用都被刪除。
硬連結與軟連結的區別
在Linux的檔案系統中,保存在磁碟分區中的檔案不管是什麼類型都給它分配一個編號,稱為索引節點號inode 。軟連線,其實就是新建立一個檔案,這個檔案就是專門用來指向別的檔案的(那就和windows 下的捷徑的那個檔案有很接近的意味)。軟連線產生的是一個新的檔案,但這個檔案的作用就是專門指向某個檔案的,刪了這個軟連線檔案,那就等於不需要這個連線,和原來的存在的實體原檔案沒有任何關係,但刪除原來的檔案,則相應的軟連線不可用(cat那個軟連結檔案,則提示“沒有該檔案或目錄“)硬連線是不會建立inode的,他只是在檔案原來的inode link count域再增加1而已,也因此硬連結是不可以跨越檔案系統的。相反都是軟連線會重新建立一個inode,當然inode的結構跟其他的不一樣,他只是一個指明源檔案的字元串信息。一旦刪除源檔案,那么軟連線將變得毫無意義。而硬連結刪除的時候,系統調用會檢查inode link count的數值,如果他大於等於1,那么inode不會被回收。因此檔案的內容不會被刪除。
硬連結實際上是為檔案建一個別名,連結檔案和原檔案實際上是同一個檔案。可以通過ls -i來查看一下,這兩個檔案的inode號是同一個,說明它們是同一個檔案;而軟連結建立的是一個指向,即連結檔案內的內容是指向原檔案的指針,它們是兩個檔案。
軟連結可以跨檔案系統,硬連結不可以;軟連結可以對一個不存在的檔案名稱(filename)進行連結(當然此時如果你vi這個軟連結檔案,linux會自動新建一個檔案名稱為filename的檔案),硬連結不可以(其檔案必須存在,inode必須存在);軟連結可以對目錄進行連線,硬連結不可以。兩種連結都可以通過命令 ln 來創建。ln 默認創建的是硬連結。使用 -s 開關可以創建軟連結。