誰吃了你的硬碟空間? 2 獲取檔案系統與檔案資訊

2021-05-23 18:33:01 字數 1084 閱讀 4658

/etc目錄下有乙個fstab檔案,記錄了磁碟分割槽的資訊,掛載分割槽(mount)的時候,就需要讀取這個檔案的資訊。另外,同一目錄下,還有乙個mtab檔案,記錄了當前已掛載的磁碟分割槽資訊,每當mount、umount的時候,都會更新該檔案,而df命令,讀取的也正是這個mtab檔案。這是linux的情況,如果是unix,檔案名字可能有所不同,例如:

作業系統    記錄所有分割槽資訊的檔案    記錄已掛載分割槽資訊的檔案

linux    /etc/fstab    /etc/mtab

solaris    /etc/vfstab    /etc/mnttab

hp-ux    /etc/fstab    /etc/mnttab

為敘述方便,本文都按linux的標準編寫。

/etc/mtab是乙個按行表示已掛載分割槽資訊的檔案,以製表符或者空格分隔各列。第一列表示檔案系統的名字,第二列表示檔案系統掛載的目錄,第三列表示檔案系統的型別,第四列表示檔案系統掛載時的引數,從第五列開始,各個作業系統的定義不盡相同,而且df命令無需用到,因此不再列舉。

至此,簡述一下df命令的工作原理:

1.    按行讀取/etc/mtab檔案,每行的內容解析成乙個mntent結構體,該結構體在linux中定義如下,df.c會用到前四個成員,但真正有用的是前兩個:

2.    呼叫上一節提到的get_fs_usage介面,分別傳進掛載目錄和檔案系統名字兩個引數,獲得乙個fs_usage結構體,最後按上一節的公式計算磁碟使用情況和空間占用百分比。

ok,df的分析到此為止,但是如何知道磁碟分割槽中,哪些目錄下的檔案占用的空間較多呢?這就需要用到網上廣為流傳的stat結構體及其介面了。簡化版的stat結構體如下:

簡單地說,要獲得該目錄的占用空間,就是對目錄下的每乙個檔案使用系統呼叫lstat,獲得其stat結構,然後累加st_size或者st_blksize*st_blocks,這取決於你偏好於哪一種計算方法,如遇到目錄則進入遞迴呼叫。lstat系統呼叫的原型如下:

至此,我們已經知道了怎樣計算磁碟分割槽的空間占用情況,並且知道怎樣找到每個目錄下的檔案的總位元組數或總占用空間。這樣,就可以計算出磁碟上,哪個分割槽空間最緊張,哪個目錄吃掉了最多的空間了。

下一節,將給出全部源**。

使用者空間與核心空間的介面 proc檔案系統

最早在接觸linux bsp時,專案中有一項規格就是底層需向上層提供硬體pcb及bom資訊。由於在linux的根檔案系統 proc目錄下有硬體cpu 記憶體 儲存器等與硬體相關的資訊,並且在使用者空間通過cat命令就可以輕易獲得,於是有個想法,就是設法將專案中硬體pcb及bom等資訊展現在 proc...

反射與獲取類的位元組碼檔案 系統載入器

首先第一種獲取類的位元組碼檔案物件方式 class.forname class cl class.forname com.cc.student.student 這一句 會輸出 system.out.println cl 會輸出static 塊中的語句 但是不會new物件 調構造方法 然後再用cl.n...

乙個硬碟的分割槽型別與檔案系統有什麼關係

提問 兄弟之前看了一些貼子,說乙個硬碟的分割槽型別必須與檔案 系統相對應,在此分割槽中用linux類的檔案系統 比如ext2 3 就要用linux的分割槽型別 type 83 可是我自己用我的乙個分割槽試驗了一下子,似乎並不是這樣子的,這兩點不對應時也可以使用.這是我的硬碟分割槽引數 fdisk l...