从实验出发深入理解Linux目录权限:r、w、x分别控制什么?能否进入目录到底由谁决定?

目录


进入一个目录需要什么权限?

Linux 的文件系统设计非常严谨,文件与目录虽然在表现形式上类似,但底层语义完全不同:

  • 普通文件(file) 存放实际数据;
  • 目录(directory) 存放的是一张"文件名与 inode 号的映射表",即"文件索引表"。

因此,目录的读写执行权限与普通文件的 rwx 含义不同。本文将通过实验,一步步验证"进入一个目录需要哪些权限"。


是否关于 r 权限?

我们先在 Linux 机器中新建一个测试文件夹:

提示:测试时请不要使用 root 账号,因为 root 可以无视权限执行操作。

bash 复制代码
[sulikey@fromCSDN Folder]$ tree
.
└── testFolder
    ├── code.c
    ├── folder
    ├── test1.txt
    └── test.txt

2 directories, 3 files
[sulikey@fromCSDN Folder]$ ll
total 4
drwxrwxr-x 3 sulikey sulikey 4096 Oct 10 11:25 testFolder

我们尝试取消文件夹的 读取 (r) 权限

bash 复制代码
[sulikey@fromCSDN Folder]$ chmod u-r testFolder/
[sulikey@fromCSDN Folder]$ ll
total 4
d-wxrwxr-x 3 sulikey sulikey 4096 Oct 10 11:25 testFolder
[sulikey@fromCSDN Folder]$ cd testFolder/
[sulikey@fromCSDN testFolder]$ ll
ls: cannot open directory .: Permission denied
[sulikey@fromCSDN testFolder]$ tree
. [error opening dir]

0 directories, 0 files

我们可以发现:

  • 虽然可以进入目录cd 成功),
  • 无法列出目录内容ls 报错)。

此时我们再尝试操作内部文件:

bash 复制代码
[sulikey@fromCSDN testFolder]$ echo "this is a test.txt" > test.txt
[sulikey@fromCSDN testFolder]$ cat test.txt
this is a test.txt

结果显示,我们依然可以修改文件内容。甚至可以在该目录下创建和删除文件:

bash 复制代码
[sulikey@fromCSDN testFolder]$ touch Test.txt
[sulikey@fromCSDN testFolder]$ rm Test.txt

以上操作均正常执行,说明:

✅ 可以进入目录;

✅ 可以修改内部文件内容;

❌ 无法查看目录中文件列表。

这是因为"修改文件内容"属于文件自身权限控制 ,与目录无关。

而"列出目录内容"需要访问目录文件本身的数据(即映射表),因此需要目录的 r 权限。

结论:

  • 能否进入一个目录与 r 权限无关;
  • r 权限控制:是否有权查看目录下的文件列表与属性

是否关于 w 权限?

接下来我们恢复 r 权限,取消 w 权限:

bash 复制代码
[sulikey@fromCSDN Folder]$ chmod u+w testFolder/   # 先恢复
[sulikey@fromCSDN Folder]$ chmod u-w testFolder/
[sulikey@fromCSDN Folder]$ ll
total 4
dr-xrwxr-x 3 sulikey sulikey 4096 Oct 10 11:40 testFolder

此时我们仍然可以查看目录:

bash 复制代码
[sulikey@fromCSDN testFolder]$ ll
total 8
-rw-rw-r-- 1 sulikey sulikey    0 Oct 10 11:25 code.c
drwxrwxr-x 2 sulikey sulikey 4096 Oct 10 11:25 folder
-rw-rw-r-- 1 sulikey sulikey    0 Oct 10 11:25 test1.txt
-rw-rw-r-- 1 sulikey sulikey   19 Oct 10 11:38 test.txt

接着尝试新增和删除文件:

bash 复制代码
[sulikey@fromCSDN testFolder]$ touch test2.txt
touch: cannot touch 'test2.txt': Permission denied
[sulikey@fromCSDN testFolder]$ rm test1.txt
rm: cannot remove 'test1.txt': Permission denied

都被拒绝。

但此时,我们依然能编辑 test.txt 的内容:

bash 复制代码
[sulikey@fromCSDN testFolder]$ echo "update" >> test.txt

说明:

  • w 权限不影响进入目录或读取文件名;
  • 但它控制的是是否可以修改目录内容本身(即能否新增、删除或改名文件)。

换句话说,w 权限决定了用户能否更改"目录内的映射表"。

如果把目录类比为"小区",文件是"房子",那么:

  • w 权限代表能否在小区里建房、拆房、改门牌号
  • 但你家房子内部家具的修改(文件内容)属于"房子本身",由文件权限控制。

如果这里没有理解得很清楚,我还对这个问题写了深入讲解,欢迎阅读~
CSDN文章:【Linux权限机制深入理解】为何没有目录写权限仍能修改文件权限?

结论:

  • 能否进入目录与 w 权限无关;
  • w 权限决定用户是否能创建、删除或重命名文件/子目录

是否关于 x 权限?

