![ls -l 命令输出中的总计](https://linux22.com/image/161735/ls%20-l%20%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E4%B8%AD%E7%9A%84%E6%80%BB%E8%AE%A1.png)
我知道总数告诉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
看看a
15TiB 大但不占用磁盘空间(它是一个稀疏文件),以及b
1 字节大但占用磁盘上 4KiB(使用一个文件系统块)。
看为什么有这么多不同的方法来测量磁盘使用情况?供进一步阅读。