为什么“ls”和“du”命令对同一个文件显示不同的大小?

为什么“ls”和“du”命令对同一个文件显示不同的大小?

我目前正在使用 Ubuntu 20.04。

当我使用该命令检查文件的大小时du,我得到以下输出:

ubuntu@ip-172-31-49-39:/myxfs$ du -h newquota
4.0K    newquota

使用该ls -la命令,我得到以下结果:

ubuntu@ip-172-31-49-39:/myxfs$ ls -la
total 8
drwxr-xr-x  2 ubuntu ubuntu   22 Apr 18 19:17 .
drwxr-xr-x 22 root   root   4096 Apr 17 12:05 ..
-rw-r--r--  1 ubuntu ubuntu 1024 Apr 18 19:17 newquota

为什么同一个文件,大小会有差别?文件的实际大小是多少?

答案1

对于文件来说,ls显示文件的实际大小...同时du显示文件在磁盘上保留/占用的空间...文件系统对某个文件的最小大小分配有所不同...大多数文件系统将保留最小块大小,在您的文件系统的情况下似乎如此4.0K

可以将其视为酒店房间的标准尺寸……酒店将以其标准客房尺寸容纳客人……同一房间也可能容纳两到三名客人……但在所有情况下,每位客人/客人组(无论一、二或三) 占用相同的最小可分配房间空间...酒店房间是文件系统块,客人是文件内容(比喻)。

因此,要么:

  • 一个空块(空文件也只是元数据(例如名称和 inode...等),它们计入其父目录的大小,但尚未在磁盘上为它们保留实际大小)。

  • 或被占用的区块(即内容小于或等于块大小的文件

请看下面的演示:

# Show block size
$ stat -fc %s .
4096 # 4.0K
$ touch file
$ head -c 1k /dev/urandom > file
$ du -h file 
4.0K    file
$ ls -la file 
-rw-rw-r-- 1 ubuntu ubuntu 1024 Apr 19 00:21 file

相关内容