umask
在Linux系统下, 创建一个文件/目录时, 系统都会给它赋予一个默认的权限, 这个默认权限就是umask
设置的。umask
设置了用户创建文件的默认权限, 它与chmod
的效果刚好相反, umask
设置的是权限的反码, 也叫作预设权限(权限掩码)
你的系统管理员必须要为你设置一个合理的 `umask`值, 以确保你创建的文件具有所希望的缺省权限, 防止其他非同组用户对你的文件具有写权限。在已经登录之后, 可以按照个人的偏好使用`umask`命令来改变文件创建的缺省权限。相应的改变**直到退出该shell**或**使用另外的`umask`命令之前**一直有效。
一般来说, umask
命令是在/etc/profile
文件中设置的, 每个用户在登录时都会引用这个文件, 所以如果希望改变所有用户的umask
, 可以在该文件中加入相应的条目。如果希望永久 性地设置自己的umask
值, 那么就把它放在自己$HOME
目录下的.profile
或.bash_profile
文件中。
umask的使用
umask
命令允许你设定文件创建时的缺省模式, 对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask
值中的数字。
注意:
- 对于文件来说, 权限数字的最大值是6。因为系统不允许你在创建一个文本文件时就赋予它执行权限, 必须在创建后用
chmod
命令增加这一权限。 - 目录允许设置执行权限, 这样针对目录来说,
umask
中各个数字最大可以到7
查看当前umask
1 | $ umask |
设置umask
1 | umask nnn # nnn为 000-777 |
计算umask的值
设置umask值后, 怎么快速得到创建文件的权限呢
减法
一种是使用减法。
记住文件权限最大值是6, 目录权限最大值是7,
当你umask 002
, 那么文件得到的权限就是 664, 因为 6-0=6 6-0=6 6-2=4, 目录则是775
异或
另一种就是异或。
记住文件权限最大值6的二进制是110, 目录权限最大值7的二进制是111,
当你umask 002
, 那么文件得到的权限就是 664, 因为二进制异或: 000110=110、000110=110、010^110=100, 所以权限就是664, 目录则是775