恢复 w 权限后,我们取消执行 (x) 权限:

bash 复制代码
[sulikey@fromCSDN Folder]$ chmod u+x testFolder/   # 先恢复
[sulikey@fromCSDN Folder]$ chmod u-x testFolder/
[sulikey@fromCSDN Folder]$ ll
total 4
drw-rwxr-x 3 sulikey sulikey 4096 Oct 10 11:40 testFolder
[sulikey@fromCSDN Folder]$ cd testFolder/
-bash: cd: testFolder/: Permission denied

这一次,我们直接无法进入目录了。

在 Linux 中,目录的 x 权限代表"是否允许访问目录中的文件条目"。

这就像"是否允许你踏入小区的道路"。

没有 x 权限,就无法"进入小区",更谈不上访问或操作文件。

即使你知道目录中有某个文件名(比如 testFolder/test.txt),如果目录没有 x 权限,访问这个路径也会被拒绝:

bash 复制代码
[sulikey@fromCSDN Folder]$ cat testFolder/test.txt
cat: testFolder/test.txt: Permission denied

结论:

  • x 权限是"能否进入目录"的关键。
  • 若目录无 x 权限,即便文件本身可读,也无法访问。

三种权限的综合理解

权限 对目录的意义 对文件的意义
r 可读取目录内容(查看文件名) 可读取文件内容
w 可修改目录内容(新增/删除文件) 可修改文件内容
x 可进入目录、访问目录下的文件 可执行文件(程序脚本等)

判断口诀:

  • "想进去看" → 要 x
  • "想看到内容" → 要 r
  • "想改动结构" → 要 w

实践启示

理解目录权限的意义,可以帮助我们在系统管理中进行更精细的控制:

  • 去掉 r 权限:防止他人列出目录文件名(隐藏目录内容);
  • 去掉 w 权限:防止误删或篡改目录结构;
  • 去掉 x 权限:完全禁止访问此目录;
  • 给文件单独配置权限:独立控制数据修改权限。

这些组合常用于多用户服务器、共享目录、日志文件保护等场景中,是 Linux 安全体系的重要一环。


总结

通过实验我们发现:

  • x 权限控制是否能进入目录
  • r 权限控制是否能查看目录内文件列表
  • w 权限控制是否能修改目录结构(增删改文件名)

此外,文件权限与目录权限相互独立

  • 修改文件内容 → 取决于文件权限;
  • 新建/删除文件 → 取决于目录权限。

修改文件内容 与目录权限无关,只与文件自身的 rw 权限有关。

理解这一点非常重要,因为它揭示了 Linux 权限系统的本质:

目录权限控制"能否访问路径",文件权限控制"能否操作内容"。

掌握这些规则后,你就能更灵活地设置目录权限,例如:

  • 只允许他人访问但不列出目录内容(去掉 r)。
  • 让用户可以读取文件但不能删除(去掉目录 w)。
  • 完全禁止进入(去掉 x)。

掌握这些规律后,你就能从根本上理解 Linux 权限系统的逻辑,避免"能进不能看"或"能看不能改"等常见疑惑。

同时,这些都是服务器管理、运维、权限控制中常见且非常实用的技巧。


免责声明

本文内容基于作者在 Linux 环境下的实验结果 ,不同发行版或文件系统(如 ext4、xfs、btrfs)在权限实现细节上可能略有差异。

建议读者在测试前:

  • 使用普通用户 而非 root
  • 在非重要目录中测试,避免误删或修改系统文件;
  • 在关键操作前做好备份

作者对读者在实验中可能造成的系统变更或数据损失不承担任何责任 ,请谨慎操作并确保充分理解命令行为。

文章内容如有错漏,欢迎在评论区指出!

文中实验结果如有不同,欢迎在评论区分享!

封面图来源于网络,如有侵权,请联系删除!

相关推荐
谢尔登21 分钟前
简单聊聊webpack摇树的原理
运维·前端·webpack
只想安静的写会代码1 小时前
centos/ubuntu/redhat配置清华源/本地源
linux·运维·服务器
susu10830189111 小时前
ubuntu多块硬盘挂载到同一目录LVM方式
linux·运维·ubuntu
r***F2621 小时前
【漏洞复现】CVE-2019-11043(PHP远程代码执行漏洞)信息安全论文_含漏洞复现完整过程_含Linux环境go语言编译环境安装
linux·golang·php
smaller_maple3 小时前
linux问题记录1
linux·运维·服务器
v***8574 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
报错小能手4 小时前
讲讲libevent底层机制
linux·服务器
阿星智力囊5 小时前
Thinkphp6+nginx环境报错信息不显示,接口直接报500和CORS跨域(错误的引导方向),真坑啊
运维·nginx·php·thinkphp6
代码AC不AC6 小时前
【Linux】计算机的基石:从冯·诺依曼体系结构到操作系统管理
linux·操作系统·冯诺依曼体系结构
大柏怎么被偷了6 小时前
【Linux】进程等待
linux·运维·服务器