

🔥@雾忱星: 个人主页
👀专栏:《C++学习之旅》、《Linux学习指南》
💪学习阶段:C/C++、Linux
⏳"人理解迭代,神理解递归。"
文章目录
- 引言
- 一、umask:文件/目录的"权限掩码"
-
- [1.1 先搞懂:umask存在的原因](#1.1 先搞懂:umask存在的原因)
- [1.2 再理解:umask 核心逻辑](#1.2 再理解:umask 核心逻辑)
- [1.3 实操:验证+修改 umask](#1.3 实操:验证+修改 umask)
- [1.4 补充细节+指令(创建一批文件)](#1.4 补充细节+指令(创建一批文件))
- 二、file:看透文件"本质",不管后缀名
- 三、解决上版本末尾疑惑:目录权限
-
- 四、粘滞位:共享文件/目录的"保护神"
- [4.1 痛点:共享/文件目录的局限性](#4.1 痛点:共享/文件目录的局限性)
- [4.2 认识:粘滞位的必要性](#4.2 认识:粘滞位的必要性)
- 总结
引言
Linux作为多用户操作系统,权限管理是保障系统安全、规范文件操作的核心基础。对于入门小白而言,umask、file命令、目录权限、粘滞位是最易混淆也最常用的知识点,理清它们的逻辑的作用,能快速摆脱"权限报错""操作无效"的困境。
本文围绕这四大核心内容,避开晦涩理论,以实操为导向,拆解每个知识点的存在意义、核心逻辑与基础用法,搭配简单易懂的命令案例,快速上手,轻松掌握Linux权限相关基础操作。
一、umask:文件/目录的"权限掩码"
要理解umask是什么,先要记住一个核心:umask不是"设置权限",而是"减去权限"。
1.1 先搞懂:umask存在的原因
为什么文件/目录的权限是我们看到的样子?- -为什么不将全部权限开放(777),而是文件默认为 664 ,目录默认为 775 。
bash
[tac@VM-0-6-centos ~]$ ll
total 4
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
答案就是 :因为系统默认有"权限掩码"------umask。Linux为了安全,不会让新建文件/目录拥有"满权限"(777),而是通过umask"减去"部分权限,避免新建文件被随意修改,这就是umask 的核心作用。
1.2 再理解:umask 核心逻辑
功能: 用于限制新建文件/目录的默认权限,它决定了新建文件/目录默认会缺少哪些权限。
核心公式: 最终权限 = 最大默认权限 & (~umask值)。(要转换成二进制数)
查看 umask:
bash
#直接输入umask指令查看
#普通用户为 0002
[tac@VM-0-6-centos ~]$ umask
0002
#超级用户为 0022
[root@VM-0-6-centos ~]# umask
0022
umask是一个4位数字(比如0022),第一位是特殊权限位(暂时不用管),后三位对应"u、g、o"的权限掩码,数值越大,减去的权限越多。
【两个最大默认权限】: 先明确一下系统默认会给出哪些权限
- 新建文件(-) :最大默认权限:
666(rw-rw-rw-)------文件默认不需要执行权限(避免误执行脚本/病毒),所以最大权限没有x - 新建目录(dir) :最大默认权限:
777(rwxrwxrwx)------目录需要执行权限(x)才能进入,所以默认最大权限是满权限
【补充】:
为什么普通文件默认不给x权限?
普通文件的初始权限就具备x不是主流,因为绝大多数文件不是可执行二进制文件,也就不需要x。
为什么目录会默认给x权限?
已经知道x对于目录而言,是进入目录的权限,正因为目录生来就是要被进入进行操作的,所以会给x权限。
1.3 实操:验证+修改 umask
【验证作用】:
在前面已经知道了系统会给出的默认权限,再结合实际看到的权限,验证 umask的使用公式。(这里以普通用户演示)

【修改案例】:umask ****
bash
#以 root 身份修改umask
#查看当前掩码
[root@VM-0-6-centos ~]# umask
0022
[root@VM-0-6-centos ~]# touch 1
[root@VM-0-6-centos ~]# mkdir dir1
[root@VM-0-6-centos ~]# ll
total 12
-rw-r--r-- 1 root root 0 Jan 25 11:01 1
drwxr-xr-x 2 root root 4096 Jan 25 11:01 dir1
#修改权限掩码
#去掉o的x权限
[root@VM-0-6-centos ~]# umask 0001
[root@VM-0-6-centos ~]# umask
0001
[root@VM-0-6-centos ~]# touch 2
[root@VM-0-6-centos ~]# mkdir dir2
[root@VM-0-6-centos ~]# ll
total 16
-rw-r--r-- 1 root root 0 Jan 25 11:01 1
-rw-rw-rw- 1 root root 0 Jan 25 11:02 2
drwxr-xr-x 2 root root 4096 Jan 25 11:01 dir1
drwxrwxrw- 2 root root 4096 Jan 25 11:02 dir2
#以普通用户身份修改umask
[tac@VM-0-6-centos ~]$ umask
0002
[tac@VM-0-6-centos ~]$ umask 777
[tac@VM-0-6-centos ~]$ umask
0777
[tac@VM-0-6-centos ~]$ ll
total 4
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
[tac@VM-0-6-centos ~]$ touch 1
[tac@VM-0-6-centos ~]$ mkdir dir2
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac 0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
将
umask修改为 0777,即删除掉访问者对于文件/目录的所有权限。
1.4 补充细节+指令(创建一批文件)
umask搭配着创建一批指令的场景使用
【指令】: 文件名{[数字]..[数字]}[后缀]
bash
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac 0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
[tac@VM-0-6-centos ~]$ umask
0002
[tac@VM-0-6-centos ~]$ umask 000
[tac@VM-0-6-centos ~]$ umask
0000
#创建一批文件
[tac@VM-0-6-centos ~]$ touch hello{1..10}
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac 0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello1
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello10
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello2
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello3
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello4
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello5
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello6
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello7
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello8
-rw-rw-rw- 1 tac tac 0 Jan 25 13:13 hello9
#删除一批文件
[tac@VM-0-6-centos ~]$ rm hello{1..10}
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac 0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac 0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
【细节补充】:
- 不同的系统、不同的用户,
umask可能会不一样! - 更改
umask后,退出重新登录就会恢复默认数值。
二、file:看透文件"本质",不管后缀名
已知 Linux 系统不依赖后缀名判断文件类型 :后缀名只是方便识别,系统不管是.txt还是.sh,只看文件的"本质" 。比如:把 shell脚本(.sh)改成.txt,它依然是可执行脚本;把文本文件改成.exe,它依然是文本文件,无法执行。
而 file 命令,就是帮我们**"看透文件本质"的工具**------不管后缀名是什么,file 命令都能告诉你,它到底是文本、可执行文件、压缩文件,还是链接文件,解决"不知道这个文件能干啥"的问题。
核心作用: 识别文件的真实类型。
语法: file [选项] 文件名/文件路径...
【常用选项】:
-c:详细显示指令的执行过程,便于排查错误或则分析程序执行-z:尝试解读压缩文件的内容
使用:
bash
[tac@VM-0-6-centos ~]$ ls
1 2 dir dir2
[tac@VM-0-6-centos ~]$ file 1
1: empty
[tac@VM-0-6-centos ~]$ 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
[tac@VM-0-6-centos ~]$ file /usr/bin/yum
/usr/bin/yum: Python script, ASCII text executable
三、解决上版本末尾疑惑:目录权限
在上一篇博客中,已经说过三种权限 r/w/x 对目录进行操作的作用:

此外,在文章末尾提出了一个问题:为什么一个用户没有对文件写 的权限,但是却可以删除文件:那是因为删除文件不由目标文件决定,而是由所在目录权限w决定。
关键:只要用户对目录有w权限,就可以在目录中进行创建/删除文件,与是否具有文件的权限无关。
四、粘滞位:共享文件/目录的"保护神"
4.1 痛点:共享/文件目录的局限性
场景:团队共用一台服务器,root创建了一个共享目录(比如/share),设置权限为 777(所有用户都能创建、修改、删除文件)。这时候问题来了:如果想让某些用户不能在共享目录中进行操作,就要删除对应other的权限,但是就导致除root外的其他用户都不能操作,这肯定不行。
也要注意:共享目录绝对不能创建在任何用户的家目录中,只能创建在非家目录下。因为家目录只对所有者有权限,其他人没有。
bash
[tac@VM-0-6-centos ~]$ ll /home
total 8
drwx------ 6 tac tac 4096 Jan 25 13:15 tac
4.2 认识:粘滞位的必要性
为了解决上述共享文件/目录的局限性 ,"粘滞位"就出现了。给共享目录添加粘滞位后,只有文件的所有者、目录的所有者,以及root用户,才能删除这个文件,其他用户就算有目录的写权限,也不能删除别人的文件。
功能: 保护共享目录中的文件,防止被非所有者误删。
语法: chmod +t 目录
【权力对象】: 能对 -t修饰的目录进行操作的用户
- root用户
- 文件所有者
- 目录所有者
使用:
bash
[# 1. 以root身份为/home目录设置粘滞位
[root@localhost ~]# chmod +t /home/
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 Sep 19 16:00 /home/
# 注意权限位最后的 't' 表示粘滞位已生效
# 2. 切换到普通用户 zhangsan
[root@localhost ~]# su - zhangsan
# 3. zhangsan 尝试删除 /home 目录下不属于自己的文件 abc.c
[zhangsan@localhost ~]$ rm /home/abc.c
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
总结
html
🍓 我是晨非辰Tong!若这篇技术干货帮你打通了学习中的卡点:
👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长
❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量
⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用
💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑
🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解
技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标!
结语:
以上就是Linux权限管理中,umask、file命令、目录权限、粘滞位的核心内容。四大知识点各有侧重,却又相互关联,共同构成了Linux文件操作的权限基础。
Linux权限学习重在实操,多动手验证命令、熟悉逻辑,就能逐步熟练运用。后续可结合实际场景灵活拓展,夯实Linux入门基础。
