麒麟操作系统培训笔记

麒麟操作系统培训-运维序列

本笔记只整理了CA初级运维课件,CP高级课件未整理,如有需要课件资料可在网盘自行获取
链接:https://pan.baidu.com/s/1hh9S4qIByX-JUnxNleh0Mw
提取码:minn

系统下载地址

https://www.kylinos.cn/

操作系统安装(实验环境)

1.ios安装不做介绍

2.稍后安装操作系统

linux -> centos8 64bit

一般最小安装 / 带GUI安装

Shell基本功能

别名

alias命令的效力仅限于该次登录,在注销系统后,这个别名的定义就会消失。

查看别名

#alias

设置别名

#alias ll='ls -l'

使用别名

#ll /ect

取消别名

#unalias ll

查看历史命令

存放在~/.bash_history中,预定的记录为1000笔,这些都定义在环境变量中

#history

任务控制

前台:出现提示符让用户操作的环境

后台:不能与用户交互的环境,你无法使用 ctrl-c 终止在后台执行的任务

将任务放在后台

通常将比较耗时的工作放在后台执行。要执行后台程序,只要在输入命令时,在命令的后面加上“&”符号,之后按Enter键

若目前已在执行某个命令,无法使用“&”来将它加入后台中执行,需先按Ctrl+z键暂停这程序的执行,然后再直接输入“bg”命令,就可将此工作放入后台执行

查看后台所有任务状态

