【Linux】第五站:Linux权限

news2024/11/15 21:46:38

文章目录

  • 一、shell命令以及运行原理
  • 二、Linux下用户的分类
    • 1.root用户和普通用户的切换
    • 2.对一条指令的提权
  • 三、什么叫做权限
    • 1.权限
    • 2.文件的属性
    • 3.文件类型
    • 4.权限属性
  • 四、更改权限
    • 1. chmod 更改文件的属性
    • 2. chown 更改拥有者
    • 3. chgrp更改所属组
    • 4.chown一次性更改拥有者和所属组
    • 5. 权限认证的细节
  • 五、起始权限问题
  • 六、目录文件的读写执行权限
  • 七、粘滞位

一、shell命令以及运行原理

关于linux的定义:我们一般习惯上称Linux上的各种应用,命令行解释器,包括Linux内核都称作Linux,也就是宏观上的linux

但是Linux严格意义上说的是一个操作系统,也就是只包括linux内核,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

我们可以用这样一个图来简单的描述

image-20231027141006466

如下所示,当我们进入Xshell的时候,里面的每一个的意思是这样的

image-20231027133057191

而这四部分合起来我们称为bash命令行

输入指令的过程,本质就是在输入字符换

指令的本质就是就是编译好的程序和脚本,一定会在系统的特定目录下存放

我们所有的指令,最终都要在OS内部运行,但是OS使用难度比较高,我们用户不能直接和OS打交道。

所以有了图形化界面和命令行解释器

而前面所说的bash就是一种命令行解释器,命令行解释器就是shell

image-20231027134317767

我们可以用一个故事来理解

如果说你是一个闷骚且害羞的程序员(就是我们的用户),那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

所以shell命令行解释器的作用如下

  • 将使用者的命令翻译给核心(kernel)处理。

  • 同时,将核心的处理结果翻译给使用者。

命令行解释器存在的意义就是

  1. 进行命令行解释
  2. 保护OS,对于用户的非法请求,直接拦截

关于这个命令行解释器

  • 在linux中,就是命令行形式的,如bash,sh,shell
  • 在windows中,一般就是图形化界面

shell是所有命令行解释器的统称,而bash,sh这些就是具体的命令行解释器

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

二、Linux下用户的分类

1.root用户和普通用户的切换

linux中用户一般分为两类

  • root:超级用户(基本不受权限的约束)

  • 普通用户:普通用户是受权限的约束的

  • 超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

首先是这两个用户是如何切换的?

比如我们当前是一个普通用户

我们可以使用su指令,然后我们输入root的密码即可

image-20231027175100138

这样切换以后,我们会发现,我们依旧处于原来的路径中,但是用户已经更改为了root账号了

image-20231027175254559

现在当我们想要退出来的时候,我们可以直接使用exit或者CTRL + D快捷键,这样我们就可以退出root用户了

image-20231027175407742

除了直接使用su,我们还可以加上-,也就是使用 su -指令

不过我们可以注意到,当我们输入密码以后,它是一种以登录的方式进入进去的,所以会显示登录的一些信息,并且它的登录后当前的目录直接切换为家目录

image-20231027180133165

而像su就像是一个直接的身份转变。直接将一个普通用户变成root,但并不是以重新登录的身份变化的,而是把一个人硬变成了root

同样的,对于su -以后的root,我们直接退出的话,会显示logout

image-20231027180643313

然后我们的目录切换回来原来的目录

如果我们当前已经是root用户了,但是我们想要登录一个普通用户,那么我们也可以su加上指定用户名即可,这里不需要密码。当我们想退出的时候直接exit或者CTRL+D即可

image-20231027181441912

以上是root和普通用户之间的切换

下面是普通用户和普通用户之间的切换

我们可以直接su指定的普通用户即可,不过这里就需要输入普通用户的密码了

image-20231027181613017

2.对一条指令的提权

当我们目前是普通用户的时候,我们知道,我们是不可以安装软件等操作的

