在 Debian(及其他 Linux 系统)里,readdir 报“权限不足”(通常是 EACCES 错误),本质是你对某个目录没有执行(x)权限,或对其父目录没有搜索权限。下面按常见原因和解决办法说明。
常见报错:
readdir() 返回 NULL,errno == EACCESls: cannot open directory '.': Permission deniedx(执行)权限目录的 x 权限 = 能进入 / 能 readdir。
查看:
ls -ld /path/to/dir
修复(谨慎):
chmod o+x /path/to/dir
# 或只对属主/组
chmod u+x /path/to/dir
✅ 目录一般至少需要 r-x
x 权限即使目标目录权限正常,父目录链必须都有 x。
例如:
/home/user/private/data
若 private 没有 x,则无法 readdir data
检查:
namei -l /path/to/dir
修复:
chmod o+x /home/user/private
查看:
ls -ld /path/to/dir
id
解决方式:
chown / chmodsudo usermod -aG groupname $USER
然后重新登录
例如:
解决:
sudo 测试是否权限问题Debian 默认 AppArmor
检查:
sudo aa-status
临时测试:
sudo systemctl stop apparmor
⚠️ 不建议长期关闭
如:
noexecnosuid查看:
mount | grep /path
DIR *d = opendir(path);
if (!d) {
perror("opendir");
}
✅ 确保:
whoami
ls -ld /path
namei -l /path
sudo ls /path
如果你愿意,可以告诉我:
我可以帮你精确分析。