umask的定义:umask 是指使用者在创建文件或目录时的权限默认值
语法格式:umask: usage: umask [-p] [-S] [mode]
参数选项:
参数选项 | 解释说明 |
---|---|
-p | 输出格式:u=rwx,g=rx,o=rx |
-S | 输出格式:umask 0022 |
当我们登录系统之后创建一个文件是会有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask用于设置用户创建文件或者目录的默认权限,umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。
一般在/etc/profile,HOME/.bashprofile或者HOME/.profile中设置umask值。
读完后,还是不知道umask是什么鬼~~~
那我们就慢慢来揭开他的神秘面纱。。。。。
[root@node1 /]# umask
0022
[root@node1 /]# umask -S
u=rwx,g=rx,o=rx
[mysql@test1 ~]$ umask
0002
[mysql@test1 ~]$ umask -S
u=rwx,g=rwx,o=rx
[mysql@test1 ~]$
发现没有root用户umask为0022,普通用户umask为0002,第一个0可忽略掉。
不要感到奇怪,这就对umask的默认权限说明:
案例1:文件a.txt创建者有rwx权限,组成员有rx权限,其他用户由x权限
#读写执行 rwx=4+2+1=7
#读执行 rx=4+1=5
#执行 x=1
chmod 751 a.txt
-rwxr-x--x. 1 mysql mysql 0 Aug 11 15:58 a.txt
但是~~~ 需要注意的是umask的分数是"该默认值需要减去的权限", 因为r, w, x 分别是4, 2, 1分, 所以, 当拿掉写的权限, 就是输入2分, 拿掉读的权限,就是输入4分,拿掉读写的权限,就是6分,拿掉执行和写入的权限, 就是3分, 拿掉5分的权限,就是读和执行的权限。
#普通用户创建一个example.txt文件
[mysql@test1 ~]$ touch example.txt
可以看到example.txt权限为rw-rw-r–
[mysql@test1 ~]$ ls -l example.txt
-rw-rw-r--. 1 mysql mysql 0 Aug 11 16:32 example.txt
同理普通用户创建一个example文件目录,可以看到目录权限为drwxrwxr-x
[mysql@test1 ~]$ mkdir example
drwxrwxr-x. 2 mysql mysql 6 Aug 11 16:36 example
用上面的例子来说明:因为普通用户umask为002,所以user没有被拿掉权限,group也没有被拿掉权限,但是others的权限被拿了2(即w这个权限),那么当使用者:
创建文件时: (-rw-rw-rw-) - (--------w-) ==> (-rw-rw-r–)
文件最高权限:666-002=664
创建目录时: (drwxrwxrwx) - (d-------w-) ==> (drwxrwxr-x)
目录最高权限:777-002=775
聪明的你一定知道了,管理员root用户也是同样的道理,只不过umask变为0022了
#root用户创建文件目录
drwxr-xr-x 2 root root 25 Aug 5 23:51 example
#root用户创建文件
-rw-r--r-- 1 root root 0 Aug 5 23:51 examole.txt
创建文件时: (-rw-rw-rw-) - (----w—w-) ==> (-rw-r–r--)
文件最高权限:666-022=644
创建目录时: (drwxrwxrwx) - (d----w–w-) ==> (drwxr-xr-x)
目录最高权限:777-022=755
小样,到现在明白了umask是干什么了的吧!
就知道你会这么问,所以早就在这给你安排上了,如何修改umask的值
umask 的修改分两中:
[mysql@test1 ~]$ umask
0002
[mysql@test1 ~]$ umask 0003
[mysql@test1 ~]$ umask
0003
[mysql@test1 ~]$
关掉回话后umask恢复为0002
可以编辑以下文件 添加umask=023
sudo sh -c "echo umask 0023 >> /etc/profile"
#环境变量立即生效
source /etc/profile
umask永久为0023
完全可以根据当前登录用户来设置具体的umask值,下面是配置文件的有效程度
#交互式登陆的配置生效:
/etc/profile < /etc/profile.d/*.sh < ~/.bash_profile < ~/.bashrc </etc/bashrc 【/etc/bashrc的配置最有效 可以覆盖前面的配置】
#非交互登陆的配置生效:
~/.bashrc < /etc/bashrc < /etc/profile.d/*.sh
如当前登录用户为普通用户mysql
vi ~/.bashrc
umask 003
:wq
#重新打开窗口,发现
[mysql@test1 ~]$ umask
0003