因为安装软件其实就是将某些文件拷贝到系统的指定目录,而普通用户是没有权限进行拷贝的

所以我们可以使用sudo指令进行提权

sudo command

sudo后面加上你需要的操作,然后输入你的密码即可

不过在这里我们可能会觉得有些问题?那这样的话sudo只需要加上我当前账号的密码就可以了,那岂不是人人都是root,即便不知道root密码的情况下?

事实上却是是这样的

但是我们要注意:

我们当前adduser新建出来的用户,没有办法执行sudo,因为系统不信任我们,除非未来将普通用户,添加到系统的信任白名单里面

如下图所示,就是sudo无法提权的例子

image-20231027182959564

三、什么叫做权限

1.权限

权限的最通俗的解释就是一件事情是否允许被我们做

  1. 权限认证的是身份(权限和“人”有关,这个人是有身份/角色的)

  2. 权限也和事物的“属性”有关(毕竟我们不可以将硬盘像面包一样啃一口)

这里的属性,我们指的就是文件属性。

文件属性有三种:可读可写可执行

2.文件的属性

我们可以先创建一个目录和一个普通文件,然后使用ll命令显示如下

image-20231027191254107

我们可以看到有很多列,最后一列是文件名,然后紧接着的三列是时间。这些很容易看出来

可是前面五列又代表了什么呢?

3.文件类型

首先是第一列我们进行分析一下

第一列的第一个字符是代表着文件的类型

文件类型:Linux系统中文件名后缀没有直接的意义(当然不代表它不用)

也就是说,Linux系统不以文件后缀作为文件类型,而是以这个第一个字符代表文件类型

下面是第一个字符所代表的文件种类

  • - :普通文件

  • d : 目录文件

  • b : 块设备文件

  • c :字符设备文件

  • p : 管道文件

如下所示

我们可以看到,对于empty,它的第一个字符是d,所以它是一个目录文件,对于test.c,它的第一个字符是-,所以它是一个普通文件

image-20231027191918251

其实一般而言,我们用的最多的就普通文件和目录这两种

其他的都是很少遇到的

b是块设备文件,其实就是磁盘文件,我们可以在这里看到,下面的这个文件就是b开头,也就是块设备文件

image-20231027193928895

c是字符设备文件,通常有键盘、显示器文件等,如下所示的都是字符设备文件

image-20231027194115876

p是管道文件,一般用于通信

如下所示,本来应该打印在左边的,但是却打印到右边去了

image-20231027194646579

我们在上面说过Linux系统不以文件名后缀区分类型

所以我们可以去创建一个.c程序,然后编译后生成一个a.out文件,我们可以对这个文件随意的进行重命名。我们发现是可以运行的。这验证了我们前面所说的

image-20231027195338815

可是当我们如果我们将这个.c程序的后缀改为了txt以后,gcc无法编译通过了

image-20231027195446784

其实这里我们说的linux系统不以后缀辨认类型,但是gcc是一款编译器,软件,linux不认,但是gcc这个软件认

所以linux不认,但是不代表linux系统上运行的其他软件不需要认后缀

所以说:Linux中如何看待后缀,主要看用户需求

4.权限属性

如下所示,第一列的后九个字符代表的是权限的属性

image-20231027195931058

其中

  • r : 可读
  • w : 可写
  • x : 可执行
  • - : 对应位置没有权限

这些权限是跟人有关系的

而我们将这些人划分为三种角色、权限身份

  1. 拥有者
  2. 所属组
  3. 其他人

那么现在问题来了,这三种角色权限身份和两种类型的用户有什么区别呢?

其实就是具体的用户可以有这些身份

image-20231027202741791

即人+角色身份

对于我们下面的信息中,第三列就是拥有者

image-20231027202944901

第四列就是所属组

image-20231027203021271

而对于其他人,系统这直接使用排除法就可以了。不是拥有者也不是所属组那就是其他人

第五列是文件的大小

对于第二列,我们暂时先不讨论

所以现在我们在回过头来看第一列的后九个字符

