umask(进程的文件权限掩码)

umask(进程的文件权限掩码) 讲解

1 umask命令讲解
  • umask概述:登录系统之后在当前登录shel进程l中,创建一个文件总是有一个默认权限的,默认权限的由来就是umask干的事情,umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码

    1. 针对目录文件来说x权限代表可以进入该目录,所以说目录文件创建时是777和文件掩码运算
    2. 针对一般的文件x权限代表该文件可以执行,风险太高,一般初始赋值是采用666和文件掩码运算
  • 查看该用户当前系统的文件权限掩码的命令:

    1. /*0022是系统当前默认的文件权限码,进行分析
      第一个0代表suid 丢弃的权限;
      第二个0代表本文件/目录拥有者什么权限都没丢弃(如果是文件,x权限除外);
      第三个2代表本文件/目录的用户组丢弃了w权限(如果是文件那么它的x权限也丢弃);
      第四个2代表本文件/目录的其他用户能使用的权限只有有r和x(文件只丢弃x)
      综合上面:
      		 如果你新创建一个文件,那么它的权限是:-rw--r--r-- 即是:644
      		 计算过程:666 & (~022) = 644
               如果你新创建一个目录,那么它的权限是:drwxr-xr-x 即是:755
               计算过程  777 & (~022) = 755
      */
        
      
    2. /*
      umask nnn
      设置系统当前默认的文件权限掩码为nnn
      nnn取值范围:000~777(8进制)
      用户退出之后,文件权限掩码会返回默认值。如果要永久生效的话,必须在相应的配置文件(/etc/login.defs)中修改
      */
      
  • 如何计算一个文件的权限值了的:

    1. /*
      mode:设置的文件权限
      cmask:文件权限掩码
      文件最终的权限码:mode & (~cmask)
      也可以理解为创建文件时去掉文件权限码对应的权限位
      4->r
      2->w
      1->x
      */
      
  • umask设置注意:

    1. umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最 大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7

2 umask函数讲解
  • /********************
    函数功能:为当前进程设置文件权限掩码,返回以前的文件权限掩码
    ********************/
    #include <sys/stat.h>
    mode_t umask(mode_t cmask);
    /*cmask是由下表列出的9个常量中的若干个按位“或”构成的
    S_IRUSR       用户读
    S_IWUSR      用户写
    S_IXUSR       用户执行
    S_IRGRP       组读
    S_IWGRP      组写
    S_IXGRP       组执行
    S_IROTH       其他读
    S_IWOTH      其他写
    S_IXOTH       其他执行
    */
    
  • 在Linux中一个文件的权限分为3组9个权限 分别为上面列出的9个,组间的顺序为所有者,所属组,其他人。例如:
    ls -l test
    -rw-rw-rw- 1 shmily shmily 0 5月 6 17:16 test
    表示test文件的权限为:所有者可读可写,所属组可读可写,其他人可读可写 (r代表可读 w代表可写 x代表可执行 -代表未设置)
    可用三位8进制数表示 则test的权限为666

  • umask的主要作用是在创建文件时设置或者屏蔽掉文件的一些权限

    在创建一个文件时要指明该文件的权限,open函数的最后一个参数mode并不是要设置的权限,它需要执行以下操作

    mode & (~cmask)得出的结构才是最终文件的权限

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值