权限在Windows中体现的反而没有Linux明显,Linux中相对来说比较透明。
在Linux中默认创建一个文件或者一个目录的权限是不同的;普通用户创建一个普通文件或者目录的权限与系统用户创建的普通文件和目录的权限又是不同的。
而这里都是通过umask(补码)来限制权限的。
root用户umask值为022,而普通用户tel的umask值为002,(umask值为四位数值,第一位数值为特殊位数值,这里不解释,忽略)
那么如何鉴定普通用户和系统用户?严格来说并不是通过“普通用户”“系统用户”这两个词来鉴定的,而是通过用户的id
这是/etc/profile文件的一段内容,说明了用户如果满足uid大于199,同时满足gid与uid相同,则umask值为002,否则umask值为022
那么接下来我们解读一下umask值以及默认权限。
Linux系统默认 目录的缺省权限为777,即drwxrwxrwx
文件的缺省权限为666,即-rw-rw-rw-
用缺省权限值减去umask(补码)值等于创建的目录或者文件的权限
root用户: umask=022即umask=----w--w-(前三个横杠-表示owner权限,中间三个-w-表示group权限,最后三个-w-表示other权限)
目录: (rwxrwxrwx) - (----w--w-) = rwxr-xr-x,root_dir的权限也确实是rwxr-xr-x
文件: (rw-rw-rw) - (----w--w-) = rw-r--r--, root_text的权限也确认是rw-r--r--
tel用户,以此类推,
这里特别注意一点,以上的权限相减才是正确操作方式,有些文章会用数值来相减,比如目录777-022=755,666-002=664,这样相减有时候是错误的值。
按照数值减法:666-033=633,即rw--wx-wx,但是实际上tel_text2的权限时rw-r--r--, 用(rw-rw-rw-) - (----wx-wx) = rw-r--r--,没有x可以减,则自动忽略,与实际权限一致
永久修改umask值
通过命令行umask 033 设置的umask只在当前shell有效,一旦关闭该shell或者切换shell,或者关机重启则设置的umask值将消失,如果想永久设置umask值可以通过几个文件来设置。
既然/etc/profile文件可以修改,那么/etc/bashrc文件必然也是可以修改的
用户home目录下的.bashrc文件,添加umask 033,设置开机自动启动也可以,方法很多
END