他们三个三个为一组,分别对应拥有者,所属组和其他人的权限。

image-20231027204339543

而且对于每一个权限里面,三个的位置分别依次代表,是否读,是否写,是否可执行

  1. 位置是什么含义是确定的

  2. 每个位置只有是或否,具有指定的权限

image-20231027204901910

所以上面的test.c文件中

  • 对于拥有者的权限是可读可写不可执行

  • 对于所属组的权限是可读可写不可执行

  • 对于其他人的权限是可读不可写不可执行

我们接下来使用三个用户来测试

image-20231027210204320

如下所示,在拥有者的账户中,我们可以对其进行读也可进行写

image-20231027210439981

当我们使用其他人的时候,和我们前面所想得一样,不可以写但可以读

image-20231027210905382

但是当我们使用root的时候,虽然它是一个其他人,但是它居然可以读可以写

image-20231027211313269

这说明root其实是不受权限约束的

我们继续做一个测试,我们先将这个test.txt的权限给全关了

image-20231027211601179

我们可以发现,对于我们这个拥有者,没有了任何权限以后,我们无法读了也无法写了

image-20231027211710129

对于其他人而言也是一样,没有了权限就无法读写了

image-20231027211831760

但是我们继续看root,它这个老六居然啥都可以干

image-20231027212002662

以上的例子再次证明了root不受权限的约束

当我们这个拥有者对它自己赋予了读权限的功能的时候,它就可以进行读取了

image-20231027212249326

四、更改权限

一般而言,更改权限的人只有两种,一个是拥有者,一个是root

1. chmod 更改文件的属性

chmod指令可以进行权限的修改

比如下面的例子

如果对拥有者修改权限那么就是u

image-20231027212707193

如果我们想要去掉某个权限,那么就是减号即可

image-20231027212823085

我们也可以对所属组修改权限,用g来表示

image-20231027213933774

如果我们相对其他人添加权限,用o来表示

image-20231027214019789

我们也可以对多个身份多个权限同时操作

我们可以用逗号隔开分开操作

image-20231027214158676

也可以使用a,a代表all,即对所有人去除掉某个权限

image-20231027214314112

下面是删除掉全部人的全部权限

image-20231027214430889

除了以上的指定修改,还有一种是利用比特位一一对应的方式来进行修改

image-20231027214743084

所以我们可以用一个八进制数来代表权限

image-20231027214849520

image-20231027214927837

image-20231027214944851

2. chown 更改拥有者

我们可以使用chown更改拥有者

但是当我们直接这样使用的时候,我们发现是不可以的

image-20231028140023253

这里其实是因为jby这个拥有者无法直接将这个文件的拥有者交给qyt,因为还需要考虑qyt是否想要。

所以在这里我们需要使用sudo来进行指令的提权,不过这种方式目前我们的linux系统还是无法可以进行的。因为系统不信任我们。所以我们后序在讨论如何进行提权

image-20231028140432476

所以我们可以先使用root用户进行提权

image-20231028140536798

现在拥有者变为了qyt,我们还让jby去修改文件属性的话,那么是不可以的

image-20231028140703092

所以我们可以先让root修改一下文件的属性

image-20231028140811879

然后我们在让jby去读写文件发现是不可以的

image-20231028140843591

不过虽然jby不是拥有者,但他还是所属组,所以我们可以给他加上所属组的权限

image-20231028141018358

然后它就可以进行读写了

image-20231028141109712

3. chgrp更改所属组

既然拥有者都可以更改,那么所属组当然也是可以更改的了

不过还是一样的, 我们无法直接使用jby去更改所属组吗,即便我们本身就是所属组,但我们仍需要使用root去更改,或者如果是拥有者也是可以更改的

image-20231028142520796

如下是拥有者进行的更改

image-20231028142637088

如下是root进行的更改

image-20231028142718939

4.chown一次性更改拥有者和所属组

如下所示,在使用chown的时候,我们在中间加上冒号,然后就可以一次性连续更改拥有者和所属组了

image-20231028142946883

