diff --git "a/docs/study/back/API\347\275\221\345\205\263/APISIX.md" "b/docs/study/back/API\347\275\221\345\205\263/APISIX.md"
index a6e70d0d1..ef5fa6baa 100644
--- "a/docs/study/back/API\347\275\221\345\205\263/APISIX.md"
+++ "b/docs/study/back/API\347\275\221\345\205\263/APISIX.md"
@@ -268,7 +268,41 @@ port: 9091                            # Set the port.
 curl -i http://10.0.101.150:9091/apisix/prometheus/metrics
 ```
 
+### 如何查看apisix的版本
 
+```shell
+cat /opt/ccsp/apisix/apisix/core/version.lua
+/opt/ccsp/apisix/deps/bin/apisix version
+```
+
+### 四种部署模式
+
+"traditional", "control_plane", "data_plane", "standalone"
+
+- 传统模式
+- 控制模式,管理接口
+- 数据模式,业务接口
+- 单机模式
+
+### 内存排除
+
+```shell
+先查到worker进程内存信息
+ps -ef|grep `ps -ef|grep /bin/openresty |grep apisix|grep -v grep|awk '{print $2}'`|grep worker|awk '{ system("ps -aux| grep " $2) }'|grep -v grep
+
+再查找各worker进程的内存分配情况,找到异常的内存地址块,记录首地址StartAddress
+pmap -XX {PID}
+
+再根据地址块首地址找到地址块的首尾地址:StartAddress-EndAddress
+cat /proc/{PID}/maps
+
+通过gdb抓取该地址块的内存快照
+gdb attach {PID}
+(gdb) dump memory /root/37.211_72508c9b2000-72508e933000_20250105145100.dump 0x首地址 0x尾地址
+
+查看快照内容
+strings -n 12 37.211_72508c9b2000-72508e933000_20250105145100.dump
+```
 
 
 
diff --git a/docs/study/db/NoSQL/Etcd.md b/docs/study/db/NoSQL/Etcd.md
index 5ad13108a..d9082d056 100644
--- a/docs/study/db/NoSQL/Etcd.md
+++ b/docs/study/db/NoSQL/Etcd.md
@@ -45,6 +45,10 @@ etcdctl is a command line client for etcd.
 ./etcdctl get /apisix/routes/488415811682173648
 # 更新指定key的value
 ./etcdctl put /mykey "my new value" --if-exists
+# 如果配置了tls需要增加参数
+--insecure-skip-tls-verify=true --insecure-transport=false
+# 全局监控数据更新
+./etcdctl watch --prefix / --insecure-skip-tls-verify=true --insecure-transport=false -w simple
 ```
 
 #### 集群维护相关命令
diff --git a/docs/study/db/SQL/OpenGauss.md b/docs/study/db/SQL/OpenGauss.md
index 41f477f11..f17fd351e 100644
--- a/docs/study/db/SQL/OpenGauss.md
+++ b/docs/study/db/SQL/OpenGauss.md
@@ -2,6 +2,10 @@
 
 官网 https://opengauss.org/zh/
 
+文档 https://docs.opengauss.org/zh/
+
+集群方案 https://docs.opengauss.org/zh/docs/5.0.0/docs/DatabaseAdministrationGuide/openGauss%E5%B8%B8%E8%A7%81%E4%B8%BB%E5%A4%87%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88%E7%AE%80%E4%BB%8B.html
+
 对标的是PostgreSQL
 
 ### 常用的工具
@@ -23,6 +27,8 @@
   - gs_ctl restart -D DATADIR 重启
   - gs_ctl status -D DATADIR 状态检查
   - gs_ctl reload -D DATADIR 重新加载配置文件,而无需重启
+  - gs_ctl query -D DATADIR 查询节点信息
+  - gs_ctl switchover -D DATADIR 在备节点执行,备节点会切换到主节点
   - cat postgresql.conf|grep -v '^\s*#'|grep -v "^$"  查看配置文件去掉注释行
 - 物理备份 gs_basebackup
 - 逻辑备份 gs_dump gs_dumpall,没有增量备份
