linux 軟連線和硬鏈結的區別

2022-07-24 23:00:27 字數 3758 閱讀 8189

2011-06-27 zale的圖...

閱 3345 轉 23

轉藏到我的圖書館

分享:4點不同 : 

(1)軟連線可以 跨檔案系統 ,硬連線不可以 。實踐的方法就是用共享檔案把windows下的 aa.txt文字文件連線到linux下/root目錄 下 bb,cc . ln -s aa.txt /root/bb 連線成功 。ln aa.txt /root/bb 失敗 。

(2)關於 i節點的問題 。硬連線不管有多少個,都指向的是同乙個i節點,會把 結點連線數增加 ,只要結點的連線數不是 0,檔案就一直存在 ,不管你刪除的是原始檔還是 連線的檔案 。只要有乙個存在 ,檔案就 存在 (其實也不分什麼 原始檔連線檔案的 ,因為他們指向都是同乙個 i節點)。 當你修改原始檔或者連線檔案任何乙個的時候 ,其他的 檔案都會做同步的修改 。軟鏈結不直接使用i節點號作為檔案指標,而是使用檔案路徑名作為指標。所以 刪除連線檔案 對原始檔無影響,但是 刪除 原始檔,連線檔案就會找不到要指向的檔案 。軟鏈結有自己的inode,並在磁碟上有一小片空間存放路徑名.(這一段是個什麼意思?)

(3)軟連線可以對乙個不存在的檔名進行連線 。

(4)軟連線可以對目錄進行連線。

備註:i節點 :它是unix內部用於描述檔案特性的資料結構.我們通常稱i節點為檔案索引結點(資訊結點).i節點 含有關於檔案的大部分的重要信 息,包括檔案資料塊在磁碟上的位址.每乙個i節點有它自己的標誌號,我們稱為檔案順序號.i節點包含的資訊 1.檔案型別 2.檔案屬主關係 3.檔案的訪問許可權 4.檔案的時間截.

索引節點(inode)

要了解鏈結,我們首先得了解乙個概念,叫索引節點(inode)。在linux系統中,核心為每乙個新建立的檔案分配乙個inode(索引結點),每個檔案都有乙個惟一的inode號,我們可以將inode簡單理解成乙個指標,它永遠指向本檔案的具體儲存位置。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。系統是通過索引節點(而不是檔名)來定位每乙個檔案。

硬鏈結(hard link)

硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配inode。

可以用:ln命令來建立硬鏈結。

引用ln [options] existingfile newfile

ln [options] existingfile-list directory

用法:第一種為」existingfile」建立硬鏈結,檔名為」newfile」。

第二種在」directory」目錄中,為」 existingfile-list」中包含的所有檔案建立乙個同名的硬鏈結。

常用可選[options]:-f 無論」newfile」存在與否,都建立鏈結。-n 如果」newfile」已存在,就不建立鏈結。

軟鏈結(soft link)

軟鏈結又叫符號鏈結,這個檔案包含了另乙個檔案的路徑名。可以是任意檔案或目錄,可以鏈結不同檔案系統的檔案。和win下的快捷方式差不多。

可以用:ln -s 命令來建立軟鏈結。

引用ln -s existingfile newfile

ln -s existingfile-list directory

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

現在目錄下有兩個檔案,乙個名為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時,核心才會把檔案內容從磁碟上刪除。

儘管硬鏈結節省空間,也是linux系統整合檔案系統的傳統方式,但是存在一些不足之處:

1.不允許給目錄建立硬鏈結。

2.不可以在不同檔案系統的檔案間建立鏈結。

接著我們做乙個指向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。

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

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

連線計數count

前面我們介紹了,檔案的鏈結計數域表明本系統中共有幾個檔案目錄項的inode和本檔案相同,也就是本檔案共有幾個硬鏈結。如上面的例子中aaa和aaahard檔案的count值都是2。 

那麼對於目錄,其count域的含義是什麼呢?目錄的count同樣表示共有多少個目錄項指向此目錄,不過要詳細說明必須進一步解釋vfs檔案系統的結構,為簡單起見,只要這樣理解就行了:(count-2)等於本目錄包含的直接子目錄數(就是只包括兒子,不包括孫子)。

例如:如果乙個目錄/ln的count域為5,那麼/ln目錄一定包含3個子目錄。

linux 軟連線和硬鏈結的區別

1 軟連線可以 跨檔案系統 硬連線不可以 實踐的方法就是用共享檔案把windows下的 aa.txt文字文件連線到linux下 root目錄 下 bb.ln s aa.txt root bb 連線成功 ln aa.txt root bb 失敗 2 關於 i節點的問題 硬連線不管有多少個,都指向的是同...

Linux硬鏈結和軟連線的區別

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

linux 軟連線和硬鏈結的區別

預設不帶引數情況下,ln命令建立的是硬鏈結。硬鏈結原檔案 鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案 鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案 在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來。4點不同 1 軟連線可以 跨檔案系統 硬連線不可以 實踐...