要访问目录中的文件,必须对路径中每一级目录都具备执行(x)权限。例如访问 /data/project/file 时,/data 和 /data/project 均需有 x 权限,否则报“permission denied”,且错误不指明具体哪一级失败。

要访问一个目录里的文件,Linux 不只看你对那个文件有没有权限,更关键的是——你得先能“走进去”这个目录。路径权限检查是逐级进行的,每经过一级目录,系统都会验证你对该目录的执行(x)权限。
为什么进不了目录?x 权限才是关键
很多人以为只要文件本身有读权限就能打开它,结果执行 cat /home/user/data.txt 却报 “Permission denied”。真正卡住的往往不是 data.txt,而是中间某一级目录(比如 /home/user)缺少 x 权限。
- 对目录来说,x 权限 = 能进入该目录(cd)、能访问其下的子项(包括文件和子目录)
- 没有 x 权限,哪怕你对目录有 r(可 ls 列表)或 w(可创建文件),也无法用路径访问其中任何内容
- 例如:drw-r--r-- 的目录,你能 ls 它(因为有 r),但不能 cd 进去,也不能 cat /path/to/file —— 因为路径解析在到达 file 前就失败了
路径检查是自左向右、逐级验证的
当你输入 cat /a/b/c.txt,内核实际做了三轮权限检查:
- 检查你对 / 是否有 x 权限(通常都有)
- 检查你对 /a 是否有 x 权限(决定能否进入 a)
- 检查你对 /a/b 是否有 x 权限(决定能否定位到 c.txt)
- c.txt 自身的权限只在最后一步才被检查
任意一级 x 权限缺失,整个路径访问就会中止,错误提示统一为 “Permission denied”,不会告诉你具体卡在哪一级。
常见误操作与排查建议
权限问题常出现在家目录、Web 根目录或共享目录中。以下做法能快速定位:
- 用 namei -l /path/to/file 查看路径中每一级的权限和属主信息(需安装 util-linux)
- 逐级测试:cd / → cd /a → cd /a/b,看哪一级拒绝进入
- 注意:普通用户默认对 /home/otheruser 没有 x 权限,这是设计使然,不是故障
- 若需协作访问,优先用组权限(如把用户加进同一组 + 目录设为 775 + setgid),而非滥用 777
补充:软链接与路径权限的关系
软链接本身只是一个文本文件,访问它时权限检查分两步:
- 先检查你对软链接所在目录是否有 x 权限(能定位到链接文件)
- 再检查你对软链接指向的目标路径是否具备完整访问权限(含各级 x)
- 软链接自身的权限位(如 lrwxrwxrwx)几乎无意义,系统不据此放行
也就是说,软链接不是“捷径”,而是一张需要你凭真实权限才能兑现的支票。











