linux文件权限解说

我们进入一个目录, 执行ls -l会显示该目录下所有档案(这里用"档案"这个词, 代表文件和文件夹)的详细信息.

如图:

linux文件权限解说

linux文件权限解说

一共有7列信息, 分别为: [权限], [连结数], [拥有者], [群组], [大小], [最后修改时间], [名字].

此篇仅对[权限], [拥有者], [群组]进行一下详细介绍.

由于Linux是个多用户多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此角色的概念非常重要. 这里有3个概念.

1)档案拥有者(user): 创建档案的人.

2)群组(group): 档案所属的群组.

3)其他(others): user和group之外的其它用户.

看一下[权限]这一列, 一共有10位, 可以分为4段.

第1位代表文件的类型, ' - ' 代表这是个常规文件, ' d ' 代表这是个文件夹. ( 还有其它一些不常见的如'  l ' , ' c ' , ' b ' , ' p ' , ' s ' 等, 在此暂不做解释. )

2~4这三位代表user的read / write / execute权限.

5~7这三位代表group的read / write / execute权限.

8~10这三位代表others的read / write / execute权限.

如果可读/ 写 / 执行, 则用字母r / w / x 表示, 如果不可读 / 写 / 执行, 则用 - 来表示.

read / write / execute 解释如下(摘录于百度文库):

对于文件:(以下对文件权限的测试是在上层目录权限为777的情况下完成的) 
可读:表示可以读取复制文件的内容
可写:表示可以修改文件的内容
可执行:表示可以用其他解析程序对文件进行执行操作
仅可读:只有可读权限则只能读取文件内容和复制该文件,不可改写文件内容,此时该文件的删除移动权限由上层目录权限决定,如果其上层目录拥有删除移动的权限,可以对其进行删除移动操作。
仅可写:如果只有可写权限而无可读执行权限,既不能读取和改写该文件内容,也不能执行文件,且不可复制文件,此时该文件的删除移动权限由上层目录权限决定。
仅可执行:只有可执行权限时不可读取和改写该文件内容,也不可复制该文件,好像也并不能作为脚本执行,此时该文件的删除移动权限由上层目录权限决定。
所以,通常要对文件具有写权限,需要同时具有可读和可写,要对文件具有执行权限,需要同时具有可读和可执行。

对于目录:(以下对目录权限的测试是在所涉及文件权限为777的情况下完成的) 
可读:表示可以列出目录本身和目录下面的文件和子目录的属性,仅查看属性(ls) 
可写:表示可以往目录中添加删除文件和目录
可执行:可以进入该目录, 可以读取该目录下面的文件内容或者改写文件内容(在文件权限允许的情况下)
仅可读:目录的读权限仅允许我们读目录,获得在该目录中所有文件名的列表,不可添加删除其中的文件或目录,也不可读取和改写其中文件的内容。
仅可写:如果只有写权限,仍然无法往目录中添加删除或修改文件和子目录,包括复制和移动。要修改目录中的文件内容,不仅仅需要目录的写权限,还需要目录的执行权限。
仅可执行:对目录没有读写权限,只有执行权限,一样可以读取和改写目录下面文件的内容(只要你确定该路径下的该文件存在);那是否不需要目录的可写权限呢?当然不是,如果没有可写权限,无法往目录中添加删除或修改文件和子目录,包括复制和移动。

可见, 这3种权限往往是搭配使用的. 比如对于目录, 只有r权限可能没什么作用, 往往r和x要同时提供(没有x就不能进入该目录, r就几乎没什么用了); 对于文件, 只有w却没有r往往也是没用的, 还是不能写, 没法读取文件的原内容, 又怎么对内容进行增删修改呢, 对吧.

上面的user, group, others给出的并不是具体的定义, 结合r / w / x 权限, 现构建个实际的模型, 看起来应该更容易理解. 如果纰漏, 还望指正.

我们假设大学同寝的4个人A,B,C,D在外面合租了一个四室一厅的房子, 那么这个房子可以认为是个总的上层目录, 起名叫home吧. 四个人的房间分别为目录A, B, C, D. 客厅卫生间厨房等共用的空间为目录E.

(1)  四个人对自己的房间有拥有权, 是这个房间的主人, 往往也有全部的权限, 所以对于房间(目录)A, 它的属性可能是这样 --> drwx------ user(A) group(A, 每个用户都至少依附于一个group, 它的主group)

(2)  四个人都是大学602寝室的兄弟, 那么我们新建个群组名叫dorm602, 把A,B,C,D都加到这个群组里, 那么这个公共区域E的权限可能这样 --> drwxrwx--- user(root) group(dorm602). 这样一来, 属于dorm602的A,B,C,D这四个人, 对于E都有读 / 写 / 执行的权限了.

(3)  A和B,C,D这几个人的关系都非常好, 我的卧室你们也都可以随便进来, 我的东西你们随便用, 那么好, 目录A权限可能设置成这样 --> drwxrwx--- user(A) group(dorm602).

