Linux文件索引節點相關概念


一.  概念

       1.  inode(index node)表中包含文件系統所有文件列表

           一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包括:

  •     文件類型,權限,UID,GID

  •     鏈接數(指向這個文件名路徑名稱個數)

  •     該文件的大小和不同的時間戳

  •     指向磁盤上文件的數據塊指針

  •     有關文件的其他數據

  •     inode  索引節點編號

       2. inode 表結構

          

       3. inode號

        系統中將目錄下的文件名和文件inode號之間的映射作為目錄的數據存放;人們通過文件名進行操作時,系統會通過對應路徑目錄的inode號找到目錄的inode表數據,進而通過數據指針指向目錄的數據,匹配文件名,得到文件的inode號;再到inode表中找到此文件的表項,再由文件數據指針指向真正的文件數據。

        i.  系統中同一分區的索引節點編號是唯一的,即在一個分區中,索引編號相同的文件指向的數據是同一個;(硬鏈接)

        ii.  系統中每個分區的索引節點划分是獨立的,不同分區的索引節點編號可能相同,但不是同一個文件;

        iii.  分區中的索引節點編號是有限的;當分區中索引節點編號用完后,新建文件夾會提示系統內存不足,導致新建失敗;但系統中仍有剩余磁盤空間,原因是索引節點編號不足,無法為文件分配節點編號,因而新建失敗。

   ls -i                                 查看文件節點編號        
   df -i                                 查看分區節點編號使用情況
   echo file{1..500000} |xargs touch     批量新建大量文件;參數過多,touch無法直接創建
   echo file{1..500000} |xargs rm        批量刪除大量文件;參數過多,rm無法直接刪除

 

     4. 文件操作與inode的關系

        i.  cp命令執行原理
               系統分配一個空閑的inode號,在inode表中生成新條目;在目錄中創建一個目錄項,將名稱與inode編號關聯;拷貝數據生成新的文件
       ii.  rm 命令執行原理
               鏈接數遞減,減到零后,進而釋放inode號,被系統重用;把數據塊放在空閑列表中;刪除目錄項;數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋。
       iii.  mv命令執行原理
              如果mv命令的目標和源在相同的文件系統,作為mv 命令用新的文件名創建對應新的目錄項;刪除舊目錄條目對應的舊的文件名;不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據   被移動!
              如果目標和源在一個不同的文件系統, mv相當於cp和rm

二 . 軟連接與硬鏈接

     1. 硬鏈接

    創建方式:   ln filename  filename2 
          a. 硬鏈接的新建是為同一inode號添加文件名  (本質是在目錄條目里為inode號增添一個文件名映射,指向同一個inode表數據,因此數據相同)
          b. 新建硬鏈接,鏈接數增加(鏈接數實質就是 inode號 對應文件名的個數;當 inode 號映射的文件名不存在時,此 inode號就會被系統回收重用)
          c. 硬鏈接文件和原文件之間數據共享,但又互相獨立;(修改其中任意一個文件的數據,其他的文件數據都會改變,因為共用同一數據指針;刪除其中任意一個文件,鏈接數減少,即減少一個inode和文件名之間的映射,但對數據指針沒影響,所以其他文件數據沒影響)
          d. 不能跨分區創建硬鏈接 (各分區之間 inode 互相獨立)
          e. 不能對目錄創建硬鏈接 (目錄最多有三個硬鏈接,目錄本身,目錄下的 . ,子目錄下的 ..)

       2.  軟連接

    1. 創建方式: ln -s file_path file_link    file_path :原文件絕對路徑或原文件相對與 file_link 的相對路徑, 推薦使用相對路徑,可移植性強
    2. readlink file_link                     讀取軟連接原始文件路徑
    3. 軟連接指向新文件
         rm -f file_link                      刪除原軟連接
         ln -s newfile_path file_link         創建新軟連接
          a.  軟鏈接實質是新建一個文件快捷方式,存放的數據是原文件的文件名,文件數據大小是原文件名字的字節數;訪問時通過文件名指向到原文件數據
          b.  軟鏈接支持跨分區  (通過原始文件路徑進行映射)
          c.  可以創建目錄軟連接
          d.  軟連接文件依賴於原始文件 ;刪除原始文件,軟鏈接文件會失效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM