您现在的位置是:首页 >技术教程 >Linux 文件目录权限 umask 的计算原理网站首页技术教程

Linux 文件目录权限 umask 的计算原理

大明湖畔的丘处机 2023-06-20 20:00:03
简介Linux 文件目录权限 umask 的计算原理

Linux umask(用户文件创建掩码)是一个控制新建文件和目录权限的系统设置。当一个进程创建一个新文件或目录时,umask值将影响其默认权限。
umask的值是一个 3 位或 4 位的八进制数,分别表示了用户(user)组(group)其他用户(other)的权限。

一、umask 的正确计算步骤如下:

  1. 计算默认权限值。对于文件,默认权限通常为 666(即 rw-rw-rw-),对于目录,默认权限通常为 777(即 rwxrwxrwx)。
  2. 计算umask值与默认权限值补码。这可以通过将umask值的每一位用 7 减去(八进制)得到。例如,umask 为 022 时,补码为 755。
  3. 默认权限值umask 补码进行按位与操作(bitwise AND)。这将得到新文件或目录的实际权限值。

例1:假设 umask 值为 022

(1)文件:

  1. 对于一个新建的文件,默认权限值为 666(rw-rw-rw-);
  2. 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 2 = 5。所以 umask 补码为 755(rwxr-xr-x);
  3. 计算实际权限值:666(rw-rw-rw-)与 755(rwxr-xr-x)按位与得到 644(rw-r–r–)。

(2)目录:

  1. 对于一个新建的目录,默认权限值为 777(rwxrwxrwx);
  2. 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 2 = 5。所以 umask 补码为 755(rwxr-xr-x);
  3. 计算实际权限值:777(rwxrwxrwx)与 755(rwxr-xr-x)按位与得到 755(rwxr-xr-x)。

所以,当 umask 为 022 时,新建文件的默认权限为 644(rw-r–r–),新建目录的默认权限为 755(rwxr-xr-x)。

例2:假设 umask 值为 021

(1)文件:

  1. 对于一个新建的文件,默认权限值为 666(rw-rw-rw-);
  2. 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 1 = 6。所以 umask 补码为 756(rwxr-xrwx);
  3. 计算实际权限值:666(rw-rw-rw-)与 756(rwxr-xrwx)按位与(110110110 & 111101110 = 110100110 )得到 646(rw-r–rw-)。

(2)目录:

  1. 对于一个新建的目录,默认权限值为 777(rwxrwxrwx);
  2. 计算 umask 补码:7 - 0 = 7,7 - 2 = 5,7 - 1 = 6。所以 umask 补码为 756(rwxr-xrw-);
  3. 计算实际权限值: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,这样比前面的步骤就简单了。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。