虽然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