现在,我们知道如何建立或者是改变一个目录或文件的属性了,不过,你知道,当建立一个新的文件或目录时,它的默认属性是什么吗?那就与umask有关了。那么,umask是什么呢?基本上,umask就是指定“当前用户在建立文件或目录时候的属性默认值”。那么,如何得知或设置umask呢?它以下面的方式来指定条件:
[root@linux ~]# umask 0022 [root@linux ~]# umask -S u=rwx,g=rx,o=rx |
在默认权限的属性上,目录与文件是不一样的。由于我们不希望文件具有可执行的权力,默认情况中,文件是没有可执行(x)权限的。因此:
• 若用户建立为”文件”则默认“没有可执行(x)项目”,即只有rw这两个项目,也就是最大为666分,默认属性如下:
-rw-rw-rw-
• 若用户建立为”目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认属性如下:
drwxrwxrwx
umask指定的是“该默认值需要减掉的权限”。因为r、w、x分别是4、2、1,所以。也就是说,当要去掉能写的权限,就是输入2,而如果要去掉能读的权限,也就是4,那么要去掉读与写的权限,也就是6,而要去掉执行与写入的权限,也就是3。请问,5是什么?就是读与执行的权限。如果以上面的例子来说明的话,因为umask为022,所以user并没有被去掉属性,不过group与others的属性被去掉了2(也就是w这个属性),那么当用户:
• 建立文件时:(-rw-rw-rw-) – (-----w--w-) ==> -rw-r--r--
• 建立目录时:(drwxrwxrwx) – (d----w--w-) ==> drwxr-xr-x
我们来测试看看。
[root@linux ~]# umask 0022 [root@linux ~]# touch test1 [root@linux ~]# mkdir test2 [root@linux ~]# ll -rw-r--r-- 1 root root 0 Jul 20 00:36 test1 drwxr-xr-x 2 root root 4096 Jul 20 00:36 test2 |
[root@linux ~]# umask 002 [root@linux ~]# touch test3 [root@linux ~]# mkdir test4 [root@linux ~]# ll -rw-rw-r-- 1 root root 0 Jul 20 00:41 test3 drwxrwxr-x 2 root root 4096 Jul 20 00:41 test4 |
例题四:假设umask为003,请问使用该umask,建立的文件与目录权
限是什么?
答:
umask为003,所以去掉的属性为 --------wx,因此:
文件:(-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目录:(drwxrwxrwx) - (--------wx) = drwxrwxr--
提示:有关umask与权限的计算方式中,教科书喜欢使用二进制方式来进行AND与NOT计算,不过,笔者比较喜欢使用符号方式计算,联想比较容易。但是,有的书籍或BBS上,有人喜欢使用文件默认属性666与目录默认属性777来与umask进行相减计算。这是不好的。以例题4来看,如果使用默认属性相加减,则文件变成:666-003=663,即 -rw-rw--wx,这是完全不对的。想想看,原本文件就已经去除x的默认属性了,怎么可能突然间冒出来了?所以,这个地方要特别小心。
在默认的情况中,root的umask会去掉比较多的属性,root的umask默认是022,这是基于安全的考虑。一般身份用户通常的umask为002,即保留同用户组的写入权力。其实,关于默认umask的设置可以参考 /etc/bashrc文件的内容,不过,建议不要修改该文件,可以参考第11章提到的环境参数设置文件(~/.bashrc)的说明。