umask 和 新建文件、目录的默认权限

umask (8进制数值)

  • umask的值决定了用户创建的文件和目录的默认权限
  • umask的值是和用户相关的
  • root用户默认的umask值是 0022
  • 普通用户的默认的umask的值是 0002
[root@centos6 ~]#umask
0022
[root@centos6 ~]#su - ming
[ming@centos6 ~]$umask
0002

默认权限 (8进制数值)

  • 文件的默认权限最大是 666
  • 目录的最大权限最大是 777

文件或目录的默认权限的计算(原理)

最终的表现为
文件的默认权限 + umask = 666 (注意是按位相加)
目录的默认权限 + umask = 777 (注意是按位相加)
核心计算方法
  • 对于文件

示例1 计算默认权限

666        # <-- 最大权限的八进制数值
145        # <-- umask 的八进制数值

转换为二进制数值
110 110 110 # <-- 最大权限666的二进制值
001 100 101 # <-- umask 145 的二进制值,0 表示不关心;1 表示从最大权限中要去掉对应的权限(1变成0,0不变)
110 010 010 # <-- 计算的最终权限default的二进制值
6   2   2   # <-- 计算的最终权限default的八进制值

示例1 默认权限验证

[ming@centos6 ~]$umask 145
[ming@centos6 ~]$touch testfile
[ming@centos6 ~]$ll testfile 
-rw--w--w-. 1 ming ming 0 Nov 22 19:30 testfile
[ming@centos6 ~]$stat testfile 
  File: `testfile'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 524419      Links: 1
Access: (0622/-rw--w--w-)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:30:24.580931076 +0800
Modify: 2018-11-22 19:30:24.580931076 +0800
Change: 2018-11-22 19:30:24.580931076 +0800
[ming@centos6 ~]$

示例2 计算默认权限

666        # <-- 最大权限的八进制数值
257        # <-- umask 的八进制数值

110 110 110  # <-- 最大权限666的二进制值
010 101 111  # <-- umask 257 的二进制值,0 表示不关心;1 表示从最大权限中要去掉对应的权限(1变成0,0不变)
100 010 000  # <-- 计算的最终权限default的二进制值
4   2   0    # <-- 计算的最终权限default的八进制值

示例2 默认权限验证

[ming@centos6 ~]$umask 257
[ming@centos6 ~]$touch f5
[ming@centos6 ~]$stat f5
  File: `f5'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 524420      Links: 1
Access: (0420/-r---w----)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:36:06.052894381 +0800
Modify: 2018-11-22 19:36:06.052894381 +0800
Change: 2018-11-22 19:36:06.052894381 +0800
[ming@centos6 ~]$ll f5
-r---w----. 1 ming ming 0 Nov 22 19:36 f5
[ming@centos6 ~]$
  • 对于目录

计算默认权限

777        # <-- 最大权限777的八进制值
345        # <-- umask 的八进制值

转换为二进制数值
111 111 111 # <-- 最大权限777的二进制值
011 100 101 # <-- umask 345 的二进制值,0 表示不关心;1 表示从最大权限中要去掉对应的权限(1变成0,0不变)
100 011 010 # <-- 计算的最终权限default的二进制值
4   3   2   # <-- 计算的最终权限default的八进制值

默认权限验证

[ming@centos6 ~]$umask 345
[ming@centos6 ~]$umask
0345
[ming@centos6 ~]$mkdir test_dir1
[ming@centos6 ~]$ls -ld test_dir1/
dr---wx-w-. 2 ming ming 4096 Nov 22 19:42 test_dir1/
[ming@centos6 ~]$stat test_dir1/  
  File: `test_dir1/'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d      Inode: 524421      Links: 2
Access: (0432/dr---wx-w-)  Uid: (  500/    ming)   Gid: (  500/    ming)
Access: 2018-11-22 19:42:45.437920151 +0800
Modify: 2018-11-22 19:42:45.437920151 +0800
Change: 2018-11-22 19:42:45.437920151 +0800
[ming@centos6 ~]$
简单的计算方法
  • 对目录
default=777-umask   (注意是按位相减)
  • 对文件
default=666-umask   (注意是按位相减)
观察结果
有偶数:最终结果就是 default
有奇数:最结结果加 1 就是 default

配置 umask 值

上面通过 umask 命令设置 umask 的值是暂时的,用户重新登陆后就会还原为系统的默认值

我们可以通过配置文件的方式来实现永久生效

  • 全局设置:/etc/bashrc
  • 用户设置:~/.bashrc

相关命令介绍

  • umask -S 模式方式显示
  • umask -p 输出可被调用
[ming@centos6 ~]$umask -S
u=r,g=wx,o=w
[ming@centos6 ~]$umask -p
umask 0345
[ming@centos6 ~]$umask -p >> ~/.bashrc 

设置默认权限的两中方式

  • 方法1 通过设置 umask的方式
umask 0022
  • 方法1 直接设置默认权限
umask u=r,g=wx,o=w

本文链接:https://www.cnblogs.com/shichangming/p/10007697.html

转载于:https://www.cnblogs.com/shichangming/p/10007697.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值