进入目录必须有执行权限(x),因为x表示可遍历,允许系统定位其inode并访问内部结构;ls需r+x配合,仅r不可用;touch、rm等操作目录内文件均需w+x。

目录的执行权限(x)不是用来“运行”目录,而是控制能否进入该目录——cd 命令必须依赖目录的 x 权限,而 ls 命令则依赖 r 权限。两者需求不同,容易混淆,但逻辑清晰。
cd 为什么需要 x 权限,而不是 r 或 w
执行 cd 进入目录时,系统实际在做两件事:定位该目录的 inode,并访问其内部结构。这不涉及读取目录里有哪些文件(不需要 r),也不涉及修改目录内容(不需要 w)。x 权限在此表示“可遍历”(traverse),即允许内核解析路径、跳转到该目录对应的文件系统节点。
- chmod 100 dir → 只有所有者有 x 权限:所有者可用 cd 进入,但不能 ls(无 r)
- chmod 400 dir → 只有所有者有 r 权限:所有者能 ls 列出内容,但 cd 会报 “Permission denied”
- chmod 000 dir → 所有权限全无:即使你是所有者,cd 和 ls 都失败
ls 为什么需要 r 权限,x 权限只是辅助
ls 列出目录内容,本质是读取目录这个“特殊文件”的数据块(它本质上是一张文件名→inode 的映射表)。因此 r 权限是必需的。但注意:如果只有 r 没有 x,ls 会报错或返回空——因为没有 x 权限,系统不允许你“访问目录的元数据结构”,r 就无法生效。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- chmod 500 dir(r-x):所有者可 ls 且可 cd,这是最常用组合
- chmod 400 dir(r--):ls 报 “Permission denied”,即使你能看到目录名,也无法读取其内容
- chmod 100 dir(--x):cd 成功,但 ls 失败(“cannot open directory”)
touch、rm、mv 等操作真正依赖什么
这些命令操作的是目录中的文件,但权限检查发生在**目录本身**,而非目标文件:
- touch 新文件:需要目录的 w+x(写 + 进入)——w 用于在目录中添加新条目,x 用于定位目录位置
- rm 已有文件:需要目录的 w+x —— 删除动作由目录控制(删的是目录里的名字条目),与被删文件自身的权限无关
- mv 重命名或移动:源目录需 w+x(删旧名),目标目录需 w+x(加新名);若跨分区,则还需源文件的 r 权限(用于复制内容)
一个典型验证场景
新建目录 test,依次测试:
- chmod 000 test → cd test 和 ls test 全失败
- chmod 100 test → cd test 成功,ls test 失败
- chmod 400 test → cd test 失败,ls test 失败
- chmod 500 test → cd test 和 ls test 都成功
- chmod 300 test(-wx)→ cd 成功,但 touch a.txt 失败(缺 r?不,缺的是 w 对应的“写目录结构”能力;实际上 300 = -wx,w 存在,所以 touch 可成功)
关键记住:目录的 x 是门锁,r 是门内的窗户,w 是门内的操作台——进门(cd)只需开锁(x),看里面(ls)要开锁+开窗(r+x),改东西(touch/rm)要开锁+动手(w+x)。










