[实践OK]linxu下umask 000 为什么执行下来不是 777而是666呢??

jackxiang 2020-6-8 15:18 | |
#! /bin/sh
  
umask 000

touch abcde.txt
mkdir abcde

-rw-rw-rw-  1 root  root       0 Feb 18 16:38 abcde.txt      #666 文件
drwxrwxrwx  2 root  root    4096 Feb 18 16:38 abcde       #文件夹777



umask 0022 #没有了w权限
-rw-r--r--  1 root  root       0 Feb 18 16:40 abcde.txt        #644文件
drwxr-xr-x  2 root  root    4096 Feb 18 16:40 abcde        #文件夹755

umask 命令会从新创建的文件权限中减去一个掩码,以确定文件的实际权限。这个掩码默认值为 022,即将文件默认权限的写权限屏蔽掉,使其不能写入。因此,当 umask 设置为 022 时,新创建的文件的权限就会变成 644,新创建的目录权限则会变成 755。
执行脚本后,根据 umask 的设置:

abcde.txt 文件的权限为 -rw-rw-rw-,即666,因为umask没有屏蔽任何权限,所以新建文件的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
abcde 目录的权限为 drwxrwxrwx,即777,同理,因为umask没有屏蔽任何权限,所以新建目录的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
接着,如果你执行 umask 0022 将umask设置为 0022,则权限掩码会屏蔽掉文件的写权限,目录的写权限不受影响,具体计算方式为:

文件的实际权限为:原权限 (666) - 掩码 (022) = 新权限 (644),即 -rw-r--r--。
目录的实际权限为:原权限 (777) - 掩码 (022) = 新权限 (755),即 drwxr-xr-x。







八进制 → 十进制
  方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

  八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。

  例:将八进制的(53)O转换为十进制的步骤如下:

1. 第0位 3 x 8^0 = 3;
2. 第1位 5 x 8^1 = 40;
3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。
权限二进制值和八进制值的表格如下:https://blog.csdn.net/hnhygkx/article/details/104280304


umask 的作用是从文件的默认权限中减去一些权限,所以 umask 为什么数值就会影响最终的文件权限。777 权限表示所有用户都具有读、写、执行权限,因此它的二进制表示为 111 111 111,也就是说所有的权限位都被设置了。

umask 的作用是从默认权限中减去相应的权限。如果我们希望最终的权限是 777,那么 umask 就应该设置为 000。因为 000 与 777 相与后,仍然保持了 777 的权限,即:

```
777 (111 111 111)
&
000 (000 000 000)
=
777 (111 111 111)
```

因此,在这种情况下,umask 设置为 000。

在 Unix 系统中,umask 影响文件和目录的默认权限,但它们的默认权限是不同的。默认情况下:

对于新创建的文件,默认权限为 666。
对于新创建的目录,默认权限为 777。
umask 的作用是从这些默认权限中减去一些权限位。假设 umask 设置为 000,则文件的默认权限为 666,目录的默认权限为 777。
============================================================

root如果没有umask(umask 000)则文件权限为666,目录权限为777,但是默认有的如下:
root的缺省zhiunmask是022,一般用户是002。
所以,root用户umask
0022

一般目录是:755,原因是777-022=755.
文件,默认是644,666-022=644。


=============umask 000 为什么执行下来不是 777而是666呢??==================

umask 000
umask
0000
touch index2.php
touch index3.php
-rw-rw-rw- 1 root root     0 Jun  8 15:08 index2.php
-rw-rw-rw- 1 root root     0 Jun  8 15:08 index3.php

原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。
ll -d bdc
drwxrwxrwx 2 root root 4096 Jun  8 15:23 bdc  #目录就是777了。

解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/10588/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2024-2-18 16:43
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]