Linux 5 目录权限与粘滞位详解

🔥个人主页: Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

目录

一.前言:核心问题(面试高频)

二.umask:隐形的权限调控者

三:目录权限:特殊的逻辑

3.1⽬录的权限(与文件不同)

四.粘滞位:解决目录不科学的问题


一.前言:核心问题(面试高频)

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),则该⽬录下的⽂件只能由

  1. 超级管理员删除
  2. 该⽬录的所有者删除
  3. 该⽂件的所有者删除

示例:推荐大家去实践,简单

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
相关推荐
AtoposのCX3303 分钟前
Docker运行hello-world镜像失败或超时
运维·docker
马猴烧酒.13 分钟前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
天天爱吃肉821837 分钟前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao1 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
m0_715575341 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
甄心爱学习1 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
北京迅为1 小时前
《【北京迅为】itop-3568开发板NPU使用手册》- 第 7章 使用RKNN-Toolkit-lite2
linux·人工智能·嵌入式·npu
深蓝电商API1 小时前
滑块验证码破解思路与常见绕过方法
爬虫·python
Ulyanov1 小时前
Pymunk物理引擎深度解析:从入门到实战的2D物理模拟全攻略
python·游戏开发·pygame·物理引擎·pymunk
颜酱1 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法