ls -l 命令输出中的总计

ls -l 命令输出中的总计

我知道总数告诉1K我正在处理的目录中的文件使用的块数。出于某种目的,我输入命令ls -lh以人类可读的形式查看此内容,我看到了目录中所有文件的块大小,但令我惊讶的是,当我添加目录中所有文件的块大小时,它们并不等于total中所示的内容第一行输出。所以我的疑问是,这两种尺寸之间的差异背后的原因是什么?

答案1

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

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

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

相关内容