删除或重命名目录需父目录同时具备写(w)和执行(x)权限,目标目录自身权限基本不影响操作,除非设置不可变属性或被进程占用;原子性rename保证单次调用状态一致,但nfs存在缓存导致的短暂不可见。

目录删除需要哪些权限
删除一个目录,本质是修改其父目录的内容——也就是在父目录里删掉指向该子目录的目录项。所以关键权限不在目标目录本身,而在它的父目录。
必须同时满足两个条件:
- 对父目录有写权限(w):否则无法修改目录结构,会报
Permission denied - 对父目录有执行权限(x):否则无法进入该目录、查找其中的条目,会报
Permission denied或Not a directory
注意:目标目录自身的读写执行权限(比如 drwx------)几乎不影响删除操作,除非它被设置了不可变属性(i)或正被进程占用。
重命名目录的权限要求与原子性
重命名(rename() 系统调用)本质上也是修改父目录的元数据:把旧名字的目录项删掉,加上新名字的目录项。因此权限要求和删除一致——依赖父目录的 w+x 权限,而非源目录或目标目录本身的权限。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
原子性体现在:整个操作不可分割。要么旧名彻底消失、新名立即可见;要么什么都没变。中间不会出现“既没有旧名也没有新名”的状态。这对配置更新、日志轮转等场景至关重要。
但要注意:原子性只保证单次系统调用的完成状态,不保证其他客户端的实时可见性——尤其在 NFS 上,由于缓存机制,其他客户端可能短暂看到“文件不存在”(ENOENT),这是协议层面的最终一致性限制,不是 rename 本身失效。
常见冲突场景与应对方法
实际操作中,以下情况会导致删除或重命名失败,需针对性排查:
-
进程占用:目录或其子文件正被打开(如日志程序、shell 当前工作目录)。用
lsof +D /path查看,终止对应进程或切换工作目录后再试 -
不可变属性:目录被设为
immutable(chattr +i)。用lsattr /path检查,root 用户执行chattr -i /path解除 -
只读挂载:所在文件系统以
ro方式挂载。运行mount | grep $(df /path | tail -1 | awk '{print $1}')确认,必要时mount -o remount,rw /mount/point -
跨文件系统移动:
rename()不支持跨分区重命名目录(会返回EXDEV)。此时需先cp -r再rm -r,或改用mv命令(它会自动降级为拷贝+删除)
安全操作建议
避免误删和竞态问题,推荐以下实践:
- 删除前加
-i(如rm -ri dir)确认每一步,尤其脚本中慎用-f - 重命名关键文件(如配置、索引)时,采用“写临时文件 + 原子 rename”模式:先写入
config.tmp,验证无误后rename("config.tmp", "config"),确保旧文件始终可用 - 在 NFS 环境中,不要依赖 rename 后其他客户端立刻能访问新名;应用层应容忍短暂的
ENOENT并重试 - 批量操作前,先用
ls -ld /parent和lsattr /target快速检查权限与属性










