linux 建立軟鏈結和硬鏈結

2022-06-23 15:09:08 字數 3800 閱讀 9955

linux 系統中有軟鏈結和硬鏈結兩種特殊的「檔案」。

軟鏈結可以看作是windows中的快捷方式,可以讓你快速鏈結到目標檔案或目錄。

硬鏈結則透過檔案系統的inode來產生新檔名,而不是產生新檔案。

建立方法都很簡單:

軟鏈結(符號鏈結) ln -s   source  target 

硬鏈結 (實體鏈結)ln       source  target

inode

要解釋清楚兩者的區別和聯絡需要先說清楚 linux 檔案系統中的 inode 這個東西。當劃分磁碟分割槽並格式化的時候,整個分割槽會被劃分為兩個部分,即inode區和data block(實際資料放置在資料區域中)這個inode即是(目錄、檔案)檔案在乙個檔案系統中的唯一標識,需要訪問這個檔案的時候必須先找到並讀取這個 檔案的 inode。 inode 裡面儲存了檔案的很多重要引數,其中唯一標識稱作 inumber, 其他資訊還有建立時間(ctime)、修改時間(mtime) 、檔案大小、屬主、歸屬的使用者組、讀寫許可權、資料所在block號等資訊。

通常會根據分割槽的用途來安排inode的數量(這是另外乙個話題了),比如檔案數量很多而檔案都很小,則需要調增inode較大,以便能索引全部檔案。否則將會出現這個分割槽並沒有寫滿而無法寫入任何檔案的情況。

目錄檔案與檔案檔案

目錄檔案:記錄該目錄下的檔名

檔案檔案:記錄實際檔案資料

inode本身並不記錄檔名,檔名記錄在目錄檔案的block當中,所以新增、刪除、更改檔名與目錄的w許可權有關。因此當我們要讀某個檔案時,就務必經過其目錄的inode和block,然後才能夠找到待讀取檔案的inode號,最終才會讀到正確的檔案block內的資料。系統是通過索引節點(而不是檔名)來定位每乙個檔案。

目錄inode(滿足許可權?) => 目錄block => 檔案inode(滿足許可權?) => 檔案block

硬鏈結

多個檔名對應同乙個inode,硬鏈結只是在某個目錄下新增一筆檔名鏈 接到某個inode號碼的關聯記錄而已。如果將上圖中任何乙個檔名刪除,檔案的inode與block都還存在,依然還可以通過另乙個檔名來讀取正確的檔 案資料。此外,不論用哪乙個檔名來編輯,最終的結果都會寫入相同的inode和block中,因此均能進行資料的修改。

軟連線

軟連線就是建立乙個獨立的檔案,而這個檔案會讓資料的讀取指向它link的那個檔案的檔名,由於只是作為指向的動作,所以當**檔案被刪除之後,軟連線的檔案無法開啟,因為找不到源檔名。鏈結檔的內容只有檔名,根據檔名鏈結到正確的目錄進一步取得目標檔案的inode,最終就能夠讀取到正確的資料。如果目標檔案的源檔名被刪除了那麼整個環節就進行不下去了。

下面用乙個例項來說明硬鏈結和軟鏈結。

現在目錄下有兩個檔案,乙個名為aaa,乙個名為bbb。

引用$ ls -il

963922 -rw-r--r-- 1 ocean ocean 92 2007-05-18 15:46 aaa

963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 bbb

首先先做乙個aaa的硬鏈結。

引用$ ln aaa aaahard

$ls -il

963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 aaa

963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 aaahard

963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 bbb

這裡我們注意在建立鏈結前,aaa顯示的鏈結數目為1,建立鏈結後

1.aaa和aaahard的鏈結數目都變為2。

2.aaa和aaahard的inode號是一樣的,都是963922。

3.aaa和aaahard顯示的檔案大小也是一樣,都是92b。

可見進行了ln命令的操作結果:aaa和aaahard是同乙個檔案的兩個名字, 它們具有同樣的索引節點號和檔案屬性,建立檔案aaa的硬鏈結,就是為 aaa的檔案索引節點在當前目錄上建立乙個新指標。你可以刪除其中任何乙個,如rm aaa,每次只會刪除乙個指標,鏈結數同時減一,只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪除。

2.不可以在不同檔案系統的檔案間建立鏈結。因為 inode 是這個檔案在當前分割槽中的索引值,是相對於這個分割槽的,當然不能跨越檔案系統了。

接著我們做乙個指向bbb的軟鏈結,軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。

引用$ ln -s bbb bbbsoft

$ ls -il

總用量 0

963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 aaa

963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 aaahard

963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 bbb

963924 lrwxrwxrwx 1 ocean ocean 3 2007-05-18 15:47 bbbsoft -> bbb

從上面鏈結後的結果可以看出來軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是完全不同的。

區別:

1.硬鏈結原檔案/鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案/鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案;

2.在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;

3.鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加;

4.檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的。而這裡軟鏈結顯示的大小與原檔案就不同了,bbb大小是95b,而bbbsoft是3b。因為bbb共有3個字元

5.軟鏈結沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結

總之,建立軟鏈結就是建立了乙個新檔案。當訪問鏈結檔案時,系統就會發現他是個鏈結檔案,它讀取鏈結檔案找到真正要訪問的檔案。

當然軟鏈結也有硬鏈結沒有的缺點:因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。

Linux命令 建立軟鏈結和硬鏈結

linux 系統中有軟鏈結和硬鏈結兩種特殊的 檔案 軟鏈結可以看作是windows中的快捷方式,可以讓你快速鏈結到目標檔案或目錄。硬鏈結則透過檔案系統的inode來產生新檔名,而不是產生新檔案。建立方法 軟鏈結ln s source targe 硬鏈結 ln source target 軟鏈結可以看...

Linux 硬鏈結和軟鏈結

硬鏈結是通過鏈結原始檔的索引節點來進行有效鏈結。linux系統中的每個檔案都有乙個自己的索引節點,如同資料庫中的每條記錄都有自己的唯一索引一樣。自我感覺硬鏈結就像是windows下乙個檔案的拷貝,唯一不同的地方是多個該檔案的拷貝 硬鏈結 通過原始檔的索引節點來共享和更新自己的內容,一旦該節點上的任一...

Linux軟鏈結和硬鏈結

1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...