Android 文件权限

作者: 灰灰手记 | 来源:发表于2018-10-24 17:58 被阅读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 来表示权限。同时设计者也提供了更直观的权限修改方法,但在介绍这个方法之前,还是再提下这几个权限组:

    • user:文件拥有者,表示为 u
    • group:文件拥有者所在的用户组,表示为 g
    • other:其它用户,表示为 o
    • all:所有用户,表示为 a

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

    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,因此个人认为就按十进制还更好理解一点。

    相关文章

      网友评论

        本文标题:Android 文件权限

        本文链接:https://www.haomeiwen.com/subject/bjrmzftx.html