为什么 ls 显示某些目录的大小不同(不是 4k)?

为什么 ls 显示某些目录的大小不同(不是 4k)?

虽然ls显示大多数目录的大小为4.0K,但有些目录的大小不同,如下面的输出所示:

drwxr-xr-x 8 root root 4.0K Aug 13  2022 room
drwxr-xr-x 2 root root  138 Jan 11  2021 room_old
drwxr-xr-x 2 root root 4.0K Aug 12  2022 room_new

为什么ls某些目录显示的大小不同(不是 4k)?

答案1

它实际上不是目录内容的大小,而是用于存储元数据的磁盘空间大小(例如关于它和它的即时内容 inode 编号和名称/路径) 该目录。

为了简化它,可以想象一个类似于电话目录...即,它包含的姓名、号码和地址越多,它的大小就越大,反之亦然。

请看下面的演示:

# Block size
$ stat -fc %s .
4096
# Create empty directories
$ mkdir 1 2 3
$ ls -lh
total 12K
drwxrwxr-x 2 ubuntu ubuntu 4.0K Mar  8 11:43 1
drwxrwxr-x 2 ubuntu ubuntu 4.0K Mar  8 11:43 2
drwxrwxr-x 2 ubuntu ubuntu 4.0K Mar  8 11:43 3
# Create multiple empty 0 size files
$ touch 1/file{1..1000}
$ touch 2/file{1..100000}
# Create a 1G size file
$ fallocate -l 1G 3/file1
$ ls -lh
total 2.7M
drwxrwxr-x 2 ubuntu ubuntu  28K Mar  8 11:44 1
drwxrwxr-x 2 ubuntu ubuntu 2.6M Mar  8 11:44 2
drwxrwxr-x 2 ubuntu ubuntu 4.0K Mar  8 11:44 3
$ du -sh *
28K     1
2.6M    2
1.1G    3
# Copy a more populated directory with larger meta-info size under another less populated directory
$ cp -r 2/ 3/
$ ls -lh
total 2.7M
drwxrwxr-x 2 ubuntu ubuntu  28K Mar  8 11:44 1
drwxrwxr-x 2 ubuntu ubuntu 2.6M Mar  8 11:44 2
drwxrwxr-x 2 ubuntu ubuntu 4.0K Mar  8 11:44 3
$ ls -lh 3/
total 1.1G
drwxrwxr-x 2 ubuntu ubuntu 2.6M Mar  8 11:44 2
-rw-rw-r-- 1 ubuntu ubuntu 1.0G Mar  8 11:44 file1

注意目录元数据/信息的最小可分配大小取决于文件系统……例如在 Ubuntu 上EXT4,它默认为块大小(使用例如查找stat -fc %s .)...但是,其他文件系统可能会利用更少/更多...例如NTFS

# Block size
$ stat -fc %s .
4096
# Create an empty directory
$ mkdir dir_on_ntfs
$ ls -lh
total 0
drwxrwxrwx 1 ubuntu ubuntu 0 Mar  8 13:32 dir_on_ntfs
# Populate the directory with multiple empty 0 size files
$ touch  dir_on_ntfs/file{1..10000}
$ ls -lh
total 2.0M
drwxrwxrwx 1 ubuntu ubuntu 2.0M Mar  8 13:32 dir_on_ntfs

等等西弗斯

# Block size
$ stat -fc %s .
4096
# Create an empty directory
$ mkdir dir_on_xfs
$ ls -lh
total 0
drwxr-xr-x 2 ubuntu ubuntu 6 Mar  8 13:32 dir_on_xfs
# Populate the directory with multiple empty 0 size files
$ touch dir_on_xfs/file{1..10000}
$ ls -lh
total 376K
drwxr-xr-x 2 ubuntu ubuntu 240K Mar  8 13:32 dir_on_xfs

心室颤动

# Block size
$ stat -fc %s .
32768
# Create an empty directory
$ mkdir dir_on_vfat
$ ls -lh
total 32K
drwxr-xr-x 2 ubuntu ubuntu 32K Mar  8 13:32 dir_on_vfat
# Populate the directory with multiple empty 0 size files
$ touch  dir_on_vfat/file{1..10000}
$ ls -lh
total 640K
drwxr-xr-x 2 ubuntu ubuntu 640K Mar  8 13:32 dir_on_vfat

相关内容