1. 程式人生 > >linux軟連結和硬連結

linux軟連結和硬連結

               

簡而言之:

軟連結相當於windows中的快捷方式

硬連結相當於一個災備系統,資料存放在兩處,與複製不同的是兩處之間存在同步機制,一處資料的改變會實時同步到另一處,另外一處資料如果被刪除了,不會影響到另一處的資料.

下面是詳細的介紹:
存在兩種不同型別的連結,軟連結和硬連結。修改其中一個,硬連線指向的是節點(inode),而軟連線指向的是路徑(path)

軟連結檔案
軟連結又叫符號連結,這個檔案包含了另一個檔案的路徑名。可以是任意檔案或目錄,可以連結不同檔案系統的檔案。和win下的快捷方式差不多。 連結檔案甚至可以連結不存在的檔案,這就產生一般稱之為"斷鏈"的問題(或曰“現象"),連結檔案甚至可以迴圈連結自己。類似於程式語言中的遞迴。

命令格式:
程式碼: ln [-s] source_path target_path 硬連結檔案
info ln 命令告訴您,硬連結是已存在檔案的另一個名字,硬連線的命令是:
程式碼: ln -d existfile newfile   //如果不加任何引數,預設情況下是硬連結.

硬連結檔案

硬連結檔案有兩個限制:
1、不允許給目錄建立硬連結;
2、只有在同一檔案系統中的檔案之間才能建立連結。

對硬連結檔案進行讀寫和刪除操作時候,結果和軟連結相同。但如果我們刪除硬連結檔案的原始檔,硬連結檔案仍然存在,而且保留了原有的內容。這時,系統就“忘記”了它曾經是硬連結檔案。而把他當成一個普通檔案。修改其中一個,與其連線的檔案同時被修
改.

程式碼:
$ cp /etc/httpd/conf/httpd.conf /usr/sam
$ ln httpd.conf httpd1.conf (硬連結)
$ ln -s httpd.conf httpd2.conf
(軟連結)
第一條為硬連結,第二條為軟連結

程式碼:
$ ls -li   //檢視一個檔案或目錄的inode,要通過ls 命令的的 -i引數,inode值相同的檔案,他們的關係是互為硬連結的關係

程式碼:
總用量 80
1077669 

   -rw-r--r--     2 sam       adm          34890 10月 31 00:57 httpd1.conf (連線數變為2)
1077668   lrwxrwxrwx     1 sam       adm             10 10月 31 00:58 httpd2.conf -> httpd.conf (類似於Win快捷方式)
1077669   -rw-r--r--     2 sam       adm          34890 10月 31 00:57 httpd.conf (連線數變為2)

可以看到,使用ls -li,軟連線只產生了10位元組的快捷而已,硬連線卻實實在在的的拷貝。最前面的inode硬連結和原始檔是一樣的
,而軟連結不一樣.對http1.conf進行編輯,可以發現httpd.conf也發生了一樣的變化.

程式碼:
$ rm httpd.conf

現在刪除連結的原始檔,來比較不同之處

程式碼:
$ ls -l
總用量 44
drw-r--r--     2 sam       adm           4096 10月 30 20:14 file6
-rw-r--r--     1 sam       adm          34890 10月 31 00:57 httpd1.conf
lrwxrwxrwx     1 sam       adm             10 10月 31 00:58 httpd2.conf -> httpd.conf


發現,httpd2.conf實際已經不存在了,是斷鏈,而httpd1.conf變也了普通檔案.

============================================================================

詳細示例分析(截圖):

檢視硬連結ln關聯的所有檔案及路徑

ls -i  myInfo.txt

3814056 myInfo.txt

find / -inum 3814056 

/home/homer/me/myInfo.txt
/home/homer/me/.me/myInfo.txt_ln
/home/homer/bin/myInfo.txt

=============================================================================

一 連結檔案
連結有兩種方式,軟連結和硬連結。

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 Index)。
    在Linux中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案才會被真正刪除。
軟連結檔案有點類似於Windows的快捷方式。它實際上是特殊檔案的一種。在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。

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

硬連結就沒有上面的缺陷,你想怎麼移就怎麼移