關於 du 和 ls 的簡單探討

      du 命令,用於評估文件系統的磁盤使用量(常用於評估目錄所佔容量)。PS:df 是評估文件系統的整體使用量。

      直接輸入 du  指令而不加參數時,du 會分析目前所在目錄的文件與目錄所佔用的硬盤空間,但是,實際顯示時,進會顯示目錄容量(不含文件)。因此,很多文件並沒有被顯示出來。並且在 du 指令輸出結果的最後一欄顯示當前目錄下所有文件的總量(包括當前目錄本身以及當前目錄下的子目錄裏的文件大小),單位是 K 。

    舉個例子:

    我有個當前目錄 test1,在此目錄下有些文件 file1,file2,file3,file4,file5,也有兩個目錄 test2,redtest,其中 test2 目錄爲空,redtest 目錄下還有個目錄 a4 以及一些文件。

那麼,當我在當前目錄 test1 下使用不帶參數的 du 指令時,輸出結果如下:

   

<span style="font-size:14px;">$  du
4              ./test2
4              ./redtest/a4
24             ./redtest
92             .</span>

    其中,最後一行的 . 表示當前目錄,大小爲 92K。

    然後我用 ls -l 指令在當前目錄 test1 下運行,發現顯示的總用量爲 68K。那剩餘的 24K 咋來的呢?因爲 du 的結果包含當前目錄的子目錄的大小,所以,這多餘的大小肯定是在子目錄裏。而子目錄 test2 爲空,不管它。我們來看子目錄 redtest。

    用 ls -l 指令查看時,發現總量爲 20K,也就是多出了 4K。因爲 redtest 目錄下還有個子目錄 a4,所以猜想是 a4 裏的文件佔用了 4K。可以當我 ls -l a4

時,發現,總用量爲 0,所以這 4K 一定實在別處。

    我們知道,當用 ls 來查詢文件大小時,並不會顯示當前目錄的大小,而是顯示當前目錄下所有文件的大小及總量。而 du 指令的最後一行有個 .(點符號)

這代表的是當前目錄。所以,這多出來的 4K 就是當前目錄 test1 本身的大小。而一般,目錄本身的大小就是 4K。問題解決了。


   細心的讀者可能發現了,當用 ls -l 來查看文件大小時,各個文件大小相加,並不等於此命令顯示出來的總用量。接下來,我們來探討這個問題。

    我們知道,ls -l 顯示的第三個字段是文件的大小。單位爲 Byte。以我目錄 redtest 爲例,裏面有文件 a1,a1.orted, a1.sorted, a2, a3, a4, conj。其中除了 a4 爲目錄外,

其餘均是普通文件。下面是一個 ls -l redtest 的簡單輸出:

   

$  ls -l redtest
總用量   20

35       a1
35       a1.orted
35       a1.sorted
0         a2
0         a3
4096  a4
118    conj

   第一欄爲文件大小,單位爲 Byte,第二欄爲文件名。可以看出幾個文件加起來怎麼也不可能得到 20K,甚至遠遠小於 20K。這裏的原因其實跟文件系統本身有關。

在ext文件系統中,每一個文件的 Block 爲 4K。例如,一個文件的大小爲 13K,那麼它佔用 13K / 4K = 3.25 個Block,由於 Block 只能被一個文件佔用,則實際上此文件佔用了 4 個Block。它的大小就是 4 * 4K = 16K。而不是 13K。而 ls -l 的總用量就是按 Block  來顯示用量的。回到上面哪個例子:

    restest 目錄下,兩個文件爲空,四個文件大小都不足 4K,即一個 Block,那麼它們就會分別佔用一個 Block。而還有一個目錄 a4 的大小剛好爲 4K,則它佔用一個 Block。總

共加起來就是 5 個Block,即 5 * 4K = 20 K。所以 ls -l 顯示的總用量當然爲 20 。

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