上海一网通办/吉林seo基础知识
文件权限属性和权限管理
本章思维导图:
注:本章思维导图对应的Xmid
文件和.png
文件都以传到“资源”
文章目录
- 文件权限属性和权限管理
- 1. sudo提权和sudoers文件
- 1.1 sudo提权和成为root的区别
- 2. 权限
- 2.1 Linux群体
- 2.1.1 为什么要有所属组
- 2.1.2 修改文件的所属组、拥有者
- 2.1.2.1更改拥有者 chown
- 2.1.2.2 更改所属组 chgrp
- 2.2 文件权限属性
- 2.2.1 认识文件权限属性
- 2.2.2 修改文件权限属性 chmod
- 2.2.3 目录的权限
- 2.2.3.1 目录/tmp和粘滞位
- 2.2.4 权限掩码umask
- 2.2.5 文件类型
1. sudo提权和sudoers文件
在上一篇Linux新建用户、删除用户以及用户之间的切换说到,新建用户adduser
、删除用户userdel
都需要在root账户下进行操作,或者说需要root的权限。我们也说到,如果普通用户想要以root的权限进行操作,那就需要提权命令sudo
下面我们就来讲讲sudo
提权命令
命令:
sudo 命令
功能:
sudo 允许允许的用户以超级用户身份执行命令。总的来说,就是允许普通用户以root的权限执行各种操作
现在,有小伙伴就有疑惑了:
既然每个普通用户都可以进行sudo
提权操作,那每个人都可以有root
的权限,那还需要root
这个超级管理员干嘛呢?
我们可以现在就来试一下:
可以看到,尽管通用户Test_1
使用了提权命令,但是并没有得到想要的结果,这是为什么呢?
我们发现,系统提示我们用户Test_1
并不处于sudoers
文件
那么sudoers
文件又是什么呢?
-
sudoers
文件是属于root
账户的一个Linux配置文件我们可以用命令
ll
打开看一下:可以看到里面只有
root
账户 -
可以通俗地将
sudoers
文件比作是一个白名单,只有位于白名单里面的账户才可以使用sudo
命令提权,以root的权限执行操作 -
而要将用户写入
sudoers
文件,需要root
账户执行操作
到了现在,应该就可以解决之前的那个疑惑了——不是所有的普通用户可以使用sudo
提权,只有得到root
账户的信任,将这个用户添加到sudoers
文件中,这个普通用户才可以进行sudo
提权。因此我们也就不需要担心普通用户会在系统中捣乱了。
1.1 sudo提权和成为root的区别
可不要天真的以为sudo
提权和成为,root用root账户操作都是以root
的身份执行命令就没有什么区别。
这二者其实有着本质的区别:
- 给你root密码,让你成为root——直接让你成员超级管理员
- 将你添加到sudoers—— 相信你,给你root权限,但是这个root权限可以被回收。
2. 权限
然我们先举几个生活中的例子来对权限有一个更加清楚的认识:
- 在腾讯视频、爱奇艺等软件看VIP电影,那我们就需要VIP的权限,需成为VIP会员,否则我们就只是普通用户只能看免费电影。
- 尽管我们有爱奇艺视频的VIP会员,但是无论如何,我们都不可能在爱奇艺视频里面刷C++的编程题
因此,我们可以得出以下两个结论:
- 权限一定是用来限制人的
- 对应的操作对象一定要有对应的满足人的需求的属性——就像你不能在腾讯视频里面刷C语言,因为腾讯视频并没有刷题这一属性。
而将这两个结论和Linux系统的文件权限联系在一起,同样也可以推出两个结论:
- Linux群体(也就是“被限制的人”)更多的是一种身份,在Linux中有:拥有者
u
、所属组g
、other这三种身份o
,具体的人一定会在未来承担某个文件的某个身份。- Linux的操作对象也就是Linux系统中的文件,其属性一般叫做文件权限属性,有三种:可读
r
,可写w
,可执行x
下面,我们就对Linux群体和文件权限属性展开具体的讨论:
2.1 Linux群体
前面说过,Linux群体更多的是一种身份——拥有者u
、所属组g
、othero
这三种身份
- 拥有者
user
一般就是该文件的创建者 - 所属组
group
——可以在Linux系统中创建一个组群,并将特定的用户拉入,这样这些组里面的用户就构成了一个所属组。他们享有这个所属组被赋予的权限 - other——不属于拥有者和所属组的用户统称为other
2.1.1 为什么要有所属组
有些小伙伴又会有疑惑了:
拥有者和other就可以确定一个文件的所属关系了,为什么还要一个所属组group
呢?
我们可以来举一个生活中的例子:
两个开发组A、B在竞争同一个项目,一天项目的领导想要看开发组A成员张三写的代码,但是代码是张三所写,张三是这个文件的拥有者,而领导是other,如果想要让领导(other)看到张三所拥有的文件,那么张三就需要将这个文件的权限开放给other,但这就导致了一个问题——同为other的项目组B也可以看到项目组A的代码,这显然不是我们想要的,所以,就需要Linux有所属组这一个概念,张三可以通过过创建一个所属组,将领导拉到组里,同时将拥有者的权限开放给所属组,这样就可以了
所以,Linux所属组的存在,方便了Linux系统文件权限的管理,是很重要的。
2.1.2 修改文件的所属组、拥有者
注意:
只能在root的权限下更改一个文件的拥有者、所属组、other,无论你是不是这个文件的拥有者。
2.1.2.1更改拥有者 chown
命令:
chown new_username filename
new_username
就是新的拥有者的用户名,filename
就是被更改的文件名
例如:
2.1.2.2 更改所属组 chgrp
命令:
ch chgrp new_groupname filename
new_groupname
就是新的拥有者的用户名,filename
就是被更改的文件名
例如:
更改拥有者、所属组的同时也就在更改other,因此并没有更改other的命令
2.2 文件权限属性
例如,我们用命令ll
来查看一个文件的具体属性:
现在,就以文件code
为例,讲一下ll
所展示的这一串信息都表示了什么:
- 文件的拥有者、所属组前面已经介绍完毕,这里便不再赘述
- 接下来,我们来深入探讨一下文件权限属性和文件类型
2.2.1 认识文件权限属性
例如上面的 code1
文件,代表这个文件的权限属性的就是下面的九个字符:
那么具体的,这九个字符又都表示什么含义呢?
Linux规定:
- 将九个字符分成三组,每组三个字符。例如上面的就是
rw-
、r--
、r--
这三组- 每组字符的每个位置代表着固定的含义:第一个位置表示可写
r
,第二个位置表示可读w
,第三个位置表示可执行x
- 第一组表示拥有者的权限,第二组表示所属组权限,第三组表示other权限
例如,对于上面的权限属性,我们可以做出如下解释:
Linux的文件权限值的表示方法:
字符表示法:
Linux表示 | 意义 | Linux表示 | 意义 |
---|---|---|---|
- - - | 无任何权限 | r - - | 只读 |
- - x | 仅可执行 | r - x | 可读可执行 |
- w - | 只写 | r w - | 可读可写 |
- w x | 可写可执行 | r w x | 可读可写可执行 |
八进制表示法:
权限符号 | 二进制 | 八进制 |
---|---|---|
- - - | 0 0 0 | 0 |
- - x | 0 0 1 | 1 |
- w - | 0 1 0 | 2 |
- w x | 0 1 1 | 3 |
r - - | 1 0 0 | 4 |
r - x | 1 0 1 | 5 |
r w - | 1 1 0 | 6 |
r w x | 1 1 1 | 7 |
那么可读、可写、可执行都表示什么呢?我们一起来看看:
可以得出结论:
可读
r
:即可以打开文件,查看文件内容,执行cat
、nano
等操作可写
w
:即可向文件写入内容,执行echo
、nano
等操作可执行
x
:对一个可执行文件进行执行操作。
- 注:可以执行一个文件的条件为:
- 拥有该文件的可执行权限
x
- 该文件必须要有可执行的功能(必须是一个可执行的文件)——这也就是我们前面所说的“对应的操作对象一定要有对应的满足人的需求的属性”
再来看一个例子:
要解决这个问题,就需要知道Linux的一个特性:
- 要判断一个用户的权限,首先要判断这个用户是哪个身份,到底是拥有者还是所属组还是other。
- 而匹配身份的顺序为 —— 拥有者 → 所属组 → other
- 只要匹配成功,就不会再继续匹配
因此,上面的例子中,用户匹配到拥有者就停止匹配了,而code
文件的拥有者没有任何权限,所以上面的读写操作自然就不能成功了。
最后再来看一个例子:
可见,尽管root是code
的other,但是仍可以对code
文件执行各项操作而不受限制。
我们可以说:
权限在root账户下,形同虚设。权限只限制普通用户。这也在另一方面说明了root的强大和重要性
2.2.2 修改文件权限属性 chmod
-
既然文件的权限值有字符表示法和八进制表示法,那么修改权限的属性也有这两种方法。
-
只有root账户或者文件的拥有者才可以修改文件的权限属性
字符表示法修改文件权限属性:
命令:
chmod u/g/o/a +/- rwx filename
其中:
u
——拥有者userg
——所属组groupo
——othera
——所有人+/-
——添加或删除权限rwx
——需要添加的权限
例如:
八进制表示法修改文件权限属性:
命令:
chmod num1num2num3 filename
num1num2num3
为3个八进制数,分别代表拥有者、所属组、other的权限
例如:
2.2.3 目录的权限
我们前面提到,在Linux系统中,一切皆文件。所以我们可以说:一个目录也是一个文件
我们先来看一个目录的详细属性:
可以发现,目录文件和普通文件一样,也具有rwx
可读可写可执行权限,也有拥有者、所属组和other身份。
因此,修改目录的权限属性也和修改文件的操作一样,这里不再过多赘述。
那么,目录文件的rwx
文件又分别代表着什么呢?
可执行x
:
可以进行总结:
- 目录的可执行
x
权限限制的是普通用户进入目录和在该目录底下执行命令的能力。- 如果没有
x
权限,用户就不能cd
进入目录,就算已经在目录里面,也不能执行ll
等操作。- 权限在root账户面前形同虚设。
可读r
:
可以进行总结:
- 目录的可读
r
权限限制的是用户在该目录底下查看目录内容的能力- 如果没有可读
r
权限,用户就不能用ls
命令查看文件内容
有小伙伴可能会对上面的例子有疑惑:
我连这个目录里的内容都不能查看了,为什么我还可以cat
查看目录里code
文件的内容呢?
我们必须清楚,限制文件的读写权限是文件的权限属性,限制目录的读写权限是目录的权限属性,这二者是互不影响的,因此,只要对这个文件有读权限,那么不管对这个目录有没有读权限,我们都可以查看该文件的内容。
可写w
:
可以进行总结:
- 目录的可写权限
w
限制的是用户在该目录底下新建和删除文件的能力- 如果用户没有写权限
w
,那么用户就不能在该目录底下执行touch
、mkdir
、rm
等命令
2.2.3.1 目录/tmp和粘滞位
我们先来看一下普通用户的家目录属性:
我们发现,只有家目录的拥有者,即这个账户本身拥有对这个目录的所有权限,而其他任何人对这个目录都没有任何权限
那么如果要在Linux中实现多个用户之间的数据传递和资源共享,该怎么做呢?
为了满足这一需求,Linux有一个专门的目录
/tmp
提供给所有用户,进行数据传递和共享。
我们可以看到:
/tmp
目录为所有用户都开放了可读、可写、可执行权限- 所有用户都可以进入该目录,查看该目录的内容,同时在该目录底下新建文件
到了这里,有的小伙伴又有疑惑了:
既然/tmp
目录为所有用户都开放了写权限,那我岂不是可以在这个目录里随便删除文件,搞破坏?
我们可以尝试一下:、
在这里插入图片描述
可以看到,Linux系统的设计者考虑到了我们的问题,通过实验可以发现:
在/tmp目录中,如果涉及到删除、剪切操作,只能对自己所拥有的文件生效,如果拥有者不是自己,那么就没有权限执行操作。
那么,Linux系统又是通过什么来实现这一功能的呢?
靠的就是我们所说的粘滞位
命令:
chmod +/-t d_name
- 粘滞位就是目录可执行权限
x
的升级版 - 粘滞位一般体现在
other
权限的可执行权限x
上。 - 如果该目录本来拥有可执行
x
权限,那被赋予粘滞位后**,x
就会变成t
;如果原来没有可执行x
权限**,那被赋予粘滞位后,x
就会变成T
- 如果对一个目录的某个身份设置了粘滞位
t
,那么该目录下的文件只能由:- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
2.2.4 权限掩码umask
有必要清楚,在Linux系统中,文件的初始权限为666
,目录的初始权限为777
但是,为什么我们新创建的目录和文件,查看时,他们的权限一般都不是初始值呢?
这是因为Linux系统有权限掩码这一概念。我们可以用下面的命令查看当前的权限掩码:
umask
- 规定:
- 超级用户默认掩码值为0022,普通用户默认为0002。
我们只看后三位数字002
,这是三个八进制数,也就是用八进制表示法表示的权限值
实际创建出来的文件权限就是由umask
权限掩码和权限初始值共同决定的:
- 文字描述:权限 = 从初始权限中去掉在umask中出现的权限
- 数学描述:权限 = 初始权限 & ~umaks
同时,我们也可以用命令来修改权限掩码:
umask 0num1num2num3
- num1, num2, num3是三个八进制数
2.2.5 文件类型
在Windows系统中,我们通常用一个文件的后缀来区分文件的类型。但是在Linux系统中,我们靠命令ll
展示的文件属性的第一个字符来区分文件的类型。
不同的字符代表着不同的类型,下面给出常见的Linux文件类型:
-
:普通文件、文本、源代码、图片、视频、库、可执行程序等d
:目录文件b
:block,块设备文件c
:char,字符设备文件l
:链接文件p
:普通文件s
:socket文件
我们也可以用命令来查看文件到具体类型:
file filename
虽然在Linux中,文件后缀通常不像在Windows中那样具有特定的意义,但是文件后缀在 Linux 中仍然具有一些用途:
- 提示文件类型:文件后缀可以为用户提供一些关于文件类型的提示。例如,一个以
.jpg
结尾的文件通常是 JPEG 图像文件,尽管这并不是强制性的。用户和应用程序可以使用这些提示来决定如何处理文件。- 与应用程序关联:文件后缀可以与特定的应用程序相关联,以指示默认的打开方式。例如,以
.txt
结尾的文件通常会在文本编辑器中打开。- 便于组织文件:文件后缀有助于用户在文件系统中组织和识别文件。例如,将所有图片文件命名为
.jpg
或.png
结尾可以使用户更容易找到它们。
相关文章:

