1. 程式人生 > >linux中軟連結和硬連結的區別與小結

linux中軟連結和硬連結的區別與小結

首先我們需要了解linux下硬連結以及軟連線的基本概念.

硬連結:新建的檔案是已經存在的檔案的一個別名,當原檔案刪除時,新建的檔案仍然可以使用.

軟連結:也稱為符號連結,新建的檔案以“路徑”的形式來表示另一個檔案,和Windows的快捷方式十分相似,新建的軟連結可以指向不存在的檔案.

下面詳細介紹一下硬連結和軟連線之間的區別.

1.硬連結和原來的檔案沒有什麼區別,而且共享一個 inode 號(檔案在檔案系統上的唯一標識);而軟連結不共享 inode,也可以說是個特殊的 inode,所以和原來的 inode 有區別。

2.若原檔案刪除了,則該軟連線則不可以訪問,而硬連線則是可以的。

3.由於符號連結的特性,導致其可以跨越磁碟分割槽,但硬連結不具備這個特性.

另外在轉載一下網上的介紹.

硬連結(hard link) ln 

UNIX檔案系統提供了一種將不同檔案連結至同一個檔案的機制,我們稱這種機制為連結。它可以使得單個程式對同一檔案使用不同的名字。這樣的好處是檔案系統只存在一個檔案的副本。系統簡單地通過在目錄中建立一個新的登記項來實現這種連線。該登記項具有一個新的檔名和要連線檔案的inode號(inode與原檔案相同)。不論一個檔案有多少硬連結,在磁碟上只有一個描述它的inode,只要該檔案的連結數不為0,該檔案就保持存在。硬連結不能對目錄建立硬連結!

硬連線是直接建立在節點表上的(inode),建立硬連線指向一個檔案的時候,會更新節點表上面的計數值。舉個例子,一個檔案被連線了兩次(硬連線),這個檔案的計數值是3,而無論通過3個檔名中的任何一個訪問,效果都是完全一樣的,但是如果刪除其中任意一個,都只是把計數值減1,不會刪除實際的內容的,(任何存在的檔案本身就算是一個硬連線)只有計數值變成0也就是沒有任何硬連線指向的時候才會真實的刪除內容。

軟連結(symbolic link) ln-s

我們把符號連結稱為軟連結,它是指向另一個檔案的特殊檔案,這種檔案的資料部分僅包含它所要連結檔案的路徑名。軟連結是為了克服硬連結的不足而引入的,軟連結不直接使用inode號作為檔案指標,而是使用檔案路徑名作為指標(軟連結:檔名 + 資料部分-->目標檔案的路徑名)。軟體有自己的inode,並在磁碟上有一小片空間存放路徑名。因此,軟連結能夠跨檔案系統,也可以和目錄連結!其二,軟連結可以對一個不存在的檔名進行連結,但直到這個名字對應的檔案被建立後,才能開啟其連結。

 

 

 

ln命令
  該命令在檔案之間建立連結。這種操作實際上是給系統中已有的某個檔案指定另外一個可用於訪問它的名稱。對於這個新的檔名,我們可以為之指定不同的訪問許可權,以控制對資訊的共享和安全性的問題。 如果連結指向目錄,使用者就可以利用該連結直接進入被連結的目錄而不用打一大堆的路徑名。而且,即使我們刪除這個連結,也不會破壞原來的目錄。
  語法:ln [選項] 目標 [連結名]
  ln [選項] 目標 目錄
  連結有兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。建立硬連結時,連結檔案和被連結檔案必須位於同一個檔案系統中,並且不能建立指向目錄的硬連結。而對符號連結,則不存在這個問題。預設情況下,ln產生硬連結。
  在硬連結的情況下,引數中的“目標”被連結至[連結名]。如果[連結名]是一個目錄名,系統將在該目錄之下建立一個或多個與“目標”同名的連結檔案,連結檔案和被連結檔案的內容完全相同。如果[連結名]為一個檔案,使用者將被告知該檔案已存在且不進行連結。如果指定了多個“目標”引數,那麼最後一個引數必須為目錄。
  如果給ln命令加上- s選項,則建立符號連結。如果[連結名]已經存在但不是目錄,將不做連結。[連結名]可以是任何一個檔名(可包含路徑),也可以是一個目錄,並且允許它與“目標”不在同一個檔案系統中。如果[連結名]是一個已經存在的目錄,系統將在該目錄下建立一個或多個與“目標”同名的檔案,此新建的檔案實際上是指向原“目標”的符號連結檔案。
