修改linux默认⽂件创建权限-umask命令解析
  umask值⽤于设置⽤户在创建⽂件时的默认权限,当我们在系统中创建⽬录或⽂件时,⽬录或⽂件所具有的默认权限就是由umask值决定的。
  对于root⽤户,系统默认的umask值是0022;对于普通⽤户,系统默认的umask值是0002。执⾏umask命令可以查看当前⽤户的umask值。
1 [frank@frankserver ~]# umask
2
30022
  umask值⼀共有4组数字,其中第1组数字⽤于定义特殊权限,我们⼀般不予考虑,与⼀般权限有关的是后3组数字。
  默认情况下,对于⽬录,⽤户所能拥有的最⼤权限是777;对于⽂件,⽤户所能拥有的最⼤权限是⽬录的最⼤权限去掉执⾏权限,即666。因为x执⾏权限对于⽬录是必须的,没有执⾏权限就⽆法进⼊⽬录,⽽对于⽂件则不必默认赋予x执⾏权限。
  对于root⽤户,他的umask值是022。当root⽤户创建⽬录时,默认的权限就是⽤最⼤权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他⽤户也要去掉w权限,所以⽬录的默认权限就是755;当root⽤户创建⽂件时,默认的权限则是⽤最⼤权限666去掉相应位置的umask值,即⽂件的默认权限是644。
  可以通过下⾯的测试操作来了解umask值。
1 [frank@frankserver ~]# mkdir directory1 #创建测试⽬录
2
3 [frank@frankserver ~]# ll -d directory1 #⽬录的默认权限是755
4
5 drwxr-xr-x. 2 root root 409
6 5⽉813:08 directory1
6
7 [frank@frankserver ~]# touch file1 #创建测试⽂件
8
修改文件权限的linux命令9 [frank@frankserver ~]# ll file1 #⽂件的默认权限是644
10
11 -rw-r--r--. 1 root root 0 5⽉813:09 file1
  通过umask命令可以修改umask值,⽐如将umask值设为0077。
1 [frank@frankserver ~]# umask 0077
2
3 [frank@frankserver ~]# umask
4
50077
  此时创建的⽬录默认权限为700,⽂件默认权限是600:
1 [frank@frankserver ~]# mkdir directory2
2
3 [frank@frankserver ~]# ll -d directory2
4
5 drwx------. 2 root root 409
6 5⽉813:14 directory2
6
7 [frank@frankserver ~]# touch file2
8
9 [frank@frankserver ~]# ll file2
10
11 -rw-------. 1 root root 0 8⽉813:14 file2
  考虑⼀下,如果将umask值设为0003,那么此时创建的⽬录或⽂件的默认权限是多少?
  正确的结果应该是:⽬录的默认权限是774,⽂件的默认权限是664。在计算默认权限时,不应⽤最⼤权限直接减去umask值,⽽是将umask值所对应的相应位置的权限去掉,这样才能得到正确的结果。
  umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,需要修改/etc/profile⽂件或是修改/etc/bashrc⽂件,例如要将默认umask值设置为027,那么可以在⽂件中增加⼀⾏“umask 027”。
  /etc/profile和/etc/bashrc都可以⽤于设置⽤户登录系统时⾃动执⾏某些操作,他们的区别是/etc/profile只在⽤户第⼀次登录时被执⾏,⽽/etc/bashrc则在⽤户每次登录加载Bash Shell时都会被执⾏。
  因⽽,如果是修改/etc/profile⽂件,将只对新创建的⽤户⽣效;⽽如果是修改/etc/bashrc⽂件,则对所有⽤户都⽣效。