diff --git a/Docker/Docker 部署 MongoDB.md b/Docker/Docker 部署 MongoDB.md
new file mode 100755
index 0000000..2929280
--- /dev/null
+++ b/Docker/Docker 部署 MongoDB.md
@@ -0,0 +1,88 @@
+1.镜像下载
+下载 `MongoDB` 镜像命令:
+
+```
+```
+docker pull mongo
+```
+```
+ 执行 `docker images` 查看镜像,下载成功,如下图:
+
+2.启动 `MongoDB`
+启动 `MongoDB` 命令:
+
+```
+```
+docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:latest
+```
+
+```
+## 命令说明:
+
+```
+```
+ -p 27017:27017 :
+```
+
+```
+## 将容器的
+
+```
+```
+27017
+```
+
+```
+## 端口映射到主机的
+
+```
+```
+27017
+```
+
+```
+## 端口
+
+```
+```
+ -v $PWD/db:/data/db :
+```
+
+```
+## 将主机中当前目录下的**`db`**挂载到容器的
+
+```
+```
+/data/db
+```
+
+```
+**,作为**`mongo`**数据存储目录**``
+启动成功,如下图:
+
+3.测试连接 `MongoDB`
+连接 `MongoDB` 命令:
+
+```
+```
+docker run -it mongo:latest mongo --host 172.17.0.1
+```
+
+```
+## 命令说明:
+
+```
+```
+
+```
+
+```
+## 使用**`mongo`**镜像执行**`mongo` **命令连接到刚启动的容器**`,`**主机**`IP`**为
+
+```
+```
+172.17.0.1
+```
+
+```
+提示信息 `It looks like you are trying to access MongoDB over HTTP on the native driver port.` ,nice,部署 `MongoD` 成功!
\ No newline at end of file
diff --git a/Docker/Docker安装redis.md b/Docker/Docker安装redis.md
new file mode 100755
index 0000000..178f2b9
--- /dev/null
+++ b/Docker/Docker安装redis.md
@@ -0,0 +1,17 @@
+**Docker安装redis**
+**1.首先下载redis镜像:**
+docker pull redis
+**2.然后创建一个文件夹用来存放redis的配置文件、数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)**
+**3.在上面创建的目录下使用命令启动redis容器**
+docker run -d -p 6379:6379 -v $PWD/conf/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name docker-redis docker.io/redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes
+**解释一下上面命令的意义:**
+-d:表示后台运行,不加-d执行上面的命令你就会看到redis启动的日志信息了
+-p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口,而右侧则表示的是mysql容器内的端口
+--name:是我们给redis容器取的名字
+-v:表示挂载路径,$PWD表示当前目录下,冒号左面的表示我们宿主机的挂载目录,也就是我们虚拟机所在的文件路径,冒号右边则表是的是redis容器在容器内部的路径,上面的命令我分别挂载了redis.conf(redis的配置文件),如需使用配置文件的方式启动redis,这里则需要加上,还有redis存放数据所在的目录
+--appendonly yes:表示redis开启持久化策略
+
+作者:GatHub
+链接:https://www.jianshu.com/p/2f95680f21c5
+来源:简书
+著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
\ No newline at end of file
diff --git a/Docker/INDEX_Docker.md b/Docker/INDEX_Docker.md
new file mode 100755
index 0000000..b2771a4
--- /dev/null
+++ b/Docker/INDEX_Docker.md
@@ -0,0 +1,28 @@
+---
+title: Docker 索引
+tags:
+ - 索引
+created: 2026-04-21
+---
+
+# Docker
+
+> 自动生成的索引文件
+
+## 文件列表
+
+| 文件名 | 大小 | 说明 |
+|--------|------|------|
+| [[Docker 部署 MongoDB]] | 1KB | |
+| [[Docker安装redis]] | 1KB | |
+| [[Rancher_Rancher的状态存储在什么地方?]] | 619B | |
+| [[Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent]] | 957B | |
+| [[centos7设置docker开机自启动,并设置容器自动重启]] | 837B | |
+| [[docker rm & docker rmi & docker prune 的差异]] | 196B | |
+| [[docker rm & docker rmi & docker prune 的差异]] | 196B | |
+| [[docker镜像清理]] | 485B | |
+| [[如何批量删除Docker中已经停止的容器]] | 1KB | |
+| [[安装docker-compose]] | 545B | |
+
+---
+*共 10 个文件*
diff --git a/Docker/Rancher_Rancher的状态存储在什么地方?.md b/Docker/Rancher_Rancher的状态存储在什么地方?.md
new file mode 100755
index 0000000..706af2f
--- /dev/null
+++ b/Docker/Rancher_Rancher的状态存储在什么地方?.md
@@ -0,0 +1,3 @@
+==单节点安装==
+==在rancher/rancher容器的内置etcd中,映射与宿主机的====/var/lib/rancher====目录下。==
+ > 来自 <[https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_11-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84l4%E5%B1%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%9C%8D%E5%8A%A1%E5%A4%84%E4%BA%8E-%E6%8C%82%E8%B5%B7-%E7%8A%B6%E6%80%81%EF%BC%9F](https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_11-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84l4%E5%B1%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%9C%8D%E5%8A%A1%E5%A4%84%E4%BA%8E-%E6%8C%82%E8%B5%B7-%E7%8A%B6%E6%80%81%EF%BC%9F)>
\ No newline at end of file
diff --git a/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md b/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md
new file mode 100755
index 0000000..7199afb
--- /dev/null
+++ b/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md
@@ -0,0 +1,7 @@
+==.==
+==在您想要使用单个节点运行Rancher并且能够将相同节点添加到集群的情况下,您必须调整为====rancher/rancher====容器映射的主机端口。==
+==如果一个节点被添加到集群,它将部署使用端口80和443的ingress控制器。这与====rancher/rancher====容器默认映射的端口冲突。==
+==注意不建议在生产中把Rancher/Rancher和Rancher/Rancher-Agent运行在一台主机上,但可用于开发/演示。==
+==要更改主机端口映射,替换====-p 80:80 -p 443:443====为====-p 8080:80 -p 8443:443====:==
+docker run -d --restart=unless-stopped \ -p 8080:80 -p 8443:443 \ -v <主机路径>:/var/lib/rancher/ \ rancher/rancher:stable (或者rancher/rancher:latest)
+ > 来自 <[https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_4-%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85](https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_4-%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85)>
\ No newline at end of file
diff --git a/Docker/centos7设置docker开机自启动,并设置容器自动重启.md b/Docker/centos7设置docker开机自启动,并设置容器自动重启.md
new file mode 100755
index 0000000..a0054b9
--- /dev/null
+++ b/Docker/centos7设置docker开机自启动,并设置容器自动重启.md
@@ -0,0 +1,12 @@
+**1****、设置****docker****开机启动**
+systemctl enable docker
+**2****、设置容器自动重启**
+**1****)、创建容器时设置**
+
+docker run -d --restart=always --name 设置容器名 使用的镜像(上面命令 --name后面两个参数根据实际情况自行修改)
+ --restart具体参数值详细信息: no容器退出时,不重启容器; on-failure 只有在非0状态退出时才重新启动容器; always 无论退出状态是如何,都重启容器;
+
+**2****)、修改已有容器,使用****update**
+docker update --restart=always 容器ID(或者容器名)
+(容器ID或者容器名根据实际情况修改)
+ > 来自 <[https://www.cnblogs.com/763977251-sg/p/11839918.html](https://www.cnblogs.com/763977251-sg/p/11839918.html)>
\ No newline at end of file
diff --git a/实践积累/工作记录/质量管理/问题关联&FMEA 绑定.md b/Docker/docker rm & docker rmi & docker prune 的差异.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/问题关联&FMEA 绑定.md
rename to Docker/docker rm & docker rmi & docker prune 的差异.md
diff --git a/实践积累/工作记录/质量管理/问题关联&FMEA 绑定.md b/Docker/docker rm & docker rmi & docker prune 的差异.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/问题关联&FMEA 绑定.md
rename to Docker/docker rm & docker rmi & docker prune 的差异.md
diff --git a/Docker/docker镜像清理.md b/Docker/docker镜像清理.md
new file mode 100755
index 0000000..8983c6f
--- /dev/null
+++ b/Docker/docker镜像清理.md
@@ -0,0 +1,2 @@
+1. **大量****镜像通过命令 docker image prune -f 清理。**
+2. **通过命令 docker images | awk 'NR!=1{print $1":"$2}' | xargs docker rmi 可以批量清除无用的镜像,且不会影响使用中的镜像和基础镜像,满足笔者的需求。** > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)> > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)>
\ No newline at end of file
diff --git a/Docker/如何批量删除Docker中已经停止的容器.md b/Docker/如何批量删除Docker中已经停止的容器.md
new file mode 100755
index 0000000..b446941
--- /dev/null
+++ b/Docker/如何批量删除Docker中已经停止的容器.md
@@ -0,0 +1,28 @@
+**方法一:**
+## #**==显示所有的容器,过滤出****Exited****状态的容器,取出这些容器的****ID**==,
+## sudo docker ps -a|grep Exited|awk '{print $1}'
+## #**==查询所有的容器,过滤出****Exited****状态的容器,列出容器****ID**==,删除这些容器
+## sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`
+xx
+**方法二:**
+## #====删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
+## sudo docker rm $(sudo docker ps -a -q)
+
+**方法三:**
+## #**==根据容器的状态,删除****Exited**==状态的容器
+## sudo docker rm $(sudo docker ps -qf status=exited)
+
+**方法四:**
+## #Docker 1.13**==版本以后,可以使用** **docker containers prune** ==命令,删除孤立的容器。
+## sudo docker container prune
+
+~~#~~~~删除所有镜像~~
+~~sudo docker rmi $(docker images -q)~~
+
+**附图:**
+## 02-====删除所有的容器,所有未运行的容器都被删除,正在运行的无法删除,达到删除不用容器的目的。
+## 03-**==低于****1.13****版本的****Docker**==,可以根据容器的状态来进行删除
+## 04-**==查询所有的容器,过滤出状态为****Exited**==的容器
+## 05-Docker 1.13**==版本以后,开始支持****prune**==命令,快速删除已退出的容器
+
+ > 来自 <[https://blog.csdn.net/jiangeeq/article/details/79499324](https://blog.csdn.net/jiangeeq/article/details/79499324)>
\ No newline at end of file
diff --git a/Docker/安装docker-compose.md b/Docker/安装docker-compose.md
new file mode 100755
index 0000000..8c4fdeb
--- /dev/null
+++ b/Docker/安装docker-compose.md
@@ -0,0 +1,4 @@
+## INSTALL AS A CONTAINER
+## Compose can also be run inside a container, from a small bash script wrapper. To install compose as a container run this command:
+sudo curl -L --fail [https://github.com/docker/compose/releases/download/1.25.4/run.sh](https://github.com/docker/compose/releases/download/1.25.4/run.sh) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
+ > 来自 <[https://docs.docker.com/compose/install/#alternative-install-options](https://docs.docker.com/compose/install/#alternative-install-options)>
\ No newline at end of file
diff --git a/实践积累/数据库/CAP定理(CAP theorem).md b/实践积累/数据库/CAP定理(CAP theorem).md
new file mode 100755
index 0000000..280b28b
--- /dev/null
+++ b/实践积累/数据库/CAP定理(CAP theorem).md
@@ -0,0 +1,15 @@
+==在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:==
+
+- **一致性(Consistency)** ==(所有节点在同一时间具有相同的数据)==
+- **可用性(Availability)** ==(保证每个请求不管成功或者失败都有响应)==
+- **分隔容忍(Partition tolerance)** ==(系统中任意信息的丢失或失败不会影响系统的继续运作)==
+
+==CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。==
+==因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:==
+
+- ==CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。==
+- ==CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。==
+- ==AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。==
+
+ > 来自 <[http://www.runoob.com/mongodb/nosql.html](http://www.runoob.com/mongodb/nosql.html)>
+ > 来自 <[http://www.runoob.com/mongodb/nosql.html](http://www.runoob.com/mongodb/nosql.html)>
\ No newline at end of file
diff --git a/实践积累/数据库/Cpu 占用过高.md b/实践积累/数据库/Cpu 占用过高.md
new file mode 100755
index 0000000..db9e315
--- /dev/null
+++ b/实践积累/数据库/Cpu 占用过高.md
@@ -0,0 +1,15 @@
+```sql
+SELECT TOP 10
+```
+total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
+execution_count,
+(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
+(CASE WHEN statement_end_offset = -1
+THEN LEN(CONVERT(nvarchar(max), text)) * 2
+ELSE statement_end_offset
+```sql
+END - statement_start_offset)/2)
+FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
+FROM sys.dm_exec_query_stats
+```
+ORDER BY [avg_cpu_cost] DESC
\ No newline at end of file
diff --git a/实践积累/数据库/HiMonitor1.0 升级到1.3脚本注意事项.md b/实践积累/数据库/HiMonitor1.0 升级到1.3脚本注意事项.md
new file mode 100755
index 0000000..f7d78bb
--- /dev/null
+++ b/实践积累/数据库/HiMonitor1.0 升级到1.3脚本注意事项.md
@@ -0,0 +1,132 @@
+DeviceInfo 表需要新增 [HeightDeviation]列
+
+执行脚本,以及修改对应的ProjectID
+其他的
+
+```sql
+USE [HiMonitorDB]
+GO
+```
+/****** Object: Table [dbo].[DynamicCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+```sql
+CREATE TABLE [dbo].[DynamicCalculationConfig](
+```
+[ID] [int] IDENTITY(1,1) NOT NULL,
+[IsUse] [int] NULL,
+[SolveMode] [int] NULL,
+[RobustMode] [int] NULL,
+[RatioThrdDYN] [float] NULL,
+[SolvingStrategy] [int] NULL,
+[RelatedProject] [int] NULL,
+[FilterWindowSize] [float] NULL,
+[SolveStoreInterval] [float] NULL,
+CONSTRAINT [PK_DynamicCalculationConfig] PRIMARY KEY CLUSTERED
+(
+[ID] ASC
+)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+/****** Object: Table [dbo].[RoutineConfig] Script Date: 2018/7/5 15:04:35 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+SET ANSI_PADDING ON
+GO
+```sql
+CREATE TABLE [dbo].[RoutineConfig](
+```
+[ID] [int] IDENTITY(1,1) NOT NULL,
+[RelatedProject] [int] NULL,
+[ObsType] [int] NULL,
+[ObsFreq] [int] NULL,
+[Intervals] [float] NULL,
+[EleCutOff] [float] NULL,
+[ExcludeSats] [varchar](300) NULL,
+[UsedSys] [varchar](300) NULL,
+[IsSaveRawData] [int] NULL,
+[SaveRawDataType] [int] NULL,
+[SaveDataInterval] [int] NULL,
+CONSTRAINT [PK_RoutineConfig] PRIMARY KEY CLUSTERED
+(
+[ID] ASC
+)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+SET ANSI_PADDING OFF
+GO
+/****** Object: Table [dbo].[RTKCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+```sql
+CREATE TABLE [dbo].[RTKCalculationConfig](
+```
+[ID] [int] IDENTITY(1,1) NOT NULL,
+[IsUse] [int] NULL,
+[MaxHorRTK] [float] NULL,
+[MaxVerRTK] [float] NULL,
+[RatioThrdRTK] [float] NULL,
+[DeforMode] [int] NULL,
+[SolvingStrategy] [int] NULL,
+[RelatedProject] [int] NULL,
+[FilterWindowSize] [float] NULL,
+[SolveStoreInterval] [float] NULL,
+CONSTRAINT [PK_RTKCalculationConfig] PRIMARY KEY CLUSTERED
+(
+[ID] ASC
+)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+/****** Object: Table [dbo].[StaticeCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+```sql
+CREATE TABLE [dbo].[StaticeCalculationConfig](
+```
+[ID] [int] IDENTITY(1,1) NOT NULL,
+[IsUse] [int] NULL,
+[MaxHorSTC] [float] NULL,
+[MaxVerSTC] [float] NULL,
+[RatioThrdSTC] [float] NULL,
+[SolvingStrategy] [int] NULL,
+[SessLengthSTC] [int] NULL,
+[CalcFreqSTC] [int] NULL,
+[RelatedProject] [int] NULL,
+CONSTRAINT [PK_StaticeMonitorConfig] PRIMARY KEY CLUSTERED
+(
+[ID] ASC
+)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+SET IDENTITY_INSERT [dbo].[DynamicCalculationConfig] ON
+
+```sql
+INSERT [dbo].[DynamicCalculationConfig] ([ID], [IsUse], [SolveMode], [RobustMode], [RatioThrdDYN], [SolvingStrategy], [RelatedProject], [FilterWindowSize], [SolveStoreInterval]) VALUES (1, 0, 0, 0, 3, NULL, 2, 10, 30)
+```
+SET IDENTITY_INSERT [dbo].[DynamicCalculationConfig] OFF
+SET IDENTITY_INSERT [dbo].[RoutineConfig] ON
+
+```sql
+INSERT [dbo].[RoutineConfig] ([ID], [RelatedProject], [ObsType], [ObsFreq], [Intervals], [EleCutOff], [ExcludeSats], [UsedSys], [IsSaveRawData], [SaveRawDataType], [SaveDataInterval]) VALUES (1, 2, 0, 0, 15, 12, NULL, N'0&1&2', 0, 0, 24)
+```
+SET IDENTITY_INSERT [dbo].[RoutineConfig] OFF
+SET IDENTITY_INSERT [dbo].[RTKCalculationConfig] ON
+
+```sql
+INSERT [dbo].[RTKCalculationConfig] ([ID], [IsUse], [MaxHorRTK], [MaxVerRTK], [RatioThrdRTK], [DeforMode], [SolvingStrategy], [RelatedProject], [FilterWindowSize], [SolveStoreInterval]) VALUES (1, 1, 0.02, 0.04, 2.5, 0, 0, 2, 120, 30)
+```
+SET IDENTITY_INSERT [dbo].[RTKCalculationConfig] OFF
+SET IDENTITY_INSERT [dbo].[StaticeCalculationConfig] ON INSERT [dbo].[StaticeCalculationConfig] ([ID], [IsUse], [MaxHorSTC], [MaxVerSTC], [RatioThrdSTC], [SolvingStrategy], [SessLengthSTC], [CalcFreqSTC], [RelatedProject]) VALUES (5, 0, 0.02, 0.02, 2.5, NULL, 5, 5, 12)
+SET IDENTITY_INSERT [dbo].[StaticeCalculationConfig] OFF
\ No newline at end of file
diff --git a/实践积累/数据库/INDEX_数据库.md b/实践积累/数据库/INDEX_数据库.md
new file mode 100755
index 0000000..b9318b6
--- /dev/null
+++ b/实践积累/数据库/INDEX_数据库.md
@@ -0,0 +1,54 @@
+---
+title: 数据库 索引
+tags:
+ - 索引
+created: 2026-04-21
+---
+
+# 数据库
+
+> 自动生成的索引文件
+
+## 文件列表
+
+| 文件名 | 大小 | 说明 |
+|--------|------|------|
+| [[CAP定理(CAP theorem)]] | 1KB | |
+| [[Cpu 占用过高]] | 420B | |
+| [[HiMonitor1.0 升级到1.3脚本注意事项]] | 4KB | |
+| [[MariaDB_Centos7安装mariadb,支持远程访问]] | 1KB | |
+| [[PostgreSQL_Pg12 安装过程]] | 1KB | |
+| [[PostgreSQL_Postgresql 帐号密码修改方法]] | 267B | |
+| [[PostgreSQL_pg_hba.conf]] | 1KB | |
+| [[PostgreSQL_postgresql删除还有活动连接的数据库]] | 246B | |
+| [[PostgreSQL_systemctl start postgresql-12.service -- 启动服务]] | 223B | |
+| [[SQL SERVER 游标使用]] | 2KB | |
+| [[SQLSERVER 数据库恢复挂起的解决办法]] | 362B | |
+| [[SQLSERVER存储过程基本语法]] | 6KB | |
+| [[三峡数据变形值直接导出]] | 552B | |
+| [[关系型数据库遵循ACID规则]] | 1KB | |
+| [[内蒙古数据FTP推送脚本快速获取]] | 440B | |
+| [[单个HiMonitor 站点数据]] | 873B | |
+| [[去重]] | 229B | |
+| [[合肥董铺水库中间数据]] | 2KB | |
+| [[回补中间一段时间的GNSS数据]] | 1KB | |
+| [[循环批量删除数据库表]] | 814B | |
+| [[循环造固定数据值脚本]] | 744B | |
+| [[循环遍历插数据]] | 591B | |
+| [[批量创建app 表索引]] | 820B | |
+| [[批量删除表]] | 458B | |
+| [[批量删除超前数据脚本]] | 903B | |
+| [[批量删除超前数据脚本(监测云)]] | 1KB | |
+| [[批量增加非聚集索引]] | 1KB | |
+| [[按日分组求均值]] | 221B | |
+| [[新增站点基准信息增加]] | 547B | |
+| [[无日志文件附加数据库失败解决]] | 1KB | |
+| [[松滋 2号店循环造rtk]] | 1KB | |
+| [[模拟一段数据]] | 1KB | |
+| [[解除数据库占用连接]] | 491B | |
+| [[运行中数据库收缩脚本]] | 743B | |
+| [[链接服务器远程查询]] | 1B | |
+| [[附加数据库]] | 105B | |
+
+---
+*共 36 个文件*
diff --git a/实践积累/数据库/MariaDB_Centos7安装mariadb,支持远程访问.md b/实践积累/数据库/MariaDB_Centos7安装mariadb,支持远程访问.md
new file mode 100755
index 0000000..47a9fd8
--- /dev/null
+++ b/实践积累/数据库/MariaDB_Centos7安装mariadb,支持远程访问.md
@@ -0,0 +1,25 @@
+1、安装MariaDB:yum -y install mariadb mariadb-server
+2、设置开机启动:systemctl enable mariadb
+3、启动MariaDB:systemctl start mariadb
+4、初始化配置:mysql_secure_installation
+ 4.1、设置密码,会提示先输入密码
+Enter current password for root (enter for none):<–初次运行直接回车
+Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
+ New password: <– 设置root用户的密码
+ Re-enter new password: <– 再输入一次你设置的密码
+ 4.2、其他配置
+Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
+Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
+Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
+Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
+初始化MariaDB完成,接下来测试登录
+mysql -uroot -p你的密码
+完成。
+==5、设置远程登录:==
+ ==使用mysql -uroot -p密码登录后,执行命令:==
+ ==GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码的明文' WITH GRANT OPTION;==
+ ==FLUSH PRIVILEGES;==
+==6、如果远程访问,并且数据量很大,则需要进行如下配置,否则会出现==**MySQL server has gone away** ==的==
+ ==错误 :==
+ ==set global max_allowed_packet=1024*1024*16;==
+ > 来自 <[https://blog.csdn.net/lianshaohua/article/details/88380898](https://blog.csdn.net/lianshaohua/article/details/88380898)>
\ No newline at end of file
diff --git a/实践积累/数据库/PostgreSQL_Pg12 安装过程.md b/实践积累/数据库/PostgreSQL_Pg12 安装过程.md
new file mode 100755
index 0000000..87161bb
--- /dev/null
+++ b/实践积累/数据库/PostgreSQL_Pg12 安装过程.md
@@ -0,0 +1,18 @@
+1. ==Install the repository RPM:========yum install== ==https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm==
+2. ==Install the client packages:========yum install postgresql12==
+3. ==Optionally install the server packages:========yum install postgresql12-server==
+4. ==Optionally initialize the database and enable automatic start:========/usr/pgsql-12/bin/postgresql-12-setup initdb========systemctl enable postgresql-12========systemctl start postgresql-12== > 来自 <[https://www.postgresql.org/download/linux/redhat/](https://www.postgresql.org/download/linux/redhat/)>
+[Service]
+Type=notify
+
+User=postgres
+Group=postgres
+
+# Note: avoid inserting whitespace in these Environment= lines, or you may
+# break postgresql-setup.
+
+# Location of database directory
+Environment=PGDATA=/var/lib/pgsql/12/data/
+
+初始化之后,数据文件会存在 /var/lib/pgsql/12/data
+ > 来自 <[https://www.postgresql.org/download/linux/redhat/](https://www.postgresql.org/download/linux/redhat/)>
\ No newline at end of file
diff --git a/实践积累/数据库/PostgreSQL_Postgresql 帐号密码修改方法.md b/实践积累/数据库/PostgreSQL_Postgresql 帐号密码修改方法.md
new file mode 100755
index 0000000..d844689
--- /dev/null
+++ b/实践积累/数据库/PostgreSQL_Postgresql 帐号密码修改方法.md
@@ -0,0 +1,4 @@
+==#su postgres== ======-bash-3.2$psql - postgres== ======postgres=#alter user postgres with password 'new password';== ==////====一定要加分号执行========postgres=#\q==
+
+su - postgres
+psql -U postgresalter user postgres with encrypted password '1';
\ No newline at end of file
diff --git a/实践积累/数据库/PostgreSQL_pg_hba.conf.md b/实践积累/数据库/PostgreSQL_pg_hba.conf.md
new file mode 100755
index 0000000..d4309f4
--- /dev/null
+++ b/实践积累/数据库/PostgreSQL_pg_hba.conf.md
@@ -0,0 +1,11 @@
+METHOD指定如何处理客户端的认证。常用的有ident,md5,password,trust,reject
+ident是Linux下PostgreSQL默认的local认证方式,凡是能正确登录服务器的操作系统用户(注:不是数据库用户)就能使用本用户映射的数据库用户不需密码登录数据库。用户映射文件为pg_ident.conf,这个文件记录着与操作系统用户匹配的数据库用户,如果某操作系统用户在本文件中没有映射用户,则默认的映射数据库用户与操作系统用户同名。比如,服务器上有名为user1的操作系统用户,同时数据库上也有同名的数据库用户,user1登录操作系统后可以直接输入psql,以user1数据库用户身份登录数据库且不需密码。很多初学者都会遇到psql -U username登录数据库却出现“username ident 认证失败”的错误,明明数据库用户已经createuser。原因就在于此,使用了ident认证方式,却没有同名的操作系统用户或没有相应的映射用户。解决方案:1、在pg_ident.conf中添加映射用户;2、改变认证方式。
+md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。
+password是以明文密码传送给数据库,建议不要在生产环境中使用。
+trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。
+reject是拒绝认证。
+在文件查找 listen_addresses,他的值说明
+如果希望只能从本地计算机访问PostgreSQL数据库,就将该项设置为'localhost';
+如果希望从局域网访问PostgreSQL数据库,就将该项设置为PostgreSQL数据库的局域网IP地址;
+如果希望从互联网访问PostgreSQL数据库,就将该项设置为PostgreSQL数据库的互联网IP地址;
+如果希望从任何地方都可以访问PostgreSQL数据库,就将该配置项设置为“*”;
\ No newline at end of file
diff --git a/实践积累/数据库/PostgreSQL_postgresql删除还有活动连接的数据库.md b/实践积累/数据库/PostgreSQL_postgresql删除还有活动连接的数据库.md
new file mode 100755
index 0000000..2ec06b6
--- /dev/null
+++ b/实践积累/数据库/PostgreSQL_postgresql删除还有活动连接的数据库.md
@@ -0,0 +1,7 @@
+```sql
+select `pg_terminate_backend(pid)` from `pg_stat_activity` where `datname`='testdb' and `pid`<>`pg_backend_pid();`
+```
+==上面sql表示的是关闭数据库testdb的活动连接,接下来就可以用==
+```sql
+drop database `testdb;`
+```
\ No newline at end of file
diff --git a/实践积累/数据库/PostgreSQL_systemctl start postgresql-12.service -- 启动服务.md b/实践积累/数据库/PostgreSQL_systemctl start postgresql-12.service -- 启动服务.md
new file mode 100755
index 0000000..7aff084
--- /dev/null
+++ b/实践积累/数据库/PostgreSQL_systemctl start postgresql-12.service -- 启动服务.md
@@ -0,0 +1 @@
+systemctl start postgresql-12.service // 启动服务systemctl stop postgresql-12.service // 关闭服务systemctl restart postgresql-12.service // 重启服务systemctl status postgresql-12.service // 查看状态
\ No newline at end of file
diff --git a/实践积累/数据库/SQL SERVER 游标使用.md b/实践积累/数据库/SQL SERVER 游标使用.md
new file mode 100755
index 0000000..15da4bd
--- /dev/null
+++ b/实践积累/数据库/SQL SERVER 游标使用.md
@@ -0,0 +1,72 @@
+我们在处理数据的时候,经常会出现需要循环处理数据的需求,如果我们能用CTE或者其他语句处理的话,没有问题,但有时候往往处理起来比较困难,这时候我们可以选择使用游标处理,选择使用哪种形式,要考虑效率问题,一般游标效率不高,但也有适合使用的场景。
+
+ 游标分为静态游标和动态游标,静态游标的数据是固定的,不会因为数据表的改变而改变;动态游标的数据是随着数据表变化而变化的,游标默认是动态游标,通过关键字STATIC设置,OK,上测试数据:
+
+--测试数据
+```sql
+if not object_id(N'Tempdb..#T') is null
+drop table #T
+Go
+Create table #T([id] int,[name] nvarchar(22))
+Insert #T
+select 1,N'张三' union all
+select 2,N'李四' union all
+select 3,N'王五' union all
+select 4,N'赵六'
+Go
+```
+--测试数据结束
+ 我们先看静态游标的使用方法:
+
+```sql
+DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
+DECLARE cur CURSOR STATIC --声明静态游标
+```
+FOR
+```sql
+SELECT * FROM #T
+OPEN cur --打开游标
+FETCH NEXT FROM cur INTO @id, @name --取数据
+WHILE ( @@fetch_status = 0 ) --判断是否还有数据
+```
+BEGIN
+```sql
+SELECT '数据: ' + RTRIM(@id) + @name
+UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
+FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
+```
+END
+CLOSE cur --关闭游标
+DEALLOCATE cur
+ 结果如下,我们可以看到ID是4的数据没有改变,依然是赵六,而不是UPDATE之后的测试:
+
+ 我们再来看一下,动态游标,去掉STATIC关键字即可:
+
+```sql
+DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
+DECLARE cur CURSOR --去掉STATIC关键字即可
+```
+FOR
+```sql
+SELECT * FROM #T
+OPEN cur --打开游标
+FETCH NEXT FROM cur INTO @id, @name --取数据
+WHILE ( @@fetch_status = 0 ) --判断是否还有数据
+```
+BEGIN
+```sql
+SELECT '数据: ' + RTRIM(@id) + @name
+UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
+FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
+```
+END
+CLOSE cur --关闭游标
+DEALLOCATE cur
+ 我们看结果,可以看到ID为4的数据已经更改为测试:
+
+ 以上是游标的用法,以及动态、静态游标的介绍使用。
+---------------------
+作者:二月十六
+来源:CSDN
+原文:https://blog.csdn.net/sinat_28984567/article/details/79811887
+版权声明:本文为博主原创文章,转载请附上博文链接!
\ No newline at end of file
diff --git a/实践积累/数据库/SQLSERVER 数据库恢复挂起的解决办法.md b/实践积累/数据库/SQLSERVER 数据库恢复挂起的解决办法.md
new file mode 100755
index 0000000..29cfea4
--- /dev/null
+++ b/实践积累/数据库/SQLSERVER 数据库恢复挂起的解决办法.md
@@ -0,0 +1,17 @@
+如果你的数据库还处于挂起状态,请把我下面代码的test改为你的库名,然后执行完,刷新就正常了:
+USE master
+GO
+```sql
+ALTER DATABASE test SET SINGLE_USER
+GO
+ALTER DATABASE test SET EMERGENCY
+GO
+```
+DBCC CHECKDB(test,REPAIR_ALLOW_DATA_LOSS)
+go
+```sql
+ALTER DATABASE test SET ONLINE
+GO
+ALTER DATABASE test SET MULTI_USER
+GO
+```
\ No newline at end of file
diff --git a/实践积累/数据库/SQLSERVER存储过程基本语法.md b/实践积累/数据库/SQLSERVER存储过程基本语法.md
new file mode 100755
index 0000000..f2376ec
--- /dev/null
+++ b/实践积累/数据库/SQLSERVER存储过程基本语法.md
@@ -0,0 +1,311 @@
+一、定义变量
+--简单赋值
+```sql
+declare @a int
+set @a=5
+print @a --使用select语句赋值
+declare @user1 nvarchar(50)
+select @user1='张三'
+print @user1
+declare @user2 nvarchar(50)
+select @user2 = Name from ST_User where ID=1
+print @user2 --使用update语句赋值
+declare @user3 nvarchar(50)
+update ST_User set @user3 = Name where ID=1
+print @user3
+
+```
+二、表、临时表、表变量
+
+--创建临时表1
+```sql
+create table #DU_User1
+```
+(
+[ID] [int] NOT NULL,
+[Oid] [int] NOT NULL,
+[Login] [nvarchar](50) NOT NULL,
+[Rtx] [nvarchar](4) NOT NULL,
+[Name] [nvarchar](5) NOT NULL,
+[Password] [nvarchar](max) NULL,
+[State] [nvarchar](8) NOT NULL
+);
+--向临时表1插入一条记录
+```sql
+insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','临时','321','特殊'); --从ST_User查询数据,填充至新生成的临时表
+select * into #DU_User2 from ST_User where ID<8 --查询并联合两临时表
+select * from #DU_User2 where ID<3 union select * from #DU_User1 --删除两临时表
+drop table #DU_User1
+drop table #DU_User2 --创建临时表
+CREATE TABLE #t
+```
+(
+[ID] [int] NOT NULL,
+[Oid] [int] NOT NULL,
+[Login] [nvarchar](50) NOT NULL,
+[Rtx] [nvarchar](4) NOT NULL,
+[Name] [nvarchar](5) NOT NULL,
+[Password] [nvarchar](max) NULL,
+[State] [nvarchar](8) NOT NULL,
+) --将查询结果集(多条数据)插入临时表
+```sql
+insert into #t select * from ST_User
+```
+--不能这样插入
+--select * into #t from dbo.ST_User --添加一列,为int型自增长子段
+```sql
+alter table #t add [myid] int NOT NULL IDENTITY(1,1)
+```
+--添加一列,默认填充全球唯一标识
+```sql
+alter table #t add [myid1] uniqueidentifier NOT NULL default(newid()) select * from #t
+drop table #t
+```
+--给查询结果集增加自增长列 --无主键时:
+```sql
+select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_User
+select * from #t --有主键时:
+select (select SUM(1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
+```
+--定义表变量
+```sql
+declare @t table
+```
+(
+id int not null,
+msg nvarchar(50) null
+)
+```sql
+insert into @t values(1,'1')
+insert into @t values(2,'2')
+select * from @t
+```
+三、循环
+
+--while循环计算1到100的和
+```sql
+declare @a int
+declare @sum int
+set @a=1
+set @sum=0
+while @a<=100
+```
+begin
+```sql
+set @sum+=@a
+set @a+=1
+```
+end
+print @sum
+四、条件语句
+
+--if,else条件分支
+if(1+1=2)
+begin
+print '对'
+end
+else
+begin
+print '错'
+```sql
+end --when then条件分支
+declare @today int
+declare @week nvarchar(3)
+set @today=3
+set @week=case
+```
+when @today=1 then '星期一'
+when @today=2 then '星期二'
+when @today=3 then '星期三'
+when @today=4 then '星期四'
+when @today=5 then '星期五'
+when @today=6 then '星期六'
+when @today=7 then '星期日'
+else '值错误'
+end
+```sql
+print @week
+
+```
+五、游标
+
+```sql
+declare @ID int
+declare @Oid int
+declare @Login varchar(50) --定义一个游标
+declare user_cur cursor for select ID,Oid,[Login] from ST_User
+```
+--打开游标
+```sql
+open user_cur
+while @@fetch_status=0
+```
+begin
+--读取游标
+```sql
+fetch next from user_cur into @ID,@Oid,@Login
+print @ID
+```
+--print @Login
+end
+close user_cur
+--摧毁游标
+deallocate user_cur
+六、触发器
+
+ 触发器中的临时表:
+
+ Inserted
+ 存放进行insert和update 操作后的数据
+ Deleted
+ 存放进行delete 和update操作前的数据
+
+--创建触发器
+```sql
+Create trigger User_OnUpdate
+```
+On ST_User
+for Update
+As
+```sql
+declare @msg nvarchar(50)
+```
+--@msg记录修改情况
+```sql
+select @msg = N'姓名从“' + Deleted.Name + N'”修改为“' + Inserted.Name + '”' from Inserted,Deleted
+```
+--插入日志表
+```sql
+insert into [LOG](MSG)values(@msg) --删除触发器
+drop trigger User_OnUpdate
+```
+七、存储过程
+
+--创建带output参数的存储过程
+```sql
+CREATE PROCEDURE PR_Sum
+```
+@a int,
+@b int,
+@sum int output
+AS
+BEGIN
+```sql
+set @sum=@a+@b
+END --创建Return返回值存储过程
+CREATE PROCEDURE PR_Sum2
+```
+@a int,
+@b int
+AS
+BEGIN
+Return @a+@b
+```sql
+END --执行存储过程获取output型返回值
+declare @mysum int
+execute PR_Sum 1,2,@mysum output
+print @mysum --执行存储过程获取Return型返回值
+declare @mysum2 int
+execute @mysum2= PR_Sum2 1,2
+print @mysum2
+```
+八、自定义函数
+
+ 函数的分类:
+
+ 1)标量值函数
+
+ 2)表值函数
+
+ a:内联表值函数
+
+ b:多语句表值函数
+
+ 3)系统函数
+
+--新建标量值函数
+```sql
+create function FUNC_Sum1
+```
+(
+@a int,
+@b int
+)
+returns int
+as
+begin
+return @a+@b
+```sql
+end --新建内联表值函数
+create function FUNC_UserTab_1
+```
+(
+@myId int
+)
+returns table
+as
+return (select * from ST_User where ID<@myId) --新建多语句表值函数
+```sql
+create function FUNC_UserTab_2
+```
+(
+@myId int
+)
+returns @t table
+(
+[ID] [int] NOT NULL,
+[Oid] [int] NOT NULL,
+[Login] [nvarchar](50) NOT NULL,
+[Rtx] [nvarchar](4) NOT NULL,
+[Name] [nvarchar](5) NOT NULL,
+[Password] [nvarchar](max) NULL,
+[State] [nvarchar](8) NOT NULL
+)
+as
+begin
+```sql
+insert into @t select * from ST_User where ID<@myId
+```
+return
+```sql
+end --调用表值函数
+select * from dbo.FUNC_UserTab_1(15)
+```
+--调用标量值函数
+```sql
+declare @s int
+set @s=dbo.FUNC_Sum1(100,50)
+print @s --删除标量值函数
+drop function FUNC_Sum1
+```
+谈谈自定义函数与存储过程的区别:
+
+一、自定义函数:
+
+ 1. 可以返回表变量
+
+ 2. 限制颇多,包括
+
+ 不能使用output参数;
+
+ 不能用临时表;
+
+ 函数内部的操作不能影响到外部环境;
+
+ 不能通过select返回结果集;
+
+ 不能update,delete,数据库表;
+
+ 3. 必须return 一个标量值或表变量
+
+ 自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
+
+二、存储过程
+
+ 1. 不能返回表变量
+
+ 2. 限制少,可以执行对数据库表的操作,可以返回数据集
+
+ 3. 可以return一个标量值,也可以省略return
+
+ 存储过程一般用在实现复杂的功能,数据操纵方面。
\ No newline at end of file
diff --git a/实践积累/数据库/三峡数据变形值直接导出.md b/实践积累/数据库/三峡数据变形值直接导出.md
new file mode 100755
index 0000000..2b9e14e
--- /dev/null
+++ b/实践积累/数据库/三峡数据变形值直接导出.md
@@ -0,0 +1,26 @@
+/****** Script for SelectTopNRows command from SSMS ******/
+
+```sql
+declare @bx float
+declare @by float
+declare @bh float
+select @bx=a.BaseX,@by=a.BaseY,@bh=a.BaseH from DataSyncPushConnector.dbo.DataSyncStation a
+join [HiMonitorDB].[dbo].DeviceInfo b
+```
+on a.DeviceName=b.DeviceName
+```sql
+where a.DeviceName='WZ0504'
+
+SELECT [GPSIndex]
+```
+,[aDatetime]
+,[X]
+,[Y]
+,[Height]
+,([X]-@bx)*1000 as dx
+,([Y]-@by)*1000 as dy
+,([Height]-@bh)*1000 as dh
+```sql
+FROM [HiMonitorDB].[dbo].[wz0504_stc] a where aDatetime >'2020-04-1'
+```
+order by aDatetime desc
\ No newline at end of file
diff --git a/实践积累/数据库/关系型数据库遵循ACID规则.md b/实践积累/数据库/关系型数据库遵循ACID规则.md
new file mode 100755
index 0000000..1f48d43
--- /dev/null
+++ b/实践积累/数据库/关系型数据库遵循ACID规则.md
@@ -0,0 +1,14 @@
+**关系型数据库遵循ACID规则**
+==事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:==
+**1、A (Atomicity) 原子性**
+==原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。==
+==比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。==
+**2、C (Consistency) 一致性**
+==一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。==
+==例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。==
+**3、I (Isolation) 独立性**
+==所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。==
+==比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。==
+**4、D (Durability) 持久性**
+==持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。==
+ > 来自 <[http://www.runoob.com/mongodb/nosql.html](http://www.runoob.com/mongodb/nosql.html)>
\ No newline at end of file
diff --git a/实践积累/数据库/内蒙古数据FTP推送脚本快速获取.md b/实践积累/数据库/内蒙古数据FTP推送脚本快速获取.md
new file mode 100755
index 0000000..da6e343
--- /dev/null
+++ b/实践积累/数据库/内蒙古数据FTP推送脚本快速获取.md
@@ -0,0 +1,12 @@
+```sql
+select a.DeviceName,b.ProjectID,a.id as DeviceId,a.MonTypeID,b.StationCode, b.Latitude as B ,b.Longitude as L,c.ConvertXValue as OriginX,c.ConvertYValue as OriginY,c.ConvertZValue as OriginZ from safeMonitorMgr.dbo.Mgr_Device as a
+right join safeMonitorMgr.dbo.station as b
+```
+on a.StationID=b.Id
+```sql
+right join safeMonitorMgr.dbo.HimonitorSyncConfig as c
+```
+on c.DeviceID=a.id
+```sql
+where b.ProjectID =84 or b.ProjectID=85
+```
\ No newline at end of file
diff --git a/实践积累/数据库/单个HiMonitor 站点数据.md b/实践积累/数据库/单个HiMonitor 站点数据.md
new file mode 100755
index 0000000..e17ce59
--- /dev/null
+++ b/实践积累/数据库/单个HiMonitor 站点数据.md
@@ -0,0 +1,26 @@
+```sql
+declare @dt datetime --时间
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+```
+--declare @GPSINDEX1 bigint
+```sql
+declare @adatetime1 datetime
+declare @endDate datetime; --结束时间
+declare @X1 float
+declare @Y1 float
+declare @H1 float
+declare @DX1 float
+declare @DY1 float
+declare @DH1 float
+set @dt = GETDATE();
+
+set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt) SET @DX1 = (rand()*-10 + 10)/4000
+SET @DY1 = (rand()*-10 + 9)/4000
+SET @DH1 =(rand()*-10 + 8)/4000
+SET @X1 = 4877965.53002158+ @DX1
+SET @Y1 = 537751.2022376+ @DY1
+SET @H1 = 888.1181+ @DH1
+SET @adatetime1 = DATEADD(S,@gpsindex/1000,'1970-01-01 00:00:00')
+insert into HiMonitorDb.[dbo].plq_4_STC([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])VALUES(@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1)
+```
\ No newline at end of file
diff --git a/实践积累/数据库/去重.md b/实践积累/数据库/去重.md
new file mode 100755
index 0000000..6be0ac4
--- /dev/null
+++ b/实践积累/数据库/去重.md
@@ -0,0 +1,15 @@
+begin tran
+
+```sql
+select distinct * into #temp from DataSyncStationSX
+delete DataSyncStationSX
+go
+insert DataSyncStationSX select * from #temp Sqlclub
+go
+drop table #temp
+
+select * from DataSyncStationSX
+```
+order by sid
+
+commit
\ No newline at end of file
diff --git a/实践积累/数据库/合肥董铺水库中间数据.md b/实践积累/数据库/合肥董铺水库中间数据.md
new file mode 100755
index 0000000..80e90d3
--- /dev/null
+++ b/实践积累/数据库/合肥董铺水库中间数据.md
@@ -0,0 +1,103 @@
+```sql
+USE [ZHDMTProj]
+GO
+
+```
+/****** Object: StoredProcedure [dbo].[sp_ZHDMTProjProcedure20190615] Script Date: 2019/6/14 14:28:33 ******/
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+
+```sql
+CREATE proc [dbo].[sp_ZHDMTProjProcedure20190615]
+```
+(
+@stationName nvarchar(500),
+@dt datetime,
+@endDate datetime
+)
+as --declare @dt datetime --时间
+```sql
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+declare @count int --计数
+```
+--declare @GPSINDEX1 bigint
+```sql
+declare @adatetime1 datetime
+```
+--declare @endDate datetime; --结束时间
+```sql
+declare @X1 float
+declare @Y1 float
+declare @H1 float
+declare @DX1 float
+declare @DY1 float
+declare @DH1 float
+declare @DX0 float
+declare @DY0 float
+declare @DH0 float
+declare @X0 float
+declare @Y0 float
+declare @H0 float
+declare @SELECT_SQL1 nvarchar(500)
+declare @INSERT_SQL1 nvarchar(500)
+```
+吴 卓山 于 2019-06-14 14:28 修改
+--set @dt = '2018-05-22 09:08:00.000';
+--set @endDate= '2018-12-13 11:19:00.000';
+--select @X1 = X,@Y1 = Y,@H1 = Height,@DX1=dltaX,@DY1=dltaY,@DH1=dltaH from MYB1_RTK where aDatetime = @dt
+
+```sql
+SELECT @X0 =[Sx] , @Y0=[Sy] , @H0 =[Sh] --去station表拿基准
+FROM [ZHDMTProj].[dbo].[station] where sName=@stationName
+
+
+SET @SELECT_SQL1='SELECT top 1 @DX0=dltaX , @DY0=dltaY , @DH0 =dltaH
+FROM [ZHDMTProj].[dbo].'+ @stationName+' order by aDatetime desc';
+EXEC sp_executesql @SELECT_SQL1, N'@DX0 float out,@DY0 float out,@DH0 float out,@stationName nvarchar(500)',@DX0 out,@DY0 out,@DH0 out,@stationName
+
+```
+--求出基准坐标
+--set @X0=@X1-@DX1
+--set @Y0=@Y1-@DY1
+--set @H0=@H1-@DH1
+```sql
+select @X0,@Y0,@H0
+```
+while(@dt < @endDate) begin
+```sql
+set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt)
+SET @DX1 = @DX0+(rand()*-2 + 1.2)
+SET @DY1 =@DY0+ (rand()*-2 +1.2)
+SET @DH1 =@DH0+(rand()*-2 + 1.2)
+SET @X1 = @X0+ @DX1/1000
+SET @Y1 = @Y0+ @DY1/1000
+SET @H1 = @H0+ @DH1/1000
+SET @adatetime1 = DATEADD(S,@gpsindex/1000,'1970-01-01 00:00:00')
+BEGIN TRY SET @INSERT_SQL1=' insert into [ZHDMTProj].[dbo].'+ @stationName+'
+```
+([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])
+VALUES(@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1)'
+
+```sql
+EXEC sp_executesql @INSERT_SQL1,
+```
+N'@gpsindex bigint,@adatetime1 datetime,@X1 float,@Y1 float,@H1 float,@DX1 float,@DY1 float,@DH1 float'
+,@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1
+
+--insert into [ZHDMTProj].[dbo].LY03([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])VALUES(@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1) END TRY
+BEGIN
+CATCH END CATCH
+--****************
+```sql
+set @count = @count + 1
+set @dt = DATEADD(HOUR,1,@dt) --每次递增5min
+```
+end
+
+
+GO
\ No newline at end of file
diff --git a/实践积累/数据库/回补中间一段时间的GNSS数据.md b/实践积累/数据库/回补中间一段时间的GNSS数据.md
new file mode 100755
index 0000000..a6d4f7e
--- /dev/null
+++ b/实践积累/数据库/回补中间一段时间的GNSS数据.md
@@ -0,0 +1,52 @@
+```sql
+declare @dt datetime --时间
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+declare @count int --计数
+```
+--declare @GPSINDEX1 bigint
+```sql
+declare @adatetime1 datetime
+declare @endDate datetime; --结束时间
+declare @X1 float
+declare @Y1 float
+declare @H1 float
+declare @DX1 float
+declare @DY1 float
+declare @DH1 float
+declare @X0 float
+declare @Y0 float
+declare @H0 float
+
+set @dt = '2020-1-17 12:30:00.000';
+set @endDate= '2020-5-18 18:00:00.000';
+select top 1 @X1 = X,@Y1 = Y,@H1 = Height,@DX1=dltaX,@DY1=dltaY,@DH1=dltaH from DC_GB09_STC where aDatetime < @dt order by aDatetime desc
+```
+--求出基准坐标
+```sql
+set @X0=@X1-@DX1
+set @Y0=@Y1-@DY1
+set @H0=@H1-@DH1
+select @X0,@Y0,@H0
+```
+while(@dt < @endDate) begin
+
+```sql
+set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt)
+SET @DX1 = RAND()*8-8/2;
+SET @DY1 = RAND()*8-8/2;
+SET @DH1 = RAND()*10-10/2;
+SET @X1 = @X0+ @DX1/1000
+SET @Y1 = @Y0+ @DY1/1000
+SET @H1 = @H1+ @DH1/1000
+SET @adatetime1 = DATEADD(S,@gpsindex/1000,'1970-01-01 00:00:00')
+BEGIN TRY insert into DC_GB09_STC([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])VALUES(@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1)
+END TRY BEGIN
+```
+CATCH END CATCH
+--****************
+```sql
+set @count = @count + 1
+set @dt = DATEADD(MINUTE,30,@dt) --每次递增5min
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/循环批量删除数据库表.md b/实践积累/数据库/循环批量删除数据库表.md
new file mode 100755
index 0000000..a1137da
--- /dev/null
+++ b/实践积累/数据库/循环批量删除数据库表.md
@@ -0,0 +1,55 @@
+--创建临时表
+```sql
+create table #Man(
+```
+id int identity(1,1),
+tbName nvarchar(50)
+) --往临时表插入数据
+```sql
+insert into #Man
+select name from sys.tables
+where create_date<='2018-03-10 15:36:35.687' and name not in ('DeviceNetState','EphInfo','FilterStatistic','UserInfo','AlmInfo')
+```
+order by create_date desc
+
+--确认
+```sql
+select * from #Man
+
+```
+commit
+rollback
+begin tran
+
+
+--定义循环变量
+```sql
+declare @i int
+set @i = 1
+declare @count int
+select @count = count(*) from #Man
+
+```
+--print @count
+
+```sql
+declare @str nvarchar(500)
+declare @tb nvarchar(50)
+
+```
+while(@i <= @count) begin
+
+```sql
+select @tb = isnull(tbName, '') from #Man where id = @i
+```
+--循环执行语句
+```sql
+set @str = 'drop table [' + @tb+ ']'
+```
+exec(@str)
+
+```sql
+set @str = ''
+set @i = @i + 1
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/循环造固定数据值脚本.md b/实践积累/数据库/循环造固定数据值脚本.md
new file mode 100755
index 0000000..5aa20dc
--- /dev/null
+++ b/实践积累/数据库/循环造固定数据值脚本.md
@@ -0,0 +1,33 @@
+--
+```sql
+declare @BeginDate datetime
+declare @EndDate datetime
+
+declare @water1 float
+declare @water2 float
+
+declare @gpsIndex nvarchar(50)
+
+set @BeginDate = '2018-08-27 00:00:00.000'
+set @EndDate = '2018-08-27 18:59:59.997'
+set @water1 = 2.16
+set @water2 = 1.07
+
+```
+while(@BeginDate < @EndDate) begin
+```sql
+set @gpsIndex =convert(nvarchar(50),convert(bigint, datediff(ss, '1970-01-01 00:00:00', @BeginDate))*1000 + datepart(ms,@BeginDate))
+
+insert into [ZHDMTProj].[dbo].[库水位1] ([GPSIndex],[aDatetime],[X])
+```
+values(@gpsIndex, @BeginDate, @water1)
+```sql
+insert into [ZHDMTProj].[dbo].[库水位2] ([GPSIndex],[aDatetime],[X])
+```
+values(@gpsIndex, @BeginDate, @water2)
+
+--
+```sql
+set @BeginDate=DATEADD(MINUTE,1,@BeginDate)
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/循环遍历插数据.md b/实践积累/数据库/循环遍历插数据.md
new file mode 100755
index 0000000..23a2912
--- /dev/null
+++ b/实践积累/数据库/循环遍历插数据.md
@@ -0,0 +1,26 @@
+```sql
+declare @x numeric(18,2) --X
+declare @dt datetime --时间
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+declare @count int --计数
+
+set @x = 0
+set @count = 1
+set @dt = '2018-07-02 12:00:00'
+
+```
+while(@dt < getdate()) begin
+
+```sql
+set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt)
+
+
+insert into [ZHDMTProj].[dbo].[Flowmeter01]([GPSIndex],[aDatetime],[X]) values(@gpsindex, @dt, @x) --目标表
+```
+--****************
+```sql
+set @count = @count + 1
+set @dt = DATEADD(ss,15,@dt) --每次递增30秒
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/批量创建app 表索引.md b/实践积累/数据库/批量创建app 表索引.md
new file mode 100755
index 0000000..9da72c1
--- /dev/null
+++ b/实践积累/数据库/批量创建app 表索引.md
@@ -0,0 +1,36 @@
+```sql
+use safeMonitorApp
+```
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%_App' --or TABLE_NAME like '%_App_'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--创建非聚集索引
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('create NONCLUSTERED INDEX '+'IX_'+@tbname+ ' ON '+@tbname+ '([deviceId] ASC,[CollectTime] DESC)')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标
+DEALLOCATE C_userID;
\ No newline at end of file
diff --git a/实践积累/数据库/批量删除表.md b/实践积累/数据库/批量删除表.md
new file mode 100755
index 0000000..74f94a3
--- /dev/null
+++ b/实践积累/数据库/批量删除表.md
@@ -0,0 +1,19 @@
+--------参数定义------------------- DECLARE @Table NVARCHAR(30)
+```sql
+DECLARE tmpCur CURSOR FOR
+SELECT name FROM sys.objects WHERE TYPE='U' AND name LIKE N'%_SRC%' --删除所有含有"_QueryLog"的表
+OPEN tmpCur
+FETCH NEXT FROM tmpCur INTO @Table WHILE @@FETCH_STATUS = 0
+```
+BEGIN
+```sql
+DECLARE @sql VARCHAR(100)
+SELECT @sql = 'drop table ' + @Table
+```
+EXEC(@sql)
+```sql
+FETCH NEXT FROM tmpCur INTO @Table
+```
+END
+CLOSE tmpCur
+DEALLOCATE tmpCur
\ No newline at end of file
diff --git a/实践积累/数据库/批量删除超前数据脚本.md b/实践积累/数据库/批量删除超前数据脚本.md
new file mode 100755
index 0000000..35a6d53
--- /dev/null
+++ b/实践积累/数据库/批量删除超前数据脚本.md
@@ -0,0 +1,40 @@
+begin tran
+commit
+--rollback
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%_STC' or TABLE_NAME like '%_DYN' or TABLE_NAME like '%_RTK'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--删除未来的数据
+--DELETE
+--FROM [HiMonitorDB].[dbo].[11350069_STC]
+--WHERE aDatetime >'2020-02-03'
+
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('delete from [HiMonitorDB].[dbo].['+@tbname+'] where aDatetime>getdate()')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标
+DEALLOCATE C_userID;
\ No newline at end of file
diff --git a/实践积累/数据库/批量删除超前数据脚本(监测云).md b/实践积累/数据库/批量删除超前数据脚本(监测云).md
new file mode 100755
index 0000000..fe8fe5b
--- /dev/null
+++ b/实践积累/数据库/批量删除超前数据脚本(监测云).md
@@ -0,0 +1,77 @@
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%2020_SRC'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--删除未来的数据
+--DELETE
+--FROM [HiMonitorDB].[dbo].[11350069_STC]
+--WHERE aDatetime >'2020-02-03'
+
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('delete from [safeMonitorSrc].[dbo].['+@tbname+'] where CollectTime>GETDATE()')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标
+DEALLOCATE C_userID;
+
+begin tran
+COMMIT
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%2020_APP'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--删除未来的数据
+--DELETE
+--FROM [HiMonitorDB].[dbo].[11350069_STC]
+--WHERE aDatetime >'2020-02-03'
+
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('delete from [safeMonitorAPP].[dbo].['+@tbname+'] where CollectTime>GETDATE()')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标
+DEALLOCATE C_userID;
\ No newline at end of file
diff --git a/实践积累/数据库/批量增加非聚集索引.md b/实践积累/数据库/批量增加非聚集索引.md
new file mode 100755
index 0000000..12ba312
--- /dev/null
+++ b/实践积累/数据库/批量增加非聚集索引.md
@@ -0,0 +1,66 @@
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%_clean'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--创建非聚集索引
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('create NONCLUSTERED INDEX '+'IX_'+@tbname+ ' ON '+@tbname+ '([Style] ASC,[aDatetime] DESC)')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标
+DEALLOCATE C_userID;
+
+--声明一个变量
+```sql
+declare @tbname as nvarchar(100);
+```
+--声明一个游标用来遍历查询到的结果
+```sql
+declare C_userID CURSOR for
+select distinct TABLE_NAME from information_schema.COLUMNS
+where TABLE_NAME like '%_2020_APP'
+```
+--打开游标
+```sql
+open C_userID;
+```
+--获取游标指向的数据
+```sql
+fetch next from C_userID into @tbname;
+while @@FETCH_STATUS = 0
+```
+BEGIN
+--执行具体的操作
+--创建非聚集索引
+--create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)
+EXEC('create NONCLUSTERED INDEX '+'IX_'+@tbname+ ' ON '+@tbname+ '([DeviceId] ASC,[CollectTime] DESC)')
+--游标指向下一条数据
+```sql
+FETCH next from C_userID into @tbname;
+```
+END
+--关闭游标
+CLose C_userID
+--释放游标 DEALLOCATE C_userID;
\ No newline at end of file
diff --git a/实践积累/数据库/按日分组求均值.md b/实践积累/数据库/按日分组求均值.md
new file mode 100755
index 0000000..0776924
--- /dev/null
+++ b/实践积累/数据库/按日分组求均值.md
@@ -0,0 +1,7 @@
+SELECT
+convert(char(10),aDatetime,120)
+,round(avg([X]),6)
+,round(avg([Y]),6)
+,round(avg([Height]),6) FROM [ZHDMTProj].[dbo].[TLDZ1]
+group by ( convert(char(10),aDatetime,120))
+order by ( convert(char(10),aDatetime,120))
\ No newline at end of file
diff --git a/实践积累/数据库/新增站点基准信息增加.md b/实践积累/数据库/新增站点基准信息增加.md
new file mode 100755
index 0000000..f4f2d64
--- /dev/null
+++ b/实践积累/数据库/新增站点基准信息增加.md
@@ -0,0 +1,14 @@
+```sql
+use HiMonitorDB;
+select * from DataSyncStationSX
+where sname in ('GJ1201','GB1201','GB1202','GB1203','GB1204','GB1205','GB1206')
+begin tran
+exec sp_NDrefrenceValue 'GB1201','2019-05-1 00:00:00.000',0,0,0
+exec sp_NDrefrenceValue 'GB1202', '2019-05-1 00:00:00.000',0,0,0
+exec sp_NDrefrenceValue 'GB1203', '2019-05-1 00:00:00.000',0,0,0
+exec sp_NDrefrenceValue 'GB1204', '2019-05-1 00:00:00.000',0,0,0
+exec sp_NDrefrenceValue 'GB1205', '2019-05-1 00:00:00.000',0,0,0
+exec sp_NDrefrenceValue 'GB1206', '2019-05-1 00:00:00.000',0,0,0
+
+```
+commit
\ No newline at end of file
diff --git a/实践积累/数据库/无日志文件附加数据库失败解决.md b/实践积累/数据库/无日志文件附加数据库失败解决.md
new file mode 100755
index 0000000..3802a49
--- /dev/null
+++ b/实践积累/数据库/无日志文件附加数据库失败解决.md
@@ -0,0 +1,8 @@
+## 第一步:先建立一个同名数据库,停止SQL SERVER200**==8****,将原来的.mdf****数据库文件****覆盖刚新建的.mdf****数据库文件**==,重新启动数据库第二步:查询分析器执行,
+
+| | |
+|---|---|
+|1
2
3
4
5
6
7|**alter** **database** NEWDBNAME **set** emergency
**declare** @databasename **varchar**(255)
**set** @databasename='NEWDBNAME'
**exec** sp_dboption @databasename, N'single', N'true'
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) --将目标数据库置为单用户状态
dbcc checkdb(@databasename,REPAIR_REBUILD)
**exec** sp_dboption @databasename, N'single', N'false'|
+
+## 第三步:以上代码请同时运行,可能会出现“数据库其他多个文件与数据库主文件不匹配....”错误,请多次重试执行以上代码 。
+ > 来自 <[https://zhidao.baidu.com/question/1754918389526048868.html?qbl=relate_question_0&word=sql2008%C8%D5%D6%BE%CE%C4%BC%FE%D3%EB%D6%F7%CE%C4%BC%FE%B2%BB%C6%A5%C5%E4](https://zhidao.baidu.com/question/1754918389526048868.html?qbl=relate_question_0&word=sql2008%C8%D5%D6%BE%CE%C4%BC%FE%D3%EB%D6%F7%CE%C4%BC%FE%B2%BB%C6%A5%C5%E4)>
\ No newline at end of file
diff --git a/实践积累/数据库/松滋 2号店循环造rtk.md b/实践积累/数据库/松滋 2号店循环造rtk.md
new file mode 100755
index 0000000..17f24a0
--- /dev/null
+++ b/实践积累/数据库/松滋 2号店循环造rtk.md
@@ -0,0 +1,58 @@
+rollback
+commit
+begin tran
+
+```sql
+declare @x numeric(18,2) --X
+declare @dt datetime --时间
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+declare @count int --计数
+
+set @x = 0
+set @count = 1
+set @dt = '2018-09-01 18:35:00'
+
+```
+while(@dt < getdate()) begin
+
+-- set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt)
+
+
+```sql
+declare @SELECT_SQL1 NVARCHAR(500)
+declare @GPSINDEX1 bigint
+declare @utcnow1 datetime
+declare @adatetime1 datetime
+declare @X1 float
+declare @Y1 float
+declare @H1 float
+declare @DX1 float
+declare @DY1 float
+declare @DH1 float
+
+SET @SELECT_SQL1 = 'SELECT TOP 1 @X1=T.[X],@Y1 = T.[Y],@H1=T.[Height],@DX1=T.[dltaX],@DY1=T.[dltaY],@DH1=T.[dltaH] FROM [HMProject].[dbo].[SongZi2_RTK] AS T order by ADATETIME desc'
+
+EXEC sp_executesql @SELECT_SQL1, N'@X1 float out,@Y1 float out,@H1 float out,@DX1 float out,@DY1 float out,@DH1 float out',@X1 out,@Y1 out,@H1 out,@DX1 out,@DY1 out,@DH1 out
+
+SET @utcnow1 = GETDATE()
+SET @GPSINDEX1 = (cast(datediff(ss,'1970-01-01',@dt) as bigint)*1000) - ((DateName(minute,@utcnow1))%10)*60000 - DateName(second,@utcnow1)*1000
+SET @X1 = @X1+ (rand()*-1 + 0.501)/2000 SET @Y1 = @Y1+ (rand()*-1 + 0.501)/2000 SET @H1 = @H1+ (rand()*-1 + 0.499)/2000 SET @DX1 = @DX1+ rand()/99 SET @DY1 = @DY1+ rand()/99 SET @DH1 =
+
+```
+@DH1+ rand()/99
+```sql
+SET @adatetime1 = DATEADD(S,@GPSINDEX1/1000,'1970-01-01 00:00:00')
+
+BEGIN TRY insert into [HMProject].[dbo].[SongZi2_RTK]([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])VALUES(@GPSINDEX1,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1) END TRY BEGIN
+
+```
+CATCH END CATCH
+
+--insert into [ZHDMTProj].[dbo].[Flowmeter01]([GPSIndex],[aDatetime],[X]) values(@gpsindex, @dt, @x) --目标表
+--****************
+```sql
+set @count = @count + 1
+set @dt = DATEADD(MI,5,@dt) --每次递增5 min
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/模拟一段数据.md b/实践积累/数据库/模拟一段数据.md
new file mode 100755
index 0000000..a982660
--- /dev/null
+++ b/实践积累/数据库/模拟一段数据.md
@@ -0,0 +1,51 @@
+```sql
+declare @dt datetime --时间
+declare @gpsindex numeric(18,2) --GPSIndex
+declare @rand float --随机数
+declare @count int --计数
+```
+--declare @GPSINDEX1 bigint
+```sql
+declare @adatetime1 datetime
+declare @endDate datetime; --结束时间
+declare @X1 float
+declare @Y1 float
+declare @H1 float
+declare @DX1 float
+declare @DY1 float
+declare @DH1 float
+declare @X0 float
+declare @Y0 float
+declare @H0 float
+
+set @dt = '2018-10-23 03:08:00.000';
+set @endDate= '2018-11-20 18:19:00.000';
+select @X1 = X,@Y1 = Y,@H1 = Height,@DX1=dltaX,@DY1=dltaY,@DH1=dltaH from MYB1_RTK where aDatetime = @dt
+```
+--求出基准坐标
+```sql
+set @X0=@X1-@DX1
+set @Y0=@Y1-@DY1
+set @H0=@H1-@DH1
+select @X0,@Y0,@H0
+```
+while(@dt < @endDate) begin
+
+```sql
+set @gpsindex = convert(bigint, datediff(ss, '1970-01-01 00:00:00', @dt))*1000 + datepart(ms,@dt) SET @DX1 = (rand()*-10 + 10)/2000
+SET @DY1 = (rand()*-10 + 9)/2000
+SET @DH1 =(rand()*-10 + 8)/2000
+SET @X1 = @X0+ @DX1
+SET @Y1 = @Y0+ @DY1
+SET @H1 = @H1+ @DH1
+SET @adatetime1 = DATEADD(S,@gpsindex/1000,'1970-01-01 00:00:00')
+BEGIN TRY insert into HiMonitorDb.[dbo].MYB1_RTK([GPSIndex],[aDatetime],[X],[Y],[Height],[dltaX],[dltaY],[dltaH])VALUES(@gpsindex,@adatetime1,@X1,@Y1,@H1,@DX1,@DY1,@DH1)
+END TRY BEGIN
+```
+CATCH END CATCH
+--****************
+```sql
+set @count = @count + 1
+set @dt = DATEADD(MINUTE,5,@dt) --每次递增5min
+```
+end
\ No newline at end of file
diff --git a/实践积累/数据库/解除数据库占用连接.md b/实践积累/数据库/解除数据库占用连接.md
new file mode 100755
index 0000000..27e0db6
--- /dev/null
+++ b/实践积累/数据库/解除数据库占用连接.md
@@ -0,0 +1,22 @@
+use master
+```sql
+declare @spid int ;
+declare @ddlstring nvarchar(max);
+declare @dbname varchar(200);
+set @dbname='数据库名';
+declare tmpcur cursor
+for select distinct spid as spid from sys.sysprocesses
+where dbid=db_id(@dbname) ;
+OPEN tmpcur;
+fetch tmpcur into @spid ;
+while (@@FETCH_STATUS=0)
+```
+ begin
+```sql
+ set @ddlstring=N'Kill '+CONVERT( nvarchar,@spid) ;
+ execute sp_executesql @ddlstring ;
+ fetch tmpcur into @spid ;
+ end ;
+```
+close tmpcur ;
+deallocate tmpcur ;
\ No newline at end of file
diff --git a/实践积累/数据库/运行中数据库收缩脚本.md b/实践积累/数据库/运行中数据库收缩脚本.md
new file mode 100755
index 0000000..5d467f2
--- /dev/null
+++ b/实践积累/数据库/运行中数据库收缩脚本.md
@@ -0,0 +1,43 @@
+use master
+go
+
+```sql
+if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
+drop procedure [dbo].[p_killspid]
+GO
+
+create proc p_killspid
+```
+@dbname varchar(200) --要关闭进程的数据库名
+as
+```sql
+declare @sql nvarchar(500)
+declare @spid nvarchar(20)
+
+declare #tb cursor for
+select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
+open #tb
+fetch next from #tb into @spid
+while @@fetch_status=0
+```
+begin
+exec('kill '+@spid)
+```sql
+fetch next from #tb into @spid
+```
+end
+close #tb
+deallocate #tb
+go
+
+--用法
+```sql
+exec p_killspid 'safeMonitorMgr'
+go
+```
+DBCC SHRINKDATABASE (safeMonitorMgr)
+go
+
+```sql
+drop proc p_killspid
+```
\ No newline at end of file
diff --git a/实践积累/数据库/链接服务器远程查询.md b/实践积累/数据库/链接服务器远程查询.md
new file mode 100755
index 0000000..0817502
--- /dev/null
+++ b/实践积累/数据库/链接服务器远程查询.md
@@ -0,0 +1 @@
+>
\ No newline at end of file
diff --git a/实践积累/数据库/附加数据库.md b/实践积累/数据库/附加数据库.md
new file mode 100755
index 0000000..db4f31f
--- /dev/null
+++ b/实践积累/数据库/附加数据库.md
@@ -0,0 +1,3 @@
+```sql
+exec sp_attach_single_file_db @dbname='ZHDMTProj_SX',@physname='F:\DataBases\ZHDMTProj_SX.mdf'
+```
\ No newline at end of file
diff --git a/实践积累/工作记录/传感器/INDEX_传感器.md b/工作记录/传感器/INDEX_传感器.md
similarity index 100%
rename from 实践积累/工作记录/传感器/INDEX_传感器.md
rename to 工作记录/传感器/INDEX_传感器.md
diff --git a/实践积累/工作记录/传感器/关于偶发数据不过滤的临时解决方法.md b/工作记录/传感器/关于偶发数据不过滤的临时解决方法.md
similarity index 100%
rename from 实践积累/工作记录/传感器/关于偶发数据不过滤的临时解决方法.md
rename to 工作记录/传感器/关于偶发数据不过滤的临时解决方法.md
diff --git a/实践积累/工作记录/传感器/分体式超声波水位计.md b/工作记录/传感器/分体式超声波水位计.md
similarity index 100%
rename from 实践积累/工作记录/传感器/分体式超声波水位计.md
rename to 工作记录/传感器/分体式超声波水位计.md
diff --git a/实践积累/工作记录/传感器/地灾四级报警.md b/工作记录/传感器/地灾四级报警.md
similarity index 100%
rename from 实践积累/工作记录/传感器/地灾四级报警.md
rename to 工作记录/传感器/地灾四级报警.md
diff --git a/实践积累/工作记录/传感器/平差.md b/工作记录/传感器/平差.md
similarity index 100%
rename from 实践积累/工作记录/传感器/平差.md
rename to 工作记录/传感器/平差.md
diff --git a/实践积累/工作记录/传感器/浸润线配置使用.md b/工作记录/传感器/浸润线配置使用.md
similarity index 100%
rename from 实践积累/工作记录/传感器/浸润线配置使用.md
rename to 工作记录/传感器/浸润线配置使用.md
diff --git a/实践积累/工作记录/传感器/物联网卡.md b/工作记录/传感器/物联网卡.md
similarity index 100%
rename from 实践积累/工作记录/传感器/物联网卡.md
rename to 工作记录/传感器/物联网卡.md
diff --git a/实践积累/工作记录/传感器/葛南.md b/工作记录/传感器/葛南.md
similarity index 100%
rename from 实践积累/工作记录/传感器/葛南.md
rename to 工作记录/传感器/葛南.md
diff --git a/实践积累/工作记录/工作日志/202260406.md b/工作记录/工作日志/202260406.md
similarity index 100%
rename from 实践积累/工作记录/工作日志/202260406.md
rename to 工作记录/工作日志/202260406.md
diff --git a/实践积累/工作记录/工作日志/2026-04-06.md b/工作记录/工作日志/2026-04-06.md
similarity index 100%
rename from 实践积累/工作记录/工作日志/2026-04-06.md
rename to 工作记录/工作日志/2026-04-06.md
diff --git a/实践积累/工作记录/工作日志/2026-04-07.md b/工作记录/工作日志/2026-04-07.md
similarity index 100%
rename from 实践积累/工作记录/工作日志/2026-04-07.md
rename to 工作记录/工作日志/2026-04-07.md
diff --git a/实践积累/工作记录/工作日志/2026-04-21.md b/工作记录/工作日志/2026-04-21.md
similarity index 100%
rename from 实践积累/工作记录/工作日志/2026-04-21.md
rename to 工作记录/工作日志/2026-04-21.md
diff --git a/实践积累/工作记录/工作日志/工作日志首页.md b/工作记录/工作日志/工作日志首页.md
similarity index 100%
rename from 实践积累/工作记录/工作日志/工作日志首页.md
rename to 工作记录/工作日志/工作日志首页.md
diff --git a/实践积累/工作记录/每周事务/2018_10月第一周.md b/工作记录/每周事务/2018_10月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_10月第一周.md
rename to 工作记录/每周事务/2018_10月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_10月第二周.md b/工作记录/每周事务/2018_10月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_10月第二周.md
rename to 工作记录/每周事务/2018_10月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_10月第四周.md b/工作记录/每周事务/2018_10月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_10月第四周.md
rename to 工作记录/每周事务/2018_10月第四周.md
diff --git a/实践积累/工作记录/每周事务/2018_11月第一周.md b/工作记录/每周事务/2018_11月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_11月第一周.md
rename to 工作记录/每周事务/2018_11月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_11月第三周.md b/工作记录/每周事务/2018_11月第三周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_11月第三周.md
rename to 工作记录/每周事务/2018_11月第三周.md
diff --git a/实践积累/工作记录/每周事务/2018_11月第二周.md b/工作记录/每周事务/2018_11月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_11月第二周.md
rename to 工作记录/每周事务/2018_11月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_11月第四周.md b/工作记录/每周事务/2018_11月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_11月第四周.md
rename to 工作记录/每周事务/2018_11月第四周.md
diff --git a/实践积累/工作记录/每周事务/2018_12月第一周.md b/工作记录/每周事务/2018_12月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_12月第一周.md
rename to 工作记录/每周事务/2018_12月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_12月第二周.md b/工作记录/每周事务/2018_12月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_12月第二周.md
rename to 工作记录/每周事务/2018_12月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_6月第一周.md b/工作记录/每周事务/2018_6月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_6月第一周.md
rename to 工作记录/每周事务/2018_6月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_6月第三周.md b/工作记录/每周事务/2018_6月第三周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_6月第三周.md
rename to 工作记录/每周事务/2018_6月第三周.md
diff --git a/实践积累/工作记录/每周事务/2018_6月第二周.md b/工作记录/每周事务/2018_6月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_6月第二周.md
rename to 工作记录/每周事务/2018_6月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_6月第四周.md b/工作记录/每周事务/2018_6月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_6月第四周.md
rename to 工作记录/每周事务/2018_6月第四周.md
diff --git a/实践积累/工作记录/每周事务/2018_7月第一周.md b/工作记录/每周事务/2018_7月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_7月第一周.md
rename to 工作记录/每周事务/2018_7月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_7月第三周.md b/工作记录/每周事务/2018_7月第三周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_7月第三周.md
rename to 工作记录/每周事务/2018_7月第三周.md
diff --git a/实践积累/工作记录/每周事务/2018_7月第二周.md b/工作记录/每周事务/2018_7月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_7月第二周.md
rename to 工作记录/每周事务/2018_7月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_7月第五周.md b/工作记录/每周事务/2018_7月第五周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_7月第五周.md
rename to 工作记录/每周事务/2018_7月第五周.md
diff --git a/实践积累/工作记录/每周事务/2018_7月第四周.md b/工作记录/每周事务/2018_7月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_7月第四周.md
rename to 工作记录/每周事务/2018_7月第四周.md
diff --git a/实践积累/工作记录/每周事务/2018_8月第一周.md b/工作记录/每周事务/2018_8月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_8月第一周.md
rename to 工作记录/每周事务/2018_8月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_8月第三周.md b/工作记录/每周事务/2018_8月第三周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_8月第三周.md
rename to 工作记录/每周事务/2018_8月第三周.md
diff --git a/实践积累/工作记录/每周事务/2018_8月第二周.md b/工作记录/每周事务/2018_8月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_8月第二周.md
rename to 工作记录/每周事务/2018_8月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_8月第四周.md b/工作记录/每周事务/2018_8月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_8月第四周.md
rename to 工作记录/每周事务/2018_8月第四周.md
diff --git a/实践积累/工作记录/每周事务/2018_9月第一周.md b/工作记录/每周事务/2018_9月第一周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_9月第一周.md
rename to 工作记录/每周事务/2018_9月第一周.md
diff --git a/实践积累/工作记录/每周事务/2018_9月第三周.md b/工作记录/每周事务/2018_9月第三周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_9月第三周.md
rename to 工作记录/每周事务/2018_9月第三周.md
diff --git a/实践积累/工作记录/每周事务/2018_9月第二周.md b/工作记录/每周事务/2018_9月第二周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_9月第二周.md
rename to 工作记录/每周事务/2018_9月第二周.md
diff --git a/实践积累/工作记录/每周事务/2018_9月第四周.md b/工作记录/每周事务/2018_9月第四周.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2018_9月第四周.md
rename to 工作记录/每周事务/2018_9月第四周.md
diff --git a/实践积累/工作记录/每周事务/2019_20190814.md b/工作记录/每周事务/2019_20190814.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_20190814.md
rename to 工作记录/每周事务/2019_20190814.md
diff --git a/实践积累/工作记录/每周事务/2019_20190912.md b/工作记录/每周事务/2019_20190912.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_20190912.md
rename to 工作记录/每周事务/2019_20190912.md
diff --git a/实践积累/工作记录/每周事务/2019_20190923.md b/工作记录/每周事务/2019_20190923.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_20190923.md
rename to 工作记录/每周事务/2019_20190923.md
diff --git a/实践积累/工作记录/每周事务/2019_201910.md b/工作记录/每周事务/2019_201910.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_201910.md
rename to 工作记录/每周事务/2019_201910.md
diff --git a/实践积累/工作记录/每周事务/2019_春节后.md b/工作记录/每周事务/2019_春节后.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_春节后.md
rename to 工作记录/每周事务/2019_春节后.md
diff --git a/实践积累/工作记录/每周事务/2019_第一周0101 - 0106.md b/工作记录/每周事务/2019_第一周0101 - 0106.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第一周0101 - 0106.md
rename to 工作记录/每周事务/2019_第一周0101 - 0106.md
diff --git a/实践积累/工作记录/每周事务/2019_第七周0211 - 0217.md b/工作记录/每周事务/2019_第七周0211 - 0217.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第七周0211 - 0217.md
rename to 工作记录/每周事务/2019_第七周0211 - 0217.md
diff --git a/实践积累/工作记录/每周事务/2019_第三周0114 - 0120.md b/工作记录/每周事务/2019_第三周0114 - 0120.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第三周0114 - 0120.md
rename to 工作记录/每周事务/2019_第三周0114 - 0120.md
diff --git a/实践积累/工作记录/每周事务/2019_第九周0225 - 0303.md b/工作记录/每周事务/2019_第九周0225 - 0303.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第九周0225 - 0303.md
rename to 工作记录/每周事务/2019_第九周0225 - 0303.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十一周0520-0526.md b/工作记录/每周事务/2019_第二十一周0520-0526.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十一周0520-0526.md
rename to 工作记录/每周事务/2019_第二十一周0520-0526.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十七周0708-0713.md b/工作记录/每周事务/2019_第二十七周0708-0713.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十七周0708-0713.md
rename to 工作记录/每周事务/2019_第二十七周0708-0713.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十三周0603-0609.md b/工作记录/每周事务/2019_第二十三周0603-0609.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十三周0603-0609.md
rename to 工作记录/每周事务/2019_第二十三周0603-0609.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十二周0527-0602.md b/工作记录/每周事务/2019_第二十二周0527-0602.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十二周0527-0602.md
rename to 工作记录/每周事务/2019_第二十二周0527-0602.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十五周0624-0628.md b/工作记录/每周事务/2019_第二十五周0624-0628.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十五周0624-0628.md
rename to 工作记录/每周事务/2019_第二十五周0624-0628.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十八周0714-0720.md b/工作记录/每周事务/2019_第二十八周0714-0720.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十八周0714-0720.md
rename to 工作记录/每周事务/2019_第二十八周0714-0720.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十六周0701-0707.md b/工作记录/每周事务/2019_第二十六周0701-0707.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十六周0701-0707.md
rename to 工作记录/每周事务/2019_第二十六周0701-0707.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十周0513 - 0519.md b/工作记录/每周事务/2019_第二十周0513 - 0519.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十周0513 - 0519.md
rename to 工作记录/每周事务/2019_第二十周0513 - 0519.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十四周0610-0615.md b/工作记录/每周事务/2019_第二十四周0610-0615.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十四周0610-0615.md
rename to 工作记录/每周事务/2019_第二十四周0610-0615.md
diff --git a/实践积累/工作记录/每周事务/2019_第二十四周0617-0621.md b/工作记录/每周事务/2019_第二十四周0617-0621.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二十四周0617-0621.md
rename to 工作记录/每周事务/2019_第二十四周0617-0621.md
diff --git a/实践积累/工作记录/每周事务/2019_第二周0107 - 0113.md b/工作记录/每周事务/2019_第二周0107 - 0113.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第二周0107 - 0113.md
rename to 工作记录/每周事务/2019_第二周0107 - 0113.md
diff --git a/实践积累/工作记录/每周事务/2019_第五周0128 - 0203.md b/工作记录/每周事务/2019_第五周0128 - 0203.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第五周0128 - 0203.md
rename to 工作记录/每周事务/2019_第五周0128 - 0203.md
diff --git a/实践积累/工作记录/每周事务/2019_第八周0218 - 0224.md b/工作记录/每周事务/2019_第八周0218 - 0224.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第八周0218 - 0224.md
rename to 工作记录/每周事务/2019_第八周0218 - 0224.md
diff --git a/实践积累/工作记录/每周事务/2019_第六周0204 - 0210.md b/工作记录/每周事务/2019_第六周0204 - 0210.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第六周0204 - 0210.md
rename to 工作记录/每周事务/2019_第六周0204 - 0210.md
diff --git a/实践积累/工作记录/每周事务/2019_第十一周0311 - 0317.md b/工作记录/每周事务/2019_第十一周0311 - 0317.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十一周0311 - 0317.md
rename to 工作记录/每周事务/2019_第十一周0311 - 0317.md
diff --git a/实践积累/工作记录/每周事务/2019_第十七周0422 - 0428.md b/工作记录/每周事务/2019_第十七周0422 - 0428.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十七周0422 - 0428.md
rename to 工作记录/每周事务/2019_第十七周0422 - 0428.md
diff --git a/实践积累/工作记录/每周事务/2019_第十三周0325 - 0331.md b/工作记录/每周事务/2019_第十三周0325 - 0331.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十三周0325 - 0331.md
rename to 工作记录/每周事务/2019_第十三周0325 - 0331.md
diff --git a/实践积累/工作记录/每周事务/2019_第十九周0506 - 0512.md b/工作记录/每周事务/2019_第十九周0506 - 0512.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十九周0506 - 0512.md
rename to 工作记录/每周事务/2019_第十九周0506 - 0512.md
diff --git a/实践积累/工作记录/每周事务/2019_第十二周0318 - 0324.md b/工作记录/每周事务/2019_第十二周0318 - 0324.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十二周0318 - 0324.md
rename to 工作记录/每周事务/2019_第十二周0318 - 0324.md
diff --git a/实践积累/工作记录/每周事务/2019_第十五周0408 - 0414.md b/工作记录/每周事务/2019_第十五周0408 - 0414.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十五周0408 - 0414.md
rename to 工作记录/每周事务/2019_第十五周0408 - 0414.md
diff --git a/实践积累/工作记录/每周事务/2019_第十八周0429 - 0505.md b/工作记录/每周事务/2019_第十八周0429 - 0505.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十八周0429 - 0505.md
rename to 工作记录/每周事务/2019_第十八周0429 - 0505.md
diff --git a/实践积累/工作记录/每周事务/2019_第十六周0415 - 0421.md b/工作记录/每周事务/2019_第十六周0415 - 0421.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十六周0415 - 0421.md
rename to 工作记录/每周事务/2019_第十六周0415 - 0421.md
diff --git a/实践积累/工作记录/每周事务/2019_第十周0304 - 0310.md b/工作记录/每周事务/2019_第十周0304 - 0310.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十周0304 - 0310.md
rename to 工作记录/每周事务/2019_第十周0304 - 0310.md
diff --git a/实践积累/工作记录/每周事务/2019_第十四周0401 - 0407.md b/工作记录/每周事务/2019_第十四周0401 - 0407.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第十四周0401 - 0407.md
rename to 工作记录/每周事务/2019_第十四周0401 - 0407.md
diff --git a/实践积累/工作记录/每周事务/2019_第四周0121 - 0127.md b/工作记录/每周事务/2019_第四周0121 - 0127.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_第四周0121 - 0127.md
rename to 工作记录/每周事务/2019_第四周0121 - 0127.md
diff --git a/实践积累/工作记录/每周事务/2019_贵州北斗监测测试.md b/工作记录/每周事务/2019_贵州北斗监测测试.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/2019_贵州北斗监测测试.md
rename to 工作记录/每周事务/2019_贵州北斗监测测试.md
diff --git a/实践积累/工作记录/每周事务/INDEX_每周事务.md b/工作记录/每周事务/INDEX_每周事务.md
similarity index 100%
rename from 实践积累/工作记录/每周事务/INDEX_每周事务.md
rename to 工作记录/每周事务/INDEX_每周事务.md
diff --git a/实践积累/工作记录/研发/118云服务器管理.md b/工作记录/研发/118云服务器管理.md
similarity index 100%
rename from 实践积累/工作记录/研发/118云服务器管理.md
rename to 工作记录/研发/118云服务器管理.md
diff --git a/实践积累/工作记录/研发/2018年中会.md b/工作记录/研发/2018年中会.md
similarity index 100%
rename from 实践积累/工作记录/研发/2018年中会.md
rename to 工作记录/研发/2018年中会.md
diff --git a/实践积累/工作记录/研发/INDEX_研发.md b/工作记录/研发/INDEX_研发.md
similarity index 100%
rename from 实践积累/工作记录/研发/INDEX_研发.md
rename to 工作记录/研发/INDEX_研发.md
diff --git a/实践积累/工作记录/研发/反向代理解决跨域问题.md b/工作记录/研发/反向代理解决跨域问题.md
similarity index 100%
rename from 实践积累/工作记录/研发/反向代理解决跨域问题.md
rename to 工作记录/研发/反向代理解决跨域问题.md
diff --git a/实践积累/工作记录/研发/基于gzcors的最佳VRS站选址概述.md b/工作记录/研发/基于gzcors的最佳VRS站选址概述.md
similarity index 100%
rename from 实践积累/工作记录/研发/基于gzcors的最佳VRS站选址概述.md
rename to 工作记录/研发/基于gzcors的最佳VRS站选址概述.md
diff --git a/实践积累/工作记录/研发/安全监测云平台产品需求会议.md b/工作记录/研发/安全监测云平台产品需求会议.md
similarity index 100%
rename from 实践积累/工作记录/研发/安全监测云平台产品需求会议.md
rename to 工作记录/研发/安全监测云平台产品需求会议.md
diff --git a/实践积累/工作记录/研发/安全监测数据体系搭建.md b/工作记录/研发/安全监测数据体系搭建.md
similarity index 100%
rename from 实践积累/工作记录/研发/安全监测数据体系搭建.md
rename to 工作记录/研发/安全监测数据体系搭建.md
diff --git a/实践积累/工作记录/研发/操作系统.md b/工作记录/研发/操作系统.md
similarity index 100%
rename from 实践积累/工作记录/研发/操作系统.md
rename to 工作记录/研发/操作系统.md
diff --git a/实践积累/工作记录/研发/方向.md b/工作记录/研发/方向.md
similarity index 100%
rename from 实践积累/工作记录/研发/方向.md
rename to 工作记录/研发/方向.md
diff --git a/实践积累/工作记录/研发/无法生成注册码问题.md b/工作记录/研发/无法生成注册码问题.md
similarity index 100%
rename from 实践积累/工作记录/研发/无法生成注册码问题.md
rename to 工作记录/研发/无法生成注册码问题.md
diff --git a/实践积累/工作记录/研发/框架搭建.md b/工作记录/研发/框架搭建.md
similarity index 100%
rename from 实践积累/工作记录/研发/框架搭建.md
rename to 工作记录/研发/框架搭建.md
diff --git a/实践积累/工作记录/研发/海康摄像头接入.md b/工作记录/研发/海康摄像头接入.md
similarity index 100%
rename from 实践积累/工作记录/研发/海康摄像头接入.md
rename to 工作记录/研发/海康摄像头接入.md
diff --git a/实践积累/工作记录/研发/监测云文档编写.md b/工作记录/研发/监测云文档编写.md
similarity index 100%
rename from 实践积累/工作记录/研发/监测云文档编写.md
rename to 工作记录/研发/监测云文档编写.md
diff --git a/实践积累/工作记录/研发/监测云系统菜单和权限设计.md b/工作记录/研发/监测云系统菜单和权限设计.md
similarity index 100%
rename from 实践积累/工作记录/研发/监测云系统菜单和权限设计.md
rename to 工作记录/研发/监测云系统菜单和权限设计.md
diff --git a/实践积累/工作记录/研发/监测软件规划.md b/工作记录/研发/监测软件规划.md
similarity index 100%
rename from 实践积累/工作记录/研发/监测软件规划.md
rename to 工作记录/研发/监测软件规划.md
diff --git a/实践积累/工作记录/研发/研发方向.md b/工作记录/研发/研发方向.md
similarity index 100%
rename from 实践积累/工作记录/研发/研发方向.md
rename to 工作记录/研发/研发方向.md
diff --git a/实践积累/工作记录/研发/需求评审相关.md b/工作记录/研发/需求评审相关.md
similarity index 100%
rename from 实践积累/工作记录/研发/需求评审相关.md
rename to 工作记录/研发/需求评审相关.md
diff --git a/实践积累/工作记录/竞品分析/北斗云.md b/工作记录/竞品分析/北斗云.md
similarity index 100%
rename from 实践积累/工作记录/竞品分析/北斗云.md
rename to 工作记录/竞品分析/北斗云.md
diff --git a/实践积累/工作记录/竞品分析/安心云.md b/工作记录/竞品分析/安心云.md
similarity index 100%
rename from 实践积累/工作记录/竞品分析/安心云.md
rename to 工作记录/竞品分析/安心云.md
diff --git a/实践积累/工作记录/竞品分析/湖南梦图省平台.md b/工作记录/竞品分析/湖南梦图省平台.md
similarity index 100%
rename from 实践积累/工作记录/竞品分析/湖南梦图省平台.md
rename to 工作记录/竞品分析/湖南梦图省平台.md
diff --git a/实践积累/工作记录/质量管理/APQP建设方案.md b/工作记录/质量管理/APQP建设方案.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/APQP建设方案.md
rename to 工作记录/质量管理/APQP建设方案.md
diff --git a/实践积累/工作记录/质量管理/APQP知识体系.md b/工作记录/质量管理/APQP知识体系.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/APQP知识体系.md
rename to 工作记录/质量管理/APQP知识体系.md
diff --git a/实践积累/工作记录/质量管理/DFMEA过程活动集.md b/工作记录/质量管理/DFMEA过程活动集.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/DFMEA过程活动集.md
rename to 工作记录/质量管理/DFMEA过程活动集.md
diff --git a/实践积累/工作记录/质量管理/FMEA应用思考.md b/工作记录/质量管理/FMEA应用思考.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/FMEA应用思考.md
rename to 工作记录/质量管理/FMEA应用思考.md
diff --git a/实践积累/工作记录/质量管理/FMEA应用流程.md b/工作记录/质量管理/FMEA应用流程.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/FMEA应用流程.md
rename to 工作记录/质量管理/FMEA应用流程.md
diff --git a/实践积累/工作记录/质量管理/FM失效模式的分类管理.md b/工作记录/质量管理/FM失效模式的分类管理.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/FM失效模式的分类管理.md
rename to 工作记录/质量管理/FM失效模式的分类管理.md
diff --git a/实践积累/工作记录/质量管理/INDEX_质量管理.md b/工作记录/质量管理/INDEX_质量管理.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/INDEX_质量管理.md
rename to 工作记录/质量管理/INDEX_质量管理.md
diff --git a/实践积累/工作记录/质量管理/嵌入式软件.md b/工作记录/质量管理/嵌入式软件.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/嵌入式软件.md
rename to 工作记录/质量管理/嵌入式软件.md
diff --git a/实践积累/工作记录/质量管理/平台软件DFMEA.md b/工作记录/质量管理/平台软件DFMEA.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/平台软件DFMEA.md
rename to 工作记录/质量管理/平台软件DFMEA.md
diff --git a/实践积累/工作记录/质量管理/应用探讨.md b/工作记录/质量管理/应用探讨.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/应用探讨.md
rename to 工作记录/质量管理/应用探讨.md
diff --git a/实践积累/工作记录/质量管理/应用软件DFMEA.md b/工作记录/质量管理/应用软件DFMEA.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/应用软件DFMEA.md
rename to 工作记录/质量管理/应用软件DFMEA.md
diff --git a/实践积累/工作记录/质量管理/质量法典.md b/工作记录/质量管理/质量法典.md
similarity index 100%
rename from 实践积累/工作记录/质量管理/质量法典.md
rename to 工作记录/质量管理/质量法典.md
diff --git a/工作记录/质量管理/问题关联&FMEA 绑定.md b/工作记录/质量管理/问题关联&FMEA 绑定.md
new file mode 100755
index 0000000..6bdb663
--- /dev/null
+++ b/工作记录/质量管理/问题关联&FMEA 绑定.md
@@ -0,0 +1,7 @@
+
+
The requested URL was not found on this server.
+ diff --git a/工作记录/质量管理/问题关联&FMEA 绑定.md b/工作记录/质量管理/问题关联&FMEA 绑定.md new file mode 100755 index 0000000..6bdb663 --- /dev/null +++ b/工作记录/质量管理/问题关联&FMEA 绑定.md @@ -0,0 +1,7 @@ + + +The requested URL was not found on this server.
+ diff --git a/实践积累/工作记录/质量管理/问题管理流程.md b/工作记录/质量管理/问题管理流程.md similarity index 100% rename from 实践积累/工作记录/质量管理/问题管理流程.md rename to 工作记录/质量管理/问题管理流程.md diff --git a/实践积累/工作记录/项目记录/云南麻栗坝大坝.md b/工作记录/项目记录/云南麻栗坝大坝.md similarity index 100% rename from 实践积累/工作记录/项目记录/云南麻栗坝大坝.md rename to 工作记录/项目记录/云南麻栗坝大坝.md diff --git a/实践积累/工作记录/项目记录/唐山研山.md b/工作记录/项目记录/唐山研山.md similarity index 100% rename from 实践积累/工作记录/项目记录/唐山研山.md rename to 工作记录/项目记录/唐山研山.md diff --git a/实践积累/工作记录/项目记录/宜化楚星.md b/工作记录/项目记录/宜化楚星.md similarity index 100% rename from 实践积累/工作记录/项目记录/宜化楚星.md rename to 工作记录/项目记录/宜化楚星.md diff --git a/实践积累/工作记录/项目记录/宜化股份.md b/工作记录/项目记录/宜化股份.md similarity index 100% rename from 实践积累/工作记录/项目记录/宜化股份.md rename to 工作记录/项目记录/宜化股份.md diff --git a/实践积累/工作记录/项目记录/新疆滑坡新增展示系统.md b/工作记录/项目记录/新疆滑坡新增展示系统.md similarity index 100% rename from 实践积累/工作记录/项目记录/新疆滑坡新增展示系统.md rename to 工作记录/项目记录/新疆滑坡新增展示系统.md diff --git a/实践积累/工作记录/项目记录/铜陵321.md b/工作记录/项目记录/铜陵321.md similarity index 100% rename from 实践积累/工作记录/项目记录/铜陵321.md rename to 工作记录/项目记录/铜陵321.md diff --git a/实践积累/工作记录/项目记录/项目迁移.md b/工作记录/项目记录/项目迁移.md similarity index 100% rename from 实践积累/工作记录/项目记录/项目迁移.md rename to 工作记录/项目记录/项目迁移.md diff --git a/附件/2026/个人知识库/Docker/Docker 部署 MongoDB.md b/附件/2026/个人知识库/Docker/Docker 部署 MongoDB.md new file mode 100755 index 0000000..2929280 --- /dev/null +++ b/附件/2026/个人知识库/Docker/Docker 部署 MongoDB.md @@ -0,0 +1,88 @@ +1.镜像下载 +下载 `MongoDB` 镜像命令: + +``` +``` +docker pull mongo +``` +``` + 执行 `docker images` 查看镜像,下载成功,如下图: + +2.启动 `MongoDB` +启动 `MongoDB` 命令: + +``` +``` +docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:latest +``` + +``` +## 命令说明: + +``` +``` + -p 27017:27017 : +``` + +``` +## 将容器的 + +``` +``` +27017 +``` + +``` +## 端口映射到主机的 + +``` +``` +27017 +``` + +``` +## 端口 + +``` +``` + -v $PWD/db:/data/db : +``` + +``` +## 将主机中当前目录下的**`db`**挂载到容器的 + +``` +``` +/data/db +``` + +``` +**,作为**`mongo`**数据存储目录**`` +启动成功,如下图: + +3.测试连接 `MongoDB` +连接 `MongoDB` 命令: + +``` +``` +docker run -it mongo:latest mongo --host 172.17.0.1 +``` + +``` +## 命令说明: + +``` +``` + +``` + +``` +## 使用**`mongo`**镜像执行**`mongo` **命令连接到刚启动的容器**`,`**主机**`IP`**为 + +``` +``` +172.17.0.1 +``` + +``` +提示信息 `It looks like you are trying to access MongoDB over HTTP on the native driver port.` ,nice,部署 `MongoD` 成功! \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/Docker安装redis.md b/附件/2026/个人知识库/Docker/Docker安装redis.md new file mode 100755 index 0000000..178f2b9 --- /dev/null +++ b/附件/2026/个人知识库/Docker/Docker安装redis.md @@ -0,0 +1,17 @@ +**Docker安装redis** +**1.首先下载redis镜像:** +docker pull redis +**2.然后创建一个文件夹用来存放redis的配置文件、数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)** +**3.在上面创建的目录下使用命令启动redis容器** +docker run -d -p 6379:6379 -v $PWD/conf/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name docker-redis docker.io/redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes +**解释一下上面命令的意义:** +-d:表示后台运行,不加-d执行上面的命令你就会看到redis启动的日志信息了 +-p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口,而右侧则表示的是mysql容器内的端口 +--name:是我们给redis容器取的名字 +-v:表示挂载路径,$PWD表示当前目录下,冒号左面的表示我们宿主机的挂载目录,也就是我们虚拟机所在的文件路径,冒号右边则表是的是redis容器在容器内部的路径,上面的命令我分别挂载了redis.conf(redis的配置文件),如需使用配置文件的方式启动redis,这里则需要加上,还有redis存放数据所在的目录 +--appendonly yes:表示redis开启持久化策略 + +作者:GatHub +链接:https://www.jianshu.com/p/2f95680f21c5 +来源:简书 +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/INDEX_Docker.md b/附件/2026/个人知识库/Docker/INDEX_Docker.md new file mode 100755 index 0000000..b2771a4 --- /dev/null +++ b/附件/2026/个人知识库/Docker/INDEX_Docker.md @@ -0,0 +1,28 @@ +--- +title: Docker 索引 +tags: + - 索引 +created: 2026-04-21 +--- + +# Docker + +> 自动生成的索引文件 + +## 文件列表 + +| 文件名 | 大小 | 说明 | +|--------|------|------| +| [[Docker 部署 MongoDB]] | 1KB | | +| [[Docker安装redis]] | 1KB | | +| [[Rancher_Rancher的状态存储在什么地方?]] | 619B | | +| [[Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent]] | 957B | | +| [[centos7设置docker开机自启动,并设置容器自动重启]] | 837B | | +| [[docker rm & docker rmi & docker prune 的差异]] | 196B | | +| [[docker rm & docker rmi & docker prune 的差异]] | 196B | | +| [[docker镜像清理]] | 485B | | +| [[如何批量删除Docker中已经停止的容器]] | 1KB | | +| [[安装docker-compose]] | 545B | | + +--- +*共 10 个文件* diff --git a/附件/2026/个人知识库/Docker/Rancher_Rancher的状态存储在什么地方?.md b/附件/2026/个人知识库/Docker/Rancher_Rancher的状态存储在什么地方?.md new file mode 100755 index 0000000..706af2f --- /dev/null +++ b/附件/2026/个人知识库/Docker/Rancher_Rancher的状态存储在什么地方?.md @@ -0,0 +1,3 @@ +==单节点安装== +==在rancher/rancher容器的内置etcd中,映射与宿主机的====/var/lib/rancher====目录下。== + > 来自 <[https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_11-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84l4%E5%B1%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%9C%8D%E5%8A%A1%E5%A4%84%E4%BA%8E-%E6%8C%82%E8%B5%B7-%E7%8A%B6%E6%80%81%EF%BC%9F](https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_11-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84l4%E5%B1%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%9C%8D%E5%8A%A1%E5%A4%84%E4%BA%8E-%E6%8C%82%E8%B5%B7-%E7%8A%B6%E6%80%81%EF%BC%9F)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md b/附件/2026/个人知识库/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md new file mode 100755 index 0000000..7199afb --- /dev/null +++ b/附件/2026/个人知识库/Docker/Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent.md @@ -0,0 +1,7 @@ +==.== +==在您想要使用单个节点运行Rancher并且能够将相同节点添加到集群的情况下,您必须调整为====rancher/rancher====容器映射的主机端口。== +==如果一个节点被添加到集群,它将部署使用端口80和443的ingress控制器。这与====rancher/rancher====容器默认映射的端口冲突。== +==注意不建议在生产中把Rancher/Rancher和Rancher/Rancher-Agent运行在一台主机上,但可用于开发/演示。== +==要更改主机端口映射,替换====-p 80:80 -p 443:443====为====-p 8080:80 -p 8443:443====:== +docker run -d --restart=unless-stopped \ -p 8080:80 -p 8443:443 \ -v <主机路径>:/var/lib/rancher/ \ rancher/rancher:stable (或者rancher/rancher:latest) + > 来自 <[https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_4-%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85](https://docs.rancher.cn/rancher2x/faqs/important-issue.html#_4-%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/centos7设置docker开机自启动,并设置容器自动重启.md b/附件/2026/个人知识库/Docker/centos7设置docker开机自启动,并设置容器自动重启.md new file mode 100755 index 0000000..a0054b9 --- /dev/null +++ b/附件/2026/个人知识库/Docker/centos7设置docker开机自启动,并设置容器自动重启.md @@ -0,0 +1,12 @@ +**1****、设置****docker****开机启动** +systemctl enable docker +**2****、设置容器自动重启** +**1****)、创建容器时设置** + +docker run -d --restart=always --name 设置容器名 使用的镜像(上面命令 --name后面两个参数根据实际情况自行修改) + --restart具体参数值详细信息: no容器退出时,不重启容器; on-failure 只有在非0状态退出时才重新启动容器; always 无论退出状态是如何,都重启容器; + +**2****)、修改已有容器,使用****update** +docker update --restart=always 容器ID(或者容器名) +(容器ID或者容器名根据实际情况修改) + > 来自 <[https://www.cnblogs.com/763977251-sg/p/11839918.html](https://www.cnblogs.com/763977251-sg/p/11839918.html)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md b/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md new file mode 100755 index 0000000..6bdb663 --- /dev/null +++ b/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md @@ -0,0 +1,7 @@ + + +The requested URL was not found on this server.
+ diff --git a/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md b/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md new file mode 100755 index 0000000..6bdb663 --- /dev/null +++ b/附件/2026/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md @@ -0,0 +1,7 @@ + + +The requested URL was not found on this server.
+ diff --git a/附件/2026/个人知识库/Docker/docker镜像清理.md b/附件/2026/个人知识库/Docker/docker镜像清理.md new file mode 100755 index 0000000..8983c6f --- /dev/null +++ b/附件/2026/个人知识库/Docker/docker镜像清理.md @@ -0,0 +1,2 @@ +1. **大量****镜像通过命令 docker image prune -f 清理。** +2. **通过命令 docker images | awk 'NR!=1{print $1":"$2}' | xargs docker rmi 可以批量清除无用的镜像,且不会影响使用中的镜像和基础镜像,满足笔者的需求。** > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)> > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/如何批量删除Docker中已经停止的容器.md b/附件/2026/个人知识库/Docker/如何批量删除Docker中已经停止的容器.md new file mode 100755 index 0000000..b446941 --- /dev/null +++ b/附件/2026/个人知识库/Docker/如何批量删除Docker中已经停止的容器.md @@ -0,0 +1,28 @@ +**方法一:** +## #**==显示所有的容器,过滤出****Exited****状态的容器,取出这些容器的****ID**==, +## sudo docker ps -a|grep Exited|awk '{print $1}' +## #**==查询所有的容器,过滤出****Exited****状态的容器,列出容器****ID**==,删除这些容器 +## sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'` +xx +**方法二:** +## #====删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了) +## sudo docker rm $(sudo docker ps -a -q) + +**方法三:** +## #**==根据容器的状态,删除****Exited**==状态的容器 +## sudo docker rm $(sudo docker ps -qf status=exited) + +**方法四:** +## #Docker 1.13**==版本以后,可以使用** **docker containers prune** ==命令,删除孤立的容器。 +## sudo docker container prune + +~~#~~~~删除所有镜像~~ +~~sudo docker rmi $(docker images -q)~~ + +**附图:** +## 02-====删除所有的容器,所有未运行的容器都被删除,正在运行的无法删除,达到删除不用容器的目的。 +## 03-**==低于****1.13****版本的****Docker**==,可以根据容器的状态来进行删除 +## 04-**==查询所有的容器,过滤出状态为****Exited**==的容器 +## 05-Docker 1.13**==版本以后,开始支持****prune**==命令,快速删除已退出的容器 + + > 来自 <[https://blog.csdn.net/jiangeeq/article/details/79499324](https://blog.csdn.net/jiangeeq/article/details/79499324)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Docker/安装docker-compose.md b/附件/2026/个人知识库/Docker/安装docker-compose.md new file mode 100755 index 0000000..8c4fdeb --- /dev/null +++ b/附件/2026/个人知识库/Docker/安装docker-compose.md @@ -0,0 +1,4 @@ +## INSTALL AS A CONTAINER +## Compose can also be run inside a container, from a small bash script wrapper. To install compose as a container run this command: +sudo curl -L --fail [https://github.com/docker/compose/releases/download/1.25.4/run.sh](https://github.com/docker/compose/releases/download/1.25.4/run.sh) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose + > 来自 <[https://docs.docker.com/compose/install/#alternative-install-options](https://docs.docker.com/compose/install/#alternative-install-options)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_CentOS7防火墙设置.md b/附件/2026/个人知识库/Linux/CentOS_CentOS7防火墙设置.md new file mode 100755 index 0000000..4251e69 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_CentOS7防火墙设置.md @@ -0,0 +1,53 @@ +**一、****FirewallD****简介** +FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。 +相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。 +守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。 +**二、****FirewallD****特性** + +- 守护进程应用程序、守护进程和用户可以通过 D-BUS 请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。通过所谓的直接接口,其他的服务(例如 libvirt )能够通过 iptables 变元(arguments)和参数(parameters)增加自己的规则。amanda 、ftp 、samba 和 tftp 服务的 netfilter 防火墙助手也被“守护进程”解决了,只要它们还作为预定义服务的一部分。附加助手的装载不作为当前接口的一部分。由于一些助手只有在由模块控制的所有连接都关闭后才可装载。因而,跟踪连接信息很重要,需要列入考虑范围。 +- 静态防火墙(system-config-firewall/lokkit)使用 system-config-firewall 和 lokkit 的静态防火墙模型实际上仍然可用并将继续提供,但却不能与“守护进程”同时使用。用户或者管理员可以决定使用哪一种方案。在软件安装,初次启动或者是首次联网时,将会出现一个选择器。通过它你可以选择要使用的防火墙方案。其他的解决方案将保持完整,可以通过更换模式启用。firewall daemon 独立于 system-config-firewall,但二者不能同时使用。 +- 区域网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。 +- 预定义服务服务是端口和/或协议入口的组合。备选内容包括 netfilter 助手模块以及 IPv4、IPv6地址。 +- 端口和协议定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。 +- ICMP阻塞可以选择 Internet 控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。 +- 伪装私有网络地址可以被映射到公开的IP地址。这是一次正规的地址转换。 +- 端口转发端口可以映射到另一个端口以及/或者其他主机。 +- 哪个区域可用?由firewalld 提供的区域按照从不信任到信任的顺序排序。 +- 丢弃任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。 +- 阻塞任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。 +- 公开用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。 +- 外部用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机,只允许选中的连接接入。 +- 隔离区(dmz)用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。 +- 工作用在工作网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。 +- 家庭用在家庭网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。 +- 内部用在内部网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。 +- 受信任的允许所有网络连接。 +- 我应该选用哪个区域?例如,公共的 WIFI 连接应该主要为不受信任的,家庭的有线网络应该是相当可信任的。根据与你使用的网络最符合的区域进行选择。 +- 由NetworkManager控制的网络连接防火墙不能够通过 NetworkManager 显示的名称来配置网络连接,只能配置网络接口。因此在网络连接之前 NetworkManager 将配置文件所述连接对应的网络接口告诉 firewalld 。如果在配置文件中没有配置区域,接口将配置到 firewalld 的默认区域。如果网络连接使用了不止一个接口,所有的接口都会应用到 fiwewalld。接口名称的改变也将由 NetworkManager 控制并应用到firewalld。 +- 由脚本控制的网络对于由网络脚本控制的连接有一条限制:没有守护进程通知 firewalld 将连接增加到区域。这项工作仅在 ifcfg-post 脚本进行。因此,此后对网络连接的重命名将不能被应用到firewalld。同样,在连接活动时重启 firewalld 将导致与其失去关联。现在有意修复此情况。最简单的是将全部未配置连接加入默认区域。 +- 使用firewalld图形界面工具:firewall-configfirewall-cmd命令行工具:firewall-cmd + +**三、****FirewallD****配置** + +- Firewalld命令: + +# 进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务  +# 区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public +# 接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域  +# 端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)  +firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)  +**注:如果某个接口不属于任何****Zone****,那么这个接口的所有数据包使用默认的****Zone****的规则。** + +- 命令含义:--zone #作用域--add-port=80/tcp #添加端口,格式为:端口/通讯协议--permanent #永久生效,没有此参数重启后失效 +- Systemctl命令: + +systemctl start firewalld.service #启动服务systemctl stop firewalld.service #关闭服务systemctl reloadt firewalld.service #重载配置systemctl restart firewalld.service #重启服务systemctl status firewalld.service #显示服务的状态systemctl enable firewalld.service #在开机时启用服务systemctl disable firewalld.service #在开机时禁用服务systemctl is-enabled firewalld.service #查看服务是否开机启动systemctl list-unit-files|grep enabled #查看已启动的服务列表systemctl --failed #查看启动失败的服务列表 + +- 关闭CentOS7自带Firewall启用iptables: + +yum install iptables-services #安装iptables systemctl stop firewalld.service #停止firewalld systemctl mask firewalld.service #禁止自动和手动启动firewalld systemctl start iptables.service #启动iptablessystemctl start ip6tables.service #启动ip6tables systemctl enable iptables.service #设置iptables自启动 systemctl enable ip6tables.service #设置ip6tables自启动 注:静态防火墙规则配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables + +作者:风吹我已散博客 +链接:https://www.jianshu.com/p/a2e8829aa50e +来源:简书 +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间.md b/附件/2026/个人知识库/Linux/CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间.md new file mode 100755 index 0000000..e5aa4a8 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间.md @@ -0,0 +1,50 @@ +**NTP****简介:** +NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。 +在计算机的世界里,时间非常地重要 +例如:对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间? +NTP就是用来解决这个问题的,NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。 +它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。 +它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议攻击。 + +**环境:** +## 系统:====CentOS Linux release 7.4.1708 (Core) +## NTP Server**==服务器****IP****:**==192.168.0.15 +## NTP Client**==客户端****IP****:**==192.168.0.16 + +**1****、搭建****NTP****服务器** +**1.1****、查看服务器是否安装****ntp****,系统默认安装****ntpdate****;** +[root@localhost ~]# rpm -qa |grep ntpntpdate-4.2.6p5-28.el7.centos.x86_64ntp-4.2.6p5-28.el7.centos.x86_64 +**1.2****、安装****ntp****,****ntpdate****已经系统默认安装过了** +[root@localhost ~]# yum install -y ntp +**1.3****、修改****ntp****配置文件** + +[](javascript:void\(0\);) + +[root@localhost ~]# vim /etc/ntp.conf +把配置文件下面四行注释掉:server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst然后在下面添加这几行:server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst + +[](javascript:void\(0\);) + +**1.4****、启动****ntp****服务,并开机自启动** +[root@localhost ~]# systemctl start ntpd[root@localhost ~]# systemctl enable ntpd +**1.5****、查询****ntp****是否同步** +[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter**=****=****=****=****=****=****=****=****=****=****=****=****=****=****=**===*119.28.206.193 100.122.36.196 2 u 128 128 377 19.711 -0.468 5.363 +**1.6****、开启防火墙****ntp****默认端口****udp123** +[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=123/udpsuccess[root@localhost ~]# firewall-cmd --reloadsuccess + +**2****、****NTP****客户端配置** +安装的NTP跟上面的步骤一样 +**2.1****、修改****ntp****配置文件,将上面的****NTP****服务器作为客户端同步****NTP****时间服务器** + +[](javascript:void\(0\);) + +[root@localhost ~]# vim /etc/ntp.conf#配置允许NTP Server时间服务器主动修改本机的时间restrict 192.168.0.15 nomodify notrap noquery#注释掉其他时间服务器#server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburst#配置时间服务器为本地搭建的NTP Server服务器server 192.168.0.15 + +[](javascript:void\(0\);) + +**2.2****、与****NTP server****服务器同步一下时间:** +[root@localhost ~]# ntpdate -u 192.168.0.15 +**2.3****、查看****ntp****同步状态** +能看到已经成功同步,要记得开启ntpd这个服务器 +[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter**=****=****=****=****=****=****=****=****=****=****=****=****=****=****=**=== 192.168.0.15 119.28.206.193 3 u 7 64 1 0.217 -288085 0.000 + > 来自 <[https://www.cnblogs.com/Sungeek/p/10197345.html](https://www.cnblogs.com/Sungeek/p/10197345.html)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_Harbor 开启https 认证.md b/附件/2026/个人知识库/Linux/CentOS_Harbor 开启https 认证.md new file mode 100755 index 0000000..9b29209 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_Harbor 开启https 认证.md @@ -0,0 +1,127 @@ +openssl req \ +-newkey rsa:4096 -nodes -sha256 -keyout ca.key \ +-x509 -days 3650 -out ca.crt \ +-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=test/emailAddress=11111111@qq.com" + openssl req \ +-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \ +-out harbor-registry.csr \ +-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=10.10.200.175/emailAddress=974418136@qq.com" + echo subjectAltName = IP:10.10.200.175 > extfile.cnf + openssl x509 -req -days 3650 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt + +## 因为Harbor发布时默认并不包含certificates,并使用http来提供registry请求服务。然而,我们建议在实际的生产环境中还是要使用安全的https。Harbor有一个Nginx实例以作为其他所有服务的反向代理。可以使用prepare脚本来配置Nginx以支持https。 +**1. 停止Harbor** +## 上一章我们使用的是Harbor默认的http方式工作,这里我们首先将Harbor停止,并删除掉原有的一些数据,以恢复到一个干净的环境: +## # docker-compose down -v**==****# ls /data/*********# rm -rf /data/database********# rm -rf /data/registry********# rm -rf /data/*********# rm -rf /var/log/harbor*********#** == +## 注意,可能是因为目前Harbor工作负载过重,导致上面调用**==docker-compose down -v**==经常会失败,可用如下方式来停止: +## # docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker stop**==**==# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker rm -vf +**2. 获取证书** +## 这里假设你的registry主机名为**==reg.yourdomain.com****,并且通过DNS记录能够找到你运行Harbor的主机。首先你应该从CA处获得一个certificate。该certificate通常包含一个****a.crt****文件和一个****a.key****文件,例如:****yourdomain.com.crt****以及****yourdomain.com.key**==。 +## 在测试或开发环境下,你也许会使用一个自签名证书,而不是从CA那里获取。可以通过如下的命令产生你自己的证书: +**2.1 创建自签名根证书** +## 可以通过如下的方式来产生一个**==私钥****及****自签名证书**==: +## # openssl req \**==** **-newkey rsa:4096 -nodes -sha256 -keyout ca.key \****** **-x509 -days 365 -out ca.crt**== +**2.2 产生证书签名请求** +## 假如你使用类似于**==reg.yourdomain.com****的FQDN(Fully Qualified Domain Name)方式来连接registry主机,则你必须使用****reg.yourdomain.com**==来作为CN(Common Name)。否则,假如你使用IP地址来连接你的registry主机的话,CN可以指定为任何值(例如指定为你的名字): +## # openssl req \**==** **-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \****** **-out yourdomain.com.csr**== +**2.3 为registry主机产生证书** +## 假如你使用类似于**==reg.yourdomain.com**==的FQDN(Full Qualified Domain Name)方式来连接registry主机,你可以使用如下的命令来为registry主机产生证书: +## # openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt==== +## 假如你是使用ip的话, 比如使用**==192.168.1.101**==来连接registry主机的话,你需要使用如下命令: +## # echo subjectAltName = IP:192.168.1.101 > extfile.cnf==== +## # openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com**==**==.crt +**3. 配置与安装** +## 在你获得**==yourdomain.com.crt****与****yourdomain.com.key****文件之后,你可以将它们放到一个目录,比如****/root/cert/**==: +## # cp yourdomain.com.crt /root/cert/**==****# cp yourdomain.com.key /root/cert/** == +## 然后修改**==harbor.cfg****配置文件,更新hostname及protocol,然后更新****ssl_cert****及****ssl_cert_key**==: +## #set hostname**==****hostname = reg.yourdomain.com********#set ui_url_protocol********ui_url_protocol = https********......********#The path of cert and key files for nginx, they are applied only the protocol is set to https** ******ssl_cert = /root/cert/yourdomain.com.crt********ssl_cert_key = /root/cert/yourdomain.com.key**== +## 然后再执行如下命令为Harbor产生配置文件: +## # ./prepare==== +## 假如当前**==Harbor****正在运行的话,停止并移除当前的运行实例。通过如下方式你的****image data**==仍会保留在文件系统中: +## # docker-compose down==== +## 最后,重启Harbor。 +## 在设置了**==https**==之后,你可以通过如下的步骤来进行验证: + +- **打开浏览器输入访问地址****https://reg.yourdomain.com****,就会显示出Harbor的 UI界面** +- **在安装有docker daemon的机器上(请确保没有****--insecure-registry****设置),你必须拷贝上述步骤所产生的****ca.crt****到****/etc/docker/certs.d/reg.yourdomain.com****目录(或者****registry host IP****目录)。假如该目录并不存在的话,请创建该目录。假如你将nginx 443端口映射到了其他端口的话,则你必须创建****/etc/docker/certs.d/reg.yourdomain.com:port****目录(或者****registry host IP:port****目录),然后运行相应的docker命令行来验证https是否工作正常:** + +## # docker login reg.yourdomain.com==== +## 假如你已经将nginx 443端口映射到了其他端口的话,你需要在登录时添加相应的端口,例如: +## # docker login reg.yourdomain.com:port==== +**4. Troubleshooting** +## 1) 你也许从一个certificate issuer处获得了一个intermediate certificate。在这种情况下,你可以将该intermediate certificate与你自己的certificate合并,创建出一个certificate bundle。你可以通过如下命令来实现: +## # cat intermediate-certificate.pem >> yourdomain.com.crt +## 2) 在有一些docker daemon运行的操作系统上,你也许需要在操作系统级别信任该证书 + +- **在Ubuntu操作系统上,你可以通过如下命令来完成** + +## # cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt**==****# update-ca-certificates**== + +- **在Redhat(Centos等)操作系统上,你可以通过如下命令来完成** + +## # cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt**==****# update-ca-trust**== +**5. 部署示例** +## 我们当前部署环境ip地址为====192.168.69.128 +**5.1 获得证书文件** +**1) 产生根证书** +## # openssl req \**==** **-newkey rsa:4096 -nodes -sha256 -keyout ca.key \****** **-x509 -days 365 -out ca.crt \****** **-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=test/emailAddress=11111111@qq.com"**== +## # ls**==****ca.crt ca.key**== +**2) 产生证书签名请求** +## # openssl req \**==** **-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \****** **-out harbor-registry.csr \****** **-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=192.168.69.128/emailAddress=11111111@qq.com"**== +## # ls**==****ca.crt ca.key harbor-registry.csr harbor-registry.key**== +**3) 为registry产生证书** +## # echo subjectAltName = IP:192.168.69.128 > extfile.cnf==== +## # openssl x509 -req -days 365 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt==== +## # ls**==**==ca.crt ca.key ca.srl extfile.cnf harbor-registry.crt harbor-registry.csr harbor-registry.key +**5.2 配置及安装** +## 1) 拷贝harbor-registry证书到**==/opt/cert**==目录 +## # mkdir -p /opt/cert**==****# cp harbor-registry.crt /opt/cert/********# cp harbor-registry.key /opt/cert/**== +## 2) 修改harbor.cfg配置文件 +## #set hostname**==****hostname = 192.168.69.128********#set ui_url_protocol********ui_url_protocol = https********......********#The path of cert and key files for nginx, they are applied only the protocol is set to https** ******ssl_cert = /opt/cert/harbor-registry.crt********ssl_cert_key = /opt/cert/harbor-registry.key**== +## 3) 重新产生配置文件 +## # ./prepare==== +## 4) 关闭harbor +## # docker-compose down** ** +## 5) 查看docker daemon是否有**==--insecure-registry**==选项 +## 如果仍有该选项,请将其去掉,并执行如下命令重启docker daemon: +## # systemctl daemon-reload**==****# systemctl restart docker**== +## 6) 重启Harbor +## # docker-compose up -d**==****Creating network "harbor_harbor" with the default driver********Creating harbor-log ... done********Creating registry ... done********Creating harbor-adminserver ... done********Creating harbor-db ... done********Creating harbor-ui ... done********Creating harbor-jobservice ... done********Creating nginx ... done**== +## # docker ps**==****CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES********c7b4d837fefc vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 6 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx********257ec984fc98 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 6 seconds ago Up 4 seconds (health: starting) harbor-jobservice********331fe98b1623 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 8 seconds ago Up 5 seconds (health: starting) harbor-ui********d155d8a3cf00 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 10 seconds ago Up 7 seconds (health: starting) 3306/tcp harbor-db********183a8f508491 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 10 seconds ago Up 7 seconds (health: starting) harbor-adminserver********579642c3cecc vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 10 seconds ago Up 7 seconds (health: starting) 5000/tcp registry********06a1618f789e vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 10 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log**== +## 7) 通过https形式访问Harbor + +- **通过浏览器访问** + +## 这里首先需要将上面产生的**==ca.crt****导入到浏览器的****受信任的根证书**==中。然后就可以通过https进行访问(这里经过测试,Chrome浏览器、IE浏览器可以正常访问,但360浏览器不能正常访问) + +- **通过docker命令来访问** + +## 首先新建**==/etc/docker/certs.d/192.168.69.128****目录,然后将上面产生的****ca.crt**==拷贝到该目录: +## # mkdir -p /etc/docker/certs.d/192.168.69.128**==****# cp ca.crt /etc/docker/certs.d/192.168.69.128/**== +## 然后登录到docker registry: +## # docker login 192.168.69.128**==****Username (admin): admin********Password:** ******Login Succeeded**== +## 用向**==registry**==中上传一个镜像: +## # docker images**==****192.168.69.128/library/redis alpine c27f56585938 3 weeks ago 27.7MB**== +## [root@localhost test]# docker push 192.168.69.128/library/redis:alpine**==****The push refers to repository [192.168.69.128/library/redis]********f6b9463783dc: Pushed** ******222a85888a99: Pushed** ******1925395eabdd: Pushed** ******c3d278563734: Pushed** ******ad9247fe8c63: Pushed** ******cd7100a72410: Pushed** ******alpine: digest: sha256:9d017f829df3d0800f2a2582c710143767f6dda4df584b708260e73b1a1b6db3 size: 1568**== + +- **通过curl命令来访问 registry API版本号** + +## 查询registry API版本号: +## # curl -iL -X GET** **https://192.168.69.128/v2** **--cacert ca.crt**==****HTTP/1.1 301 Moved Permanently********Server: nginx********Date: Tue, 10 Apr 2018 09:33:39 GMT********Content-Type: text/html********Content-Length: 178********Location:** **https://192.168.69.128/v2/********Connection: keep-alive**== +## HTTP/1.1 401 Unauthorized**==****Server: nginx********Date: Tue, 10 Apr 2018 09:33:39 GMT********Content-Type: application/json; charset=utf-8********Content-Length: 87********Connection: keep-alive********Docker-Distribution-Api-Version: registry/2.0********Set-Cookie: beegosessionID=575f32ac760f52c8cf1cdb748e48ab5e; Path=/; HttpOnly********Www-Authenticate: Bearer realm="https://192.168.69.128/service/token",service="harbor-registry"**== +## {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}==== +## # curl -iL -X GET -u admin:Harbor12345** **https://192.168.69.128/service/token?account=admin\&service=harbor-registry** **--cacert ca.crt**==****HTTP/1.1 200 OK********Server: nginx********Date: Tue, 10 Apr 2018 09:34:39 GMT********Content-Type: application/json; charset=utf-8********Content-Length: 1100********Connection: keep-alive********Set-Cookie: beegosessionID=77bc62dcdc4a810a0e208487a89f069a; Path=/; HttpOnly**== +## {**==** **"token": "nHLZqMPw",****** **"expires_in": 1800,****** **"issued_at": "2018-04-10T09:34:39Z"********}**== +## # curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer nHLZqMPw"** **https://192.168.69.128/v2** **--cacert ca.crt**==****HTTP/1.1 301 Moved Permanently********Server: nginx********Date: Tue, 10 Apr 2018 09:36:48 GMT********Content-Type: text/html********Content-Length: 178********Location:** **https://192.168.69.128/v2/********Connection: keep-alive**== +## HTTP/1.1 200 OK**==****Server: nginx********Date: Tue, 10 Apr 2018 09:36:48 GMT********Content-Type: application/json; charset=utf-8********Content-Length: 2********Connection: keep-alive********Docker-Distribution-Api-Version: registry/2.0********Set-Cookie: beegosessionID=e651b65d891617a999254ec875c1c63c; Path=/; HttpOnly**== +## 上面为了显示,我们对返回过来的**==token****做了适当的裁剪。此外这里****curl****命令不适用****-k**==选项,表示需要对服务器证书进行检查。 + +- **通过curl来访问registry中的镜像列表** + +## # curl -iL -X GET -u admin:Harbor12345** **https://192.168.69.128/service/token?account=admin\&service=harbor-registry\&scope=registry:catalog:*** **--cacert ca.crt**==****HTTP/1.1 200 OK********Server: nginx********Date: Mon, 09 Apr 2018 09:33:52 GMT********Content-Type: application/json; charset=utf-8********Content-Length: 1166********Connection: keep-alive********Set-Cookie: beegosessionID=648fd5a5ec4f06389d45c02f7f5971b4; Path=/; HttpOnly**== +## {**==** **"token": "A7yfEdUBYD3bDhLM",****** **"expires_in": 1800,****** **"issued_at": "2018-04-09T09:33:52Z"********}**== +## # curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer LA7yfEdUBYD3bDhLM"** **http://192.168.69.128/v2/_catalog** **--cacert ca.crt**==****HTTP/1.1 200 OK********Server: nginx********Date: Mon, 09 Apr 2018 09:36:35 GMT********Content-Type: application/json; charset=utf-8********Content-Length: 34********Connection: keep-alive********Docker-Distribution-Api-Version: registry/2.0********Set-Cookie: beegosessionID=1b84e760ab0234045f06680e56e28818; Path=/; HttpOnly**== +## {"repositories":["library/redis"]}==== +## 上面为了显示,我们对返回过来的**==token****做了适当的裁剪。此外这里****curl****命令不适用****-k**==选项,表示需要对服务器证书进行检查。 + > 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)> + > 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_Jenkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。.md b/附件/2026/个人知识库/Linux/CentOS_Jenkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。.md new file mode 100755 index 0000000..d03d92e --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_Jenkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。.md @@ -0,0 +1,20 @@ +J**enkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。** +## 安装 java +## $ sudo yum** **install** **-y** **java**==**==...... +## 安装Jenkins +## $ sudo wget -O /etc/yum.repos.d/jenkins.repo** **http:**==//jenkins-ci.org/redhat/jenkins.repo********$ sudo rpm --****import** **http:****//pkg.jenkins-ci.org/redhat/jenkins-ci.org.key********$ sudo yum install -y jenkins******==...... +## 配置 +## Jenkins 的安装目录是:/var/lib/jenkins/ +## Jenkins 的皮遏制文件地址:/etc/sysconfig/jenkins +## 这里介绍下三个比较重要的配置: +## JENKINS_HOME +## JENKINS_USER +## JENKINS_PORT +## JENKINS_HOME是Jenkins的主目录,Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件,生成的文件都在这个目录下。 +## JENKINS_USER是Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限。 +## JENKINS_PORT是Jenkins的端口,默认端口是8080,为了和别的系统占用端口冲突,建议改变。 +## 授权 +## 有时候Jenkins需要操作别的用户的文件或者执行脚本,那么就得有对应的权限,比如Jenkins用户执行docker命令进行镜像制作与上传,用如下的命令即可。 +## $ sudo usermod -a -G docker jenkins +## 启动 Jenkins +$ systemctl enable jenkins # 开机启动$ systemctl start jenkins # 启动jenkins \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_SELinux.md b/附件/2026/个人知识库/Linux/CentOS_SELinux.md new file mode 100755 index 0000000..cc96aa7 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_SELinux.md @@ -0,0 +1,148 @@ +## 一、前言 +## 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。 +## SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。 +## SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。 +## 如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。 +## 掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。 +## 本文均在 CentOS 7.4.1708 系统中操作。 +## 本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢! +## 二、SELinux 的作用及权限管理机制 +## 2.1 SELinux 的作用 +## SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。 +## 设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕? +## SELinux 就是来解决这个问题的。 +## 2.2 DAC +## 在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。 +## 只要访问这个资源的进程符合以上的条件就可以被访问。 +## 而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。 +## 这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。 +## 2.3 MAC +## 在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。 +## 这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。 +## 即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。 +## 这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。 +## 而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。 +## 下文中的操作均为 MCS 模式。 +## 2.4 DAC 和 MAC 的对比 +## 这里引用一张图片来说明。 +## 可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。 +## 三、SELinux 基本概念 +## 3.1 主体(Subject) +## 可以完全等同于进程。 +## 注:为了方便理解,如无特别说明,以下均把进程视为主体。 +## 3.2 对象(Object) +## 被主体访问的资源。可以是文件、目录、端口、设备等。 +## 注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。 +## 3.3 政策和规则(Policy & Rule) +## 系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。 +## 而哪些进程需要管制、要怎么管制是由政策决定的。 +## 一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。 +## 规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。 +## 在 CentOS 7 系统中,有三套政策,分别是: +## 1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。 +## 2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。 +## 3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。 +## 政策可以在 /etc/selinux/config 中设定。 +## 3.4 安全上下文(Security Context) +## 安全上下文是 SELinux 的核心。 +## 安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。 +## 一个「进程安全上下文」一般对应多个「文件安全上下文」。 +## 只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。 +## 文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。 +## 需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。 +## 安全上下文的结构及含义 +## 安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。 +## 3.5 SELinux 的工作模式 +## SELinux 有三种工作模式,分别是: +## 1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。 +## 2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。 +## 3. disabled:关闭 SELinux。 +## SELinux 工作模式可以在 /etc/selinux/config 中设定。 +## 如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。 +## enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。 +## 需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。 +## SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。 +## 3.6 SELinux 工作流程 +## 这里引用一张图片,不必过多解释。 +## 注:上面的安全文本指的就是安全上下文。 +## 四、SELinux 基本操作 +## 4.1 查询文件或目录的安全上下文 +## 命令基本用法 +## ls -Z +## 用法举例 +## 查询 /etc/hosts 的安全上下文。 +## ls -Z /etc/hosts +## 执行结果 +## -rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts +## 4.2 查询进程的安全上下文 +## 命令基本用法 +## ps auxZ | grep -v grep | grep +## 用法举例 +## 查询 Nginx 相关进程的安全上下文。 +## ps auxZ | grep -v grep | grep nginx +## 执行结果 +## system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx +## system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process +## 4.3 手动修改文件或目录的安全上下文 +## 命令基本用法 +## chcon [...] +## 选项功能-u 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段--reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文(不加此选项则修改软链接对应文件) +## 用法举例 +## 修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。 +## chcon -u aaa_u -r bbb_r -t ccc_t test +## 4.4 把文件或目录的安全上下文恢复到默认值 +## 命令基本用法 +## restorecon [选项] [...] +## 选项功能-v打印操作过程-R递归操作 +## 用法举例 +## 添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。 +## restorecon -R /usr/share/nginx/html/ +## 4.5 查询系统中的布尔型规则及其状态 +## 命令基本用法 +## getsebool -a +## 由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。 +## 用法举例 +## 查询与 httpd 有关的布尔型规则。 +## getsebool -a | grep httpd +## 执行结果 +## httpd_anon_write --> off +## httpd_builtin_scripting --> on +## httpd_can_check_spam --> off +## httpd_can_connect_ftp --> off +## #以下省略 +## 4.6 开关一个布尔型规则 +## 命令基本用法 +## setsebool [选项] +## 选项功能-P重启依然生效 +## 用法举例 +## 开启 httpd_anon_write 规则。 +## setsebool -P httpd_anon_write on +## 4.7 添加目录的默认安全上下文 +## 命令基本用法 +## semanage fcontext -a -t "(/.*)?" +## 注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。 +## 用法举例 +## 为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。 +## semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?" +## 4.8 添加某类进程允许访问的端口 +## 命令基本用法 +## semanage port -a -t -p +## 注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。 +## 用法举例 +## 为 Nginx 需要使用 10080 的端口用于 HTTP 服务。 +## semanage port -a -t http_port_t -p tcp 10080 +## 五、SELinux 错误分析和解决 +## 5.1 认识 SELinux 日志 +## 当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。 +## 这时候我们就需要借助 SELinux 违规日志来分析解决。 +## SELinux 违规日志保存在 /var/log/audit/audit.log 中。 +## /var/log/audit/audit.log 的内容大概是这样的。 +## type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1 +## type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' +## ... +## 该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。 +## 5.2 使用sealert分析错误 +## 命令基本用法 +## sealert -a /var/log/audit/audit.log +## 执行完命令之后,系统需要花一段时间去分析日志中的违规行为并给出分析报告。分析报告的结构讲解请看下图: + > 来自 <[https://blog.csdn.net/yanjun821126/article/details/80828908](https://blog.csdn.net/yanjun821126/article/details/80828908)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_centos支持rz、sz命令.md b/附件/2026/个人知识库/Linux/CentOS_centos支持rz、sz命令.md new file mode 100755 index 0000000..14b4c70 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_centos支持rz、sz命令.md @@ -0,0 +1,12 @@ +**centos支持rz、sz命令** + +yum install lrzsz + + +rz的用法 +在命令终端输入rz回车后,就会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。 +如图;选择要上传的文件–Add–OK + +s +sz的用法 +sz命令可以单下载一个文件,也可以多个文件同时下载 \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_查看CentOS版本方法.md b/附件/2026/个人知识库/Linux/CentOS_查看CentOS版本方法.md new file mode 100755 index 0000000..dccd56f --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_查看CentOS版本方法.md @@ -0,0 +1,38 @@ +有以下命令可以查看: + +# lsb_release -a +LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch +Distributor ID: CentOS +Description: CentOS release 5.4 (Final) +Release: 5.4 +Codename: Final + + +这个命令适用于所有的linux,包括Redhat、SuSE、Debian、Centos等发行版。 + +root@MyMail ~ # uname +Linux +root@MyMail ~ # uname -r +2.6.18-164.el5 +[root@localhost ~]# uname -a +Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux + + +以下二种方法适用于RedHat,CentOS + +root@MyMail ~ # cat /etc/redhat-release +CentOS release 5.4 (Final) + +登录到linux执行rpm -q redhat-release + +# rpm -q redhat-release +或CentOS + +root@MyMail ~ # rpm -q centos-release +centos-release-5-4.el5.centos.1 + + +**当前****centos** **版本与****redhat****对应的版本的命令** +# cat /proc/version +Linux version 2.6.9-78.ELsmp (mockbuild@builder16.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Fri Jul 25 00:04:28 EDT 2008 + > 来自 <[https://www.cnblogs.com/zzdylan/p/9930144.html](https://www.cnblogs.com/zzdylan/p/9930144.html)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_用户管理.md b/附件/2026/个人知识库/Linux/CentOS_用户管理.md new file mode 100755 index 0000000..264f996 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_用户管理.md @@ -0,0 +1,9 @@ +## 用户列表文件:====/etc/passwd +用户组列表文件:/etc/group +查看系统中有哪些用户:cut -d : -f 1 /etc/passwd +查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 +查看用户操作:w命令(需要root权限) +查看某一用户:w 用户名 +查看登录用户:who +查看用户登录历史记录:last + > 来自 <[https://www.cnblogs.com/todarcy/p/11079228.html](https://www.cnblogs.com/todarcy/p/11079228.html)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_调整 home分区 扩大 root分区.md b/附件/2026/个人知识库/Linux/CentOS_调整 home分区 扩大 root分区.md new file mode 100755 index 0000000..656781b --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_调整 home分区 扩大 root分区.md @@ -0,0 +1,88 @@ +**CentOS 7 调整 home分区 扩大 root分区** + +2. 查看分区 + +`df -h (centos-home`**和**`centos-root`**每人的名字可能不一样** + +``` +``` +) vgdisplay ( +``` + +``` +**查看空闲磁盘大小)**`` + +4. 备份home分区文件 + +``` +``` +tar cvf /tmp/home.tar /home +``` + +``` +6. 卸载/home,如果无法卸载,先终止使用/home文件系统的进程 + +`umount /home` **(卸载)** + +``` +``` + +fuser -km /home/ +``` + +``` +**(终止)**`` + +8. 删除/home所在的lv + +``` +``` +lvremove /dev/mapper/centos-home +``` + +``` +10. 扩展/root所在的lv + +``` +``` +lvextend -L +50G /dev/mapper/centos-root +``` + +``` +12. 扩展/root文件系统 + +``` +``` +xfs_growfs /dev/mapper/centos-root +``` + +``` +14. 重新创建home lv + +``` +``` +lvcreate -L 50G -n /dev/mapper/centos-home +``` + +``` +16. 创建文件系统 + +``` +``` +mkfs.xfs /dev/mapper/centos-home +``` + +``` +18. 挂载home + +``` +``` +mount /dev/mapper/centos-home +``` + +``` +20. home文件恢复 + +`tar xvf /tmp/home.tar -C /home/` + > 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)> + > 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/CentOS_软件到底安装在哪里-opt or -usr or -usr-local.md b/附件/2026/个人知识库/Linux/CentOS_软件到底安装在哪里-opt or -usr or -usr-local.md new file mode 100755 index 0000000..f69b893 --- /dev/null +++ b/附件/2026/个人知识库/Linux/CentOS_软件到底安装在哪里-opt or -usr or -usr-local.md @@ -0,0 +1,12 @@ +/usr: 系统级的目录,可以理解为C:/Windows/;/usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,可以理解为C:/Windows/System32 +*比如Java的安装目录,我会放在这里。 + +/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。 +用户自己编译的软件默认会安装到这个目录下。 +*比如Hadoop,Tomcat的安装目录我一般会放在/usr/目录下 + +/opt:给主机额外安装软件所摆放的目录。用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。 +*比如临时上传到Linux里的软件;tar.gz rpm等文件,用作软件仓库。 +———————————————— +版权声明:本文为CSDN博主「佛系亚当」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 +原文链接:https://blog.csdn.net/adamlinsfz/article/details/84307097 \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/INDEX_Linux.md b/附件/2026/个人知识库/Linux/INDEX_Linux.md new file mode 100755 index 0000000..3d7f067 --- /dev/null +++ b/附件/2026/个人知识库/Linux/INDEX_Linux.md @@ -0,0 +1,49 @@ +--- +title: Linux 索引 +tags: + - 索引 +created: 2026-04-21 +--- + +# Linux + +> 自动生成的索引文件 + +## 文件列表 + +| 文件名 | 大小 | 说明 | +|--------|------|------| +| [[CentOS_CentOS7防火墙设置]] | 9KB | | +| [[CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间]] | 3KB | | +| [[CentOS_Harbor 开启https 认证]] | 15KB | | +| [[CentOS_Jenkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。]] | 1KB | | +| [[CentOS_SELinux]] | 10KB | | +| [[CentOS_centos支持rz、sz命令]] | 388B | | +| [[CentOS_查看CentOS版本方法]] | 1KB | | +| [[CentOS_用户管理]] | 479B | | +| [[CentOS_调整 home分区 扩大 root分区]] | 1KB | | +| [[CentOS_软件到底安装在哪里-opt or -usr or -usr-local]] | 1KB | | +| [[Ubuntu 16.04 64bit 系统的根目录下有这些文件夹]] | 2KB | | +| [[Vim命令合集]] | 8KB | | +| [[ubuntu中管理用户和用户组]] | 512B | | +| [[ubuntu查看进程]] | 355B | | +| [[前言]] | 1KB | | +| [[常用命令]] | 11KB | | +| [[常用命令2]] | 23KB | | +| [[更改所有子文件和子目录所有者权限]] | 1012B | | +| [[查看目录大小]] | 405B | | +| [[百度云_百度云一年]] | 166B | | +| [[给双系统的ubuntu挂载windows的硬盘]] | 1KB | | +| [[阿里云_Php]] | 1KB | | +| [[阿里云_Ubuntu 16.04 wordpress环境搭建]] | 182B | | +| [[阿里云_Ubuntu ftp使用]] | 4KB | | +| [[阿里云_Ubuntu管理apache2]] | 4KB | | +| [[阿里云_Ubuntu管理mysql]] | 13KB | | +| [[阿里云_Ubuntu管理php]] | 592B | | +| [[阿里云_Ubuntu管理wordpress]] | 2KB | | +| [[阿里云_Untitled-20260407231646]] | 0B | | +| [[阿里云_mysql用户权限设置]] | 3KB | | +| [[阿里云_远程实例]] | 351B | | + +--- +*共 31 个文件* diff --git a/附件/2026/个人知识库/Linux/Ubuntu 16.04 64bit 系统的根目录下有这些文件夹.md b/附件/2026/个人知识库/Linux/Ubuntu 16.04 64bit 系统的根目录下有这些文件夹.md new file mode 100755 index 0000000..77d9894 --- /dev/null +++ b/附件/2026/个人知识库/Linux/Ubuntu 16.04 64bit 系统的根目录下有这些文件夹.md @@ -0,0 +1,60 @@ +## bin core home lib64 mnt root snap tmp vmlinuz +## boot dev initrd.img lost+found opt run srv usr +## cdrom etc lib media proc sbin sys var + +## 下面, 我们逐个分析这些文件夹的用处 +## bin +## 系统 shell (终端) 命令存放于此 +## core +## home +## 除了root用户以外的用户默认主目录, 每个子目录都是一个用户名 +## lib64 +## mnt +## root +## root用户的主目录 +## snap +## tmp +## boot +## dev +## lost+found +## opt +## 供本系统所有用户使用软件一般安装在此 +**有人也喜欢把软件安装在** **/usr/local/** +## run +## srv +## usr +**/usr/** **目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux发行版本自带的主要的应用程序。** +**/usr/local/** **目录一般安装第三方的软件** +**/usr/local/bin** **放置用户自己安装的小的shell命令,和一些在/usr/local目录下大应用程序的符号连接。****/usr/local/bin/** **目录下的命令可以直接在shell里使用** +**/usr/share/fonts****是字体文件夹,可以在这里新建文件夹** **winFonts/****,把ttf格式的字体放进去** +## 然后将字体文件拷贝到此文件夹下: +sudo cp ~/Desktop/font/*.ttf /usr/share/fonts/winFonts/ + +- **1** +- **2** + +## 然后,改变权限: +sudo chmod 644 /usr/share/fonts/winFonts/*.ttf + +- **1** +- **2** + +## cdrom +## etc +## 系统全局配置文件一般在此 +## /etc/apt/ +## Ubuntu 软件源列表, 也就是 apt-get 命令执行时从哪些地方下载包的依据 +## lib +## media +## proc +## sbin +## sys +## var + > 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)> + +**开始安装** +## cd /usr/share/fonts/winFonts/ +## sudo mkfontscale (创建雅黑字体的fonts.scale文件,它用来控制字体旋转缩放) +## sudo mkfontdir (创建雅黑字体的fonts.dir文件,它用来控制字体粗斜体产生) +## sudo fc-cache -fv (建立字体缓存信息,也就是让系统认识雅黑) + > 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)> \ No newline at end of file diff --git a/附件/2026/个人知识库/Linux/Vim命令合集.md b/附件/2026/个人知识库/Linux/Vim命令合集.md new file mode 100755 index 0000000..0eba4d5 --- /dev/null +++ b/附件/2026/个人知识库/Linux/Vim命令合集.md @@ -0,0 +1,175 @@ +**命令历史** +以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 +**启动vim** +在命令行窗口中输入以下命令即可 +vim 直接启动vim +vim filename 打开vim并创建名为filename的文件 +**文件命令** +打开单个文件 +vim file +同时打开多个文件 +vim file1 file2 file3 ... +在vim窗口中打开一个新文件 +:open file +在新窗口中打开文件 +:split file +切换到下一个文件 +:bn +切换到上一个文件 +:bp +查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。 +:args +打开远程文件,比如ftp或者share folder +:e [ftp://192.168.10.76/abc.txt](ftp://192.168.10.76/abc.txt) +:e [\\qadrive\test\1.txt](file:///\\qadrive\test\1.txt) +**vim的模式** +正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空 +插入模式(按i键进入) 左下角显示--INSERT-- +可视模式(不知道如何进入) 左下角显示--VISUAL-- +**导航命令** +% 括号匹配 +**插入命令** +i 在当前位置生前插入 +I 在当前行首插入 +a 在当前位置后插入 +A 在当前行尾插入 +o 在当前行之后插入一行 +O 在当前行之前插入一行 +**查找命令** +/text 查找text,按n健查找下一个,按N健查找前一个。 +?text 查找text,反向查找,按n健查找下一个,按N健查找前一个。 +vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$ +:set ignorecase 忽略大小写的查找 +:set noignorecase 不忽略大小写的查找 +查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。 +:set hlsearch 高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。 +:set nohlsearch 关闭高亮搜索显示 +:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。 +:set incsearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。 +:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。 +**替换命令** +ra 将当前字符替换为a,当期字符即光标所在字符。 +s/old/new/ 用old替换new,替换当前行的第一个匹配 +s/old/new/g 用old替换new,替换当前行的所有匹配 +%s/old/new/ 用old替换new,替换所有行的第一个匹配 +%s/old/new/g 用old替换new,替换整个文件的所有匹配 +:10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。 +ddp 交换光标所在行和其下紧邻的一行。 +**移动命令** +h 左移一个字符 +l 右移一个字符,这个命令很少用,一般用w代替。 +k 上移一个字符 +j 下移一个字符 +以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!