================================================================
對於一個檔案來說,有唯一的索引接點(inode)與之對應,而對於一個索引接點號,卻可以有多個檔名與之對應。因此,在磁碟上的同一個檔案可以通過不同的路徑去訪問該檔案。注意在Linux下是一切皆檔案的啊,資料夾、新加的硬碟 ...都可以看著檔案來處理的啊。
連線有軟連線和硬連線(hard link)之分的,軟連線(symbolic link)又叫符號連線。符號連線相當於Windows下的快捷方式。
*************************** 不可以對 資料夾/目錄 建立硬連線的,我們通常用的還是軟連線比較多。

 

eg:

ln -s source     dist     #  建立軟連線

ln     source     dist     #   建立硬連線

 

 

它們到底有什麼區別呢?上次也好好的看了,好象同文件系統的結構有一定的關係,沒怎麼太詳細的研究下次看明白了再加上。
----------------------
軟連結實際上只是一段文字,裡面包含著它所指向的檔案的名字,系統看到軟連結後自動跳到對應的檔案位置處進行處理;相反,硬連結為檔案開設一個新的目錄項,硬連結與檔案原有的名字是平權的,在Linux看來它們是等價的。由於這個原因,硬連結不能連線兩個不同檔案系統上的檔案。
軟連線與windows下的快捷方式類似
至於硬連線,舉個例子說吧,你把dir1/file1硬連線到dir2/file2, 就是在dir2下建立一個dir1/file1的映象檔案file2,它與file1是佔用一樣大的空間的,並且改動兩者中的一個,另一個也會發生同樣的改動.
軟連線和硬連線可以這樣理解:
硬連線就像一個檔案有多個檔名,
軟連線就是產生一個新檔案(這個檔案內容,實際上就是記當要連結原檔案路徑的資訊),這個檔案指向另一個檔案的位置,
硬連線必須在同一檔案系統中,而軟連線可以跨檔案系統
硬連線 :原始檔名和連結檔名都指向相同的實體地址,目錄不能夠有硬連線,檔案在磁碟中只有一個複製,可以節省硬碟空間,由於刪除檔案要在同一個索引節點屬於唯一的連線時才能成功,因此可以防止不必要的誤刪除軟連線(符號連線)用ln -s命令建立檔案的符號連線,符號連線是linux特殊檔案的一種,作為一個檔案,它的資料是它所連線的檔案的路徑名,類似於硬體方式,******可以刪除原始檔案 而連線檔案仍然存在。********
本文試圖清晰徹底的解釋軟連結和硬連結檔案的區別
一 連結檔案
連結有兩種方式,軟連結和硬連結。
  1 軟連結檔案
  軟連結又叫符號連結,這個檔案包含了另一個檔案的路徑名。可以是任意檔案或目錄,可以連結不同檔案系統的檔案。
**********連結檔案甚至可以連結不存在的檔案,這就產生一般稱之為'斷鏈'的問題(或曰“現象'),連結檔案甚至可以迴圈連結自己。類似於程式語言中的遞迴。
  用ln -s 命令可以生成一個軟連線,如下:
  [[email protected] test]# ln -s source_file softlink_file
  在對符號檔案進行讀或寫操作的時候,系統會自動把該操作轉換為對原始檔的操作,但刪除連結檔案時,系統僅僅刪除連結檔案,而不刪除原始檔本身。
  2 硬連結檔案
  info ln 命令告訴您,硬連結是已存在檔案的另一個名字(A 'hard link' is another name for an existing file),這多少有些令人困惑。硬連線的命令是
  ln -d existfile newfile
  硬連結檔案有兩個限制
  1)、不允許給目錄建立硬連結;
  2)、只有在同一檔案系統中的檔案之間才能建立硬連結。
  ***********對硬連結檔案進行讀寫和刪除操作時候,結果和軟連結相同。但如果我們刪除硬連結檔案的原始檔,硬連結檔案仍然存在,而且保留了願有的內容。
***********這時,系統就“忘記”了它曾經是硬連結檔案。而把他當成一個普通檔案。
二 兩者之間的區別
硬連線指通過索引節點來進行的連線。在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號(Inode Number)。
在Linux中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。*******硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要
檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個
連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案才會被真正刪除。
軟連結檔案有點類似於Windows的快捷方式。它實際上是特殊檔案的一種。在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。
三 個人體會
軟連結是另一個檔案,作用可以理解為一個指標,******作用在這個檔案上的操作除了刪除都直接轉向實際指向檔案,由於是一個真實的檔案所以佔用磁碟空間
硬連結可以認為不是一個檔案,它只是實際檔案的一個別名,它的作用是防止真實檔案被誤操作,給一個檔案建立硬連結後,他們互為別名,刪除其中任意一個,
這樣用RM命令只會刪除該別名,實際檔案並不會被刪除。只有連結數為0時,才會刪除原始檔案