注意:以下所说的文件包括:普通文件和目录!!!
我们在xshell中演示一下:
[carrot@VM-0-16-centos ~]$ ll
total 4
drwxrwxr-x 2 carrot carrot 4096 Dec 24 14:06 dir1
[carrot@VM-0-16-centos ~]$ ll dir1
total 8
-rw-rw-r-- 1 carrot carrot 6 Dec 24 14:06 hello.txt
-rw-rw-r-- 1 carrot carrot 10 Dec 24 14:06 test.txt我用普通用户创建了一个dir1目录,并且在dir1目录中创建了两个文件:hello.txt和test.txt
现在我(carrot)作为该目录dir1的拥有者,对于dir1目录有rwx权限——
[carrot@VM-0-16-centos ~]$ chmod u-r dir1
[carrot@VM-0-16-centos ~]$ ll
total 4
d-wxrwxr-x 2 carrot carrot 4096 Dec 24 14:06 dir1
# 将拥有者的 r 权限删除之后,可以正常进入
[carrot@VM-0-16-centos ~]$ cd dir1
[carrot@VM-0-16-centos dir1]$ pwd
/home/carrot/dir1我们将拥有者的 r 权限删除之后,可以正常进入dir1目录,说明权限 r 不是决定作为一个普通用户是否可以进入目录
而是决定一个普通用户是否查看目录中的文件信息——

[carrot@VM-0-16-centos ~]$ chmod u+r,u-w dir1
[carrot@VM-0-16-centos ~]$ ll
total 4
dr-xrwxr-x 2 carrot carrot 4096 Dec 24 14:06 dir1
[carrot@VM-0-16-centos ~]$ cd dir1
[carrot@VM-0-16-centos dir1]$ pwd
/home/carrot/dir1
[carrot@VM-0-16-centos dir1]$ ll
total 8
-rw-rw-r-- 1 carrot carrot 6 Dec 24 14:06 hello.txt
-rw-rw-r-- 1 carrot carrot 10 Dec 24 14:06 test.txt我们加上carrot作为拥有者的 r 权限,并删除 w 权限,发现可以进入dir1目录,并且可以查看文件的信息,说明 w 权限 不是决定作为一个普通用户是否可以进入目录
而是决定一个用户是否在dir1目录中新建文件和删除文件——

[carrot@VM-0-16-centos ~]$ chmod u+w,u-x dir1
[carrot@VM-0-16-centos ~]$ ll
total 4
drw-rwxr-x 2 carrot carrot 4096 Dec 24 14:06 dir1ok,我们加上dir1目录拥有者的 w权限,删除 x权限——
此时再进入di1目录就进不去了——

这就说明 x权限决定一个用户是否可以进入目录!!!
ok,那接下来我们再来看一下:w 权限决定了能不能在指定目录里面新建/删除文件
此时我在拥有者是carrot(普通用户),所属组是carrot(普通用户)的dir1目录中,用root权限创建一个拥有者是root,所属组是root的普通文件——

此时删除root.txt文件对于other的全部权限——

我现在作为一个普通用户(carrot),对于该root.txt文件不能读、不能写、不能执行,那我直接删除这个文件——

我作为一个普通用户竟然删掉了这个由root创建的,拥有者是root,所属组是root,对于other没有rwx权限的root.txt文件,这合理吗?
ok,这是合理的,root.txt文件在dir1目录中,我对于dir1目录有w权限,我能删除dir1目录中的所有文件,虽然root.txt是root创建的,但是你是在我的目录中创建的,只要对于目录我有 w权限,我就可以删除该目录中的任何文件!!!
总结:

也就是:为什么新建文件或者目录的时候,一新建出来就是上面我们所看见的权限?
ok,我们先来看普通文件——

rw-r--r-- 就是 644,为什么是664呢?不应该是666或者777吗?

但这也不是666,而是644,这是为什么?
其实在Linux系统中,会存在一个叫做:权限掩码
我们使用:umask,就可以查看当前系统中的权限掩码——
[root@VM-0-16-centos carrot]# umask
0022
那这个权限掩码和普通文件的起始权限不从666开始有什么关系呢?

什么意思呢?
权限掩码的意思就是:你最终形成的文件权限不能以起始权限为主,你得在创建文件的时候,拿着你的起始权限在权限掩码中找,凡事在权限掩码中出现的权限就不能在最终的文件权限中出现
比如:如果权限掩码中的other位 w 权限为1,那么我们就要在起始权限中将other位的 w 权限去掉
换成公式就是:

