對硬鏈接與軟件鏈接的理解

首先看一下文件建立的過程當中發生了什麼node

建立一個文件,首先分配一個inode block ,這個block用來記錄文件的名字,屬性,及內容據磁盤的索引linux

而後,分配data block, 這個bock用來存儲 數據的windows

而後,在目錄的data 裏增長文件名及文件的inode 索引,網絡

 

硬鏈接, 就是在目錄的data 裏增長一個名字,及被硬鏈接的文件node號,同時,修改那個文件的node裏的名字列表,增長一個指向父結點的指針。數據結構

在Linux系統中,內核爲每個新建立的文件分配一個Inode(索引結點),每一個文件都有一個唯一的inode號。文件屬性保存在索引結點裏,在訪問文件時,索引結點被複制到內存在,從而實現文件的快速訪問。學習

連接是一種在共享文件和訪問它的用戶的若干目錄項之間創建聯繫的一種方法。Linux中包括兩種連接:硬連接(Hard Link)和軟連接(Soft Link),軟連接又稱爲符號連接(Symbolic link)。符號鏈接至關於Windows下的快捷方式。spa

1、硬連接指針

硬連接說白了是一個指針,指向文件索引節點,系統並不爲它從新分配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時,內核纔會把文件內容從磁盤上刪除。

還能夠在不一樣目錄,但同一文件系統中創建文件的硬連接。設file一、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)只有超級用戶才能夠爲目錄建立硬連接。

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來學習。

3、刪除連接

有建立就有刪除

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.文件的時間截.

相關文章
相關標籤/搜索