
🔥小叶-duck:个人主页
❄️个人专栏:《Data-Structure-Learning》《C++入门到进阶&自我学习过程记录》
《Linux操作系统从入门到实践》
《算法题讲解指南》--优选算法
《算法题讲解指南》--递归、搜索与回溯算法
《算法题讲解指南》--动态规划算法
✨未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游
目录
[二、umask:新文件权限的 "调控者"](#二、umask:新文件权限的 “调控者”)
[2.1 功能与原理](#2.1 功能与原理)
[2.2 格式与实际案例](#2.2 格式与实际案例)
[2.3 细节问题总结](#2.3 细节问题总结)
[三、file指令:文件类型的 "识别器"](#三、file指令:文件类型的 “识别器”)
[3.1 功能和语法](#3.1 功能和语法)
[3.2 常用选项和实际案例](#3.2 常用选项和实际案例)
[四、目录权限:容易踩坑的 "特殊逻辑"](#四、目录权限:容易踩坑的 “特殊逻辑”)
[4.1 目录权限的核心规则](#4.1 目录权限的核心规则)
[五、粘滞位:解决目录权限 "不科学" 的方案](#五、粘滞位:解决目录权限 “不科学” 的方案)
[5.1 功能与设置](#5.1 功能与设置)
[5.2 实际使用案例](#5.2 实际使用案例)
前言
在 Linux 系统中,权限管理是保障资源安全、控制用户访问的核心机制。从新文件创建时的默认权限分配(umask),到文件类型识别(file)、权限分配(sudo),再到目录权限的特殊逻辑(粘滞位),每一个环节都暗藏系统设计的精妙。
一、前置问题铺垫(面试高频)
在讲解本篇博客内容之前,我们先来看看下面这三个问题,都是面试经常问到的,这些问题在我们的文章中后续都会得到解答。
1、进入一个目录需要什么权限?
2、什么决定了一个目录或者一个文件的默认权限?
3、root管理员创建的文件,普通用户不读不写不执行,可以删除该文件吗?
二、umask:新文件权限的 "调控者"
2.1 功能与原理
umask(文件权限掩码 )的核心作用是调整新创建文件 / 目录的默认权限。Linux 系统对新文件和目录有 "初始最大权限":
- 新文件默认最大权限为0666(即 rw-rw-rw-,可读、可写);
- 新目录默认最大权限为0777(即 rwxrwxrwx,可读、可写、可执行)。
- umask 可以查看当前默认权限掩码,主要看后三位。
注意: 实际创建的资源权限并非直接使用这个 "最大值 ",而是要经过 umask 的一些运算(绝对不是简单的减法,后面的图片演示里有具体运算过程)。
公式为:实际权限 = 最大初始权限 & ~umask (~表示按位取反,&表示按位与,注意都是八进制转成二进制后运算)。
2.2 格式与实际案例
格式 :umask 权限值
说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022 ,普通用户默认为0002(后面的演示图里暂时用的超级用户,代码尽量会开始使用普通用户演示,但是如果大家会配置sudo权限的话,尽量全部使用普通用户比较好,不会也没事,以后会讲到的)
实际案例:
bash
# root查看umask以及创建文件和目录的默认权限
[root@iZbp12ear9ufvimc78fddkZ lesson7]# umask
0022
[root@iZbp12ear9ufvimc78fddkZ lesson7]# ll
total 4
drwxr-xr-x 2 root root 4096 Oct 29 22:54 dir
-rw-r--r-- 1 root root 0 Oct 29 22:19 text.txt
# 普通账户查看umask以及创建文件和目录的默认权限
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask
0002
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwxrwxr-x 2 Lotso Lotso 4096 Oct 30 11:16 dir
-rw-rw-r-- 1 Lotso Lotso 0 Oct 30 11:16 text.txt
# 临时修改umask,达到不想让所属组和other有任何权限(文件用066也行本来就没x权限,目录必须077)
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask 077
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask
0077
# 我们再创建文件或者目录就会发现默认权限变了,达到了我们的目的
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 Lotso Lotso 4096 Oct 30 11:18 dir
-rw------- 1 Lotso Lotso 0 Oct 30 11:18 text.txt
第2个面试问题的解答以及当前知识点演示图(一定要看):
第2个面试问题的解答:
当前知识点演示图:
2.3 细节问题总结
细节问题:
- 不同的系统,不同的用户,umask可能不同(上面讲过)
- 不用担心umask被更改的问题,退出登录,重登就会恢复默认
- 当需要创建一批文件 并想要它们的默认权限符合我们的预期时,umask就很好用了;那如何创建和删除一批文件呢(我们后续也会继续用到,这里先看看,具体原理在后续学习中会继进行讲解),注意下面的演示。
bash
# 此时的umask是 0077,能让下面所有文件都达到不让所属组和other有任何权限的目的。
# 创建一批文件
[admin@iZbp12ear9ufvimc78fddkZ 118]$ touch hello{1..100}.txt
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 admin admin 4096 Oct 30 11:18 dir
-rw------- 1 admin admin 0 Oct 30 11:56 hello100.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello10.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello11.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello12.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello13.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello14.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello15.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello16.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello17.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello18.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello19.txt
-rw------- 1 admin admin 0 Oct 30 11:56 hello1.txt
.............................. #省略
# 删除一批文件
[admin@iZbp12ear9ufvimc78fddkZ 118]$ rm -rf hello{1..100}.txt
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 admin admin 4096 Oct 30 11:18 dir
-rw------- 1 admin admin 0 Oct 30 11:18 text.txt
三、file指令:文件类型的 "识别器"
3.1 功能和语法
file 指令的核心作用就是辨识文件类型 ,语法 为:file [选项] 文件或者目录 ...
3.2 常用选项和实际案例
常用选项:
- -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z:尝试去解读压缩文件的内容。
实际案例:
bash
[root@iZbp12ear9ufvimc78fddkZ ~]# ls
4.21 4.26 4.27 test test.txt
[root@iZbp12ear9ufvimc78fddkZ ~]# file test
test: directory
[root@iZbp12ear9ufvimc78fddkZ ~]# file test.txt
test.txt: ASCII text
[root@iZbp12ear9ufvimc78fddkZ ~]# file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped
[root@iZbp12ear9ufvimc78fddkZ ~]# file /usr/bin/yum
/usr/bin/yum: Python script, ASCII text executable
四、目录权限:容易踩坑的 "特殊逻辑"
4.1 目录权限的核心规则
这个也是我们文章最开始解答第1个面试问题的核心关键:
目录的权限与文件权限有本质区别,需重点理解三点:
- 可执行权限(x):无 x 权限则无法cd进入目录;
- 可读权限(r):无 r 权限则无法用 ls/ll 等命令查看目录内文件;
- 可写权限(w):无 w 权限则无法在目录中创建(touch)、删除(rm)文件。
第1个问题解答:
关键坑点 :只要用户对目录有w权限,就可以删除目录内的所有文件,无论该用户是否有文件本身的写权限。
所以我们能得到一个结论,而这个结论也就是第3个面试题的解答:删除文件不由目标文件决定,由你这个文件所在的目录权限决定
第3个问题解答:
五、粘滞位:解决目录权限 "不科学" 的方案
由于上面的场景,为了修复 "用户可删除目录内他人文件" 的问题,Linux 引入了粘滞位(Sticky Bit)机制。
5.1 功能与设置
当给目录 添加粘滞位后,该目录下的文件仅能由三类主体删除:
- 超级管理员(root);
- 该目录的所有者(这点不那么重要,知道就行);
- 该文件的所有者。
设置粘滞位的指令为:
bash
chmod +t 目录名
5.2 实际使用案例
bash
[root@iZbp12ear9ufvimc78fddkZ home]# ll
total 4
drwx------ 25 admin admin 4096 May 15 15:06 admin
[root@iZbp12ear9ufvimc78fddkZ home]# cd admin # 当前在admin用户目录下
[root@iZbp12ear9ufvimc78fddkZ admin]# mkdir root # 创建root目录
[root@iZbp12ear9ufvimc78fddkZ admin]# ll
total 4
drwxr-xr-x 2 root root 4096 May 15 15:06 root
[root@iZbp12ear9ufvimc78fddkZ admin]# chmod +t root # 加上粘滞位
[root@iZbp12ear9ufvimc78fddkZ admin]# ll
total 4
drwxr-xr-t 2 root root 4096 May 15 15:06 root
[root@iZbp12ear9ufvimc78fddkZ admin]# cd root
[root@iZbp12ear9ufvimc78fddkZ root]# touch root.txt
[root@iZbp12ear9ufvimc78fddkZ root]# su admin # 切换回admin用户
[admin@iZbp12ear9ufvimc78fddkZ root]$ rm root.txt # admin不能删除root的⽂件
rm: remove write-protected regular empty file 'root.txt'? y
rm: cannot remove 'root.txt': Permission denied
结束语
到此,Linux的权限方面知识点就讲解完了。**从umask对新文件权限的初始调控,到file对文件类型的识别,再到sudo实现的权限交接、目录权限的特殊逻辑,最后到粘滞位对目录安全的补强 ------ 这些知识点共同构成了 Linux 权限管理的完整图景。**希望对大家学习Linux能有所收获!



