🔥个人主页: Milestone-里程碑
❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>
🌟心向往之行必能至
目录
一.前言:核心问题(面试高频)
1.进入一个目录需要什么文件
2.什么决定了目录和文件的默认权限
3.root新建的文件,普通用户不读不写不执行,可以删除吗
问题一:
⽬录的权限
• 可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
• 可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
所以回答问题一:进入目录需要可执行权限
但这也导致一个问题三,用户并不需要文件的写权限,只要有root的写权限,即可进行删除,是一个大坑,此处暂留,先回答问题二,进入下一个主题
二.umask:隐形的权限调控者
umask(用户文件创建掩码)是 Unix/Linux 系统中用于控制新创建文件和目录默认权限的机制。它通过屏蔽(屏蔽掉)特定的权限位,决定文件或目录的初始权限。
功能:
• 查看或修改⽂件掩码
• 新建⽂件夹默认权限=0666(可读可写)
• 新建⽬录默认权限=0777(可读可写可执行)
• 但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的 时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。
umask 755
• umask //查看
• umask 044//设置
示例
bash
root@hcss-ecs-1cde:~# umask
0022
root@hcss-ecs-1cde:~# mkdir s
total 4
drwxr-xr-x 2 root root 4096 Dec 12 14:36 s
//更改umask值,导致新建的目录与文件默认权限改变
root@hcss-ecs-1cde:~# umask 0222
root@hcss-ecs-1cde:~# umask
0222
root@hcss-ecs-1cde:~# mkdir ss
root@hcss-ecs-1cde:~# ls -l
total 60
drwxr-xr-x 2 root root 4096 Dec 12 14:36 s
dr-xr-xr-x 2 root root 4096 Dec 12 14:38 ss
三:目录权限:特殊的逻辑
3.1⽬录的权限(与文件不同)
• 可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
• 可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
所以删除目录下的文件,只需要该目录可写即可,与文件的权限无关!!!
⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
• 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读 权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
• ⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有 ⽬录的读权限
• 所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档。
四.粘滞位:解决目录不科学的问题
上面的目录权限,我们知道用户可以删除其他人的文件,为了修复,Linux引入了粘滞位这一概念
常用于共享目录(如/tmp),防止用户误删他人文件。
且当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由
- 超级管理员删除
- 该⽬录的所有者删除
- 该⽂件的所有者删除
示例:推荐大家去实践,简单
bash
//创建文件和加上粘滞位
root@hcss-ecs-1cde:~# mkdir s
root@hcss-ecs-1cde:~# cd s
root@hcss-ecs-1cde:~/s# touch test
root@hcss-ecs-1cde:~/s# chmod +t /home/s/test
//切换进行删除
root@hcss-ecs-1cde:~# su lisi
//没有权限,删除失败
lisi@hcss-ecs-1cde:/root$ rm -rf s
rm: cannot remove 's': Permission denied