You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何*nix系统中目录需执行权限?内核遍历与属性解析

为什么Unix/Linux目录需要执行权限才能遍历或切换?

Great question—this is one of those Unix permission quirks that trips up a lot of people at first, so let’s break it down clearly.

1. 内核遍历目录时需要执行权限的核心原因

当你遍历目录(比如访问/a/b/c/file.txt),内核的工作流程是这样的:

  • 先从根目录/的inode中查找a的inode编号
  • 再从a的inode中查找b的inode编号
  • 接着从b的inode中查找c的inode编号
  • 最后从c的inode中查找file.txt的inode编号,才能访问文件内容

这个在目录中查找子项inode编号的操作,内核就要求你拥有该目录的执行权限(x位)。没有这个权限,内核不会帮你完成目录项到inode的映射,自然无法遍历进入子目录或访问里面的文件。

2. 目录没有可执行数据,为啥要设执行权限?

Unix的权限模型是复用了r/w/x三位来适配不同类型的文件对象,对目录来说,这三位的意义和普通文件完全不同:

  • r(读权限):允许你读取目录的内容列表(比如用ls看到里面的文件名)
  • w(写权限):允许你在目录中添加、删除或重命名文件/子目录(比如touch、rm、mv操作)
  • x(执行权限,更准确叫搜索权限):允许你在目录中查找子项的inode(也就是能切换到该目录、访问里面的文件,哪怕你不知道文件名)

你提到的"可将该目录设为工作目录"其实是x权限的一个具体表现:当你cd到某个目录时,本质是告诉内核将当前进程的工作目录切换到它,但内核需要验证你是否有权限访问该目录的内容(哪怕只是切换过去),所以必须有x权限。

举个直观的例子:

  • 如果目录/mydir的权限是r--(只读无执行):你可以ls /mydir看到里面的文件名,但你不能cd /mydir,也不能cat /mydir/myfile——因为内核无法在/mydir中查找myfile的inode编号。
  • 如果目录/mydir的权限是--x(无读有执行):你看不到里面的文件名(ls会报错),但如果你知道里面有个myfile,并且myfile对你开放,你可以直接cat /mydir/myfile,也能cd /mydir(进去后ls还是看不到,但能操作已知的文件)。

内容的提问来源于stack exchange,提问作者Yuvraj Takey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:53:33