我正在编译自定义内核,我想测试图像文件的大小。 结果如下:
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
由于它们都显示不同的尺寸,哪一个最接近实际图像尺寸? 他们为什么不同?
答案 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
,操作系统将报告错误。