linux下軟鏈接和硬鏈接的聯繫

來源:文萃谷 1.76W

鏈接——是一種在共享文件和訪問它的用户的若干目錄項之間建立聯繫的一種方法。在Linux中分為軟鏈接(hard link)和硬鏈接(soft link),其中軟鏈接又稱為符號鏈接(symbolic link)。下面小編準備了linux下軟鏈接和硬鏈接的聯繫,提供給大家參考!

linux下軟鏈接和硬鏈接的聯繫

  1、索引節點:

在linux系統中對文件的管理本質上是通過其索引節點進行管理的。從系統的角度來看,文件的索引節點(inode)是文件的唯一標識,它包含了文件系統處理文件所需要的全部信息。詳細來説,實際上存在兩種類型的索引節點

內核索引節點(in-core indoe):保存在內存中,在系統中每個打開的文件都對應着一個內核索引節點,

磁盤索引節點(on-disk inode):在文件系統中的每一個文件都有一個磁盤索引節點,保存在磁盤上,它所保存的具體信息與文件系統的類型有關。

注 意:這兩種索引節點的關係為:當進程打開一個文件時,文件的磁盤索引節點中的信息就會被載入內存,並建立一個內核索引節點。當內核索引節點被修改後,系統 負責將其同步到磁盤上。磁盤索引節點與對應的內核索引節點所保存的信息並不是完全相同的。內核索引節點記錄的是關於文件的更通用的一些信息,而忽略掉於具 體文件系統類型相關的一些信息。

  2、硬鏈接:

就是讓一個文件對應一個或者多個文件名,或者説文件名和文件系統使用的節點號鏈接起來,這些文件可以在同一目錄或者不同目錄下。一個文件名對應多個文件名,稱作該文件的鏈接數。例如:

ln [options] existingfile newfile

ln [options] existingfile-list directory

用法:

第一種為”existingfile”創建硬鏈接,文件名為”newfile”。

第二種在”directory”目錄中,為” existingfile-list”中包含的所有文件創建一個同名的硬鏈接。

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

  3、軟鏈接:

又稱為符號鏈接,實際上是一中特殊的文件,這種文件包含了另一個文集那的人一個路徑名。這個路徑名指向位於任意一個文件系統的任意一個文件,甚至可以指向一個不存在的文件。系統會自動的把對符號鏈接的操作轉換為對源文件的操作。其使用和硬鏈接的使用類似,

軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。和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,創建鏈接後

和AAAhard的鏈接數目都變為2。

和AAAhard的inode號是一樣的,都是963922。

和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。

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

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

熱門標籤