总在 ls -l 命令的输出中

Loc*_*ost 1 ls size ubuntu directory files

我知道 total 告诉1K我正在处理的目录中的文件使用的块数。对于某些目的,我输入的命令ls -lh来看到这个人类可读的形式,我看到了目录,但让我吃惊的所有文件的块大小时,我添加了所有在目录中的文件的块大小不相等,以什么样total的讲述第一行输出。所以我的疑问是,这两种尺寸之间存在差异的原因是什么?

Sté*_*las 5

ls -l有或没有-h只显示每个文件的(表观)大小,而不是它们的磁盘空间使用情况。

要查看磁盘空间使用情况,请使用ls -s. 然后,总和应该匹配。

请注意,该总数是列出的文件的总和。除非您使用-A,否则不会包含隐藏文件。如果您使用-a,则...都将(通常)也包括在内。请注意,如果同一个文件在列表中出现两次(例如因为它们是指向同一个文件的硬链接),它将被计算两次。

在符合 POSIX 的实现中,大小以 512 字节为单位。GNU ls(Ubuntu 附带的那个)使用 1024 字节单位,除非POSIXLY_CORRECT环境中有变量($LS_BLOCK_SIZE$BLOCKSIZE或者该--block-size选项也可用于指定任意单位)。busyboxls总是使用 1024 字节单位。

例子:

$ truncate -s 15T a
$ echo > b
$ ls -s
total 4
0 a  4 b
$ ls -sl
total 4
0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
4 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ POSIXLY_CORRECT=1 ls -sl
total 8
0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
8 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ LS_BLOCK_SIZE=1 ls -sl
total 4096
   0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
4096 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ LS_BLOCK_SIZE=1 ls -sla
total 1638400
   4096 drwxrwxr-x   2 me me           4096 Oct  4 21:53 ./
1630208 drwxr-xr-x 312 me me        1626112 Oct  4 21:54 ../
      0 -rw-rw-r--   1 me me 16492674416640 Oct  4 21:53 a
   4096 -rw-rw-r--   1 me me              1 Oct  4 21:53 b
$ ls -slah
total 1.6M
4.0K drwxrwxr-x   2 me me 4.0K Oct  4 21:53 ./
1.6M drwxr-xr-x 312 me me 1.6M Oct  4 21:55 ../
   0 -rw-rw-r--   1 me me  15T Oct  4 21:53 a
4.0K -rw-rw-r--   1 me me    1 Oct  4 21:53 b
Run Code Online (Sandbox Code Playgroud)

看看a15TiB 大但不占用磁盘空间(这是一个稀疏文件),以及b1 个字节大但占用 4KiB 磁盘空间(使用一个文件系统块)。

请参阅为什么有这么多不同的方法来衡量磁盘使用情况?进一步阅读。