编程:777原理
linux系统中设置文件及文件夹权限,如果全部打开就是777
这里的3个7分别是:
- 用户权限:该文件所属用户所具有的权限
- 组权限:该文件所属组所具有的权限
- 其他人权限:非该文件所属用户和用户组的用户所具有的权限
我这边主要说的是为什么是7!
但下面也会说明下为什么是3个7
权限分为3个:读,写,执行
现在分别列出这些权限的组合数值
读:1 写:2 执行:4
读写:3 读执行:5 写执行:6 读写执行:7
- 一共正好是:1,2,3,4,5,6,7
- 这里1,2,4是基本的单一权限,是2^0,2^1,2^2,也就是2的次方集合
这里数值怎么出来我们都知道
但为什么要用这样的规律呢?
- 权限在整个系统中至关重要,权限判断的速度是很重要的
- 复杂的权限计算是不可取的,如何让每次判断权限尽可能的快
- 计算机计算中什么计算速度最快?位运算,也可以说是2进制运算,当我们看到单一权限都是2的次方集合应该就知道和2进制有关
现在分别列出这些权限的2进制组合数值:
读:1 写:10 执行:100
读写:11 读执行:101 写执行:110 读写执行:111
- 可以发现:每个权限都只关系到自身位的,也就是自身索引位,读是1,写是2,执行是3
- 位运算本身就是判断每一位的数值,2进制每一位只有0和1,也就是权限系统中的关闭和打开
- 无论多复杂的权限判断,在数据上只是对比位数,速度不会应权限的复杂而复杂,如果是组合权限,我只需要添加一位作为组合权限判断,复杂度就不会增加,速度与位数成线性增长
那为什么要用777来表示文件权限?
这里我想有2个原因:
- 计算存储的原因,读写执行占3位,计算机在存储数据上,最小是4位,一个9位的权限所占的数据量和3个3位权限所占的数据量是一致的
- 777很清晰的表名是3个权限类型,在程序设计中考虑到日后的实用性,毕竟数值也不是这么好记的,如果记在一个数值上,这个数是1~128,一串连续的数值具体表达的意思肯定没有每个7的组合容易记忆