`#jobs -l

特殊字符

字符 功能
# 注释
\ 转义符,将特殊字符或通配符还原成一般字符
| 分隔两个管道命令
分隔多个命令
/~ 用户的主目录
$ 变量前需要加的变量值
& 将该符号前的命令放到后台执行
‘(单引号) 由单引号括起来的字符串视为普通字符串,包括空格、$、/、\等特殊字符
“(双引号) 除$、\、单引号和双引号仍作为特殊字符并保留
其特殊功能外,其他都视为普通字符对待。

环境变量

env命令可显示所有的环境变量

常用环境变量

PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 主机名
PS1 当前命令提示符
SHELL 用户当前使用的shell
LANGUAGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录

环境变量的修改

要修改某个环境变量,则不用加上$符号,如默认的历史命令记录数是1000,变量名为HISTSIZE,要修改为800,只需要在命令行中为其重新赋值

用户和组管理

用户账号和类型

• KYLIN用户分为3类:

root用户(超级用户) :拥有最高权限

系统用户:系统服务启用时,需开启的用户以方便占用系统资源,该类用户无法登录。

普通用户:系统安装完成后,被创建的所有用户

用户ID(UID)是用户账户的唯一标识。

root:UID为0

系统用户:UID从1到999

普通用户:UID从1000开始编号

组账户和类型

超级组(super group)
系统组(system )
自定义组

一个组可以包含多个用户
一个用户可以同时属于多个组

用户信息

用户信息存放位置
存放位置 信息
/etc/passwd 用户信息
/etc/shadow 口令信息
/etc/group 组信息
查看用户信息

cat /etc/passwd

sshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin
syslog:x:109:117::/home/syslog:/bin/false
kylin:x:1000:1000:kylin,,,:/home/kylin:/bin/bash

字段1:用户名。
字段2:密码(实际保存在shadow中)
字段3:UID(用户标识)
字段4:GID(组标识)
字段5:用户全名或本地帐号
字段6:用户目录
字段7:登录使用的Shell类型

查看用户口令信息

cat /etc/shadow

kylin:$6$s7KMkndd$ZeJmII.QrM6ZvQ1ZpHQc2sS48MY2lv7yTVyBJOGX3p3xXRvD6BLSlTcocyNjIEVoqhIkYUluuD2ByBuPSiZN9/:17252:0:99999:7:::

字段1:用户名
字段2:加密后的密码 (带!表示用户不能登录)
字段3:上次修改密码的日期 (从1970年1月1日算起)
字段4:密码不可被变更的天数
字段5:密码需要被重新变更的天数(99999表示不需要变更)
字段6:密码变更前提前几天警告
字段7:帐号失效日期
字段8:帐号取消日期
字段9:保留条目,目前没用

管理用户账户

命令管理

useradd

命令使用方法:useradd 参数 用户名

useradd参数 含义
-c 接用户信息说明
-d 指定某个绝对路径目录为主目录
-e 失效日期,YYYY-MM-DD,为shadow的第8项字段
-f 从用户失效到被禁用的时间,0为立刻失效,-1为永不失效
-g 初始化用户组名(主要组)
-G 接用户组名,一个用户可以加入多个组
-m 强制创建用户主目录
-s 默认管理员是/bin/bash,普通用户是/bin/sh
-u 接UID,表示为该用户名指定UID
passwd

命令使用方法:passwd 用户名

usermod

命令使用方法:usermod 参数 用户名

usermod参数 含义
-c 修改用户说明信息
-g 修改组名,即初始用户组
-e 修改用户过期日期 格式:YYYY-MM-DD
-G 修改组名,其他用户组
-l 修改用户名
-L 锁定账号,使用户密码无效(在/etc/shadow文件中用户对应密码字符串的前面加上叹号(!))
-U 解锁
userdel

命令使用方法:userdel 参数 用户名

userdel参数 含义
-r 删除用户登入目录以及目录中所有文件。
-f 强制删除用户(甚至当用户已经登入 Linux 系统时此选项仍旧生效)

管理组账户

命令管理

查看组信息

cat /etc/group

ssh:x:116: syslog:x:117: kylin:x:1000:

字段1:组名;
字段2:组口令占位符;
字段3:组ID(GID)号;
字段4:成员列表,用逗号分开(不能加空格)。

cat /etc/gshadow

新建和删除组

groupadd;addgroup;

groupdel;delgroup

组密码相关

gpasswd

gpasswd参数 含义
-a 添加用户到组
-d 从组删除用户
-A 指定管理员
-M 指定组成员和-A的用途差不多
-r 删除密码
-R 限制用户登入组,只有组中的成员才可以用newgrp加入该组
修改组信息

groupmod

groupmod参数 含义
-g 设置欲使用的组ID
-o 重复使用组ID
-n 设置欲使用的组名称

管理组账户

显示指定用户所在组成员

groups [username]

删除用户组

delgroup [options] [groupname]

文件与目录管理

目录层级结构

文件和目录常用命令

目录相关操作

cd pwd mkdir rmdir

cd:目录之间的切换
pwd:查看当前目录绝对路径
mkdir:创建目录
rmdir:删除目录

文件创建相关操作

ls touch cp rm mv ln

ls:罗列当前目录下所有子文件
touch:创建新文件
cp:复制文件
rm:删除文件
mv:移动或重命名文件
ln:创建链接文件

文件内容查看

cat more less tail head

less命令选项 含义
PgDn 向下翻一页
PgUp 向上翻一页
/字符串 向下查找该字符串
:f 显示文件名和目前的行数
q 退出查看界面
?/字符串 向上查找该字符串
N -反向重复前一个查找(?/字符串和/字符串查找的内容)
n 重复前一个查找(?/字符串和/字符串查找的内容/)

文件查询

which whereis locate find

文件处理

wc sort uniq diff

文本查找

grep

文件打包、压缩、解压

tar

文件扩展名

扩展名 含义
.sh Shell脚本文件
.tar .gz .zip .tgz .bz2 压缩文件
.py .php .html 程序文件,网页相关文件

链接文件

ln命令用来为文件创建一个连接,连接类型分为硬连接和软连接(符号连接)两种,默认的连接类型是硬连接

常用方式:
ln source target :创建硬链接文件
ln -s source target :创建软链接文件

软链接:

1..软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式。
2.软链接可以跨文件系统 ,硬链接不可以。
3.软链接可以对一个不存在的文件名进行链接。
4.软链接可以对目录进行链接。

硬链接:

1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接。
3.硬链接只有在同一个文件系统中才能创建。

文件和目录权限

文件权限:文件的访问控制权限

即哪些用户和组群可以访问文件以及可以执行什么样的操作。
每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

命令查看文件的权限

ls -al 命令查看文件的权限,有七项属性

-rw------- 1 root root 5243 8月 30 10:16 .bash_history

(1)表示这个文件的类型与权限,这一项有10个字符。
(2)链接数,链接到该文件所在 inode 结点的文件名数目
(3)该文件的拥有者。
(4)该文件的所属用户组,该用户组的所有用户对这个文件有第二组权限。
(5)该文件的大小,默认单位为B。
(6)该文件的创建日期或者最近一次修改的日期。
(7)该文件的文件名。

文件权限的两种表示方式

一种是数字表示的文件权限

r用4表示

w用2表示

x用1表示。每组的权限表示是累加的

一种是符号表示的文件权限

使用u、g、o表示user、group、others。

a表示三组所有的权限,+和-分别表示增加和去掉相应的权
限,=表示赋予某种权限。

修改文件和目录权限

改变文件的权限:

chmod

格式1:chmod [ugoa] [+-=] [rwx] 文件或目录

u、g、o、a 分别表示:属主、属组、其他用户、所有用户

``+、-、= `分别表示:增加、去除、设置权限

