Android ROM开发

Android 文件权限

2018-10-24  本文已影响15人  灰灰手记

查看权限

Android 是基于 Linux 衍生的,在很多地方和 Linux 保持高度一致,比如文件权限管理。我们可以在adb shellLinux终端中,通过命令 ls -la 分别看到 Android 和Linux 的文件权限信息。

比如在 adb shell 看到这样的内容是这样的:

drwxr-xr-x   4 root   root     100 2015-01-01 01:05 storage
dr-xr-xr-x  15 root   root       0 2015-01-01 01:04 sys
drwxr-xr-x  19 root   root    4096 1970-01-01 08:00 system
lrwxrwxrwx   1 root   root      14 1970-01-01 08:00 vendor -> /system/vendor

Linux 终端中看到的内容是这样的:

drwxrwxr-x   2 shawn shawn     4096 Sep  6 14:45 release
-rwxrwxr-x   1 shawn shawn     1277 Oct 15 09:37 remake
-rwxrwxr-x   1 shawn shawn     1276 Oct 15 09:37 rmPropFiles
drwxrwxr-x  24 shawn shawn     4096 May 30 15:28 sdk
drwxrwxr-x  28 shawn shawn     4096 May 30 15:28 system

可以看到输出的信息基本一致,其中最后一列是文件名(或路径),而第一列就是权限信息;剩下的除了第二列的数字可能不明白以外,其它列应该都能猜到是什么意思。

这里只关注第一列的权限信息,但这一串子母和横线的组合是什么意思呢?

权限组成

权限信息则由4部分组成,分别是:文件类型、用户权限、用户组权限、其他组用户权限,以上面部分信息为例就是这样定义的:

权限信息组成

其中,权限里面 “-” 表示不具备该权限;文件类型里面“-”表示普通文件,也就是我们日常理解的文件。在 Linux 下,文件的概念很宽泛,如下内容均叫做“文件”:

Linux 文件类型

权限的组成知道了,可怎么修改权限?

修改权限

首先要知道修改权限的命令:chmod,其使用方法如下:

chmod MODE FILE...

这里 MODE 就是要改成的权限;FILE 表示目标文件,其后的...表示文件可以有多个。

1、MODE 是3位数字

我们知道,机器运算是以二进制进行的,二进制内容机器不需要转换就能懂,因此二进制的操作在一定程度上能提升运算速度。这里的权限管理也采用二进制表示,但人是很难理解这些 01 组合的,因此设计了这个rwx的表示方法,它们的对应关系如下:

二进制对应关系

举个栗子:
假设有文件 text.log,只有创建者有所有权限,其他用户没有任何权限,那它就是这样的:

rwx------

如果要把权限改成所有用户都有,也就是rwxrwxrwx,按对应关系就是这样:

rwxrwxrwx

因此命令应该这么写:

chmod 777 text.log

这种方法每次设置都要计算3组值,然后拼成参数。那么当只需要修改某一组的权限时,有没有更简单直接的方法呢?

2、MODE 是字母组合

上面说了,为了方便给人看,设计了 rwx 来表示权限。同时设计者也提供了更直观的权限修改方法,但在介绍这个方法之前,还是再提下这几个权限组:

基于这种表示方法,就有了下面这种更简单直观的权限修改方法

chmod 用户+权限 FILE...

还是用上面的栗子,改成 rwxrwxrwx,那这里的写法就是:

chmod a+rwx text.log

这里意思就是给 a 用户添加 rwx 权限。如果只需要给 o 用户添加 rw 权限,只需要这么写:

chmod o+rw text.log

说明

上面的十进制说法是个人理解,我的理解是3 组 rwx 的二进制单独运算,然后拼起来组成参数。

但实际应该是八进制表示的,把 3 组 rwx 的二进制当作一个整体,也就是当作一个 9 位二进制数去运算,然后将结果转换成 3 位八进制数,也就是这样:

3位八进制数

因为 3个二进制位表示的最大数也只有7,因此个人认为就按十进制还更好理解一点。

上一篇下一篇

猜你喜欢

热点阅读