5. 权限认证的细节

在如下的文件中

jby既是拥有者又是所属组,但是我们给它的权限是拥有者只可以读,但是所属组可以读写。

image-20231028143729890

我们会发现,我们正在实际的写入的时候是无法进行写入的

这是因为在进行身份认证的时候,只能选择一个身份进行认证,即我已经是拥有者了,就不会在考虑所属组的权限了。所以无法修改

反而是我们将上面的拥有者给换为了qyt以后,反而是可以进行修改了

image-20231028144541797

五、起始权限问题

当我们创建了一个新的文件的时候,我们发现它的起始权限是如下的

image-20231028144731695

如果我们又创建了两个目录,它的起始权限是这样的

image-20231028144830437

  • 那么为什么我们创建文件的默认权限是是我们所看到的样子?

  • 为什么普通文件是664?

  • 为什么目录文件是775?

其实上面的都只是我们看到的样子

实际上在linux系统中,默认给普通文件的起始权限其实是666,给目录文件的起始权限其实是777

那么为什么默认给的起始权限和我们所看到的不一样么?

这是因为在linux中有一个权限掩码的东西,我们可以使用umask去查看

image-20231028150332718

这个0002就是一个八进制数,第一个0代表它是一个八进制数,后面的三位才是关键的。后面的三个八进制数刚好可以形成9个比特位

权限掩码:凡是在umask中出现的权限,不会在最终的文件权限中出现

所以最终,才有了本应该是666和777,但是最终确变为了664和775

110 110 110    ---普通文件的起始权限
000 000 010    ---权限掩码umask
110 110 100    ---普通文件的最终权限
111 111 111    ---目录文件的起始权限
000 000 010    ---权限掩码umask
111 111 101    ---目录文件的最终权限

它的运算规则类似于如下

最终权限 = 起始权限 & (~umask)

如果我们想要修改umask,我们直接它在后面添加八进制数字即可

image-20231028151524692

六、目录文件的读写执行权限

如下所示,当我们创建了两个文件以后

image-20231028154058777

对于test.c文件它的读写执行,我们都很好理解,可是对于dir这个目录文件,它的读写执行就有点奇怪了,那么究竟都代表什么意思呢?

如果我们对这个目录文件的读权限给去掉了,那么我们可以看到,我们仍然可以进去这个文件,并且在这个目录文件中创建文件,但是我们可以使用ls去读取里面的东西

image-20231028154442917

所以读权限并不影响能否进入,但是影响我们可不可以看

接下来我们继续将写权限给关掉,那么我们可以看到,我们仍然可以进去这个文件,但是我们不可以读也不可写了

image-20231028154642266

所以写权限并不影响能否进入,但是影响我们可不可以写

如果我们继续将这个目录文件的x给去除掉,我们会发现,我们无法进入这个文件了,但是我们可以去查看这个文件的内容

image-20231028155448493

所以目录文件的

r : 是否允许我们查看指定目录下的文件内容

w : 是否允许我们在当前目录下进行创建、更改、删除

x : 是否允许用户进入对应的目录

七、粘滞位

我们可以看一下我们的家目录里面的信息

可以看到,每一个用户它的拥有者和所属组都是它自己,并且只有拥有者有权限,其它的都没有权限

image-20231028160707290

所以普通用户自己的家目录权限是700,我在我的家目录创建的文件,别人都看不到

但是有时候,我们多个用户想要进行文件数据的共享

所以就说明了我们所建立的共享文件,不能在任何一个人的家目录下

所以我们可以使用root账号在根目录下创建一个共享文件shared

image-20231028161622526

然后我们将这个文件的权限全部公开

image-20231028161721058

然后我们可以这样做,就可以共享一个文件了

image-20231028162936436

但是这里出现了一个问题,那就是如果jby不让qyt看这个文件的内容的话,把它的权限给关了,那么如果qyt一气之下直接将文件给删了那就糟糕了。

image-20231028163236198

这就有点不合理了