格式2:chmod nnn 文件或目录

nnn 为 3位八进制数

常用命令选项

-R:递归修改指定目录下所有子项的全新

修改文件所有者:

chown

格式:

chown 属主 文件或目录
chown :属组 文件或目录
chown 属主:属组 文件或目录

常用命令选项
-R:递归修改指定目录下所有文件、子目录的归属

修改所属用户组:

chgrp

常用命令选项
-R:递归修改指定目录下所有文件、子目录的归属

隐藏权限(高于root)
设置/查看隐藏权限

设置:chattr:使用该指令后,root也无法突破权限查看

查看:lsattr

特殊权限

文件特殊权限:SUID、SGID、SBIT

SUID

SUID:当s标志出现在文件拥有者的x权限上时,称为Set UID,数字权限为4

功能:

SUID仅对二进制程序有效;

  1. 执行者对该程序需要有x可执行权限
  2. 本权限仅在执行该程序的过程中有效;
  3. 执行者将具有该程序拥有者的权限。

SGID

当s标志在群组的x时称为Set GID,数字权限为2。

功能:

1.SGID改变的是执行者的所属组,可以对可执行文件和目录设置;

2.命令执行者要对该程序拥有执行(x)权限

3.命令执行者在执行程序的时候,组身份升级为该可执行程序文件的属组

4.SGID权限只在该程序执行过程中有效,也就是组身份只在程序执行过程中发生改变,命令结束用户组身份恢复. 5.对目录设置SGID属性,可以使得访问在该目录下创建的所有文件的所有权,都继承原目录的所有者,而非创建

SBIT

SBIT权限:在权限位的最低位表现为t,称为粘滞位,数字权限为1。

功能:

  1. SBIT权限只对目录有效
  2. 普通用户对于目录有w、x权限,即普通用户可以在此目录创建文件删除文件。
  3. 通过对目录设置SBIT权限,当使用者在该目录下创建文件或目录时,仅自己及root有权利删除该文件。

细部权限

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的
owner,group,others, read,write,execute 权限之外的细部权限设定

主要可以针对几个项目:

使用者 (user):可以针对使用者来设定权限;
群组 (group):针对群组为对象来设定其权限;
默认属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限

setfacl

setfacl:设定某个目录/文件的 ACL 规范。
格式:setfacl [-bkRd] [{-m|-x} acl 参数] 目标文件名

选项或参数:
-m :设定后续的 acl 参数给档案使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 设定参数;
-R :递归设定 acl;
-d :设定预设acl 参数的意思!只对目录有效,在该目录新建的数据会引
用此默认值

getfacl

getfacl:查看某个目录/文件的 ACL 设置。
格式:getfacl 目标文件名

文件查找与处理

文件查询

which、 whereis、locate、find、grep

which

which [选项] 文件
用来查找可执行文件

whereis

whereis [选项] 文件
查找特定文件名文件

find

find:查找文件绝对路径
n find [路径] [选项] [-print] [ -exec command ] {} ;

参数 描述
路径 find命令所查找的范围。例如用.来表示当前目录,用/来表示系统根目录。
选项 -name:查找文件名
-type:查找文件类型 d: 目录文件 f:普通文件 d:块设备文件 c:字符设备文件
-exec find命令对匹配的文件执行该参数所给出的shell命令。
-exec command {} ;
将查到的文件执行command操作,注意{} 和 ;之间有空格

grep

查找关键词,使用正则表达式搜索关键词,并显示匹配的行。

语法:grep 关键

支持正则表达式

wc

wc:统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
语法:wc [选项] 文件..

选项 说明
-c 统计字节数
-l 统计行数
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
--help 显示帮助信息
--version 显示版本信息

sort

sort:对指定文件进行排序并将结果写到标准输出。
n 语法: sort [选项]... [文件]...

常用选项 说 明
-n,--number-sort 按字符串数值排序,与-g区别为不转为浮点数
-g,--general-number-sort 按通用数值排序,支持科学计数法
-f,--ignore-case 忽略大小写,默认大小写字母不同
-k,--key=POS1[,POS2] 排序从POS1开始,若指定POS2,则POS2结束,否则以pos1排序
-t,--field-separator=SEP 指定列的分割符
-r,--reverse 降序排序,默认为升序
-h,--human-numeric-sort 使用易读性数字(例如: 2K 1G) -u,--unique 去除重复的行
-o,--output=FILE 将输出写入文件

