在 Debian(以及大多数 Linux 发行版)中,readdir 本身并没有独立的“缓存机制”,它的行为取决于 底层文件系统、VFS 层、以及应用程序/库是否自己做缓存。下面从几个层次说明:
readdir 是什么readdir() 是 glibc 提供的用户态接口,用于读取目录项(directory entries)。
它最终调用的是内核的:
getdents() / getdents64() 系统调用内核并不为 readdir 单独维护缓存,而是依赖文件系统的实现。
Linux 内核维护 目录项缓存(dentry cache):
lookup、readdir 后的再次访问特点:
cat /proc/slabinfo | grep dentry
echo 2 > /proc/sys/vm/drop_caches
⚠️ 注意:
stat / ls -l 影响大readdir 本身影响较小不同文件系统不同:
readdir 直接从磁盘目录结构读取mount 参数控制:mount -o lookupcache=,acdirmin=,acdirmax=
readdir例如:
ls:不缓存find:不缓存opendir/readdir 后保存结果常见原因:
strace -e trace=file ls /some/dir
free -h
cat /proc/meminfo | grep -i slab
sync
echo 2 > /proc/sys/vm/drop_caches
Debian 中
readdir没有独立缓存,目录读取依赖内核 dentry / page cache,以及具体文件系统的实现;NFS 等网络文件系统可能额外缓存目录列表。
如果你关心的是 NFS / Docker / 某些特定文件系统 / 性能问题,可以告诉我场景,我可以更具体说明。