而我们知道一个文件能否被删除,并不由这个文件所决定,而是由这个文件所处的目录所决定

所以为了避免被qyt删除我们的文件,我们可以去关掉这个shared目录的写权限

可是这样做的话如果我们去掉了共享目录的w权限,我们也同时无法创建文件了,那么谈何共享呢???

为了使得让其他人无法删除文件,所以我们可以使用一个新的位,也即是粘滞位

即直接o+t就可以了

image-20231028164328536

这时候,如果jby让qyt不高兴了,这下qyt想要删文件也删不了了

image-20231028164845861

当然如果是我们文件的创建者要删除的话还是可以的

image-20231028164944721

所以粘滞位:给目录设置,一般是共享目录,大家可以在目录进行各自文件的增删查改,但是只允许文件的拥有者和root去删除文件,其他人一概不允许,t就是一种特殊的x权限

也就是说root用户是可以无视前面的一切规则的。在比如root自己的文件,即便我将我自己的权限都给关了,我照样进的去,改的了,看的了

image-20231028165632372

不过如果每次我们想要共享文件的话,这样是不是有点太费劲了呢?

其实在linux中,根目录下就有一个文件tmp,他就是带了粘滞位的

image-20231028170118432

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12种常见的恶意软件类型与防范建议

1、病毒 病毒是迄今为止最常见的恶意软件类型之一。它是一种能够感染、破坏计算机设备,并在其运行系统上自我复制的程序。由于病毒是自我复制的,一旦安装并运行,它们就可以在同一网络上自动从一台设备传播到另一台设备,无需人为干…

网络(番外篇)can网络知识

通常ECU发出的网络管理报文ID Base Address Node ID Mifa项目向外发的网络管理报文0x418,就是DBC根据基地址加上节点ID定义的。 报文属性是 NmAsrMessage即应答网络报文。 DBC里关于整个网络管理的参数定义,确定好后导入达芬奇,就是直接…

简单的谈谈VPN是什么、类型、使用场景以及工作原理?

作者:久孤776 个人主页:久孤776_python-CSDN博客 作者会持续更新网络知识以及关于python的知识期待你的关注 目录 一、vpn是什么 二、vpn的类型 1. 远程访问VPN 2. 点对点VPN 3. 入口站点VPN 4. 专线VPN 5. 客户端对站点VPN 三、VPN的使用场景 1…

通过python操作neo4j

