Linux有两大类用户,就是root和普通用户。
root:超级管理员,权限非常高。
普通用户:具有一般权限,受权限的约束。
一个文件或者目录,有三种人可能会进入。
(1)拥有:这个文件的拥有者。
(2)所属组:虽然不是文件的拥有者,但是和拥有者是一个组的,可以理解成关系户。
(3)其他人:对于文件来说是陌生人,但是可能会访问文件。
所以要对这三类人,进行权限管理,如果不管理的话,对文件可能会造成损伤。比如我有一个文档,我不希望别人在里面写东西,我就把其他人的写权限关闭,所属组我希望他可以写,那就打开他的写权限。
为了讲清楚文件权限,我们可以打开一个文件看一下。

(1)可以看到我打开了一个文本文件 ny.txt,先认识拥有者,所属组的位置。
ol/[
(2)文件的类型,看第一栏。

根据第一栏可以判断文件的类型:
d:目录文件
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
(3)用户,用户组,其他人对应的权限。

第2,3,4栏为用户权限,第5,6,7栏为用户组权限,第8,9,10为其他人权限。
r (read):可以读取文件的实际内容。
w(write):可以编辑,修改文件的内容。(不能删除文件)
x(execute):可以执行此文件。
根据上面,用户:可读可写;用户组:可读;其他人:可读。
rwx:三个位置不能改动,默认的顺序。
r:用二进制表示为100,八进制: 4。
w:用二进制表示为010,八进制:2。
x:用二进制表示为001,八进制: 1。
所以能用数字来表示权限,比如用户的权限是rwx,那么二进制就是111,八进制就是7;用户组是rw-,那么二进制为110,八进制为6;其他人权限为r--,那么二进制是100,八进制是4。所以整体用八进制表示就是764。
根据这个方法,我们可以表示一下上面 ny.txt 的权限:644。

打开一个目录 ,方便我们去学习目录权限.

上面两个都是目录,可以看第一栏,是d,所以是目录文件.目录权限和文件权限有些类似.但是rwx的含义不同.
r :表示具有读取目录结构数据的权限,也就是可以查看此目录的文件名.
w:表示具有改动该目录结构列表的权限,这个权限就比较大了.
(1)建立新的文件与目录
(2)删除已经存在的文件与目录(与文件本身权限无关,只要在此目录下,并有w权限就可以删除)
(3)对文件或目录进行重命名
(4)移动该目录内的文件,目录位置
x: 表示具有进入该目录的权限,简单说就是可以cd进去.
我们可以验证一下.
(1)验证r权限,可以查看目录下的文件名.我以root身份,也就是拥有者去查看的,发现没问题,可以查看,我现在将其他人的r权限去掉,再切换到普通用户继续用 ls 会发生什么呢?

p1的其他人的r,权限已经被我拿掉了。现在我切换到普通用户。

被拒绝了,这样就简单验证了r权限。

(2)验证w权限
默认的目录权限,是不会给其他人w权限的,所以我适用root身份,给普通用户加上w权限。
先看看没有w权限的普通用户,可不可以再目录下创建文件,或者删除文件。
一,不能创建文件

二,不能删除文件或者目录

三,给普通用户w 权限,并创建一个普通文件。


(3)验证x权限
p1目录的x权限默认开着,所以上面我们才能随意进出文件,现在我们将x权限关闭看看普通用户进入会出现什么问题。

进入被拒绝了。

修改权限主要是root干的事,如果普通用户想要修改文件或目录的权限,需要用sudo暂时提升一下权限,所以修改权限还是用root,操作简单些。
(1)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
一,用户表示符 +/- /= 权限字符
用户符号:
u:拥有者
g:所属组
o:其它用户
a:所有用户
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限

拿这个普通文件举例。
例子:赋予所属组w权限

移除所属组w权限

全部增加x权限

二,八进制数字改变权限
上文讲到过,rwx权限是可以用八进制表示的,所以在chmod中也可以利用此点来进行权限修改。
比如我想将yy.txt的权限改为rw- r- - r- -,那么数字就是644.
所以如下:

(2))chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
常用选项:-R递归修改文件的拥有者
总结:chown用于修改文件的拥有者

例子:修改ny.txt的拥有者为ly

我们可以试一试递归修改拥有者。
比如:p1目录及其以下文件。

执行此条命令





可以看到,p1下的子目录以及文件的拥有者都变成了ly。
(3)chgrop
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
chgrop和chown用法一致,不赘述了。
默认权限就是文件,目录一上来,系统给配置的权限。
新建文件夹默认权限=666(rw- rw - rw -)
新建目录默认权限=777 (rwx rwx rwx)
那么我们可以验证一下,是否默认权限是如此。
新建立一个文件。

再新建立一个目录

我们惊讶的发现,不一样,这是为什么呢?
(1)umask
功能:查看或修改文件掩码
文件掩码导致默认权限发生改变,如果我们想要修改默认权限,也可以利用文件掩码。
利用umask查看文件掩码,看它是如何导致的默认权限改变。

一,第一个0,不管它,看作022即可。

文件的初始权限。

目录的初始权限。

二,结论
结论:将文件掩码按位取反再和初始权限按位与得到的是默认权限。

对吧,就是这样操作的,644就是普通文件的默认权限,目录的默认权限计算留给大家了。
(2)利用umask修改文件的默认权限
根据上面的规则,我们可以自定义文件默认权限,但是只在本次工作有效,如果想要长期有效需要配置文件了。
比如:我就想文件的默认权限为初始权限,那么如下设置。


可以看到rr.txt的默认权限是666。
粘滞位可以解决普通用户删除不属于他的文件的问题。上文讲了,如果普通用户有了目录的w权限就可以随便删除目录底下的文件,不管是谁的文件,他都可以删除。这就有大麻烦了,一个普通用户带着个w权限,在这里乱杀。不行,所以有了粘滞位的解决办法。
那就是 chmod +t,给文件加上t权限后:
只能由:
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
例子:
我已经切换到普通用户,并且p1目录对其他人有w权限

我进入p1,并且干掉一个文件ww.txt。

非常的不安全,现在利用粘滞位,对p1加上t权限。

我们再切回普通用户,看看还能不能删除p1的文件。

很明显删除不了,并且我用的是-rf,删除不了。
结尾语:权限讲到这里,希望大家有所收获。