• linux中的umask命令


    转载:http://blog.51cto.com/1123697506/882064

    一 权限掩码umask


    umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读写权限)

    二 umask的作用

    默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),可以用ls -l验证一下哦 现在应该知道umask的用途了吧,它是为了控制默认权限,不要使默认的文件和目录具有全权而设的
    三 修改umask值

    知道了umask的作用后,你可以修改umask的值了,例如:umask 024则以后建立的文件和目录的默认权限就为642,753了

    四 将umask值保存到环境文件

    若要长期修改umask的值,可以把它写进/etc/profile或~/.profile或~/.bash_profile中,大家应该知道这几个文件是干什么用的吧。

    您知道当你建立一个新的档案或目录时,他的预设属性会是什么吗?呵呵!那就与 umask 有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前使用者在建立档案或目录时候的属性默认值』,那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:语法:

    [root @test root]# umask
    0022
    [root@vbird test]# umask 002 <==后面接 3 个数字!
    [root@vbird test]# umask
    0002

    说明:查看 umask 数值为直接输入 umask 即可,而设定呢?没错!就是 umask 之后接三个数字!那么如何来指定呢?主要还是跟 Linux 的档案属性(那九个属性, r, w, x )有关的,而且是以分数的那一个关系为例的,而有底下的规则为辅:

    若使用者建立为『档案』则预设『没有可执行 ( x ) 项目』,亦即只有 rw 这两个项目,也就是最大为 666 分

    –rw-rw-rw-

    若使用者建立为『目录』,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为 777 分

    drwxrwxrwx
     
    那么 umask 指定的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,所以啰!也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分,这样了解吗?请问您, 5 分是什么?呵呵!就是读与执行的权限啦!如果以上面的例子来说明的话,因为 umask 为 002 ,所以 user, group 并没有被拿掉属性,不过 others 的属性被拿掉了 2 ( 也就是 w 这个属性 ),那么由于当使用者:
     
    建立档案时:(-rw-rw-rw-) – (——–w-) ==> -rw-rw-r–
    建立目录时:(drwxrwxrwx) – (——–w-) ==> drwxrwxr-x
     
    不相信吗?你只要使用 touch test 然后看看这个 test 的档案属性,就可以知道了!那么如何看你这个使用者目前的 umask呢?直接下达 umask 即可!实作看看先:
     
    [root@vbird test]# umask
    0002
    [root@vbird test]# touch test1
    [root@vbird test]# mkdir test2
    [root@vbird test]# ls -l
    -rw-rw-r– 1 root root 0 Oct 22 00:00 test1
    drwxrwxr-x 2 root root 4096 Oct 22 00:00 test2/

    发现了什么?呵呵! Test1 的属性为 666-002 = 664 !正确吗?是的!正确!而 test2 这个目录呢?就是 777-002 = 775 !也正确!

    [root@vbird test]# umask 003
    [root@vbird test]# touch test3
    [root@vbird test]# mkdir test4
    [root@vbird test]# ll
    -rw-rw-r– 1 root root 0 Oct 22 00:03 test3
    drwxrwxr– 2 root root 4096 Oct 22 00:03 test4/

    嘿!属性又跟刚刚的不一样啰!仔细推敲一下为什么呦!test3 666-003 =663,这是怎么一回事?! 663 应该是 -rw-rw–wx 才对啊!怎么会是上面的属性!呵呵!这里就要特别的给他强调了!『尽量不要以数字相加减啦!』容易造成类似上面的问题!你应该要这样想(-rw-rw- rw-) – (——–wx)=-rw-rw-r–这样就对啦!了解了吗?不要用十进制的数字喔!够能力的话,用二进制来算,不晓得的话,用 rwx 来算喔!

    由上面的例子您应该很轻易的就可以发现 umask 的用途!而这个 umask 可以在 /etc/bashrc 里面进行修改喔!预设的情况之下, root 的 umask 为 022 而一般使用者则为 002 ,因为可写的权限蛮严重的,因此预设都会拿掉这个权限!此外,因为 root 比较重要!所以为了安全的需求,其同群组的写入属性就被拿掉了!这东西对于安全性也有一定程度的贡献呦!

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

    注意,如果是以"umask -S 权限符号"的形式来设置权限掩码

    最终创建的权限就是权限符号参数所代表的含义

    例如,

    输入"umask u=,g=w,o=rwx"后,掩码显示为750.

    在创建文件时,根据掩码来设置真实的权限, 公式为a=rwx - umask.

    即rw-/rw-/rw-(666)   -   rwx/r-x/---(750)   =   ---/-w-/rw-(最终权限)

    (目录同理)

    参考文章:https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

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

    使用mkdir命令递归创建目录时的权限分配问题:

    由上图可以清楚地看到, 递归创建时指定的权限只对最底层目录生效,而上级目录都是默认权限.

    而且-pvm书写时m写在最后面, 这样才不会发生参数错误.

  • 相关阅读:
    洛谷 P1410 子序列(DP)
    LibreOJ #539. 「LibreOJ NOIP Round #1」旅游路线(倍增+二分)
    LibreOJ #541. 「LibreOJ NOIP Round #1」七曜圣贤(单调队列)
    浴谷八连测R6题解(收获颇丰.jpg)
    数论的一些小结论
    Fence9
    二模 (2) day1
    二模 (1) day2
    二模 (1) day1
    一些编码时的老错误
  • 原文地址:https://www.cnblogs.com/wincent98/p/9691071.html
Copyright © 2020-2023  润新知