Linux中目录默认权限由umask决定,计算方式为777 & (~umask),而非简单减法;起点权限恒为777,确保新目录必含x位以支持cd进入,文件则自动清除x位。

Linux 中文件夹(目录)的默认创建权限不由 chmod 决定,而是由 umask 控制——它不是“设权限”,而是“屏蔽掉哪些权限”。直接改 chmod 只影响已有目录,对后续新建目录无效。
umask 是怎么算出目录权限的
系统给新目录的“起点权限”固定是 777(rwxrwxrwx),umask 值会按位取反后与之做与运算:777 & (~umask)。注意:这不是简单减法,但八进制下多数情况可近似为减法(如 umask 002 → 目录 775)。
常见误区:
-
umask 002不等于“目录权限是 775”,而是“确保组写权限不被屏蔽”,实际结果取决于内核和 shell 实现,但行为一致 - 新建目录永远带
x(执行)位,因为没x就无法cd进入;文件则永远不会自动带x -
umask是掩码,不是权限值本身,所以umask 077和umask 0077等价(前导零不影响)
临时设置当前终端的目录默认权限
只影响当前 shell,适合测试或单次操作:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行
umask 002:新目录权限为775(同组可写) - 运行
umask 077:新目录权限为700(仅属主可访问) - 验证:执行
mkdir testdir && ls -ld testdir,看输出是否匹配预期 - 退出终端后失效,无需担心误操作持久化
永久生效:用户级 umask 设置(推荐)
让每次登录都自动应用,不影响其他用户,最常用也最安全:
- 编辑
~/.bashrc或~/.profile(取决于你的 shell 启动逻辑) - 末尾添加一行:
umask 002(团队共享场景)或umask 077(个人隐私优先) - 保存后立即生效:
source ~/.bashrc(不用重启终端) - 注意:如果同时在
~/.bashrc和~/.profile里写了umask,后者可能被前者覆盖,以最后加载的为准
共享目录需要更细粒度控制?用 setfacl -d
umask 是全局粗粒度控制;若某个目录(如 /srv/project)需让所有新文件自动继承特定组权限,umask 不够用:
- 确认文件系统支持 ACL:
mount | grep $(df . -P | tail -1 | awk '{print $1}'),看输出是否含acl - 设置默认 ACL:
setfacl -d -m g:developers:rwx /srv/project - 新创建的子目录/文件会自动获得该组的
rwx权限,且不受当前umask影响 - 但注意:
setfacl -d只作用于该目录及其未来子孙,不改变已存在文件的权限
真正容易被忽略的是:服务进程(如 nginx、systemd 服务)通常不读取用户 ~/.bashrc,它们的 umask 由各自启动脚本或 systemd unit 的 UMask= 字段控制——如果你发现 web 上传的文件权限不对,别只查 shell 配置。

















