2014-05-21 123 views
4

我正在編譯一個定製的內核,我想測試圖像文件的大小。 這些結果如下:尺寸()vs ls -la vs du -h哪一個尺寸正確?

ls -la | grep vmlinux 
-rwxr-xr-x 1 root root 8167158 May 21 12:14 vmlinux 

du -h vmlinux 
3.8M vmlinux 

size vmlinux 
    text data  bss  dec  hex filename 
2221248 676148 544768 3442164 3485f4 vmlinux 

因爲他們都表現出不同的尺寸,哪一個是最接近實際的影像尺寸? 他們爲什麼不同?

+1

'stat vmlinux'打印什麼? – Pavel

+0

'ls'正在報告磁盤上的大小,這與大小報告的內容無關。 'du'報告的是同一個號碼,只是轉換成兆字節而不是字節。 @pavel:'ls'在內部使用stat()。兩者之間沒有什麼區別,除了信息如何呈現。 –

+1

8167158等於3.8M? – chettyharish

回答

6

他們都是正確的,他們只是表現出不同的尺寸。

  • ls顯示文件大小(當您打開和閱讀它,這就是你將有多少字節獲得)
  • du顯示實際磁盤使用情況,這可以由於孔比縮小文件尺寸
  • size顯示與文件大小沒有直接關係的對象/可執行文件的運行時映像的大小(bss不管文件大小如何都不使用字節,文件可能包含不屬於運行時的調試信息圖片等)

如果您想知道除了動態內存分配之外可執行的RAM/ROM數量,size可爲您提供所需的信息。

+1

'size'爲普通二進制提供了很好的信息。我想你會想看看Linux內核的映射文件。例如,* .init *部分在第一個進程開始運行後被丟棄,等等。可能有* unwind *表等,'size'可能會或可能不會處理。 –