(4)  A这个人实在是个好说话的人, 他完全不需要隐私空间, 除了B,C,D, 其他外人(比如某一天B的同学来了)也可以进他的屋参观, 但是却不想别人动他的东西, 只可以看. 那么目录A的权限可以这样设置 --> drwxrwxr-x user(A) group(dorm602). 我们看到, others的权限为r-x, 就是说, 你可以进我屋(x), 我房间里的东西你随便看(r), 但是你不能动它们(w).

同样, 关于上面提到的对于目录要rx同时提供, 对于文件rw要同时提供的问题, 我们也用这个例子看一下.

(5)  现在A对B,C,D说, 你看咱们关系这么好, 我屋的东西你们随便看随便用哦, 但是不能进我的屋子. 那么权限被A设置成这样 -->  drwxrw---- user(A) group(dorm602). 于是貌似大方, 其实就剩调侃了, 不给x权限, 有rw有神马用嘛... 好, 既然不让我进, 那我就在门口瞅瞅吧, 于是B试着在home目录执行ls -l A/, 如果A的屋里有个目录aaa, 有个文件bbb, 那么你大概能得到这样的结果:

d?????????  ?  ?  ?  ?  ?  aaa

-?????????  ?  ?  ?  ?  ?  bbb

很合理是不是? 即使你有r的权限, 进不去屋, 在外面"远观"你大概也就能看清里面有什么东西了, 东西的具体情况, 真的了解不到了.

(6)  如果是这样呢 --> drwx--x--- user(A) group(dorm602). 那就相当于说, 我屋你们可以进, 但是得把你们眼睛蒙上. OK, 屋是能进了, 但是里面有什么你完全不知道, 你想去动一下屋子里的东西, 都是不可能的. 于是cd A, 真的进到了A目录, 但是你要是ls一下, 不好意思了, 系统提示你没有权限喽.

(7)  有的时候我们在一个目录里新建个文件, 却提示没有权限, 这是怎么回事呀. 这就好比B的一个东西想放在A的房间里, 为了达到这样目的, 目录A的权限可以这样 -->drwx-wx--- user(A) group(dorm602). 现在B的一个文件ccc就可以放到A的房间里了, 注意目录A的group权限的r不是必须的, wx却是缺一不可的.

(8)  可以看出上面大部分都在拿目录举例, 因为对于文件的读写执行权限的概念我们应该比较好接受. 说一下上面提的rw的问题吧. 对于文件, 只有w权限往往没有用, 还是没法写, r往往也需要带着. 比如A的房间里有个文件computer, A把这个文件的权限设置为了-->d-wx------ user(A) group(A). 如果有一天A觉得自己电脑的CPU性能太差了, 想给自己电脑换个新CPU, 当然, 他有这个操作权力(有w嘛), 可是没有r啊, 于是A只能闭着眼睛把新的CPU组装到电脑上, 显然, 这次w操作, 不会成功的, 没r权限, 他可能连电脑盖子都打不开, 梅超风那种闭着眼睛打架还那么厉害的, 只能存在于武侠小说里是吧^ ^ . 当然, 聊以自慰的, 由于有x权限, A平时还是可以开机玩玩电脑的, 虽然比较慢.

例子就举到这里吧, 现在关于rwx和user, group, others应该有些具体的印象感了吧!

对这些读写权限, user, group神马的有了了解, 文章的目的也就达到了, 最后附上设定权限的命令

一.  chgrp: 改变档案所属群组.   命令格式为: chgrp groupname filename. 当然, 群组名需要存在.

二.  chown: 改变档案拥有者.     命令格式为: chown username filename. 同理, 用户名也需要存在.

其实chown包含chgrp的功能, 使用起来非常灵活:

chown username filename                          //只设定user

chown username:groupname filename    //user & group同时设定

chown :groupname filename                       //只设定group.

另外' : ' 可以用 ' . ' 来代替, 用法也完全一样, 只是如果username和groupname里本身就含有' . ' 这个字符的话, 可能就容易混淆了, 所以还是推荐用 ' : '

三.  chmod: 更改r / w / x 权限

更改r / w / x 有两种方式, 一种是数字, 一种是符号. r , w, x 的权值分别为4, 2, 1, 于是权限表我们就可以用三个数字来表示, 比如rwx------ 为700,  rwx---r-- 为704, -wx--xrwx为317.

这样一来chmod的用法也就可以分别两种了, 这个命令用法很灵活, 直接举例作为总结了.

数字:

写法简单, 缺点是不直观, 且进行局部设定时不方便.

chmod 777 filename

字母:

这个用法就非常灵活了, 其中u, g, o, a分别代表user, group, others, all.

chmod u=rwx,go=rx filename

chmod u=wx filename

chmod g+x filename

chmod a+w filename

chmod +w filename

上一篇:Linux内核分析第四周学习总结——系统调用的工作机制


下一篇:大数据学习笔记——Spark工作机制以及API详解