我们以上面的为例,来看一下这个公式——

权限掩码的含义是:在我们创建一个普通文件,起始文件权限从666开始,但是有时,我们想屏蔽某些对应的权限,我们就可以通过设置权限掩码
那为什么要有权限掩码呢?
就比如说:我想创建一堆普通文件,该文件只能对于拥有者有rwx权限,其余没有任何权限
这该怎么做?
[root@VM-0-16-centos carrot]# umask 066umask 066 就可以将权限掩码改为066!!!可以通过修改umask ,从而修改文件的最终权限


为什么新建的目录的起始权限是我所看到的?
ok,先来解释一下:为什么给目录带上 x 权限?
对于一个目录而言,目录具有 x权限是刚需,因为任何一个目录新建的时候,默认就要被进入,所以必须带上 x权限

原因和普通文件一样,这里就不过于赘述!!!

如果root新建的文件是普通用户创建的目录中,并且普通用户不能读,不能写,不能执行,普通用户可以将root新建的文件删除掉
原因:
后面会进行再次解释!!!
要真正理解粘滞位,需要理解2个问题:
我们一一来看——
我作为一个普通用户(carrot),新创建一个(拥有者是carrot,所属组是carrot)目录

然后我以root的身份在118目录中创建一个root.txt,并且不让other读,写,执行——

ok,现在我carrot不能对root.txt进行读,写以及执行操作,那我(carrot)删掉这个root.txt文件:

ok,这里的现象是:一个root在我(carrot)普通用户的118目录下创建一个文件root.txt,不让我读,写,执行,但是我竟然删掉了这个root创建的文件!!!
删除文件不是有文件本身决定,而是由文件所在的目录的w权限决定!!!
被删除的文件的所在目录是carrot的,118这个目录的拥有者和所属组都是carrot(普通用户),并且118目录对于其拥有者有w权限,有w权限,普通用户就可以删除其目录中的任一个文件。
root作为管理员不能在普通人的家里随便新建一个东西,roo敢建,普通用户就敢删,这是应该的
总结:
另一个普通用户,没有资格在我的目录下新建文件,这是因为我的目录权限中默认是没有给other w权限的,other的w权限被umask去掉了
这就在一定程度上拦住了别人去我的目录下新建文件!!!
在有时候,两个终端下面可能会共享文件
但是一个用户不可能跑到另一个用户的目录下新建文件,因为对于other没有w权限
除了root,其余普通用户在我的家目录中新建文件是不可能的——
那这就说明了,共享文件就绝对不能在任意一个用户的家目录中!!!共享文件一般在非用户家目录中——根目录下!!!

ok,那接下来我们来演示一下——
[carrot@VM-0-16-centos ~]$ cd /
[carrot@VM-0-16-centos /]$ pwd
/
[carrot@VM-0-16-centos /]$ su
Password:
[root@VM-0-16-centos /]# mkdir shared_dir
[root@VM-0-16-centos /]# chmod o+w shared_dir/

然后carrot普通用户就可以进入/shared_dir目录中,然后查看share.txt文件:

此时又来一个用户:carrot2,不让carrot2读这个文件,写这个文件,执行这个文件——

那我carrto2删掉这个共享文件——

😯,我(carrot2)竟然把这个拥有者不是我carrot2,所属组不是我carrot2的共享文件删了!
这合理吗?似乎有点不合理
那我carrot2为什么可以删掉这个共享文件?

因为文件的删除不是由目标文件决定的,而是有目标文件所在的目录的w权限决定的。
该目录对于other有w权限,other可以删除该目录中的任意文件,carrot2就是other,所以carrot2可以删
那我现在不想让carrot2可以删除这个文件,我可不可以将目录对于other的w权限去掉?
此时,我们就必须引入新的权限特征:给目录设置粘滞位!!!

设置粘滞位之后,carrot1在共享文件夹中新建一个共享文件,carrot2就删不掉了!!!

共享文件的拥有者是carrtto1,文件只能carrot1自己来删,这就是粘滞位的!!!
当⼀个目录被设置为"粘滞位"(用 chmod +t ),则该目录下的文件只能由
但是但是,其实这个共享文件是不需要我们自己去做的,在Linux的根目录中本来就存在一个目录——tmp(临时目录):

tmp目录默认就有t,任何人可以在tmp目录中新建文件,并且自己建的只能自己来删或者root删,所以以后两个人的共享文件就可以在tmp中创建!!!
注意:上面演示共享文件的过程的目的是为了让大家更清楚的认识这个过程!!!
希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键三连”哦!