Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

3,932

编程:777原理

  • 2013-05-14
  • 暂无评论

linux系统中设置文件及文件夹权限,如果全部打开就是777
这里的3个7分别是:

  1. 用户权限:该文件所属用户所具有的权限
  2. 组权限:该文件所属组所具有的权限
  3. 其他人权限:非该文件所属用户和用户组的用户所具有的权限

我这边主要说的是为什么是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的次方集合

这里数值怎么出来我们都知道

但为什么要用这样的规律呢?

  1. 权限在整个系统中至关重要,权限判断的速度是很重要的
  2. 复杂的权限计算是不可取的,如何让每次判断权限尽可能的快
  3. 计算机计算中什么计算速度最快?位运算,也可以说是2进制运算,当我们看到单一权限都是2的次方集合应该就知道和2进制有关

现在分别列出这些权限的2进制组合数值:

读:1 写:10 执行:100
读写:11 读执行:101 写执行:110 读写执行:111

  • 可以发现:每个权限都只关系到自身位的,也就是自身索引位,读是1,写是2,执行是3
  • 位运算本身就是判断每一位的数值,2进制每一位只有0和1,也就是权限系统中的关闭和打开
  • 无论多复杂的权限判断,在数据上只是对比位数,速度不会应权限的复杂而复杂,如果是组合权限,我只需要添加一位作为组合权限判断,复杂度就不会增加,速度与位数成线性增长

那为什么要用777来表示文件权限?

这里我想有2个原因:

  1. 计算存储的原因,读写执行占3位,计算机在存储数据上,最小是4位,一个9位的权限所占的数据量和3个3位权限所占的数据量是一致的
  2. 777很清晰的表名是3个权限类型,在程序设计中考虑到日后的实用性,毕竟数值也不是这么好记的,如果记在一个数值上,这个数是1~128,一串连续的数值具体表达的意思肯定没有每个7的组合容易记忆


back up ↑

无觅相关文章插件,快速提升流量