文件打包

两个概念:

打包:是指将一大堆文件或目录变成一个总的文件. ü 压缩:则是将一个大的文件通过一些压缩算法变成一个小文件。

linux下最常用的打包程序就是tar

① 使用tar程序打出来的包我们常称为tar包;
② tar包文件的命令通常都是以.tar结尾的;
③ 生成tar包后,就可以用其它的程序来进行压缩。

Linux系统下的压缩、解压缩工具很多,常见的有compress、gzip、bzip2、zip等

tar命令的使用

压缩

tar -zcf hello.tar.gz hello

tar -jcf hello.tar.bz2 hello

解压

tar -zxf hello.tar.gz

tar -jxf hello.tar.bz2

常用选项 说 明
-c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
-x 从档案文件中释放文件。
-r 把要存档的文件追加到档案文件的未尾。
-f 使用档案文件或设备,这个选项通常是必选的。
-v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
-z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩
-j 用bzip2来压缩/解压缩文件

软件包管理

RPM

为“RPM”软件包开发的包管理系统。
适用于“银河Kylin服务器”、“CentOS”、“Fedora”等。

RPM包命名规则

<软件包名称><版本>-<修订号><平台>.rpm

例如 nano_2.5.3-2kord_arm64.rpm

软件包名称: nano
版本: 2.5.3
修订号: 2kord
平台: arm64

命令行包管理

• rpm工具:主要是对本地的软件包进行管理,不解决依赖关系
• yum工具:rpm的智能化前端,能够自动处理依赖关系问题

yum工具安装、卸载、更新升级软件,实际上底层是调用RPM来完成的

查询RPM包

格式:# rpm –q <包名>

-a: 查询所有已安装的软件包。
-f <文件名>: 会查询拥有 <文件名> 的软件包。当指定文件时,必须指定
文件的完整路径(如 /usr/bin/ls)。
-p <包名>: 查询指定的软件包
-q命令也有丰富的选项来指明执行查询操作时将显示什么信息:
-i 显示包的名称、描述、版本号、发行号、大小、编译时间、安装时间和
提供商等信息
-l 显示包中所有文件的列表
-s 显示包中所有文件的状态
-d 显示包中所有的文档文件
-c 显示包中所有的配置文件

校验软件包

格式:

校验整个系统的rpm套件

#rpm -Va

校验单个rpm包
#rpm -V <包名>

验证指定的包文件

# rpm -Vp <包文件名>

• 验证包含指定文件的软件包

# rpm -Vf <文件名>

YUM

访问YUM仓库

配置文件:/etc/yum.repos.d/*.repo

查询软件包

yum list [软件名]...

yum info [软件名]...

yum search <关键词>

查询软件包组

yum grouplist [包组名]...

yum groupinfo <包组名>..

安装软件

• yum install [软件名]
• yum groupinstall <包组名>

升级软件

• yum update
• yum groupupdate

卸载软件

• yum remove <软件名>... • yum groupremove <包组名>..

输入输出重定向

输出重定向

把命令(或可执行程序)的标准输出重新定向到指定文档中。即该命令的输出不显示在屏幕上,而是写入到指定文档,注意:是以覆盖方式写入的。

覆盖

# ls > directory.out
# cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/

追加

# ls *.doc>>directory.out
# cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/
ch1.doc ch2.doc ch3.doc

输入重定向

把命令或可执行程序的标准输入重定向到指定的文件或字符串

# wc /etc/passwd
20 23 726 /etc/passwd
# wc < /etc/passwd
20 23 726

系统定时任务

at、Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个定时任务服务就相当于我们平时早起使用的闹钟一样,一次性的或是按周期循环。

at定时任务

n 指定一个时间执行一个任务,只能执行一次
n 创建at任务方式有两种:

从文件输入
从控制台输入

设置定时

[root@kylin-vm ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl + D 组合键来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2021

----------------------------

[root@kylin-vm ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2021

查看任务

如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令

[root@kylin-vm ~]# at -l
Job 3 at Mon Apr 27 23:30:00 202

删除任务

[root@kylin-vm ~]# atrm 3
[root@kylin-vm ~]# at -l

at指定时间的方法:

1)能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00

2)能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。

3)能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm

4)能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009- 03-1

5)能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm +3 days

6)能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

周期性任务管理-crontab

创建crontab任务方式有两种:配置文件/etc/crontab、crontab命令

周期最大值为0,最小值为分钟

crontab命令详解

crontab命令详解

格式: crontab [-u user] file

crontab [ -u user ] [ -i ] { -e | -l | -r }

-u user:用于设定某个用户的crontab服务;

file: file为命令文件名,表示将file作为crontab的任务列表文件并载入crontab;

-e:编辑某个用户的crontab文件内容,如不指定用户则表示当前用户;

-l:显示某个用户的crontab文件内容,如不指定用户则表示当前用户;

-r:从/var/spool/cron目录中删除某个用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

案例

每天上午8-11点的第3和15分钟执行command:

3,15 8-11 * * * command

每隔2天的上午8-11点的第3和15分钟执行command:

3,15 8-11 */2 * * command