@@ -93,3 +99,34 @@ kernel.sem = 50100 128256000 50100 2560
 sysctl -p 生效
 #重启数据库即可
 ```
+
+### rdtscp指令集问题
+
+OpenEluer确保安装rdtscp指令集,否则无法安装OpenGauss数据库
+
+```shell
+# 如何查看当前系统是否执行rdtscp
+cat /boot/config-$(uname -r) | grep TSC
+cat /boot/config-$(uname -r) | grep PERF_EVENT
+```
+
+### 商业发行版
+
+https://www.mogdb.io/  https://enmotech.com/
+
+MogDB是云和恩墨基于openGauss开源数据库进行完善增强的企业发行版。它围绕高性能、高可用、全密态、自动化运维、多数据库兼容等企业需求,应对企业用户需求新一代数据库的应用场景。其核心价值是高安全、高性能、高兼容、易运维和全天候的企业支持。
+
+https://www.vastdata.com.cn/ 海量数据
+
+Vastbase G100 基于openGauss内核的企业级关系型数据库
+
+### shell通过gsql查询
+
+```shell
+# 
+echo -e "\pset format unaligned\nSHOW ALL;" > show_all.sql
+# 通过此种方式查询出来的数据的格式很好看的
+gsql -p 5432 -U sansec -W passwordxxx -f show_all.sql
+```
+
+
diff --git "a/docs/study/db/\347\273\274\345\220\210.md" "b/docs/study/db/\347\273\274\345\220\210.md"
index 19675e5a7..ae4a9f549 100644
--- "a/docs/study/db/\347\273\274\345\220\210.md"
+++ "b/docs/study/db/\347\273\274\345\220\210.md"
@@ -1,37 +1,52 @@
----
-sidebar_position: 2
----
-### 软件系统根据存储结构的分类
-
-关于NoSQL,看过一张图,挺形象:“1970,We have no SQL”->“1980,Know SQL”->“2000,NoSQL”->“2005,Not only SQL”->“2015,No,SQL”。目前,一些新型数据库,同时具备了NoSQL的扩展性和关系型数据库的很多特性。 
-
-关系型和NoSQL数据库的选型。考虑几个指标,数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。根据这些指标,软件系统可分成几类。 
-1. 管理型系统,如运营类系统,首选关系型。 
-2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型。 
-3. 日志型系统,原始数据选列式,日志搜索选倒排索引。 
-4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引。 
-5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库。 
-6. 离线计算,如大量数据分析,首选列式,关系型也可以。 
-7. 实时计算,如实时监控,可以选时序数据库,或列式数据库。
-
-### NOSQL出现的历史原因
-
-关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。
-
-- 关系数据库存储的是行记录,无法存储数据结构
-   - 以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
-- 关系数据库的 schema 扩展很不方便
-   - 关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。
-- 关系数据库在大数据场景下 I/O 较高
-   - 如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
-- 关系数据库的全文搜索功能比较弱
-   - 关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。
-
-针对上述问题,分别诞生了不同的 NoSQL 解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL 方案带来的优势,本质上是牺牲 ACID 中的某个或者某几个特性,因此我们不能盲目地迷信 NoSQL 是银弹,而应该将 NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。
-
-常见的 NoSQL 方案分为 4 类。
-
-- K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
-- 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
-- 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
-- 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。
+---
+sidebar_position: 2
+---
+### 软件系统根据存储结构的分类
+
+关于NoSQL,看过一张图,挺形象:“1970,We have no SQL”->“1980,Know SQL”->“2000,NoSQL”->“2005,Not only SQL”->“2015,No,SQL”。目前,一些新型数据库,同时具备了NoSQL的扩展性和关系型数据库的很多特性。 
+
+关系型和NoSQL数据库的选型。考虑几个指标,数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。根据这些指标,软件系统可分成几类。 
+1. 管理型系统,如运营类系统,首选关系型。 
+2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型。 
+3. 日志型系统,原始数据选列式,日志搜索选倒排索引。 
+4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引。 
+5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库。 
+6. 离线计算,如大量数据分析,首选列式,关系型也可以。 
+7. 实时计算,如实时监控,可以选时序数据库,或列式数据库。
+
+### NOSQL出现的历史原因
+
+关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。
+
+- 关系数据库存储的是行记录,无法存储数据结构
+   - 以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
+- 关系数据库的 schema 扩展很不方便
+   - 关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。
+- 关系数据库在大数据场景下 I/O 较高
+   - 如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
+- 关系数据库的全文搜索功能比较弱
+   - 关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。
+
+针对上述问题,分别诞生了不同的 NoSQL 解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL 方案带来的优势,本质上是牺牲 ACID 中的某个或者某几个特性,因此我们不能盲目地迷信 NoSQL 是银弹,而应该将 NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。
+
+常见的 NoSQL 方案分为 4 类。
+
+- K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
+- 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
+- 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
+- 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。
+
+### PRO RTO
+
+RPO(Recovery Point Objective)定义
+
+RPO 是业务连续性和灾难恢复领域的一个关键指标,它代表恢复点目标。具体而言,RPO 是指企业在发生灾难或故障后,数据可以恢复到的时间点。例如,如果 RPO 是 1 小时,那么在灾难发生后,企业的数据最多丢失 1 小时内的数据更新。
+
+RPO = 0 意味着在任何故障情况下,数据都不能有丢失。这要求数据必须实时或接近实时地进行备份或复制,以确保在发生故障时能够完整地恢复到故障发生前的状态。例如,在金融交易系统中,为了保证交易数据的完整性和准确性,往往要求 RPO = 0,因为任何一笔交易数据的丢失都可能导致严重的财务问题。
+
+在存储系统中,同步复制技术会在主存储设备接收到写入请求并完成写入操作后,等待备份存储设备也完成相同数据的写入,才会向应用程序返回写入成功的信号。这样可以保证主备存储的数据在任何时刻都是完全一致的。
+
+RTO(Recovery Time Objective)定义 
+
+RTO 是业务连续性和灾难恢复领域中的一个重要指标,代表恢复时间目标。它是指在发生灾难或故障后,信息系统或业务流程从停止运行到恢复运行所允许的最长时间。例如,若企业规定某关键业务系统的 RTO 为 4 小时,这意味着在该系统出现故障后,必须在 4 小时内恢复其运行,以将业务中断的影响控制在可接受的范围内。
+
diff --git "a/docs/study/devops/Linux\350\277\220\347\273\264-GRUB.md" "b/docs/study/devops/Linux\350\277\220\347\273\264-GRUB.md"
index 11dd183fa..99f5b94ef 100644
--- "a/docs/study/devops/Linux\350\277\220\347\273\264-GRUB.md"
+++ "b/docs/study/devops/Linux\350\277\220\347\273\264-GRUB.md"
@@ -6,4 +6,11 @@
 
 可以设置内核参数
 
-如果Docker info返回WARNING: No swap limit support 可以通过此设置解决
\ No newline at end of file
+如果Docker info返回WARNING: No swap limit support 可以通过此设置解决
+
+```shell
+# 查询系统是否启用了swap memory
+/sys/fs/cgroup/memory/memory.swappiness
+# 不一定有 不准 主要还得看上面的
+cat /proc/cmdline
+```
\ No newline at end of file
diff --git "a/docs/study/devops/Linux\350\277\220\347\273\264-systemmd.md" "b/docs/study/devops/Linux\350\277\220\347\273\264-systemmd.md"
new file mode 100644
index 000000000..fa21a89fe
--- /dev/null
+++ "b/docs/study/devops/Linux\350\277\220\347\273\264-systemmd.md"
@@ -0,0 +1,38 @@
+
+
+### 1. 概述
+systemd是一个Linux操作系统下的系统和服务管理器,它被广泛应用在众多现代Linux发行版中,用来替代传统的SysV init系统,承担着启动、停止、管理系统服务以及协调各系统资源等重要任务。
+
+### 2. 主要功能及特点
+
+#### 并行启动
+与传统的SysV init按顺序依次启动服务不同,systemd能够并行地启动多个系统服务,极大地缩短了系统的启动时间。它可以分析各服务之间的依赖关系,在确保依赖的服务已准备好的前提下,同时启动多个没有依赖关联或者相互不冲突的服务,提高了启动效率。
+
+#### 基于单元(Unit)的管理
+systemd采用单元的概念来管理各种系统资源,常见的单元类型有以下几种:
+- **服务单元(.service)**:用于定义系统服务相关的配置,像启动命令、运行环境、依赖关系等,例如 `httpd.service` 用来配置Apache服务器服务相关的启动及运行要求。
+- **套接字单元(.socket)**:可用来监听特定的网络套接字或者Unix域套接字,当有相应的连接请求时,触发关联的服务启动,比如 `sshd.socket` 可以监听SSH连接请求,进而启动 `sshd` 服务来处理登录等事宜。
+- **设备单元(.device)**:针对系统的硬件设备进行管理,对设备的识别、加载等过程进行配置和控制。
+- **挂载单元(.mount)**:负责管理文件系统的挂载操作,明确指定挂载点、挂载的文件系统类型等挂载相关细节。
+
+#### 统一的命令行工具(systemctl)
+systemd提供了统一的命令行工具 `systemctl` 来操作各类单元,一些常见用法如下:
+- **启动、停止、重启服务**:
+    - 启动服务可以用 `systemctl start [服务名]`,比如 `systemctl start mysqld` 能启动MySQL数据库服务。
+    - 停止服务通过 `systemctl stop [服务名]` 命令实现,例如 `systemctl stop httpd` 会让正在运行的Apache服务器停止运行。
+    - 重启服务则是 `systemctl restart [服务名]`,像 `systemctl restart sshd` 就会重启SSH服务。
+- **查看服务状态**:
+    - 使用 `systemctl status [服务名]`,可以查看某个服务当前是处于运行中、停止还是其他状态,并且会显示服务相关的详细信息,比如最近的启动、停止时间,是否出现错误等情况,例如 `systemctl status nginx` 能查看Nginx服务的状态详情。
+- **设置服务开机启动或禁用开机启动**:
+    - 若想让某个服务在系统开机时自动启动,可执行 `systemctl enable [服务名]`,例如 `systemctl enable docker` 会将Docker服务设置为开机自启。
+    - 反之,要禁用服务开机启动则用 `systemctl disable [服务名]` 命令,像 `systemctl disable postfix` 会让Postfix服务不会在开机时自动启动。
+
+#### 日志管理
+systemd集成了日志功能,通过 `journalctl` 命令可以查看系统和各服务的日志信息。比如 `journalctl -u [服务名]` 可查看特定服务的日志,像 `journalctl -u sshd` 能查看SSH服务相关的日志记录,方便排查服务运行过程中出现的问题。
+
+### 3. 配置文件
+systemd的配置文件通常存放在几个不同的目录下,各有不同用途:
+- **/lib/systemd/system/**:这个目录下存放着系统默认安装的各类单元文件,一般是软件包安装时自带的,不建议直接修改这里的文件,以免在软件包更新时被覆盖。
+- **/etc/systemd/system/**:用于存放用户自定义的单元文件或者对系统默认单元文件进行覆盖修改的配置文件,当系统启动或者执行相关操作时,会优先读取这个目录下对应的单元文件内容,方便管理员根据实际需求对服务等单元进行个性化配置。
+
+总之,systemd在现代Linux系统的运行管理中起着至关重要的作用,掌握它的基本原理、功能和相关操作对于Linux系统的运维等工作十分关键。 
\ No newline at end of file
diff --git "a/docs/study/devops/Linux\350\277\220\347\273\264-\345\270\270\347\224\250.md" "b/docs/study/devops/Linux\350\277\220\347\273\264-\345\270\270\347\224\250.md"
index 977438a71..60ef64209 100644
--- "a/docs/study/devops/Linux\350\277\220\347\273\264-\345\270\270\347\224\250.md"
+++ "b/docs/study/devops/Linux\350\277\220\347\273\264-\345\270\270\347\224\250.md"
@@ -375,6 +375,47 @@ journalctl -x | grep aaa
 tar -cf - ./hadoop-3.3.6 | pigz -p 8 > hadoop-3.3.6.tar.gz
 ```
 
