对硬连接与软件连接的理解
2019獨角獸企業重金招聘Python工程師標準>>>
首先看一下文件創建的過程中發生了什么
創建一個文件,首先分配一個inode block ,這個block用來記錄文件的名字,屬性,及內容據磁盤的索引
然后,分配data block, 這個bock用來存儲 數據的
然后,在目錄的data 里增加文件名及文件的inode 索引,
?
硬連接, 就是在目錄的data 里增加一個名字,及被硬連接的文件node號,同時,修改那個文件的node里的名字列表,增加一個指向父結點的指針。
在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.文件的時間截.
轉載于:https://my.oschina.net/u/147624/blog/63418
總結
以上是生活随笔為你收集整理的对硬连接与软件连接的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx+fastcgi实现动静分离架
- 下一篇: Ubuntu显示隐藏文件和文件夹