Linux下如何设置umask以同时满足指定文件与目录权限需求?
关于umask值的问题解答
首先明确核心结论:不存在一个统一的umask值能同时实现你要的文件和目录权限,原因如下:
权限与umask的计算逻辑
- 目录的默认基础权限是
777,最终权限 =777 - umask - 文件的默认基础权限是
666(系统默认会去除文件的执行位,除非手动添加),最终权限 =666 - umask(结果中不会包含执行位)
拆解你的目标权限
把目标权限转成八进制:
- 文件权限
-rwxr-xr--→754(其中包含执行位,这无法通过umask在默认创建文件时实现) - 目录权限
dr-xrwxrw-→576
分别计算对应umask
- 对应目录权限
576的umask:777 - 576 = 201,设置umask 201时,新建目录的权限会是576 - 对应文件权限
754的矛盾点:
文件默认基础权限是666,666减去任何umask都无法得到754(因为666 < 754)。你看到的754权限文件,必然是手动通过chmod 754添加了执行位,或是由脚本/编译器生成的可执行文件,和umask无关。如果只看文件的读写权限部分(去掉执行位),754对应654,此时对应的umask是666 - 654 = 012,但这个值和目录需要的201完全不同。
解决方案
- 若优先保证目录权限,设置
umask 201,新建文件的权限会是666 - 201 = 465(即-r--rw-r-x),之后再手动给需要的文件添加执行位:chmod +x 文件名 - 若需要文件默认是
654(对应去掉执行位的754),设置umask 012,但此时新建目录的权限会是777 - 012 = 765(drwxrw-r-x),不符合你的目录需求
内容的提问来源于stack exchange,提问作者Med talib
相关产品推荐
相关产品推荐

