當我們使用 ls -l 命令時,會看到如下信息:
[root@model ESSSClient]# ls -l total 36 -rw-r--r-- 1 root root 1670 Jan 11 10:11 CMakeLists.txt drwxr-xr-x 2 root root 46 Jan 11 10:11 config -rw-r--r-- 1 root root 17078 Jan 11 10:11 ESSSCliOper.cpp -rw-r--r-- 1 root root 3708 Jan 11 10:11 ESSSCliOper.h -rw-r--r-- 1 root root 5421 Jan 11 10:11 ESSSCliTest.cpp
很多人對於第一行的 total 36 的數值並不是很在意,但是你是否想過,它究竟是什么意思?
man中說明: total 表示 "所列出內容的磁盤占用空間總和值,單位為kbytes"。這句話是什么意思?
我們知道 ls -l 列出的第5列數值是該文件或目錄的大小。這里目錄的大小並非目錄所包含的文件的總大小,僅僅是目錄自身的大小。
如果無法理解這一概念,請思考一下 "linux中一切皆文件" 的含義。
那么,圖中的 total 36k 應該等於1670+46+17078+3708+5421 的值。我們計算一下,1670+46+17078+3708+5421 = 27923,單位是bytes,換算成 kbytes 則是 27923/1024 = 27.2685546875。
顯然 36 ≠ 27.2685546875。
但為什么total卻是所列出內容的磁盤占用空間總和值? 請注意其中的“占用”二字,何為占用?
我們知道文件系統中是有block(塊)的概念的,塊就像一間間屋子,如果你的文件系統中存的都是一些較大的文件,那么使用較大的block會得到較好的性能,反之亦然。所以,數據在存放過程中占據的block的大小就是 “占用”的空間。
那么27.2685546875k占用多少個block呢?
首先查看系統中block的大小,我們用以下兩種方法查看:
[root@model home]# tune2fs -l /dev/sdb5 | grep "Block size" Block size: 4096 [root@model home]# getconf PAGESIZE 4096
可以看出,系統中一個塊(block)的大小是4k(4096bytes),並且一個塊(block)只可以容納一個文件。所以,上面每個不足4K的文件(目錄不占用塊內存)都要占用一個塊(block),即2個塊(block);另外,ESSSCliOper.cpp文件為 17078bytes/1024 = 16.677734375K,占5個塊(block),雖然第5個block中只存了0.677734375K的數據,但是它依然要占用一個block空間;ESSSCliTest.cpp文件 5421bytes/1024 = 5.2939453125 K,占2個塊(block)。因此,上面的文件共占用了9個塊,即 9*4096 bytes = 36K。.
最后我們還有一個很方便的查看和計算total的辦法。就是使用 ls 命令的 -s 選項:
-s 以塊大小為單位列出所有文件的大小