歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux的inode、軟鏈接、硬鏈接

關於inode、軟硬鏈接的問題,最近幾天看了很多資料,驚奇的發現竟然資料之間有所沖突。有的甚至自己和自己都有沖突。現在感覺自己已經初步理解了這三個概念,發布在此,希望可以減少網絡上此類錯誤文章對新手的誤導。
  ln -s myfile.txt mylink //建立符號鏈接,即軟鏈接
  ln myfile.txt hardlink   //建立硬鏈接

inode

  Linux的文件系統(硬盤)分為2部分:inode table 與 data area。inode table上有許多的inode, 每個inode分別記錄一個檔案的屬性與這個檔案分布在哪些datablock上(也就是我們說的指針)。inode有兩個功能:記錄檔案屬性和指針。data area由很多datablock構成,data area記錄文件的真實內容。

硬鏈接

Hard Link 只是在某個目錄下新增一個該檔案的關連數據而已!
1.舉個例子來說,我的 /home/vbird/crontab 為一個 hard link 的檔案,他連結到 /etc/crontab 這個檔案,也就是說,其實 /home/vbird/crontab 與 /etc/crontab是同一個檔案,只是有兩個目錄( /etc 與 /home/vbird )記錄了 crontab 這個檔案的關連數據罷了!也就是說,我由 /etc 的 Block 所記錄的關連數據可知道 crontab 的 inode 放置在 A 處,而由 /home/vbird 這個目錄下的關連數據,contab
同樣也指到 A處的 inode! 所以,crontab 這個檔案的 inode 與 block 都沒有改變,有的只是有兩個目錄記錄了關連數據.
2.使用 hard link 設定連結文件時,磁盤的空間與 inode 的數目都不會改變!由上面的說明來看,我們可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據,所以當然不會用掉 inode 與磁盤空間。
3.當我們修改其中一個文件的內容時,互為硬鏈接的文件的內容也會跟著變化。如果我們刪除互為硬鏈接關系的某個文件時,其它的文件並不受影響.
4.由於 hard link 是在同一個 partition 上面進行數據關連的建立,所以 hard link 是有限制的:
  a. 不能跨 Filesystem.
  b. 不能 link 目錄。
5.假設已經建立若干me.txt的硬鏈接:ln me.txt hard_me.txt ……。
之後運行 ls -l: -rw-r--r--
3 younes younes 40 2009-12-03 16:36 hard_me.txt ,其中橙色底紋的數字代表指向該文件硬鏈接的數目。

軟鏈接

1. 軟鏈接也叫符號鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個標記。當我們刪除了源文件後,鏈接文件不能獨立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內容了.
2. Symbolic Link 與 Windows 的快捷方式可以給他劃上等號,由 Symbolic link 所建立的檔案為一個獨立的新的檔案,所以會占用調inode與block。

軟硬鏈接的區別

(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.文件的時間截 。
硬連接指通過索引節點來進行的連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(Inode Index )。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要的文件,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個連接被刪除後,文件的數據塊及目錄的連接才會被釋放。也就是說,文件才會被真正刪除。
軟鏈接文件有點類似於Windows的快捷方式。它實際上是特殊文件的一種。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。
軟鏈接是另一個文件,作用可以理解為一個指針,作用在這個文件上的操作除了刪除都直接轉向實際指向文件,由於是一個真實的文件所以占用磁盤空間 。硬鏈接可以認為不是一個文件,它只是實際文件的一個別名,它的作用是防止真實文件被誤操作,給一個文件建立硬鏈接後,他們互為別名,刪除其中任一個,只會刪除該別名,實際文件並不會被刪除。由於只是別名沒有任何其他信息,所以並不占用原始文件大小的磁盤空間。
參考資料:http://blog.chinaunix.net/u1/36085/showart_412257.html
http://dianping.blog.51cto.com/427241/95041
http://hi.baidu.com/lamron/blog/item/bf5a6a4c9af311fbd62afcc6.html
Copyright © Linux教程網 All Rights Reserved