7

我正在编译一个自定义内核,我想测试图像文件的大小。这些是结果:

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

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

4

3 回答 3

11

他们都是正确的,他们只是显示不同的大小。

  • ls显示文件的大小(当您打开并阅读它时,您将获得多少字节)
  • du显示实际磁盘使用情况,由于漏洞,可能小于文件大小
  • size显示与文件大小没有直接关系的对象/可执行文件的运行时映像的大小(无论文件大小,bss 都不使用文件中的字节,文件可能包含不属于运行时映像的调试信息, ETC。)

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

于 2014-05-21T20:21:17.840 回答
0

两个定义需要理解

1 runtime vs storetime(这就是size不同的原因)

2 文件深度与目录(这就是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在可执行文件上使用 not,操作系统会报错。

于 2020-05-13T04:12:18.897 回答
0

经验上的差异最常发生在稀疏文件和压缩文件中,并且可以双向进行。

  • 杜<ls

稀疏文件包含有关应用程序所需空间的元数据,它 ls 读取并申请其结果,而 du 没有。例如:

truncate -s 1m test.dat

创建一个完全由空值组成的稀疏文件,不使用磁盘,即。du 显示 0,ls 显示 1M。

  • 杜 > ls

另一方面, du 可以指示,如您的情况,文件可能会占用磁盘上的大量空间(即它们分布在许多块中),但并非所有块都已填充,即它们的字节大小(由 ls 测量)是比 du 小(查看占用的块)。我观察到这一点相当突出,例如对于一些 python 泡菜文件。

于 2021-10-19T10:11:47.097 回答