您现在的位置是:首页 >技术教程 >Linux 文件目录权限 umask 的计算原理网站首页技术教程
Linux 文件目录权限 umask 的计算原理
简介Linux 文件目录权限 umask 的计算原理
Linux umask
(用户文件创建掩码)是一个控制新建文件和目录权限的系统设置。当一个进程创建一个新文件或目录时,umask
值将影响其默认权限。
umask
的值是一个 3 位或 4 位的八进制数,分别表示了用户(user)
、组(group)
和其他用户(other)
的权限。
一、umask 的正确计算步骤如下:
- 计算
默认权限值
。对于文件
,默认权限通常为666
(即 rw-rw-rw-),对于目录
,默认权限通常为777
(即 rwxrwxrwx)。 - 计算
umask
值与默认权限值
的补码
。这可以通过将umask
值的每一位用 7 减去(八进制)得到。例如,umask 为 022 时,补码为 755。 - 将
默认权限值
与umask 补码
进行按位与
操作(bitwise AND)。这将得到新文件或目录的实际权限值。
例1:假设 umask 值为 022
(1)文件:
- 对于一个新建的文件,默认权限值为 666(rw-rw-rw-);
- 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 2 = 5。所以 umask 补码为 755(rwxr-xr-x);
- 计算实际权限值:666(rw-rw-rw-)与 755(rwxr-xr-x)按位与得到 644(rw-r–r–)。
(2)目录:
- 对于一个新建的目录,默认权限值为 777(rwxrwxrwx);
- 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 2 = 5。所以 umask 补码为 755(rwxr-xr-x);
- 计算实际权限值:777(rwxrwxrwx)与 755(rwxr-xr-x)按位与得到 755(rwxr-xr-x)。
所以,当 umask 为 022 时,新建文件的默认权限为 644(rw-r–r–),新建目录的默认权限为 755(rwxr-xr-x)。
例2:假设 umask 值为 021
(1)文件:
- 对于一个新建的文件,默认权限值为 666(rw-rw-rw-);
- 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 1 = 6。所以 umask 补码为 756(rwxr-xrwx);
- 计算实际权限值:666(rw-rw-rw-)与 756(rwxr-xrwx)按位与(110110110 & 111101110 = 110100110 )得到 646(rw-r–rw-)。
(2)目录:
- 对于一个新建的目录,默认权限值为 777(rwxrwxrwx);
- 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 1 = 6。所以 umask 补码为 756(rwxr-xrw-);
- 计算实际权限值:777(rwxrwxrwx)与 756(rwxr-xrwx)按位与(111111111 & 111101110 = 111101110)得到 756(rwxr-xrwx)。
所以,当 umask 为 022 时,新建文件的默认权限为 646(rw-r–rw-),新建目录的默认权限为 756(rwxr-xrw-)。
二、其他计算方法:
尽管上面方法计算是非常正确的,但用在平时却比较麻烦,且不容易演算。有个最简单的办法,就是相减法:默认权限值(777或666)减去umask(如:022)。
1、文件:666 - umask(奇数位减1要恢复偶数);
2、目录:777 - umask,即可得到。
这里要注意文件的权限,默认的权限都不允许有可执行权限,只能通过chmod去变更,所以运算过程不允许出现奇数位,出现了就要减去1,让奇数位变为偶数位。
例如 umask = 021,文件的权限就是:
6 - (0 - 0) = 6
6 - (2 - 0) = 4
6 - (1 - 1) = 6
得到了646,这样比前面的步骤就简单了。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。