+### shell解析json
+
+下载jq,https://github.com/jqlang/jq/releases
+```shell
+vi data.json
+#输入
+{
+  "name": "John",
+  "age": 30,
+  "city": "New York"
+}
+#
+cat data.json | ./jq-linux-arm64 '.name'
+```
+
+### swap交换分区
+
+```shell
+# 这个文件记录哪些磁盘或文件系统用于交换分区
+cat /etc/fstab
+# 开启交换分区
+swapon -a
+# 关闭交换分区
+swapoff -a
+# 如何查看是否开启swap
+free -h
+swapon -s
+cat /proc/swaps
+```
+
+### history记录
+
+某些系统因为安全需求会关闭history
+
+```shell
+# 
+vim /etc/profile
+# 编辑
+HISTSIZE=0
+HISTFILESIZE=0
+```
 
  - [csdn-ulimit命令详解:如何设置和查看系统资源限制](https://blog.csdn.net/llgde/article/details/133780294)
 
diff --git "a/docs/study/devops/Linux\350\277\220\347\273\264-\347\241\254\347\233\230\346\200\247\350\203\275.md" "b/docs/study/devops/Linux\350\277\220\347\273\264-\347\241\254\347\233\230\346\200\247\350\203\275.md"
index 498aa28d3..80b244fed 100644
--- "a/docs/study/devops/Linux\350\277\220\347\273\264-\347\241\254\347\233\230\346\200\247\350\203\275.md"
+++ "b/docs/study/devops/Linux\350\277\220\347\273\264-\347\241\254\347\233\230\346\200\247\350\203\275.md"
@@ -27,4 +27,13 @@ fio --name=rand-write --filename=/dev/sda --direct=1 --rw=write --bs=4k --size=5
 # 延迟(Latency):
 # 以纳秒(ns)、微秒(μs)或毫秒(ms)为单位,代表每个 I/O 操作从发起请求到完成的时间。例如,平均写入延迟为 100μs,表示每个写入请求平均需要 100 微秒才能完成。较低的延迟表示存储设备能够更快地响应 I/O 请求。
 
+```
+
+### time dd
+
+```shell
+# 测试写入
+time dd if=/dev/zero of=testfile.txt bs=1M count=10000 
+# 测试读取
+time dd if=testfile.txt of=/dev/null bs=1M count=10000 && rm testfile.txt
 ```
\ No newline at end of file
diff --git a/docs/study/devops/ssh.md b/docs/study/devops/ssh.md
index 7ad22f525..562829a16 100644
--- a/docs/study/devops/ssh.md
+++ b/docs/study/devops/ssh.md
@@ -53,4 +53,25 @@ ssh-copy-id -p 10212 username@remote_host
 
 测试免密登录。在本地计算机上执行ssh命令,无需输入密码,例如ssh username@remote_host,如果一切正常,则表示SSH免密登录已成功配置。
 
-此外,在目标服务器上,可能需要配置SSH服务以允许免密登录,这通常涉及编辑/etc/ssh/sshd_config文件,并添加RSAAuthentication和PubkeyAuthentication选项,并重启SSH服务。
\ No newline at end of file
+此外,在目标服务器上,可能需要配置SSH服务以允许免密登录,这通常涉及编辑/etc/ssh/sshd_config文件,并添加RSAAuthentication和PubkeyAuthentication选项,并重启SSH服务。
+
+### ssh远程执行本地的脚本文件
+
+```shell
+# 在脚本中执行会存在问题,报错Pseudo-terminal will not be allocated because stdin is not a terminal.
+# 免密的情况
+ssh -t ccsp@10.20.37.222 bash -s < /opt/xxx.sh [参数1] [参数...]
+# 非免密的情况
+expect -c "
+set timeout 10;
+spawn ssh -p $port -t $user@$ip bash -s < /opt/xxx.sh [参数1] [参数...];
+expect {
+    \"password:\" {send \"$pwd\r\";}
+    \"yes/no\" {send \"yes\r\"; exp_continue;}
+};
+expect \"$\";
+send \"$remote_command\r\";
+expect \"$\";
+send \"exit\r\";
+"
+```
\ No newline at end of file
diff --git "a/docs/study/encryption/\351\235\236\345\257\271\347\247\260\345\212\240\345\257\206\347\256\227\346\263\225\346\200\273\347\273\223.md" "b/docs/study/encryption/\351\235\236\345\257\271\347\247\260\345\212\240\345\257\206\347\256\227\346\263\225\346\200\273\347\273\223.md"
index 783e35563..9c78dffdb 100644
--- "a/docs/study/encryption/\351\235\236\345\257\271\347\247\260\345\212\240\345\257\206\347\256\227\346\263\225\346\200\273\347\273\223.md"
+++ "b/docs/study/encryption/\351\235\236\345\257\271\347\247\260\345\212\240\345\257\206\347\256\227\346\263\225\346\200\273\347\273\223.md"
@@ -14,12 +14,17 @@ RSA 密钥的模长(也称为模数的长度)是指在 RSA 算法中,用
 
 
 
+
 ### 二、ECC(Elliptic Curve Cryptography)
 
 ECC 是基于椭圆曲线数学的一种非对称加密算法。相比于 RSA,ECC 在提供相同安全性的情况下,需要的密钥长度更短,这使得 ECC 在处理速度和存储空间上都比 RSA 更优秀。
 
 ECC 常被用于移动设备、嵌入式系统等资源受限的环境,也被用于 SSL/TLS、IPSec 等网络安全协议。
 
+SM2 是我国自主设计的公钥密码算法,主要用于数字签名、密钥交换和加密等密码学应用场景。它基于椭圆曲线密码体制(ECC),在安全性和性能等方面具有诸多优势。
+
+ECDSA(Elliptic Curve Digital Signature Algorithm)即椭圆曲线数字签名算法,是一种基于椭圆曲线密码学(ECC)的数字签名算法。它用于验证消息的来源和完整性,确保数据在传输过程中的安全性和不可抵赖性。
+
 ### 三、Diffie-Hellman 算法
 
 Diffie-Hellman 算法是一种密钥交换协议,它允许双方在公开通道上生成一个共享的密钥。虽然 Diffie-Hellman 算法本身不是用来加密或签名的,但它在许多非对称加密和数字签名算法中起到了关键作用。
diff --git "a/docs/study/system/shell\347\274\226\347\250\213\346\231\272expect.md" "b/docs/study/system/shell\347\274\226\347\250\213\346\231\272expect.md"
index 87408acce..0546f73cb 100644
--- "a/docs/study/system/shell\347\274\226\347\250\213\346\231\272expect.md"
+++ "b/docs/study/system/shell\347\274\226\347\250\213\346\231\272expect.md"
@@ -1,7 +1,22 @@
-### expect
-
-expect 是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。
-
-这个工具在处理调用其他工具,输入密码之类的交互,非常有用。
-
-- [CSDN-shell 编程之 expect](https://blog.csdn.net/givenchy_yzl/article/details/118079170)
+### expect
+
+expect 是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。
+
+这个工具在处理调用其他工具,输入密码之类的交互,非常有用。
+
+```shell
+expect -c "
+set timeout 10;
+spawn ssh -p $port $user@$ip;
+expect {
+    \"password:\" {send \"$pwd\r\";}
+    \"yes/no\" {send \"yes\r\"; exp_continue;}
+};
+expect \"$\";
+send \"$remote_command\r\";
+expect \"$\";
+send \"exit\r\";
+" >> node${ind}_${ip}.log
+```
+
+- [CSDN-shell 编程之 expect](https://blog.csdn.net/givenchy_yzl/article/details/118079170)