linux下查詢檔案原理

2021-04-06 19:37:44 字數 3416 閱讀 6436

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 檔名

Linux下查詢檔案

linux下查詢檔案真是太不方便了,因為我不會這些命令,學了幾個,用著還行 find是乙個非常有效的工具,它可以遍歷當前目錄甚至於整個檔案系統來查詢某些檔案或目錄.主要選項 name 按照檔名查詢檔案 perm 按照檔案許可權來查詢檔案 prune 不在當前指定的目錄中查詢 user 按照檔案屬主來...

在Linux下查詢檔案

因為要裝pl sql所以要查詢tnsnames.ora檔案。看看怎麼查這個檔案在linux下的哪個目錄 find name tnsnames.ora 查到 還可以用locate 來查詢 locate tnsnames.ora 結果是 一.通過檔名查詢法 舉例說明,假設你忘記了httpd.conf這個...

linux 下查詢檔案操作

du ah max depth 1 查詢當前目錄下大於100m的檔案 find type f size 100m exec ls lh awk 當找到大檔案後,若因某些原因,不想對檔案進行刪除,可以用echo或cat或clear命令清除檔案內容 echo var log big.log 此命令會把 ...