上期介绍了Linux的文件权限,这期我们仔细来说说Linux环境下目录权限和默认权限
一、目录权限
1.1 进入目录所需的权限
我们在进入目录时需要什么样的权限呢?
是r、w还是x呢?
下面我们一起来验证一下:
📋如下我门拥有全部目录dir的权限,是可以自由的进退目录的:
![](https://img-blog.csdnimg.cn/img_convert/af02091086b797b457e6a577eba7cc70.png)
📋现在去掉目录dir拥有者的r权限,发现也是可以自由的进退目录的:
![](https://img-blog.csdnimg.cn/img_convert/a510b36b4c2e0e08db73267b9f4fa2ec.png)
📋再去掉目录dir拥有者的w权限,发现还是可以自由的进退目录的:
![](https://img-blog.csdnimg.cn/img_convert/6729b00f91c668ddd693458eb8e12661.png)
📋最后去掉目录dir拥有者的x权限,发现没有权限进退目录了:
![](https://img-blog.csdnimg.cn/img_convert/caa1c67cdb34a3ec2da1d48befcf0d8a.png)
📌综上所述:进入一个目录只需要x权限
1.2 查看目录下文件所需的权限
当我们进入目录后,想要查看目录下文件需要什么权限呢?
接下来接着验证:
📋我们现在拥有全部的权限,是可以进入dir目录的并查看其中内容的:
![](https://img-blog.csdnimg.cn/img_convert/71bdce3b8dfa3e5ec44b7f47fc44467b.png)
📋现在去掉目录dir拥有者的r权限,发现并不能读取目录下文件了:
![](https://img-blog.csdnimg.cn/img_convert/966c2e5263ecc8a978233aec13a99cd2.png)
📌综上所述:读取目录下文件需要r权限
1.3 在目录下创建新文件和删除文件所需的权限
当我们进入目录后,想要在目录下创建新文件需要什么权限呢?
📋继续验证,根据以上规律,这里偷个小懒,现在直接去掉dir目录拥有者的w权限来试试看:
![](https://img-blog.csdnimg.cn/img_convert/c33405cdca2fb8ba409539fb6b9e8ac2.png)
发现并没有在目录下创建新文件的权限了
经验证,删除文件也是如此
📌综上所述:在目录下创建新文件和删除文件要r权限
1.4 粘滞位
现在我们来想象一个场景:我们在工作时上级创建了一个共享目录,所有员工都可以在此目录里共享文件(即都可以在此目录里创建、删除。阅读和运行文件),各员工都可以修改自己文件的权限。当有一天你没有给某个同事阅读自己文件的权限,同事一气之下将你在此目录里留存的文件全部删了,这极其不合理,但是在Linux环境下是可以做到的(因为共享目录下,对所有人都有w权限)。
📋下面是举例:
上级创建了一个public共享目录
![](https://img-blog.csdnimg.cn/img_convert/bf00bba2632ffa9bcd8775bc188ae2e8.png)
有一天LHS用户进入了该共享目录
![](https://img-blog.csdnimg.cn/img_convert/4240e9bf4b69c4758ba93add6c54e833.png)
该用户删除了CC用户创建的文件
![](https://img-blog.csdnimg.cn/img_convert/a8004b78b77befaac6fe0b3d76897c2b.png)
为了避免这种情况,我们引入了粘滞位(只能给目录添加)这一概念:
📌具体操作为:chmod +t 想要添加粘滞位的目录
📋继续举例:
上级发现了这件事情,将公共目录public加了一个粘滞位:
![](https://img-blog.csdnimg.cn/img_convert/d28aad391221a9432cfa3188fba9ed3b.png)
LHS这个用户故技重施,发现删除不了CC用户的文件了:
![](https://img-blog.csdnimg.cn/img_convert/5cee521a69af06ac80667b005624c11f.png)
📌综上所述:粘滞位存在的意义就是保护共享目录下的共享文件,不让他人乱删文件(这样共享目录下的文件只能由文件的拥有者和root可以删)
二、默认权限
我们在Linux环境下创建了一个文件或者目录时,可以看到其默认权限:
![](https://img-blog.csdnimg.cn/img_convert/f988d9444e850513af63c5aab0ebf184.png)
在我们没有修改任何权限的情况下,可以看到:
普通文件(不包括可执行文件)默认权限是:664(八进制方案),目录默认权限是:775(八进制方案)
但这种默认权限只在我的环境下存在,不同的环境默认权限可能不一样。
那默认权限是怎么来的呢?
2.1 最终权限
📌实际上:默认权限=最终权限=起始权限&(~umask)
现在我们来仔细分析一下最终权限是怎么来的:
2.1.1 起始权限
在得到最终权限之前先要了解Linux环境下的起始权限:
普通文件(不包括可执行文件)起始权限是:666(八进制方案),目录起始权限是:777(八进制方案)
而umask就是权限掩码
权限掩码的作用就是在起始权限中,去掉在umask中出现的权限,并且不能影响其他权限
这样我们将umask按位取反,再与起始权限(需要转换为2进制)与或即可得到最终权限:
![](https://img-blog.csdnimg.cn/img_convert/a5b5b3f730d20a4c848edaa9216c1dd3.png)
2.2 umask
对于umask我们是可以进行修改的:
使用umask指令即可
📌具体操作为:umask 八进制方案
📋下面是举例操作:
![](https://img-blog.csdnimg.cn/img_convert/e8860f0274ddb90f0913cfc9178db980.png)
这样我们所看到的默认权限就发生了变化
今天的博客到此为止就将Linux上所有的权限内容一一分析完毕了
下面将会给各位看客带来Linux上的一些工具和C++内容,敬请期待~
本文若有纰漏还请各位大佬在评论区不吝赐教呀