Linux——文件权限属性和权限管理
文件权限属性和权限管理 本章思维导图: 注:本章思维导图对应的Xmid文件和.png文件都以传到“资源” 文章目录 文件权限属性和权限管理1. sudo提权和sudoers文件1.1 sudo提权和成为root的区别 2. 权限2.1 Linux群体2.1.1 为什么要有所属组2.1.2 修改文件…...

数组与链表算法-单向链表算法
目录 数组与链表算法-单向链表算法 C代码 单向链表插入节点的算法 C代码 单向链表删除节点的算法 C代码 对单向链表进行反转的算法 C代码 单向链表串接的算法 C代码 数组与链表算法-单向链表算法 在C中,若以动态分配产生链表节点的方式,则可以…...

Oracle(6) Control File
一、oracle控制文件介绍 1、ORACLE控制文件概念 Oracle控制文件是Oracle数据库的一个重要元素,用于记录数据库的结构信息和元数据。控制文件包含了数据库的物理结构信息、数据字典信息、表空间和数据文件的信息等。在Oracle数据库启动时,控制文件会被读…...

吴恩达《机器学习》2-5->2-7:梯度下降算法与理解
一、梯度下降算法 梯度下降算法的目标是通过反复迭代来更新模型参数,以便最小化代价函数。代价函数通常用于衡量模型的性能,我们希望找到使代价函数最小的参数值。这个过程通常分为以下几个步骤: 初始化参数: 随机或设定初始参数…...