每一小时重启ssh

1 * * * systemctl restart sshd

每周六、周日的1:10重启ssh

10 1 * * 6,0 systemctl restart sshd

每天18 : 00至23 : 00之间每隔30分钟重启ssh

0,30 18-23 * * * systemctl restart sshd

每天凌晨2点执行备份系统日志文件

0 2 * * * /bin/bash /data/logbak.sh

进程和服务

交互进程

由shell启动的进程,它既可以在前台运行,也可以在后台运行。交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行。

批处理进程

与windows原来的批处理很类似,是一个进程序列。该进程负责按照顺序启动其进程。

守护进程

是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,直到系统关闭时才停止运行。而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务

查看进程

kylin@kylin-1:~$ps aux
USER PID%CPU%MEM VSZ RSS TTY STAT START TIME COMM

选项 说明
USER 说明该程序是属于哪个用户的
PID 该程序的代号
%CPU 代表该程序使用了多少CPU资源
%MEM 代表该程序使用了多少的RAM
VSZ,RSS 占去的ram的大小(bytes)
TTY 是否为登入者执行的程序?若为tty1-tty6则为本机登入者,若为pts/??则为远程
登入者执行的程序;
STAT 该程序的状态,(R)为可执行的,(S)为该程序正在睡眠中,就是没有执行了,(T)
正在侦测或是停止了,(Z)僵尸程序,就是zombie死掉的程序。
START 该程序开始的日期;
TIME 该程序跑了多久时间;
COMMAND 该程序的内容。

进程优先级

动态优先级,越小越早被执行

指令

nice命令就是设置一个要执行command进程的nice值。

nice[-n number]command
-n:就是后面的number数值

renice命令就是设置一个已经在运行的进程的nice值

renice [number] PI

例3:将某个将要执行的程序nice值减3。
	kylin@kylin-1:~$nice -n -3 firefox
	nice:无法设置优先级:权限不够
公共的 模板 视频 图片 文档 下载 音乐 桌面
	kylin@kylin-1:~$sudo nice -n -3 firefox (root权限才可以降低nice值)
[sudo]kylin的密码:
	kylin@kylin-1:~$top

信号管理

列出可用信号

• kylin@kylin-1:~$kill -l
1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP
………………….

常用信号

SIGHUP 1---对控制进程或终端进行挂起检测(hangup detection)。
SIGINT 2---当按下CTRL+C时发送该信号。
SIGKILL 9---用于强行杀死进程。
SIGTERM 15---默认用于终止进程。
SIGTSTP 20---当按下Ctrl+Z时发送该信号

中止进程

kill [-s 信号名称] pid [pid2]…

例5:终止一个或多个进程。
查看vsftpd和ssh进程的PID
    kylin@kylin-1:~$ps aux|grep vsftpd
    root 11844 0.0 0.1 26092 2380?Ss 17:10 0:00/usr/sbin/vsftpd/etc/vsftpd.conf
    kylin 11867 0.0 0.0 20888 1092 pts/0 S+17:10 0:00 grep--color=auto vsftpd

    kylin@kylin-1:~$ps aux|grep sshd
    root 11794 0.0 0.2 69624 5600?Ss 17:08 0:00/usr/sbin/sshd-D
    kylin 11869 0.0 0.0 20888 1032 pts/0 S+17:10 0:00 grep--color=auto sshd

然后杀死这两个进程
	kylin@kylin-1:~$sudo kill 11844 1179
posted @ 2023-10-26 15:50  minnersun  阅读(238)  评论(0编辑  收藏  举报