权限掩码umask
我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户、用户组用户以及其他用户分配不同的访问权限。那么,我们新创建的目录和文件本身也是有它的默认权限的,这个默认权限是什么,就是由权限掩码umask所确定的。它的功能可以说与chmod刚好相反的,代表默认拿走的也就是说不要的权限。
所以说,umask是用来指定"目前用户在新建文件或者目录时候的权限默认值"。那我们 如何得知或者设置这个umask呢?
在linux下我们查看umask的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置数字串,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了。先进行一次查看,显示如下所示:
=====================================
root@debian:~# umask
0022
root@debian:~# umask -S
u=rwx,g=rx,o=rx
root@debian:~#
=====================================
我们在这里看到的0022有四位数字,第一位代表的是特殊权限,我们这里先不做讨论。
然而,在目录和文件的默认权限属性是不同的,因为对于一个目录来说它的x权限也就是执行权限是很重要的,进入目录等操作都是需要对目录具有执行权限的,而对于文件来说,一般情况都是用于数据的记录操作,所以一般不需要执行权限。在linux下一般默认的情况是这样的:
1、如果用户创建的是目录,则默认的权限是,为755,drwxr-xr-x
2、如果创建的是文件,默认没有x权限,那么就只有r、w两项,默认为644,-rw-r--r--
那么上面的权限为什么不是777或666那,因为默认的umask为022,也就是说,对于目录或文件的所有者不拿掉权限,group用户和other用户都被拿走了w权限,所以此时如果用户进行创建目录和文件的时候,默认权限是会进行如下的减法操作:
新建文件:666-022=644;
新建目录:777-022=755.
我们来验证一下是不是这样做的:
========================================================================================
laopi@debian:~/dd$ umask
0022
laopi@debian:~/dd$ mkdir dd
laopi@debian:~/dd$ vi ii
laopi@debian:~/dd$ ls -l
drwxr-xr-x 2 laopi laopi 4096 9月 30 11:37 dd
-rw-r--r-- 1 laopi laopi 6 9月 30 11:43 ii
laopi@debian:~/dd$
========================================================================================
可以看到确实是这样的,目录的默认权限是rwxr-xr-x(755),文件的默认权限是-rw-r--r--(644)。
Umask的设置:
上面的umask为022,我们创建的目录对于同组用户是没有写权限的,在实际中可能需要给同组用户能够在目录下创建和修改文件,那么此时需要创建的目录同组用户是具有写权限的,也就是说我们的umask不要拿走同组用户的写权限,那么就是把umask设置为002就可以达到效果。
Umask的设置很简单,只需要在umask命令后加想要拿掉的权限数字就行,不想拿掉的就为0:
======================================================================
laopi@debian:~/dd$ umask 002
laopi@debian:~/dd$ mkdir dd
laopi@debian:~/dd$ vi ii
laopi@debian:~/dd$ ls -l
drwxrwxr-x 2 laopi laopi 4096 9月 30 14:12 dd
-rw-rw-r-- 1 laopi laopi 4 9月 30 14:12 ii
laopi@debian:~/dd$
=======================================================================
可以看到此时新建的目录group用户是具有写权限的。
这里还需要说明下用数字表示权限的时候只可能是4、2、1三个数字或者是三个数字的和或两个数字的和,4代表的是读(r),2代表的是写(w),1代表的是执行(x)
可以看到上面在系统里创建的文件和目录的默认权限的时候,我写的是这样的:666-022=644;777-022=755.,但这并不是做了对应数字的加减,刚刚看到数字相减的结果和最后验证的结果是一样的,但这只是巧合而已。
我们知道上面的每一个数字是代表着某一个用户对于文件或者目录有没有读、写、执行权限的衡量,比如6,代表了rw-,即只有度读和写权限,是421中4+2的结果,所以并不是一个随便的十进制数,我们在计算的时候并不能直接以十进制相减来计算。
其实也很简单,我们只要知道421分别对应rwx,在计算的过程中用rwx来算就行了,或者就用二进制计算。这个熟练一点的话根本不需要方法的,完全口算就可以出来的,熟练就好。