|
|
发表于 2005-6-11 11:48:54
|
显示全部楼层
--
--
==umask 设置==
(操作为非根用户)
umask是shell内置命令函数. 用户创建文件或目录是通过这函数来删除(屏蔽)'文件或目录'最终权限位. 如: touch 最终权限位是 666 ,用户所设的 umask 为 022 ,创建文件的权限位为 664 .( 666, 022, 644 为八进制 )
$ umask 022
$ umask
022
$ touch /tmp/test
$ ls -l /tmp/test
-rw-r--r-- 1 xxxxx xxxxx 0 6月 11 09:25 /tmp/test
是不是 644=666-022 , 准确来说 NO ! 来看 umask 是怎操作的 :
先把 666,022 转化为二进制 :
666 ----> 110110110
022 ----> 000010010
然后把umask(022)转化为补码, 跟最终权限位 666 进行 AND 运算 :
(这里补码是交换数据位)
022 补码 ----> 111101101
110110110
AND
111101101
---------
110100100
$ declare -i gg
$ gg=2#110100100 ; echo $gg
420
$ awk -v ggg=420 'BEGIN{printf "%o\n",ggg}'
644
[ touch 创建文件权限位 644 是这来的. ]
那么要创建文件的权限位为 640 . umask是什么值 .
八进制 640 转化为 二进制 110100000
跟 666 (110110110) 进行 AND 运算
110100000
AND
110110110
---------
111101001
111101001 补码 000010110
$ bb=2#001010110 ; echo $bb
22
$ awk -v ggg=22 'BEGIN{printf "%o\n",ggg}'
26
umask值为 026 .
测试 :
$ umask 026
$ touch /tmp/ooo
$ ls -l /tmp/ooo
-rw-r----- 1 xxxxx xxxxx 0 6月 11 10:19 /tmp/ooo
[ 若把umask设置为默认, umask 026 放到 /etc/profile 里面 . ]
以上所论述如果有错的, 请指正 .
--
-- |
|