Linux学习第六篇--Linux的权限

前言

在linux中每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录.
一般情况下,一个文件或目录具有三个权限:可读,可写,可执行.这三个权限从名字可以看出来,分别是读权限,写权限,执行权限.
同样,每个文件或目录对应的用户身份也分为三个类别:所属用户,所属组,其他用户,分别对应着文件的拥有者(创建文件的用户),文件所在用户组,以及其他用户.
这样每个身份都对应着读,写,执行三个权限,所以文件或目录会有九个权限属性.
按照身份分别对应一套权限,故有三套权限.
这里有这个概念就好.

文件的所属者和群组

那么什么叫用户身份呢?有什么作用?

这个问题,我觉得<鸟哥的Linux私房菜基础篇>里的例子就很棒,很容易理解.


假设有一家人,家里有三兄弟,A,B,C,户主是大A,这三兄弟住在一栋房子里,每人一间房间,然后大家共用客厅.
那么,其实这三个人就属于同一群组A(一家人),然后每个人的就是他们卧室的所有者.至于客厅则是大A这个群组公用空间.

Linux学习第六篇--Linux的权限
所有者的意义就在于,A卧室只属于A,如果其他用户想要进入A卧室,那么必须征得A的同意,如果B没有经过A的同意就进入了A卧室,那肯定是不被允许的.
但是,如果A把钥匙放在了大厅里,然后告诉BC,可以随便进入自己的房间,这样其实就没有任何问题.
可是,如果这时候,在房间外来了一个人 ,D,D是以为负责收拾卫生的人,D没有钥匙没法进入房间,所以开始敲门,这时候房间内的人放D进去,并告诉D,您可以打扫卫生了.
这时候D才可以进入房间,并打扫卫生,这里D就是其他用户.
但是这时候有一位警察,ROOT,他拿着搜查令来到房间,他怀疑A昨天没洗澡,他不需要征得ABC的同意就可以进入房间.而这位ROOT先生就是ROOT用户,他拥有所有权限.
通过上面就可以大概了解:
所属者:房间的主人(创建文件或目录的用户)
所属组:ABC一家人(文件所在组的其他用户)
其他用户:清洁工D(非文件创建者,也不属于文件所属组的用户)

文件权限和属性

在了解了文件的群组之后,可以开始聊一下文件的权限,在最开始我们已经对文件的权限有了一个概念,那么如何具体看一下文件的权限呢?

ls -l 命令可以列出当前目录下所有文件/目录的属性

每条记录大致如下:

drwxr-xr-- 1 root root 256 June 12 17:31 panda.log

这条记录大致可以分为七个部分:

1. drwxr-xr-- 这一块第一个字符表示文件的类型 其余九个字符代表着文件的权限,

其中第一个字符 d 表示这个文件是一个目录.剩余的九个字符可以分为三组,每组三个字符.其中每组的三个字符格式是固定的:

第一个字符表示可读权限,如果没有读权限则用 - 表示.

第二个字符表示可写权限,如果没有写权限则用 -表示

第三个字符表示可执行权限,如果没有执行权限则用 -表示.

而这三个组分别对应所属用户,所属组,其他用户.

这样解析这个文件的结果就是,该文件的拥有者 拥有 读 写 执行的权限,文件所属组的用户具有读和执行的权限,其余用户只有读的权限.

2.  1 表示又少个档名链接到了当前节点,这个包含很多东西,打算单开一份blog.

3.   root 表示当前文件所属用户

4.  root 表示当前文件所属组

5. 256 表示当前文件大小,单位bytes

6. June 12 17:31 该文件的创建时间或者最后一次操作时间

7. panda.log 该文件的文件名称

Linux的权限与权限变更

在了解了linux文件的权限之后,我们如何变更linux权限呢?
其实linux变更权限的方式很简单,通常可选的由三个命令,chmod,chown,chgrp.
这三个命令的作用是:
chmod:变更文件或目录的读写执行权限,通常有两种方式,
1.通过数字变更,chmod 777 filename. 这里的777就是文件的权限,具体什么意思呢?
在这里每个数值对应的其实是该文件的一个身份,对应顺序为文件所属者,文件所属组,其他用户,数值的具体含义是什么呢?
其实,linux文件的可读可写可执行三个权限,使用的二进制数值来判断的,比如7这个值,转换成二进制是111,而这三个1则分别对应着
文件的 读,写,执行三个权限.如果具有该权限,则对应的位置则为1,没有则为0,最后转换成对应的数值即可.
2.通过字符变更权限.chmod命令可以通过追加选项来进行文件权限的变更,其中u代表文件所属者,g带面文件所属组,o代表其他用户,a代表三个身份.
然后还有三个操作符.=代表赋值,-代表移除指定的权限,+代表添加指定的权限,r代表读权限,w代表写权限.x代表执行权限.
所以也可以通过这种命令修改权限,比如 chmod a+x  filename 代表给所有的用户增加该文件的执行权限.
chown:改变文件所属者,比如 chown panda file,这里的panda代表的就是修改后的所属者.但是需要注意的是这个用户必须存在.
chgrp:修改文件的所属组,比如 chgrp panda file,这里的panda代表的是用户组panda.同样修改时,panda组必须存在.
其中chgrp有一个选项可以递归修改文件所属者/组,就是加上 -R选项.

说到这文件的读写执行权限具体有什么作用呢?
对于文件来说,读权限代表着用户可以读取该文件内部的内容.写权限代表着用户可以执行增改的操作(不能删除),执行权限代表着用户可以执行该文件.
对于目录来说,读权限代表着用户可以查看目录下的内容,写权限代表着用户可以对目录下的文件/目录执行增删改操作,执行权限代表用户可以进入该目录.

Linux文件的扩展名称和种类

linux的文件种类比较多其中:

以 - 修饰的正则文件:

1.纯文档ASCII文件,人类直接可读的文件.

2.二进制文件,二进制文件多为可执行文件.

3.说一句格式文件,具有特定格式的文件.

以 d 修饰的目录.

以 l 修饰的连接文件:这种文件类似于windows的快捷方式.

以 b修饰的接口设备,比如硬盘灯.

以 c 修饰的字符设备文件,比如键盘,鼠标.

以 s 修饰的socket文件,该文件通常被用在网络上的数据承接.

以 p 修饰的FIFO文件.用于解决多个程序同时读写一个文件的问题.


其实在linux中文件是没有扩展名称的,他的状态取决于他的权限,但是为了增加可读性,通常会添加扩展名作为标志(仅作为标志),