分类: LINUX
2011-06-10 20:30:59
umask
[功能]
通过设置一些位来禁止一些权限。有一些通用的值,"002"阻止其他人写你的文件,"022"阻止组成员和其它人写你的文件,"027"阻止组成员写你的文件以及其他人读、写、执行你的文件。
[举例]
*显示当前的umask值:
$umask
输入之后,例如输出如下:
0022
这里,是系统的默认mask,因为是8进制,所以是0022不是022.
*设置umask值为0022:
$umask 0022
这里,假设从前的umask不是0022,这时候将会变成0022,如果创建了一个文件看看权限,会发现如下:
-rw-r--r-- 1 quietheart quietheart 0 2010-05-05 08:55 tttt
如果设置成0000,那么如下:
-rw-rw-rw- 1 quietheart quietheart 0 2010-05-05 09:01 tttt
(修改成0000之后,会使得子进程的umask也为0000)
如果设置成0777,那么如下:
---------- 1 quietheart quietheart 0 2010-05-05 09:03 tttt
另外,实践发现,第一位始终是0不能被设置,所以实际上之后后三位可以设置。
综上可知,后位表示的意思例如:
002,表示创建的时候屏蔽掉other成员写;022表示创建的时候屏蔽group和others成员写;000表示创建的时候不屏蔽任何人open调用的读写执行设置;777与000相反。
也就是说设使用open调用创建文件的时候指定的权限为s_mode,umask的值为mask,那么最终创建文件的权限就是:
s_mode & ~mask
当然,用chmod还是可以改的。
*用符号表示的方式打印umask值:
$umask -S
输入之后,输出如下:
u=rwx,g=rx,o=rx
这里,实际的非符号值是0022,更进一步说明了,umask的值是被屏蔽的位。
[其他]
更多内容,待补充。
$ umask first print the current file mode creation mask
002
$ umask -S print the symbolic form
u=rwx,g=rwx,o=rx
$ umask 027 change the file mode creation mask
$ umask -S print the symbolic form
u=rwx,g=rx,o=