前言
说到权限,相信大部分人都用的还是windows系统,既然说到了权限这一块,我就不得不吐槽windows权限做的真是垃圾中的战斗机,没有比windows权限做的更垃圾的了。相反,linux系统下的权限控制就做的比较好,所以呼吁广大小伙伴们,特别是深受windows荼毒的小伙伴,赶紧弃win选linux吧。反正我是等到买了mac后,宁愿用mac os都不用windows了。真的是太恶心,太垃圾了。当然windows也有做的比较好的一面,像图形用户界面的交互做的就比较好,要是哪天能够把权限做的像linux一样,我估计我还是会选择windows的,不过我估计是不可能了,我还是安安心心用我的linux去了。
可能有小伙伴会有疑问,为什么要把权限这点小知识点单独拎出来讲,我个人认为android是在linux的基础上进行开发的,本质其实还是linux,我觉得既然作为一个android开发者,连linux文件权限都不清除的话,好像有点说不过去。
生成不同权限的文件
既然我们要看linux下的权限说明,我们就从基础入手,我们先用代码在我们之前创建的HelloWorld中写上如下代码:
这几行代码执行完成之后,我们利用adb shell指令进入当前模拟器的linux环境
- 执行 adb shell
- 执行 cd data/data/com.selfassu.helloworld 注意:后面的com.selfassu.helloworld换成你自己的应用包名
- 执行ls -l 显示当前目录所有文件列表
- 执行cd files 进入files目录
- 执行ls -l
- 以上几步做完之后,你就可以看到在files(路径:data/data/package/files)文件夹下,有一下四个文件,名字分别为append.txt, private.txt, readable.txt, writable.txt, 创建的文件对应不同的数据权限。或许你现在看不懂-rw-rw—-是什么意思,但是别着急,我们马上就来给你分析分析这一串数据代表的意义。
注意:
执行adb shell指令时候,出现
error: more than one device/emulator
错误,出现这个错误的原因主要是因为设备不止一台,我们要进入某一台的设备shell环境下,必须指定需要进入的shell环境的设备序列号:
adb -s 设备序列号 shell
linux权限详解
权限字符串解释
linux文件权限一共有十位,第一位是单独一组,后面的九位是每三位一组。
第1位代表的是文件的类型:
- 如果是”d”,就是文件夹
- 如果是”l”,文件快捷方式
- 如果是”-“, 就是文件
第2到4位是所属用户对文本的权限
- r 读权限
- w 写权限
- x 执行权限
第5到7位 是该文件所属用户组对该文件的权限
- r 读权限
- w 写权限
- x 执行权限
第8到10位 是其他用户对该文件的权限
- r 读权限
- w 写权限
- x 执行权限
将字母转换成二进制
- 用二进制表示:
- 规则
- 如果是-,就用0来表示,
- 如果不是-,就用1表示。
将二进制的数字转换成十进制
- 换成十进制后,可以用linux指令更改文件权限
- 这样说是不是太抽象了。那么可以,我们举个栗子:
- -rwxrw-r– 换成二进制数字为111110100(注意第一位不需要换算成二进制的数字)
- 第一位的“-”, 可能是“d” 或者“l”,这一位是没有办法改变的,这个是文件的固有属性,就像人出生一样,有的人一出生就是男性,而有的人一出生就是女性,比喻不太恰当,但是我觉得正好可以说明这个问题。
- 按照上面的分法,将二进制数字每三位换成十进制数字就是:764
- 下面你们自己做做 -rw-rw–w- 这个对应的十进制的权限数字是多少呢?
好啦,这样是不是看起来更容易理解一点?
使用指令chmod更改linux文件权限
- linux中更改文件权限的指令是chmod,是change mode的简写
然后使用linux指令更改权限
chmod 764 文件名称
我已经更改了private.txt文件的权限,细心的小伙伴可以仔细看看,private.txt的权限是不是和之前不一样了?是不是so easy?你没有猜错,linux下更改文件权限就是这么简单。比windows强多了,在权限这点上。
linux权限的详细图解
详细图解如图所示
总结
android中的文件权限大致就是这样吧,当然,权限肯定不止这些,更深入的还需要你们自己去挖掘。下一节我们来一起学习一下android开发中的UI设计。