背景
很多Linux新手发现某个文件没有相关权限,一言不合就是chmod 777
。首先说一句,chmod 777
应该杜绝使用,尤其生产环境。
那chmod 777
的背后原理到底是什么呢?
Unix权限设计
首先Unix系统的权限分为三种,分别为拥有者(owner)、用户组(group)、其他用户(other)。用ll
命令可以查看具体的权限设置,如下图所示:
每个项目前面那一串字母和横杠就是权限。第一位指的是文件类型:-代表普通文件,d代表文件夹。后面9位分为三组,每组代表了对应用户的权限:
- r=4:读
- w=2:写
- x=1:执行
回过头来看上图的soft目录,他的权限是drwxr-xr-x
就可以解读为:
- d:这是个目录
- rwx:拥有者(onwer)有读、写和执行权限
- r-x:用户组(group)有读和执行权限,没有写权限
- r-x:其他用户(other),和用户组的权限一样
读、写、执行的权限值为何是4、2、1?
这是因为1、2、4的二进制为:
- 1:001
- 2:010
- 4:100
这么做主要有2个好处:节省空间和提升运算效率。
Unix是上个世纪60年代的产物,当时的硬件资源非常宝贵。所以只用3bit来保存权限。并且二进制的位运算效率特别高,如下例子:
|
|
这个权限的判断效率不仅简洁而且高效。