
◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。
⭐️Linux系列个人专栏: 【主题曲】Linux
⭐️ Re系列专栏:我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)

文章目录
- 概要&序論
-
- 1.1文件的属性与三大权限指向对象
- 1.2修改文件的属性其之一------权限
- 1.3修改文件的属性其之二------角色
- [1.4 文件权限的匹配逻辑](#1.4 文件权限的匹配逻辑)
-
- [1.4.1 匹配规则:由近及远](#1.4.1 匹配规则:由近及远)
- [1.4.2 核心原则:一次匹配,即刻锁定](#1.4.2 核心原则:一次匹配,即刻锁定)
- 1.4.3**案例分析**
- [1.5 重谈目录权限](#1.5 重谈目录权限)
-
- 1.5.1执行权限:进入目录
- 1.5.2读取权限:查看
- [1.5.3写入权限 : 修改目录结构](#1.5.3写入权限 : 修改目录结构)
概要&序論
这里是正在准备完结C++的此方 本文将系统介绍Linux中的权限相关内容,从文件为什么打不开,到目录的读/写/执行到底意味着什么,再到粘滞位的场景------力求全面且易于理解。好的,我们开始吧。
谈谈权限的意义
权限是什么? 权限是"能干什么和不能干什么的限制规定。 "它是用来控制用户的行为同时防止错误发生 。其首先控制的应当是人 ,其次是物 。而物,在Linux中又被指向一种特定的统一的事物------文件。
------------------接续上文,我们谈谈,对文件的限制。------------------
1.1文件的属性与三大权限指向对象
当我们ls-l展开文件详细信息的时候,是否有想过,文件前面的那一堆英文字母是什么意思?
bash
drwxr-xr-x 2 root root 22 Jun 19 2025 .pip

我们将之分为两类:角色与权限。
1.1.1文件的属性------角色
- 拥有者 (Owner):该文件(或目录)的创建者,默认拥有最高控制权。
- 所属组 (Group):一组特定的用户集合,通过共享权限方便团队协作。
- 其他 (Other):除了拥有者和所属组成员以外,系统里的所有人。
强调一下:角色与人是两码事儿。张三是市长,张三是他这个人,而市长是他扮演的角色,可以理解吗?
为什么没有other?other不需要记录,这里的记录方法是排除法。
为什么要有所属组?我们举例解释 :
在腾讯,为了保持竞争力,内部往往会有不同的工作室(比如天美、光子)同时开发同类产品。(假设在同一台机器上)
- 如果是个人权限:光子工作室的张三写了一份《王者荣耀》的策划案,只有他能看。那他的组员李四、王五要协作怎么办?张三只能把权限开放给"所有人(Other)"。
- 后果 :一旦开放给 Other,隔壁天美工作室的人也能直接过来把策划案拷走,这比赛还怎么打?
"所属组"就是你的"工作室" 所属组 的出现,完美解决了内部高度协作、外部严格隔离的需求。
天美工作室组:
- 组员:姚晓光、程序员 A、策划 B。
- 权限 :他们对天美的项目代码有
rwx(能看能写能跑)。
光子工作室组:
- 组员:陈宇、程序员 C、策划 D。
- 权限 :他们对光子的项目代码有
rwx。
1.1.2文件的属性------权限
那么前面的权限呢?我们把权限分成rwx三大权限,
- r (Read / 读):读取内容的权限。
- w (Write / 写):修改、编辑内容的权限。
- x (Execute / 执行):运行程序或进入目录的权限。
| 权限 | 对文件 (File) 的含义 | 对目录 (Directory) 的含义 |
|---|---|---|
| r | 可以查看文件内容(如 cat、vim) |
可以列出目录下的文件名(如 ls) |
| w | 可以修改文件内容 | 可以在目录内创建、删除、重命名文件 |
| x | 可以把文件当做程序运行 | 最关键! 可以进入该目录(cd),并访问其下的子文件 |
补充:如何理解可执行------机会不等于能力:比如一个test.c文件,默认是不可执行的,如果我们给他加上可执行,他一样也不可执行,因为它是test.c没有编译也没有链接,没有执行的能力。
每一个权限位都是两态。要么有该权限,要么没有。 同时不能颠倒顺序。

于是我们就可以以九位二进制序列 的形式来简单表述一个文件的权限,比如如下文件的权限就是111 101 101
bash
drwxr-xr-x 2 root root 22 Jun 19 2025 .pip
抑或是严谨的说,描述一个文件的权限应当由角色与目标属性共同构成:
该文件的权限信息是:拥有者可读可写可修改,所属组可读可执行但不可修改,其他人可读可执行但不可修改。
1.1.3补充内容:file指令查看文件真实类型
- 指令名称:file
- 指令重要性:★★★★☆
- 说明:
- file 是 Linux 中辨别文件真实类型的命令 ,是处理未知文件时的首选侦探工具。
- 基本用法 :
file 文件名(查看文件格式、编码及架构信息)。 - 核心价值 :Linux 系统不依赖扩展名,
file通过读取文件头部的"幻数"(Magic Number)来识别文件的本质,防止被虚假的后缀名(如将.sh改为.jpg)误导。 - 常见输出:能精准区分 ASCII 文本、ELF 二进制可执行文件、目录(directory)、甚至是图片的具体分辨率和色彩深度。
bash
[root@VM-0-9-opencloudos ~]# file test
test: empty
[root@VM-0-9-opencloudos ~]# file .bashrc
.bashrc: ASCII text
[root@VM-0-9-opencloudos ~]#
1.2修改文件的属性其之一------权限
1.2.1文件的权限的修改者
文件权限不能被随意修改,root在zbc用户的家目录下创建一个文件,zbc不能修改它的权限。
bash
[zbc@VM-0-9-opencloudos ~]$ chmod 777 TEST.c
chmod: changing permissions of 'TEST.c': Operation not permitted
[zbc@VM-0-9-opencloudos ~]$
然而这一切规则对于root而言都形同虚设。,root可以修改任何用户创建的任何文件。
1.2.2文件权限修改命令chomd
- 指令名称:chmod
- 指令重要性:★★★★★
- 说明:
- chmod 是Linux中修改文件/目录权限的核心命令 ,权限管理的基础工具。
- 支持两种权限表示方式:符号模式 (如
u+x、go-w)和数字模式 (如755、644)。 - 只有文件所有者或root用户才能修改文件权限。
1.2.3符号模式
格式:chomd [修改角色] [修改权限] [文件名称]
- 角色采用小写首字母表示:a(拥有者),g(所属组),o(other)
- 权限如上,r(读),w(写),x(执行)
bash
-rw-r--r-- 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod a+x TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr-xr-x 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod g-x TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr--r-x 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod o+w TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr--rwx 1 root root 0 Apr 26 06:27 TEST.c
1.2.4数字模式
如2.1.2所言,文件的权限可以被认为是一段九位二进制序列 。于是倘若我们将其33一组,转成十进制。于是基于 : 数字 = R ( 4 ) + W ( 2 ) + X ( 1 ) 数字 = R(4) + W(2) + X(1) 数字=R(4)+W(2)+X(1) ,例如假设你要算 rwxr-xr--:
- 拥有者 (rwx):4 + 2 + 1 = 7
- 所属组 (r-x): 4 + 0 + 1 = 5
- 其他人 (r--) : 4 + 0 + 0 = 4
因此,在修改权限时可以以如下形式书写,效果一致。
chmod [十进制权限表示数][文件名称] 这种修改方式做不到"指定某一个具体的人"。
| 数字 | 权限位 (Binary) | 字符 (rwx) | 实际权力描述 | 常见场景 |
|---|---|---|---|---|
| 0 | 000 |
--- |
毫无权限 | 少见,通常用于完全封死某个身份。 |
| 1 | 001 |
--x |
仅执行 | 极少见,仅允许运行,甚至不能读取代码。 |
| 2 | 010 |
-w- |
仅写入 | 极罕见,类似"盲写",不能看文件只能改。 |
| 3 | 011 |
-wx |
写和执行 | 目录中常见,允许进入并增删文件但不能列出。 |
| 4 | 100 |
r-- |
只读 | 常见的配置文件保护状态。 |
| 5 | 101 |
r-x |
读与执行 | 目录标配,能进目录、能看列表,但不能改。 |
| 6 | 110 |
rw- |
读与写 | 普通文件标配,能看能改,但不能当作程序跑。 |
| 7 | 111 |
rwx |
全能 | 最高权限,拥有者对目录/文件的完全控制。 |
bash
[zbc@VM-0-9-opencloudos ~]$ sudo chmod 777 TEST.c
[sudo] password for zbc:
Sorry, try again.
[sudo] password for zbc:
[zbc@VM-0-9-opencloudos ~]$ ls -l TEST.c
-rwxrwxrwx 1 root root 0 Apr 26 06:27 TEST.c
[zbc@VM-0-9-opencloudos ~]$
1.3修改文件的属性其之二------角色
1.3.1文件角色修改命令chown与chgrp
- 指令名称:chown
- 指令重要性:★★★★☆
- 说明:
- chown 是Linux中修改文件/目录所属用户的命令 ,权限管理中的重要工具。
- 基本用法:
chown 用户名 文件名(修改文件的所有者)。 - 支持同时修改所有者和所属组:
chown 用户名:组名 文件名。 - 只有root用户才能执行chown操作(普通用户不能将自己的文件转让给其他人)。
- 指令名称:chgrp
- 指令重要性:★★★☆☆
- 说明:
- chgrp 是Linux中修改文件/目录所属组的命令 ,权限管理中的辅助工具。
- 基本用法:
chgrp 组名 文件名(修改文件的所属组)。 - 只有文件所有者或root用户才能修改文件的所属组(且所有者必须属于目标组)。
- chown 可以同时完成 chgrp 的功能(
chown :组名 文件),因此 chgrp 使用频率相对较低。
1.3.2案例参考
bash
[zbc@VM-0-9-opencloudos ~]$ chown root test
chown: changing ownership of 'test': Operation not permitted
[zbc@VM-0-9-opencloudos ~]$ sudo chown root test
[sudo] password for zbc:
[zbc@VM-0-9-opencloudos ~]$ ls -l test
-rwxr-xr-x 1 root zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ sudo chgrp root test
[zbc@VM-0-9-opencloudos ~]$ ls -l test
-rwxr-xr-x 1 root root 48112 Apr 25 14:05 test
我们发现,系统是不允许你随便把文件给别人的,因为谁都不知道你的这个文件是什么,所以出于安全考量做出这样的设计。
技巧用法,chown own:grp [文件名]
bash
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ sudo chown root:root test
[sudo] password for zbc:
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 root root 48112 Apr 25 14:05 test
1.4 文件权限的匹配逻辑
在 Linux 系统中,当用户尝试访问一个文件时,内核会按照严格的优先级顺序进行身份匹配。
1.4.1 匹配规则:由近及远
系统会依次判断当前用户的身份:
- 第一优先级: 判定是否为 拥有者 (Owner)。
- 第二优先级: 若不是拥有者,判定是否属于 所属组 (Group)。
- 第三优先级: 若以上两者均不是,则判定为 其他用户 (Others)。
1.4.2 核心原则:一次匹配,即刻锁定
这是最容易被忽视的一点:身份判定是一次性的。 只要匹配到了其中一种身份,系统就会立即应用该身份对应的权限,不再向下检索。
1.4.3案例分析
假设有如下文件权限设置:
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test
bash
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ cat "helloworld" > test
-bash: test: Permission denied
[zbc@VM-0-9-opencloudos ~]$
当用户 zbc 尝试访问该文件时:
- 身份识别: 系统检测到当前用户是
zbc,而该文件的 拥有者 (Owner) 也是zbc。身份匹配成功! - 权限锁定: 系统立即锁定"拥有者"身份,发现对应的权限位是
---(即:无读、无写、无执行权限)。 - 逻辑短路: 虽然
zbc同样属于 所属组 (Group) (该组拥有rwx权限),但由于第一阶段已经匹配成功,系统不再向后查看组权限。 - 最终结果: ```bash
zbc@VM-0-9-opencloudos \~\]$ cat "helloworld" \> test -bash: test: Permission denied
但是以上一切对root都无意义,root拥有最高权限,包括在文件权限缺失的时候修改文件内容,直接修改不属于自己的文件的所有权。
1.5 重谈目录权限
在 Linux 中,目录本质上是一张"文件名与 Inode 的映射表"。因此,目录的 rwx 含义与普通文件大不相同:
1.5.1执行权限:进入目录
- 核心含义 :是否允许用户进入 (cd)该目录,以及是否允许穿透该目录访问其子内容。
- 实机演练:新建用户的家目录权限通常是严格限制的,防止其他用户窥探。
bash
#场景:当前用户为 zbc,尝试进入用户 "otheruser" 的家目录
[zbc@VM-0-9-opencloudos ~]$ ls -ld /home/otheruser
drwx------ 3 otheruser otheruser 4096 Apr 26 20:26 /home/otheruser
#尝试进入该目录
[zbc@VM-0-9-opencloudos ~]$ cd /home/otheruser
-bash: cd: /home/otheruser: Permission denied
#结论:没有 x 权限,目录就像一堵上锁的墙,你被挡在外面,无法切换工作目录。
1.5.2读取权限:查看
- 核心含义:是否允许列出目录里的 文件名。
- 实机演练:如果有 r 但没有 x,你能看到文件名,但无法得知文件的详细属性(大小、权限、日期等)。
bash
# 场景:赋予目录只读权限 (r--), 去掉 x 权限
[zbc@VM-0-9-opencloudos ~]$ chmod 444 my_dir
[zbc@VM-0-9-opencloudos ~]$ ls -l my_dir
ls: cannot access 'my_dir/test.txt': Permission denied
-????????? ? ? ? ? ? test.txt
# 结果:虽然列出了文件名 "test.txt",但因为没有 x 权限进不去目录内部,
# 系统无法获取该文件的 Inode 详细信息,所以权限、属性位全是问号。
1.5.3写入权限 : 修改目录结构
- 核心含义:是否允许在该目录下 创建、删除、重命名 文件。
- 实机演练:这是最危险的权限。只要我有目录的 w 权限,我甚至可以删除我不拥有的文件!
bash
# 场景:zbc 拥有目录 test_dir 的全开权限 (rwx),但里面有一个 root 创建的受保护文件
[zbc@VM-0-9-opencloudos ~]$ ls -ld test_dir
drwxrwxrwx 2 zbc zbc 4096 Apr 26 20:26 test_dir
[zbc@VM-0-9-opencloudos ~]$ ls -l test_dir/root_file
-r-------- 1 root root 0 Apr 26 20:26 test_dir/root_file
# 尝试删除这个 root 的文件
[zbc@VM-0-9-opencloudos ~]$ rm test_dir/root_file
rm: remove write-protected regular empty file 'test_dir/root_file'? y
# 结果:删除成功!
# 逻辑:删除文件本质上是修改"目录表"的内容(删掉那一行映射),
# 只要对目录有 w 权限,就能动这张表,而不需要对文件本身有权限。
当然root还是什么都可以干,除了正在运行从程序受保护不能改。
好了,本期内容到此结束,我是此方,我们下期再见。バイバイ!