zoukankan      html  css  js  c++  java
  • Linux默认权限的计算公式(个人理解性的笔记~)

    先记下Linux下的权限可以分为

    常见的

      r(Read,读取):对文件,读取文件内容的权限;目录来说,具有浏览目 录的权限。权限值=4

      w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。权限值=2

      x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。权限值=1

    特殊的

      s,t,i,a

    Linux是通过9个权限位来控制文件,目录权限的、分别是 所有者3位,所属分组3位,其它(用户组,用户)3位、

    文件默认权限基准值 rw- rw-  rw- ,所有者=读|写,所属分组=读写,其他(其他用户,用户组)=读写、

    目录默认权限基准值 rwx rwx rwx ,所有者=读|删除子目录或文件|进入,所属分组=读|删除子目录或文件|进入,其他(其他用户,用户组)=读|删除子目录或文件|进入、

    在创建文件,目录的时候,linux会通过上面的权限减去系统权限“补码”umask,用 umask命令可以查看到具体

    过 umask 查看,比如:0002;,umask -S可以查看own,group,others需要减去的具体权限是什么,比如:u=rwx,g=rwx,o=rx)

    权限值计算,有教科书上讲。按二进制 AND 和 NOT来计算,个人感觉能理解,但不是最能理解的方式。

    甚至有些BBS论坛用 666 - umask 来算 注意:这个个是错误滴....

          举个栗子,假如umask=003,按照这种计算方式。

      文件权限 = 666 - 003 = 663 = rw- rw- -wx,明明文件默认的other都没有可执行权限x嘛。这儿还给算出来了个x执行权限。所以,这是绝对错误。切记咯、

    公式:令r,w,x 等于 1、符号“-”等于0,文件/目录权限基准值与umask转换为 0,1 这种格式,将文件/目录权限基准值按位对应相减 umask,若位的相减小于等于0,表示此位无权限,等于1表示此有对权限。

    通过上面的公式,我们可以先得到(下面称为文件转换值,目录转换值)

    文件的权限基准值(rw-  rw-  rw- ) 转换为 110 110 110,对照图如下


    目录的权限基准值(rwx rwx  rwx) 转换为 111 111 111,对照图如下

    注意:权限位是按 owner,group,others 的 rwx ,rwx,rwx 这个顺序来的,不能变哦~

    也就是说的,是按照 所有者的r,w,x;所属分组的r,w,x;其他组/用户的r,w,x这个顺序来的~

    举个栗子

    问题:某用户umask = 002;请问,该用户创建的文件/目录的默认权限分别是什么?

    解答:

    首先,将 umask = ---  ---  -w-,按照公式转换为 000  000  010

    那么文件的默认权限值公式2,按位相减,计算如下步骤如下。

    文件的默认权限值 = 文件默认权限基准值 (rw- rw-  rw-) 减去 UMASK权限位值 文件转换值 减去 UMASK转换值

    = rw-  rw- rw- 减 ---  ---  -w-

    = 110 110 110 - 000 000 010

    转换下

          110   110   110

      — 000   000   010

    -------------------------------------------------------

    =   110   110   100 —> 转为权限位就是 rw- rw- r--

    目录的默认权限值 = 目录默认权限基准值 (rwx rwx  rwx) 减去 UMASK权限位值 = 目录转换值 减去 UMASK转换值

    = rwx  rwx rwx 减 ---  ---  -w-

    = 111 111 111  - 000 000 010 

    转换下 

          111   111   111

      — 000   000   010

    -------------------------------------------------------

    =   111   111   101 —> 转为权限位就是 rwx rwx r-x

    其实上面的公式有点点绕了。总结为一句话就是:“设rwx为1,-为0,按位xor,对应位值等于0,此位对应无权限,等于1,有权限;或按位相减,对应位值小于,等于0,此位对应无权限,等于1,有权限

    Okay,下面我们来测试下结果~

    资料参考:

    鸟哥的Linux私房菜(基础篇,第三版:182页~)

    Linux中的几种权限:http://blog.chinaunix.net/uid-16728139-id-3315846.html

  • 相关阅读:
    C++基础知识(二)
    C++基础知识(一)
    RT-thread 设备驱动组件之IIC总线设备
    RT-thread 设备驱动组件之SPI设备
    RT thread 设备驱动组件之USART设备
    RT-thread 设备驱动组件之PIN设备
    RT-thread finsh组件工作流程
    C语言知识点
    RT-thread main函数分析
    堆和栈的区别
  • 原文地址:https://www.cnblogs.com/oceanho/p/5296691.html
Copyright © 2011-2022 走看看