Zacard's Notes

chmod777原理

背景

很多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来保存权限。并且二进制的位运算效率特别高,如下例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
public static final int READ = 4
int auth = 5;//101,拥有读和执行权限
/**
* 101 (5)
* & 100 (4)
* = 100 (4)
*
*/
if(auth & READ){
doRead();//有读权限,执行读操作
}

这个权限的判断效率不仅简洁而且高效。

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章