linux的硬鏈接和軟連接的區別及說明
1)軟鏈接(符號鏈接symbol),等同于Windows中快捷方式
ln -s 源文件名 符號鏈接文件名,源文件名和符號鏈接文件名是主從關系,源被刪了,符號鏈接也就失效了
eg: ln -s src.c linker.c (linker.c就是src.c的一個符號鏈接文件);
2)硬鏈接,ln 源文件名 符號鏈接文件名,源文件名和符號鏈接文件名是并列關系,源被刪了,符號鏈接依然有效。硬鏈接實際上和源文件在硬盤中是同一個東西,效果類似于硬盤上的一個文件,在文件系統上,在我們看來有好多個文件一樣。每次刪除一個文件時,只要他還有其他的硬鏈接存在,這個文件就不會被真正刪除。只有等所有的鏈接文件都刪除掉了,這個文件才會被真正從硬盤上刪除
軟鏈接與硬鏈接的區別(通俗):
硬鏈接可認為是一個文件擁有兩個文件名;
而軟鏈接則是系統新建一個鏈接文件,此文件指向其所要指的文件
若源文件改名,則軟連接不可用(找不到源文件);硬鏈接可正常訪問到源文件;
修改軟連接、硬鏈接和源文件,訪問三者都是同步變化的。
軟鏈接首先,我建立link_test.txt的測試文件,建立軟連接指向測試文件
ln -s 源文件 軟連接
查看軟連接的內容和源文件內容一樣,接著編輯了軟連接后,查看軟連接和原測試文件
說明編輯軟連接就是編輯原文件。測試刪除軟連接后原文件正常,刪除源文件后軟連接失效。
同樣,當我們修改任何一個軟鏈接文件都會使內容發生改變,文件都保持同步變化。我們也可以看到軟鏈接只有18Kb并不會占用磁盤空間。它只是一個原文件的引用,當我們將原文件刪除以后,引用將會失效。
硬鏈接ln 源文件 硬連接
建立硬鏈接后發現,硬鏈接的大小和原文件一樣,并且索引節點號也一樣。當我們改變硬鏈接的文件內容時,同樣也會改變原文件的內容。
改變原文件內容,軟硬鏈接內容也都同步改變:
軟連接失效,硬鏈接正常
當我們用cp命令復制軟鏈接時,我們復制的是原文件,而不是一個軟鏈接。
復制軟、硬鏈接后,對復制文件修改,都不會影響原文件。
由于 Linux 下的文件是通過索引節點(inode)來識別文件,硬鏈接可以認為是一個指針, 指向文件索引節點的指針,系統并不為它重新分配 inode 。每添加一個一個硬鏈接,文件的鏈接 數就加 1 。
不足:
1. 不可以在不同文件系統的文件間建立鏈接;
2. 只有超級用戶才可以為目錄創建硬鏈接。
軟鏈接軟鏈接克服了硬鏈接的不足,沒有任何文件系統的限制,任何用戶可以創建指向目錄的符 號鏈接。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對文件 進行鏈接。
不足:
因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄 中,再訪問鏈接文件,系統就找不到了,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移; 還有它要系統分配額外的空間用于建立新的索引節點和保存原文件的路徑。
實際場景下,基本是使用軟鏈接。
總結區別如下:
硬鏈接不可以跨分區,軟件鏈可以跨分區。
硬鏈接指向一個 inode 節點,而軟鏈接則是創建一個新的 inode 節點。
刪除硬鏈接文件,不會刪除原文件,刪除軟鏈接文件,會把原文件刪除。
總結以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。