在neo4j中创建结点和关系 创建结点 创建电影结点 例如:创建一个Movie结点,这个结点上带有三个属性{title:‘The Matrix’, released:1999, tagline:‘Welcome to the Real World’} CREATE (TheMatrix:Movie {title:The Matrix, released:1999, tagl…

从零开始:开发直播商城APP的技术指南

时下,直播商城APP已经成了线上购物、电子商务的核心组成,本文将为您提供一个全面的技术指南,帮助您从零开始开发一个直播商城APP。我们将涵盖所有关键方面,包括技术堆栈、功能模块、用户体验和安全性。 第一部分:技术…

Mybatis的Mapper文件报错:Tag name expected

目录 一、Mapper文件的错误信息 二、原因分析 三、解决方案 1、解决方式一:CDATA 2、解决方式二:预定义字符 一、Mapper文件的错误信息 在使用MyBatis时,我们通常会写一些sql语句。如下图,有时候我们会直接使用比较符号&…

继续畅通工程(最小生成树+并查集)

我刚开始的想法是,既然有已经修好的路,就先把这些修好的路全都加到集合中,即直接把他们Union,不加其长度,然后再将剩下的排序,按Kruskal的算法来进行。 但是这种想法可能有什么问题,只过了一般…

Vscode中不显示.ipynb文件单元格行号

找到设置,搜索line number: 看到下面那个Notebook: Line Numbers 控制单元格编辑器中行号的显示。,选择on即可;

网络原理之TCP/IP

文章目录 应用层传输层UDP协议TCP协议TCP 的工作机制1. 确认应答2. 超时重传3. 连接管理TCP 的建立连接的过程(三次握手),和断开连接的过程(四次挥手)TCP 断开连接, 四次挥手 3. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 面向字节流10. 异常情况 本章节主要讨论…

CRM客户管理系统源码 带移动端APP+H5+小程序

CRM客户管理系统源码 带移动端APPH5小程序 开发环境: thinkphp mysql 功能介绍: 1、 办公管理:审批管理、工作报告、日程管理、办公审批、公告管理 2、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客…

嘴笨的技术人员怎么发言

对于嘴笨的人来说,即兴发言简直就是灾难,想想自己窘迫的模样,自己都受不了,但职场又避免不了这种场合,所以,就要靠一些技巧让我们顺利打开思路了。 那么,今天就分享几个解救过我的不同场景即兴发…

【优选算法系列】第一节.滑动窗口(209. 长度最小的子数组和3. 无重复字符的最长子串)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:优选算法系列 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&#xff01…

结构体指针的引入

概念引入 结构体指针类似于前面学习过的指针,我们先回忆下指针:指针就是地址,指针变量就是存放地址的变量。而结构体也是变量,变量访问有两种方式:1.变量名, 2.地址,之前案例,是用变量名访问。…

rhcsa安装及配置

RHCSA LINUX 所需软件:VmwareWorkStation 16 rhel-baseos-9.0-x86_64-dvd 镜像文件 Xshell 远程终端工具 「链接:https://pan.xunlei.com/s/VNh9sAs1R591Vr2pounMmyyCA1?pwde42h# 提取码:e42h”复制这段内容后打开手机迅雷App&…

某赛驱动器调节工具DM-Series使用笔记

某赛驱动器调节工具DM-Series使用笔记 简介RJ11通讯定义DM-Series界面更改驱动盒的参数观察串口发送出去的数据得出结果CRC参数模型设置电流值与16进制值对照 简介 某赛驱动器的盒调节电流或其他参数。我以DM85x为例,通过串口通讯修改电流值大小,虽然可…

1.Vue—简介、实例与容器、MVVM模型

文章目录 一、Vue简介1.1 特点1.2 搭建Vue开发环境1.2.1 开发版1.2.2 生产版 1.3 下载Vue开发工具1.3.1 GitHub方式1.3.2 国内方式 1.4 消除环境提示 二、 入门程序2.1 HelloWord2.2 分析Hello案例2.3.1 多容器对一实例2.3.2 多实例对应一容器2.3.3 总结 三、MVVM模型 一、Vue简…

C++模板编程和标准模板库(STL)

1、C模板编程 1&#xff09;函数模板 #include <iostream> using namespace std;// 声明一个泛型类型T&#xff0c;参数化数据类型 template <typename T> // 定义一个函数模板 T man(T a, T b) {return (a>b?a:b); }int main() {// 使用的时候没有指定参数类…

matlab中类的分别之handle类和value类——matlab无法修改类属性值的可能原因

写在之前&#xff08;吐槽&#xff09; 最近由于变化了一些工作方向&#xff0c;开始需要使用matlab进行开发&#xff0c;哎哟喂&#xff0c;matlab使用的我想吐&#xff0c;那个matlab编辑器又没代码提示&#xff0c;又没彩色&#xff0c;我只好用vscode进行代码编辑&#xf…

查询和下载国自然科学基金

查询和下载国自然科学基金 打开网站 能够查到基本信息、项目参与人、项目摘要、结题摘要、结题报告、成果统计、成果产出&#xff08;主要为论文&#xff09; 结题报告可以在线阅读。 下面的参考博文中有下载结题报告书的步骤&#xff0c;不过是收费软件。 参考博文 国自…

设备树与中断,操作系统如何使用中断

设备树中会对中断进行描述: 首先 cpu工程师会写好中断控制器的设备树节点, 里面会定义寄存器以及如何描述中断, gpio0209…中有两个属性, 一是gpio-controller 二是interrupt-cells。后者表示该设备是一个中断控制器。 interrupt-cells表示用两个属性描述中断。 之后再来看下…