我有一个目录~/D
,我想查找其大小。使用du -c ~/D/*
给出26880
.但是,如果我运行ls -l ~/D
,那么我可以清楚地看到各个文件加起来远远超过26880
.事实上,如果我检查单个文件,du
也会出错。输出的最后一行du ~/D/*
给出
256 /home/me/D/lastFile.bin
而最后一行ls -l ~/D
是
-rw-r--r-- 1 me myGroup 3124 Aug 24 21:58 lastFile.bin
其中256
显然不等于3124
.是什么赋予了?这些是二进制文件有关系吗?
编辑:du
这不是关于和之间差异的问题的重复df
;df
在这种情况下似乎无法为我提供任何东西
编辑: stat -c %s ~/D/lastFile.bin
与输出一致ls -l
答案1
来自手册页:
Display values are in units of the first available SIZE from --block-size, and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables. Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).
因此,256 kB(或 128 kB,如果您碰巧是 POSIXly 正确的)为几个 3124 字节的文件提供了足够的空间。
使用 GNU du
,您可以使用该-B
选项设置输出的单位大小,使用-B1
或-b
(等于-B1 --apparent-size
)来获取以字节为单位的大小,这是ls
默认打印的大小。
您实际上可能看到的不匹配可能是文件系统簿记的怪癖,至少主要是文件是在完整块中分配的事实。例如,在ext4
文件系统上,100000
-byte 文件实际上占用102400
字节,因为它是按4096
字节块分配的。这就是du
我的系统上显示的内容。
--apparent-size
仅计算du
文件的数据大小,而不是开销。