umask 设置

  • 背景:

有时候需要在linux上从其他人的目录里copy文件过来。

最近遇上的事情很麻烦,就是copy的时候发现很多文件copy不过来,copy一个文件夹时,当前文件把权限修改了,结果子目录的中的还没有自动继承过来,导致子目录中的文件copy不过来。

  • 原因

umask的默认值改变了

  • umask 简介

umask命令设定创建文件的缺省模式。对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。

  • umask 计算

umask跟chmod命令正好相反,所以我们只要记住u m a s k是从权限中“拿走”相应的位即可。

例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?

第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照u m a s k值写下相应的位,在本例中是0 0 2。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有执行权限,只要拿掉相应的执行权限比特即
可。
这就是上面的例子,其中u m a s k值为0 0 2:
1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限

其实就用最大权限减掉umask值即可,如文件的最大权限是666,那么umask 值为002的文件默认权限是666-002 =664。 目录的最大权限是777,那么umask值为002的目录的默认权限是777-002=775

  • umask 修改

最初登录时,umask确定了用户创建文件的缺省模式。 

登录之后可以使用umask命令查看当前的umask值,也使用umask命令改变文件创建的缺省模式。如

m0145216@c408eag:~> umask
0027
m0145216@c408eag:~> umask 0022
m0145216@c408eag:~> umask
0022
m0145216@c408eag:~> 

按照以上方式改变的umask值在shell退出之前或者使用新的umask命令之前一直有效,如果想永久改变umask值,需要修改自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中,如:

m0145216@c408eag:~> umask
0027
m0145216@c408eag:~> vim .bash_profile 
m0145216@c408eag:~> cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

umask 022

m0145216@c408eag:~> source .bash_profile 
m0145216@c408eag:~> umask
0022

即使重新打开一个新的终端,umask值依然是0022.

 

  • 参考文献:

http://blog.csdn.net/gxh9314/article/details/3441983

https://www.cnblogs.com/wish123/p/7073114.html

 

posted on 2018-02-21 16:43  yanzibuaa  阅读(5501)  评论(0编辑  收藏  举报