Debian 下 readdir 错误 通常不是单一问题,而是系统调用 readdir() 在读取目录时失败的表现。需要先判断是哪一层出错(应用、库、文件系统、内核、权限),再针对性解决。下面按常见原因 → 排查 → 解决方案来说明。
readdir() 本身失败通常会返回 errno,常见有:
| errno | 含义 | 常见原因 |
|---|---|---|
ENOENT |
目录不存在 | 路径错误、目录被删除 |
EACCES |
权限不足 | 用户无读权限 |
ENOMEM |
内存不足 | 内存耗尽 |
EBADF |
文件描述符无效 | fd 已关闭 |
EIO |
I/O 错误 | 磁盘 / 文件系统问题 |
ESTALE |
过期 NFS 句柄 | NFS 目录失效 |
如果你看到的是:
readdir: No such file or directoryreaddir: Permission deniedreaddir: Input/output error那就更容易定位。
ls /some/dir
readdir: No such file or directory
ls -ld /some/dir
file /some/dir
ls -l /some/dir
readdir: Permission denied
ls -ld /path/to/dir
id
chmod +rx /path/to/dir
# 或
sudo chown -R user:user /path/to/dir
⚠️ 注意:目录需要 x(执行)权限 才能 readdir。
readdir: Input/output errorEIOdmesg | tail -50
journalctl -xe
umount /mount/point
fsck -y /dev/sdX
⚠️ 不要在根分区在线 fsck,建议用 LiveCD / Rescue 模式。
readdir: Stale file handle
mount | grep nfs
umount -l /mnt/nfs
mount -a
或重启 NFS 客户端:
systemctl restart nfs-client.target
ldd your_program
sudo apt update
sudo apt install --reinstall libc6
df -h
df -i
journalctl --vacuum-size=100M
# 1. 看具体错误
ls /path 2>&1
# 2. 看系统日志
dmesg | tail
# 3. 检查权限
ls -ld /path
# 4. 检查文件系统
df -hT
# 5. 检查是否是 NFS
mount | grep /path
你可以直接贴出:
cat /etc/debian_version
df -T
我可以一步一步帮你定位到具体是哪一行代码或系统配置的问题。