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