Pytorch detach()方法
detach() 是 PyTorch 中的一个方法,用于从计算图中分离(detach)张量。它可以将一个张量从当前计算图中分离出来,返回一个新的张量,该张量与原始张量共享相同的底层数据,但不再追踪梯度信息。 当你需要在计…...

CTF-php特性绕过
注意:null0 正确 nullflase 错误 Extract变量覆盖 <?php$flagxxx; extract($_GET);if(isset($shiyan)){ $contenttrim(file_get_contents($flag));//trim移除引号if($shiyan$content){ echoctf{xxx}; }else{ echoOh.no;} }?> extract() 函数从数组中将…...

人脸识别测试数据分析
一个人脸识别研究小组对若干名学生做了人脸识别的测试,将测试结果写入到一个文件 dir_50.txt 中,每一行是一张照片的识别结果“_照片编号”“.jpg”的字符串组合,示例如下: [1709020621, 0]_116.jpg [1709020621]_115.jpg [17706…...

MySQL 5.7限制general_log日志大小
背景 需求: 在MySQL 5.7.41中开启general_log 并限制其大小,避免快速增长占用硬盘空间。 解决: 通过定时任务,执行简单的脚本,判断general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清…...

tomcat9~10猫闪退个人经验
java版本17与8 8版本有jre,java17没有jre 所以在java8版本中将jre和jdk路径一同添加环境是不会出现闪退的,tomcat9没有闪退 但是在10就闪退了,因为java版本太低 java17没有jre,但是可以通过一种方法添加jre到java17的目录 完…...

Linux之J2EE的项目部署及发布
目录 前言 一、会议OA单体项目windows系统部署 1.检验工作 1. 检验jar项目包是否可以运行 2. 验证数据库脚本是否有误 3. 测试项目功能 2. 部署工作 2.1 传输文件 2.2 解压项目及将项目配置到服务器中 2.3 配置数据库 2.4 在服务器bin文件下点击startup.bat启动项目 …...

基于闪电搜索算法的无人机航迹规划-附代码
基于闪电搜索算法的无人机航迹规划 文章目录 基于闪电搜索算法的无人机航迹规划1.闪电搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用闪电搜索算法来优化无人机航迹规划。 …...

【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析
一,前期准备环境和工具 1,vmware 16.0安装 若已安装,请忽略 【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客文章浏览阅读186次,点赞9次,收藏2次。【网络安全 --- 工…...

BUUCTF刷题记录
[BJDCTF2020]Easy MD51 进入题目页面,题目提示有一个链接,应该是题目源码 进入环境,是一个查询框,无论输入什么都没有回显,查看源码也没什么用 利用bp抓包查看有没有什么有用的东西 发现响应的Hint那里有一个sql语句&…...

黑客技术(网络安全)—小白自学
目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类&am…...

免登陆 同步脚本 zookeeper kafka集群详细安装步骤
一.免登陆配置 #修改注解名 vim /etc/hostname #修改host文件 vim /etc/hosts 192.168.1.10 kafka1 kafka1 192.168.1.11 kafka2 kafka2 192.168.1.12 kafka3 kafka3#免登陆生成秘钥和授权自动登陆 ssh-keygen -t rsa cd ~/.ssh shh-copy-id kafka1 shh-copy-id kafka2 shh-co…...

深入理解NLP
引子 自然语言处理(Natural Language Processing, NLP)是人工智能领域中的一个重要研究方向,它涉及了计算机与人类自然语言之间的交互和理解。 1. NLP的起源与发展 NLP的起源可以追溯到早期的机器翻译项目,随着科技的进步&…...

Python-自动化绘制股票价格通道线
常规方案 通过将高点/低点与其 2 个或 3 个相邻点进行比较来检测枢轴点,并检查它是否是其中的最高/最低点。对所有枢轴点进行线性回归以获得上方和下方趋势线。价格离开通道后建仓。通过这样做,我们得到如下所示的价格通道。我认为我们可以利用给定的数据取得更好的结果。...

CTF-Crypto学习记录-第四天 “ “ --- SHA1安全散列算法,实现原理。
文章目录 前言SHA-1加密算法介绍关于SHA-1和MD5 SHA-1 加密过程原文处理设置初始值和数据结构定义加密运算原理过程 在python中调用SHA-1 前言 MD5学习MD5加密算法 SHA-1加密算法介绍 SHA-1(Secure Hash Algorithm1,安全散列算法1)是一种密…...

海南海口大型钢结构件3D扫描全尺寸三维测量平面度平行度检测-CASAIM中科广电
高精度三维扫描技术已经在大型工件制造领域发挥着重要作用,特别是在质量检测环节,高效、高精度,可以轻松实现全尺寸三维测量。本期,CASAIM要分享的应用是在大型钢结构件的关键部位尺寸及形位公差检测。 钢结构件,是将…...

【PyQt学习篇 · ④】:QWidget - 尺寸操作
文章目录 QWidget简介QWidget大小位置操作案例一案例二 QWidget尺寸限定操作案例 内容边距案例 QWidget简介 在PyQt中,QWidget是一个基本的用户界面类,用于创建可见的窗口组件。QWidget可以包含多种类型的子组件,如QPushButton、QLabel、QLi…...

APC学习记录
文章目录 APC概念APC插入、执行过程逆向分析插入过程执行过程总结 代码演示参考资料 APC概念 APC全称叫做异步过程调用,英文名是 Asynchronous Procedure Call,在进行系统调用、线程切换、中断、异常时会进行触发执行的一段代码,其中主要分为…...

前端将图片储存table表格中,页面回显
<el-table :data"tableData" v-loading"loading" style"width: 100%" height"calc(100vh - 270px)" :size"tableSize"row-dblclick"enterClick"><el-table-column prop"name" label"文档…...

[论文阅读]Ghost-free High Dynamic Range Imaging with Context-aware Transformer
多帧高动态范围成像(High Dynamic Range Imaging, HDRI/HDR)旨在通过合并多幅不同曝光程度下的低动态范围图像,生成具有更宽动态范围和更逼真细节的图像。如果这些低动态范围图像完全对齐,则可以很好地融合为HDR图像,但…...

react高阶成分(HOC)例子效果
使用React函数式组件写了一个身份验证的一个功能,示例通过高阶组件实现的一个效果展示: import React, { useState, useEffect } from react;// 定义一个高阶组件,它接受一个组件作为输入,并返回一个新的包装组件 const withAuth…...

【24种设计模式】工厂模式(Factory Pattern)
工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需暴露对象创建的逻辑。在这篇博客中,我们将介绍工厂模式的概念、使用场景以及示例代码。 概念 工厂模式是一种创建型设计模式,它提供了一种创建对象的方式&#…...

树——对称二叉树
leetcode题目地址 树为空树,亦为对称二叉树树非空时,仅需判断其左右子树是否对称判断左右子树对称 (1) 左右子树是否为空,有一个为空 便不对称, 都为空或都不为空 可能对称 (2) 左右子树根节点值是否相同 (3) 判断 左子树 的 左子…...

拉扎维模拟CMOS集成电路设计西交张鸿老师课程P10~13视频学习记录
--------------------------------------------------------------------------------------------------------------------------------- p10 短沟道,除了沟长调,还可能出现速度饱和问题; 但是在拉扎维这本书里面没有考虑这个问题&#…...

3.线性神经网络
#pic_center R 1 R_1 R1 R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…...

python常用内置函数的介绍和使用
Python具有丰富的内置函数,这些函数是Python语言提供的基础功能。以下是一些常用的内置函数的介绍和使用: print(): 打印输出指定的内容到屏幕。 print("Hello, World!") len(): 返回给定对象的长度或元素个数。 s "Hello, World!"…...

2023辽宁省赛E
Solution 题目大致分为三个步骤 计算 P ( S ) P(S) P(S)证明删除区间连续且找到最值位置根据最值位置求出答案 接下来过程中不合法的组合数都默认为 0 0 0 第 1 步 - 求出总值 考虑 S m { 1 , 2 , ⋯ , m } S_m \{1, 2, \cdots, m\} Sm{1,2,⋯,m} , 则有 $P(S_{n2}…...