在 Linux 系統中, 核心為每一個新建立的檔案分配一個 Inode(索引結點), 每個檔案都有一個惟一的 inode 號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複制到記憶體在,從而實現檔案的快速訪問。

  連結是一種在共享檔案和訪問它的使用者的若干目錄項之間建立聯絡的一種方法。 Linux 中包括兩種連結:硬連結 (Hard Link) 和軟連結 (Soft Link), 軟連結又稱為符號連結(Symbolic link)。符號連線相當於 Windows 下的快捷方式。

一、硬連結

硬連結說白了是一個指標,指向檔案索引節點,系統並不為它重新分配 inode 。可以用:ln 命令來建立硬連結。
語法:
ln [options] existingfile newfile(sexistingfile 待建立連結檔案的檔案,newfile 是新建立的連結檔案)
ln [options] existingfile-list directory

-f 建立時,將同檔案名刪除.
-i 刪除前進行詢問.

ln -s abc cde 建立 abc 的軟連線
ln abc cde 建立 abc 的硬連線,

用法:
第一種: 為”existingfile” 建立硬連結, 檔名為”newfile” 。
第二種: 在”directory” 目錄中, 為”existingfile-list” 中包含的所有檔案建立一個同名的硬連結。
常用可選 [options] –f 無論”newfile” 存在與否, 都建立連結。-n 如果”newfile” 已存在, 就不建立連結。

下面舉一些例子:

[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
[root@rekfan.com test]# ln file2 file2hand
[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#

注意在建立連結前,file1 顯示的連結數目為 1, 建立連結後 file1 和 file1hard 的連結數目都變為 2;file1 和 file1hard 在 inode 號是一樣的 file1 和 file1hard 顯示的檔案大小也是一樣。可見進行了 ln 命令的操作結果:file1 和 file1hard 是同一個檔案的兩個名字,它們具有同樣的索引節點號和檔案屬性,建立檔案 file1 的硬連結,就是為 file1 的檔案索引節點在當前目錄上建立一個新指標。你可以刪除其中任何一個, 如 rm file2 , 每次只會刪除一個指標, 連結數同時減一, 當連結數減為 0 時,核心才會把檔案內容從磁碟上刪除。

還可以在不同目錄,但同一檔案系統中建立檔案的硬連結。設 file1 、 file2 在目錄/home/root/dir1 中,下面的命令,在/home/root 中建立 file2 的硬連結。

ln file2 /home/root/file2hard
下面的程式,是將 dir1 目錄中所有檔案,在目錄 dir2 中建立硬連結
#mkdir dir2
#ln /home/root/dir1/* /home/root/dir2

如果使用了 ln –f existingfile newfile, 如果 newfile 已經存在,則無論原來 newfile 是什麼檔案,只用當前使用者對它有寫許可權,newfile 就成為 exisitngfile 的硬連結檔案。

儘管硬連結節省空間,也是 Linux 系統整合檔案系統的傳統方式,但是存在一下不足之處:
(1)不可以在不同檔案系統的檔案間建立連結
(2)只有超級使用者才可以為目錄建立硬連結。

二、軟連結(符號連結)

軟連結克服了硬連結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號連結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網際網路對檔案進行連結。
建立軟連結,只要在 ln 後面加上選項 –s,下面舉個例子

[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand

[root@rekfan.com test]# ln -s file1 file1soft
[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand

從上面連結後的結果可以看出來軟連結與硬連結,區別不僅僅是在概念上,在實現上也是不同的。區別:硬連結原檔案&連結檔案公用一個 inode 號,說明他們是同一個檔案,而軟連結原檔案&連結檔案擁有不同的 inode 號,表明他們是兩個不同的檔案;在檔案屬性上軟連結明確寫出了是連結檔案,而硬連結沒有寫出來,因為在本質上硬連結檔案和原檔案是完全平等關係;連結數目是不一樣的,軟連結的連結數目不會增加;檔案大小是不一樣的,硬連結檔案顯示的大小是跟原檔案是一樣的,這用強調,因為是等同的嘛,而這裡軟連結顯示的大小與原檔案就不同了,file1 大小是 48B,而 file1soft 是 5B,這裡面的 5 實際上就是 “file1” 的大小。

總之,建立軟連結就是建立了一個新檔案。當訪問連結檔案時,系統就會發現他是個連結檔案,它讀取連結檔案找到真正要訪問的檔案。
在不同系統之間建立軟連結、對目錄建立連結,這裡就不舉例了,讀者可以自己去嘗試,我也是在不斷實踐中學習的。
當然軟連結也有硬連結沒有的缺點,因為連結檔案包含有原檔案的路徑資訊,所以當原檔案從一個目錄下移到其他目錄中,再訪問連結檔案,系統就找不到了~~,而硬連結就沒有這個缺陷,你想怎麼移就怎麼移(呵呵);還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。

補充一下:可以透過 symlink 來檢視連結檔案,可以用 man symlink 來學習。

三、刪除連結

有建立就有刪除

rm -rf symbolic_name 注意不是 rm -rf symbolic_name/

[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]# rm -rf file1soft
[root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#

————————————
linux 軟連線和硬連結的區別:
————————————

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. 檔案的時間截.