INODE索引節點與軟硬鏈接的理解

  1. INODE索引節點

      在Linux中,一切皆文件,都是以文件形式進行存儲。

      對於文件,它有兩個屬性,一個是自身屬性,又稱文件的元數據,表明這個文件自身的屬性情況,如 文件的創建者是誰,所屬組是哪個,文件的權限是什麼,創建的時間,修改的時間...可以通過stat命令進行文件自身屬性的查詢,具體用法stat file;file是你要查詢的文件。

      另一個屬性是寫入文件中的內容,又稱它的數據屬性,該屬性可以通過cat,vim等命令進行數據 查看或者修改。文件的主要作用就是用來存儲數據的,但是如果缺少文件的自身屬性這些信息,那麼文件的查看,修改,移動等操作就會變得極其複雜,同樣也會加重系統資源的消耗,所以文件的元數據也是極其重要的。

      Linux中存放着大量的文件,爲了方便對文件進行查詢等操作,創建文件節點號inode是非常有必 要的。inode節點號就相當於文件的"門牌號",當要進行文件讀寫等操作時,就需要先獲取該文件 的"門牌號",然後就可以根據這個"門牌號"直接找到文件所在位置,這些複雜的尋址操作都發生在系統內部,不需要人爲進行參與。

wKioL1ea3ROCzr_KAAAlnQdyYxg297.gif

  如上圖所示,通過stat命令就可以查看該文件的元數據信息。

  wKiom1ea5GXjtGIVAAArhzEoUmo241.gif

   從上圖,我們可以對inode表結構有個更清晰的瞭解,表結構中存儲了文件自身屬性相關信息,以 及指向數據塊的指針,通過查看文件系統可以瞭解到每個數據塊具體的大小,就能夠知道,一個索引節點能夠存儲多大的信息,如果直接塊指針就能將文件中的所有數據"安排"到指定的數據塊中,那麼就不需要動用到間接塊指針,如果文件過大,直接塊指針使用完了,但是還有數據沒有存儲到數據塊中,那麼間接塊指針就會啓用,它指向的不是具體的數據塊,而是指向下一個文件塊的指針,再由下一個文件塊的指針指向數據塊,這樣該索引節點的存儲能力就比它實際存儲能力擴大了一倍,三重指針也是這個原理。

   一個目錄就是目錄下的文件名和文件inode號的映射。

   一般inode表會佔用文件系統磁盤空間的1%。

 cp與inode 

   分配一個空閒的inode號,在inode表中生成新的條目,在目錄中創建一個目錄項,將名稱與inode號關聯,拷貝數據生成新文件。

 rm與inode 

    鏈接數遞減,從而釋放的inode號可以被重用

    把數據塊彷彿空閒列表中

    刪除目錄項

    數據實際上不會馬上被刪除,但當另一個數據使用這個數據塊時將被覆蓋   

 mv與inode

    用新的文件名創建對應新的目錄項

    刪除舊目錄條目對應的就得文件名

    不影響inode表(除時間戳)或磁盤上的位置,沒有數據被移動

    如果目標和源不在一個文件系統上,那麼mv相當於cp+rm 


2.軟硬鏈接

  2.1 硬鏈接

   wKiom1ea8B7y7PG_AAApeVl_-C0017.gif

    創建硬鏈接會增加額外的記錄項以引用文件

    對應於同一文件系統上一個物理文件

    每個目錄引用相同的inode號

    創建時鏈接數遞增

    刪除文件時:

      rm命令遞減計數的鏈接

     文件要存在,至少有一個鏈接,當鏈接數爲0時,該文件被刪除,沒有指針指向該文件所在的數據塊,無法被讀取。

     不能跨越驅動器或者分區

    ln filename [linkname]font

   wKioL1ea8ADi6JF3AAANVeXxxo8375.gif

  2.2 軟鏈接

    一個符號鏈接指向另一個文件

    ls -l 顯示鏈接的名稱和引用的文件

    一個軟鏈接的內容是它引用文件的名稱

    可以對目錄進行

    可以跨分區

    指向的是另一個文件的路徑,其大小爲指向路徑的字符串長度,不增加或減少目標文件inode引用計數

    ln -s filename [linkname] 

   wKioL1ea8DeQjdjIAAAxgRXvZ2k868.gif





 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章