【Linux命令】ls -l顯示的內容中total到底是什么?


當我們使用 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   以塊大小為單位列出所有文件的大小

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM