Size() 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

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

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

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

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

需要理解两个定义

1运行时间vs存储时间(这就是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不在可执行文件上,OS将报告错误。

经验差异最常发生在稀疏文件和压缩文件上,并且可以在两个方向上发生。

  • 杜& lt;ls

Sparse文件包含有关应用程序所需空间的元数据,其中ls读取并应用其结果,而du则不这样做。例如:

truncate -s 1m test.dat

创建一个完全由空组成的稀疏文件,没有磁盘使用。du为0,ls为1M。

  • 杜祝辞ls

另一方面,du可以表示,在您的情况下,文件可能占用磁盘上的大量空间(例如。它们分布在许多块中),但并非所有块都被填充,即它们的字节大小(以ls衡量)小于du(查看已占用的块)。

最新更新