轉自:http://www.cnblogs.com/yfanqiu/archive/2012/06/11/2545556.htmlhtml
Linux 系統中有軟連接和硬連接兩種特殊的「文件」。node
軟連接能夠看做是Windows中的快捷方式,可讓你快速連接到目標檔案或目錄。linux
硬連接則透過文件系統的inode來產生新檔名,而不是產生新檔案。網絡
建立方法都很簡單:3d
inode指針
要解釋清楚二者的區別和聯繫須要先說清楚 linux 文件系統中的 inode 這個東西。當劃分磁盤分區並格式化的時候,整個分區會被劃分爲兩個部分,即inode區和data block(實際數據放置在數據區域中)這個inode便是(目錄、檔案)文件在一個文件系統中的惟一標識,須要訪問這個文件的時候必須先找到並讀取這個文件的 inode。 Inode 裏面存儲了文件的不少重要參數,其中惟一標識稱做 Inumber, 其餘信息還有建立時間(ctime)、修改時間(mtime) 、文件大小、屬主、歸屬的用戶組、讀寫權限、數據所在block號等信息。htm
一般會根據分區的用途來安排inode的數量(這是另一個話題了),好比文件數量不少而文件都很小,則須要調增inode較大,以便能索引所有文件。不然將會出現這個分區並無寫滿而沒法寫入任何文件的狀況。blog
目錄文件與檔案文件索引
目錄文件:記錄該目錄下的文件名get
檔案文件:記錄實際文件數據
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時,內核纔會把文件內容從磁盤上刪除。
儘管硬連接節省空間,也是Linux系統整合文件系統的傳統方式,可是存在一些不足之處:
1.不容許給目錄建立硬連接。
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.軟連接沒有任何文件系統的限制,任何用戶能夠建立指向目錄的符號連接
總之,創建軟連接就是創建了一個新文件。當訪問連接文件時,系統就會發現他是個連接文件,它讀取連接文件找到真正要訪問的文件。
固然軟連接也有硬連接沒有的缺點:由於連接文件包含有原文件的路徑信息,因此當原文件從一個目錄下移到其餘目錄中,再訪問連接文件,系統就找不到了,而硬連接就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於創建新的索引節點和保存原文件的路徑。