在 CentOS(或者说 Linux 下使用 readdir 相关的场景)中,“隐藏”目录项通常有以下几种常见理解和技术做法,我按最常见需求给你说明:
Linux 中 readdir() 会返回所有目录项,但以 . 开头的文件被视为“隐藏文件”,普通 ls 不会显示,但 readdir 仍然能读到。
mv testdir .testdir
✅ 用户用 ls 看不到
❌ readdir() 依然能读到(这是正常的)
如果你是自己写 C / C++ 程序调用 readdir(),可以在代码里过滤:
while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.') // 隐藏以点开头的
continue;
printf("%s\n", entry->d_name);
}
这是最常见、最安全的“隐藏”方式。
如果是想让某些用户根本读不到:
chmod 700 secret_dir
opendir() 失败readdir() 拿不到内容⚠️ 仅对非 root / 无权限用户有效
把真实目录“覆盖”掉:
mount --bind /empty_dir /real_dir
这样 readdir("/real_dir") 看到的是空目录(对普通用户而言)。
常用于:
✅ 真正从 readdir 层面不返回
❌ 复杂度高、风险大
❌ readdir 本身不能“隐藏”文件
✅ 只能:
| 需求 | 推荐方式 |
|---|---|
| 用户 ls 看不到 | 文件名加 . |
| 程序里不显示 | readdir 过滤 |
| 别的用户读不到 | chmod / chown |
| 完全看不见 | mount / FUSE |
如果你能说清楚:
我可以给你更精确的方案。