Size()vs ls -la vs du -h哪一个是正确的大小?

时间:2014-05-21 16:32:25

标签: linux linux-kernel ls image-size du

我正在编译自定义内核,我想测试图像文件的大小。 结果如下:

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

由于它们都显示不同的尺寸,哪一个最接近实际图像尺寸? 他们为什么不同?

2 个答案:

答案 0 :(得分:8)

它们都是正确的,它们只是显示不同的尺寸。

  • ls显示文件的大小(当您打开并阅读它时,这将是您将获得多少字节)
  • du显示的实际磁盘使用量可能小于文件大小,因为漏洞
  • size显示对象/可执行文件的运行时映像的大小,该大小与文件的大小没有直接关系(bss在文件中不使用任何字节,无论文件大小多少,文件可能包含调试信息这不是运行时图像的一部分,等等。)

如果您想知道可执行文件将采取多少RAM / ROM(不包括动态内存分配),size会为您提供所需的信息。

答案 1 :(得分:0)

需要理解两个定义

1个运行时与存储时间(这就是size不同的原因)

2文件深度vs目录(这就是du不同的原因)

看下面的例子:

[root@localhost test]# ls -l
total 36
-rw-r--r-- 1 root root   712 May 12 19:50 a.c
-rw-r--r-- 1 root root  3561 May 12 19:42 a.h
-rwxr-xr-x 1 root root 71624 May 12 19:50 a.out
-rw-r--r-- 1 root root  1403 May  8 00:15 b.c
-rw-r--r-- 1 root root  1403 May  8 00:15 c.c
[root@localhost test]# du -abch --max-depth=1
1.4K    ./b.c
1.4K    ./c.c
3.5K    ./a.h
712     ./a.c
70K     ./a.out
81K     .
81K     total
[root@localhost test]# ls -l
total 36
-rw-r--r-- 1 root root   712 May 12 19:50 a.c
-rw-r--r-- 1 root root  3561 May 12 19:42 a.h
-rwxr-xr-x 1 root root 71624 May 12 19:50 a.out
-rw-r--r-- 1 root root  1403 May  8 00:15 b.c
-rw-r--r-- 1 root root  1403 May  8 00:15 c.c
[root@localhost test]# size a.out
   text    data     bss     dec     hex filename
   3655     640      16    4311    10d7 a.out

如果未在可执行文件上使用size操作系统将报告错误。