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

Ala*_*a S -1 filesystem command-line files ls du

我目前使用的是 Ubuntu 20.04。

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

ubuntu@ip-172-31-49-39:/myxfs$ du -h newquota
4.0K    newquota
Run Code Online (Sandbox Code Playgroud)

通过该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
Run Code Online (Sandbox Code Playgroud)

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

Raf*_*ffa 7

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

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

所以要么:

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

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

请看下面的演示:

# 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
Run Code Online (Sandbox Code Playgroud)