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

umask是Linux系统中用于设定新建文件和目录权限的一个设置。它是一个八进制数,影响默认的666(文件)或777(目录)权限。计算实际权限时,通过将umask值与默认权限做按位与操作。例如,umask为022时,文件默认权限为644,目录为755;umask为021时,文件权限为646,目录权限为756。简单计算方法是直接从默认权限值中减去umask,注意文件权限的奇数位不能为1。
摘要由CSDN通过智能技术生成

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,这样比前面的步骤就简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值