linux下尋找檔案原理

來源:互聯網
上載者:User

     Linux系統的檔案名稱格式和Unix系統的檔案名稱格式一樣,其中的目錄名用斜杠(/)分隔。例如,檔案 名/home/vmail/test,其中/home和/vmail是目錄名,test則是檔案名稱。Linux系統中的檔案名稱可以由任何可列印的字元組 成,也可以是任何的長度。系統通過分析目錄中的檔案,來尋找檔案對應的索引節點。
   

    系統需要的第一個索引節點是檔案系統根目錄的索引節點,它的 值儲存在檔案系統的超級塊中。要讀取一個 ext2檔案系統的索引節點,我們必須在相應的資料區塊組中的索引節點表中尋找。例如,如果一個根目錄的索引節點值是42,那麼我們需要讀取在資料區塊組0中 的索引節點表中的第42個索引節點。根目錄索引節點是一個ext2的目錄節點,也就是說,根目錄索引節點的模式(mode)是目錄,而它的資料區塊中包含的 是ext2 / 目錄的入口。從/索引節點我們可以找到home名字目錄對應的索引節點,home目錄只是眾多目錄入口中的一個,我們可以從/home對應節點中尋找出描 述/home/vmail目錄的索引節點值。接下來我們讀取這個目錄(首先讀取它的索引節點,然後讀取此索引節點描述的資料區塊中的vmail目錄),從中尋找描述 /home /vmail目錄的索引節點值。最後,在描述/home/ vmail目錄的索引節點指向的目錄入口中找到test檔案的索引節點值,通過它的索引節點值找到儲存在檔案中的資料的資料區塊。


索引節點 inode  

在ext2檔案系統中索引節點是一切的基礎,檔案系統中的每一個檔案和目錄都使用一個唯一的索引節點。每一個資料區塊組中的索引節點都儲存在索引節點表中。資料區塊組中還有一個索引節點位元影像,它用來記錄系統中已指派和未分配的索引節點。下面是ext2的索引節點的一些主要的欄位:

1. mode ─ i_node
這裡儲存兩個資訊:一個是此索引節點描述的是什麼,另一個是使用者擁有的許可權。例如,對於ext2,一個索引節點可以描述檔案、目錄、符號串連、塊裝置、字元裝置以及FIFO結構。
2. Owner Information
這是檔案或目錄所有者的使用者和群組識別碼。這使得檔案系統可以正確地授權某種存取操作。
3. Size ─ i_size
檔案的位元組大小。
4. Timestemps ─ i_ctime
索引節點建立的時間和索引節點最後修改的時間。
5. Datablocks ─ i_block
指向儲存此索引節點描述檔案的資料區塊的指標。前十二個指標是指向儲存資料的物理資料區塊的指標,而後三個指標則包括不同層級的間接指標。例如,兩級指標指向一個指向其他指標塊的指標塊。這意味著小於或者等於1 2個資料區塊的檔案的存取速度要高於多於1 2個資料區塊的檔案。
你應該注意到ext2的索引節點可以描述一些特殊的裝置檔案。這些裝置檔案不是真正的檔案,但系統中的程式可以使用這些裝置檔案來存取它們相關的裝置。所有的這些裝置檔案都在/dev目錄下面。例如,掛接程式可以把它希望掛接的裝置檔案作為它的一個參數。

 超級塊

  超級塊(Superblock)━儲存著描述檔案系統的大小和形狀的基本資料。檔案系統的管理員可以使用其中的資訊來使用和維護檔案系統。(一般情況下,當檔案系統掛接時,系統唯讀取資料區塊組0中的超級塊,但每一個資料區塊組中都包含一個超級塊的複本,以防系統崩潰時使用)
  EXT2在磁碟上的超級塊存放在一個ext2_super_block結構中.超級塊包括如下的主要資訊:
1. Magic Number(幻數)━ s_magic
 使掛接程式確認這是ext2檔案系統的超級塊。目前其值為0xEF53。                  (每種類型的問系統的幻數都不同,"幻數"是用來區分每種不同的檔案系統)
2. Revision Level(修訂層級)━ (版本號碼 s_rev_level; 次版本號碼 s_minor_rev_level )
這是檔案系統的主要版本號和從版本號碼。掛接程式可以根據此資訊決定此檔案系統是否支援一些特定檔案系統的函數。
3. Mount Count(掛接數)━ s_mnt_count 和 Maximum Mount Count(最大掛接數)─s_max_mnt_count
系統用來決定檔案系統是否應該全面地檢查。檔案系統每掛接一次,mount count的值就會加1。當Mount count的值和Maximum mount count的值相等時,系統將顯示Maximal mount count reached, running e2fsck is recommended資訊,提示使用者進行檔案系統的檢查。
4. Block Group Number(塊組號)━ s_block_group_nr
包含此超級塊的資料區塊組號。
5. Block Size(塊大小)━ s_log_block_size
檔案系統中資料區塊的大小,例如1 0 2 4位元組。
6. Blocks per Group(每組塊數)━ s_blocks_per_group
 資料區塊組中的資料區塊數目和Block Size一樣,它在檔案系統建立以後就是固定的了。
7. Free Blocks(空閑塊)━ s_free_blocks_count
檔案系統中閒置資料區塊的數目。
8. Free Inodes(空閑索引節點)━ s_free_inodes_count
檔案系統中閒置索引節點的數目。
9. First Inode(第一個索引節點)━ s_first_ino
檔案系統中的第一個索引節點號。在一個ext2根檔案系統中,第一個索引節點是/目錄的入口。
                        
EXT2的組描述符

   每一個資料區塊組都有一個描述它的資料結構和超級塊一樣,在每一個資料區塊組中都要複製一份資料區塊組描述符。
   每個組的組描述符存放在ext2_group_desc結構中. 資料區塊組描述符包含以下的資訊:
1. Blocks Bitmap(塊位元影像的塊號)─ bg_block_bitmap
2. Inode Bitmap(索引節點位元影像的塊號)─ bg_inode_bitmap
3. Inode Ta b l e (第一個索引節點表塊的塊號)─bg_inode_table
4. Free blocks count(組中空閑塊數)─bg_free_blocks_count
5. Free Inodes count(組中空閑索引節點數)─ bg_free_inodes_count
6. Used directory c o u n t(已用目錄數)─ bg_used_dirs_count
  Notice: EXT2 檔案系統事實上只使用資料區塊組中的第0塊中的資料區塊描述符表.

EXT2的目錄

  Ext2以一種特殊的問實現了目錄,這種檔案的資料區塊把檔案名稱和相應的索引節點號存放在一起。
  這種目錄結構是存放在ext2_dir_entry_2的結構。
  此結構的長度是可變的。該結構的最後一個name欄位是EXT2_NAME_LEN個字元的變長數組,因此這個結構是可變的。
  Ext2目錄項中的欄位:
   1. inode 索引節點號
   2. rec_len 目錄項長度
   3. name_len 檔案名稱長度
   4. file_type 檔案類型
   5. name 檔案名稱

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.