Update from Sync Service
This commit is contained in:
23
实践积累/专业领域/GNSS/INDEX_GNSS.md
Executable file
23
实践积累/专业领域/GNSS/INDEX_GNSS.md
Executable file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: GNSS 索引
|
||||
tags:
|
||||
- 索引
|
||||
created: 2026-04-21
|
||||
---
|
||||
|
||||
# GNSS
|
||||
|
||||
> 自动生成的索引文件
|
||||
|
||||
## 文件列表
|
||||
|
||||
| 文件名 | 大小 | 说明 |
|
||||
|--------|------|------|
|
||||
| [[RATIO]] | 439B | |
|
||||
| [[RMS]] | 477B | |
|
||||
| [[什么是GPS最简独立闭合环]] | 893B | |
|
||||
| [[同步环、异步环和重复基线]] | 1KB | |
|
||||
| [[闭合差]] | 488B | |
|
||||
|
||||
---
|
||||
*共 5 个文件*
|
||||
9
实践积累/专业领域/GNSS/RATIO.md
Executable file
9
实践积累/专业领域/GNSS/RATIO.md
Executable file
@@ -0,0 +1,9 @@
|
||||
RATIO
|
||||
RATIO即整周模糊度分解后,次最小RMS与最小RMS的比值。即:
|
||||
|
||||

|
||||
|
||||
RATIO 反映了所确定出的整周未知数参数的可靠性,这一指标取决
|
||||
于多种因素,既与观测值的质量有关,也与观测条件的好坏有关。
|
||||
RATIO是反映基线质量好坏的最关键值,通常情况下,要求RATIO值
|
||||
大于1.8。
|
||||
12
实践积累/专业领域/GNSS/RMS.md
Executable file
12
实践积累/专业领域/GNSS/RMS.md
Executable file
@@ -0,0 +1,12 @@
|
||||
RMS 即均方根误差(Root Mean Square),即:
|
||||
|
||||

|
||||
|
||||
其中:
|
||||
V为观测值的残差;
|
||||
P为观测值的权;
|
||||
n-f为观测值的总数减去未知数个数。
|
||||
RMS表明了观测值的质量。RMS越小,观测值质量越好;
|
||||
反之,表明观测值质量越差。它不受观测条件(如卫星分布好坏)的影响。
|
||||
依照数理统计的理论,观测值误差落在1.96 倍RMS 的范围内的概率
|
||||
是95%。
|
||||
8
实践积累/专业领域/GNSS/什么是GPS最简独立闭合环.md
Executable file
8
实践积累/专业领域/GNSS/什么是GPS最简独立闭合环.md
Executable file
@@ -0,0 +1,8 @@
|
||||
==三台由独立观测获得基线向量构成的闭合环。==
|
||||
==GPS控制网一般也构成一定的图形,涉及如下的概念:==
|
||||
==1、观测时段:测站上开始接收卫星信号到观测停止连续工作的时间段,简称时段。==
|
||||
==2、同步观测:两台或两台以上接收机同时对同一组卫星进行的观测。==
|
||||
==3、同步观测环:三台或三台以上接收机同步观测获得基线向量构成的闭合环,简称同步环。==
|
||||
==4、独立观测环:由独立观测获得基线向量构成的闭合环,简称独立环。==
|
||||
==5、====异步====观测环:在构成多边形环路的所有基线向量中,只要有非同步观测的基线向量,则称该多边形环路为====异步====观测环,简称====异步====环。==
|
||||
> 来自 <[https://zhidao.baidu.com/question/182755838.html](https://zhidao.baidu.com/question/182755838.html)>
|
||||
17
实践积累/专业领域/GNSS/同步环、异步环和重复基线.md
Executable file
17
实践积累/专业领域/GNSS/同步环、异步环和重复基线.md
Executable file
@@ -0,0 +1,17 @@
|
||||
1、 同步闭合环
|
||||
同步环闭合差是由同步观测基线所组成的闭合环的闭合差。
|
||||
由于同步观测基线间具有一定的内在联系,从而使得同步环闭合差在
|
||||
理论上应总是为0 的。如果同步环闭合差超限,则说明组成同步环的基线
|
||||
中至少存在一条基线向量是错误的。但反过来,如果同步环闭合差没有超
|
||||
限,只能认为静态基线在质量上,绝大部分情况下是合格的,还不能说明
|
||||
组成同步环的所有基线在质量上绝对合格。
|
||||
2、异步闭合环
|
||||
不是完全由同步观测基线所组成的闭合环称为异步环。异步环的闭合
|
||||
差称为异步环闭合差。
|
||||
当异步环闭合差满足限差要求时,则表明组成异步环的基线向量的质
|
||||
量是合格的。当异步环闭合差不满足限差要求时,则表明组成异步环的基
|
||||
线向量中至少有一条基线向量的质量不合格。要确定出哪些基线向量的质
|
||||
量不合格可以通过多个相邻的异步环或重复基线来进行。
|
||||
3、重复基线
|
||||
不同观测时段对相同的两个测站间的观测结果就是所谓重复基线。这
|
||||
些观测结果之间的差异就是重复基线较差。
|
||||
12
实践积累/专业领域/GNSS/闭合差.md
Executable file
12
实践积累/专业领域/GNSS/闭合差.md
Executable file
@@ -0,0 +1,12 @@
|
||||
闭合差的定义
|
||||
闭合环路检验是检测基线质量的有力方法。
|
||||
闭合环可分为同步环、异步环和重复基线。
|
||||
闭合环的闭合差在理论上应为0,在实际测量中,允许偏离一定的值,
|
||||
闭合环的限差请参见有关文献。
|
||||
环的闭和差有以下几类:
|
||||
1、分量闭合差,即:
|
||||
|
||||

|
||||
|
||||
2、全长相对闭合差,即:
|
||||

|
||||
18
实践积累/专业领域/PMP/INDEX_PMP.md
Executable file
18
实践积累/专业领域/PMP/INDEX_PMP.md
Executable file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: PMP 索引
|
||||
tags:
|
||||
- 索引
|
||||
created: 2026-04-21
|
||||
---
|
||||
|
||||
# PMP
|
||||
|
||||
> 自动生成的索引文件
|
||||
|
||||
## 文件列表
|
||||
|
||||
| 文件名 | 大小 | 说明 |
|
||||
|--------|------|------|
|
||||
|
||||
---
|
||||
*共 0 个文件*
|
||||
3
实践积累/专业领域/PMP/专业术语/Untitled-20260407225004.md
Executable file
3
实践积累/专业领域/PMP/专业术语/Untitled-20260407225004.md
Executable file
@@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
![[Untitled-20260407225004 - Ink.svg]]
|
||||
8
实践积累/专业领域/PMP/复习笔记/关键名词.md
Executable file
8
实践积累/专业领域/PMP/复习笔记/关键名词.md
Executable file
@@ -0,0 +1,8 @@
|
||||
BCWP=EV
|
||||
BCWS=PV
|
||||
BAC 绩效测量基准 资金需求
|
||||
道德与专业行为规范==> 责任,尊重,公正,诚实
|
||||
通用项目的生命周期4阶段==>开始项目,组织与准备,执行项目工作,结束项目
|
||||
|
||||
项目经理的胜任力==>技术项目管理,领导力,战略和商务能力
|
||||
整合的三个层面==>过程层面整合,认知层面整合,背景层面整合
|
||||
4
实践积累/专业领域/PMP/复习笔记/道德规范价值观.md
Executable file
4
实践积累/专业领域/PMP/复习笔记/道德规范价值观.md
Executable file
@@ -0,0 +1,4 @@
|
||||
责任
|
||||
尊重
|
||||
公正
|
||||
诚实
|
||||
16
实践积累/专业领域/PMP/课堂笔记/20200929.md
Executable file
16
实践积累/专业领域/PMP/课堂笔记/20200929.md
Executable file
@@ -0,0 +1,16 @@
|
||||
阶段关口的审查,是偏向紧后阶段是否可以开始,还是偏向紧前阶段是否可以结束
|
||||
|
||||
三种制约因素:范围、时间、成本(质量)
|
||||
六种制约因素:范围、时间、成本、质量、资源、风险
|
||||
|
||||
增量型,迭代,定期,在规定的时间重复执行一些管理动作,渐进明细
|
||||
敏捷项目管理,适合产品开发开发,需求多变(2到4周)
|
||||
|
||||
阶段关口,关键界面,项目整合的关键,最容易发生风险 流程和流程的衔接
|
||||
人和人
|
||||
人和部门
|
||||
流程和流程的衔接,人和人,人和部门,技术工作和管理工作的衔
|
||||
|
||||

|
||||
|
||||
![[20200929 - Ink.svg]]
|
||||
3
实践积累/专业领域/PMP/课堂笔记/20200930.md
Executable file
3
实践积累/专业领域/PMP/课堂笔记/20200930.md
Executable file
@@ -0,0 +1,3 @@
|
||||
工作授权系统 确保我们的 工作 让正确的人在正确的时候按照正确的逻辑被执行
|
||||
资源分解结构
|
||||

|
||||
8
实践积累/专业领域/PMP/课堂笔记/20201009.md
Executable file
8
实践积累/专业领域/PMP/课堂笔记/20201009.md
Executable file
@@ -0,0 +1,8 @@
|
||||

|
||||

|
||||

|
||||
|
||||
 
|
||||

|
||||

|
||||

|
||||
4
实践积累/专业领域/PMP/课堂笔记/道德规范价值观.md
Executable file
4
实践积累/专业领域/PMP/课堂笔记/道德规范价值观.md
Executable file
@@ -0,0 +1,4 @@
|
||||
责任
|
||||
尊重
|
||||
公正
|
||||
诚实
|
||||
73
实践积累/专业领域/PMP/课程作业/20200928.md
Executable file
73
实践积累/专业领域/PMP/课程作业/20200928.md
Executable file
@@ -0,0 +1,73 @@
|
||||

|
||||
|
||||
1、项目的三大特征和二大特性分别是什么?
|
||||
答:
|
||||
项目的三大特征分别是:
|
||||
|
||||
- 临时性,指项目有明确的开始时间和明确的结束时间,不会无限期延续下去。
|
||||
- 独特性,一次性,没有完全相同的项目。
|
||||
- 普遍性,无处不在,任何一个需要在特定时间内解决的问题都是项目。
|
||||
|
||||
项目的二大特征分别是:
|
||||
|
||||
- 渐进明细,应该在连续积累中,分步骤开发,以便逐步明确项目的细节特征。
|
||||
- 成果导向性,为了创造的产品服务或成果,可交付成果,(有形的产品,无形的服务,其他成果知识培训等)。
|
||||
|
||||
2、什么是商业价值,又可分为哪两类,每一个类别包含哪些常见内容?
|
||||
答:
|
||||
PMI将商业价值定义为 从商业运作中获得可量化净效益(有形和无形的效益或者两者兼有)
|
||||
主要分为有形和无形的效益。
|
||||
有形的:货币资产,股东权益,公共事业,固定设施,工具,市场份额
|
||||
无形的:商誉,品牌认知度,公共利益,商标,战略一致性,声誉
|
||||
|
||||
3、项目立项的四大要素有哪些?
|
||||
答:
|
||||
|
||||
- 符合法规,法律或社会要求
|
||||
- 满足相关方的要求或需求
|
||||
- 执行、变更业务或技术战略
|
||||
- 创造、改进或修复产品、过程或服务
|
||||
|
||||
4、什么是项目组合 ,项目集,项目,它们之间的关联和区别是什么?
|
||||
答:
|
||||
项目组合:是为看实现战略目标而组合在一起管理的项目、项目集、子项目组合和运营工作的集合。
|
||||
项目集:是一组相互关联且被协调管理的项目、子项目集和项目集活动,以便获得分别管理所无法获得的效益。
|
||||
项目: 是为了穿着独特的产品、服务、或成果而进行的临时性工作。
|
||||
运营:可以无计划,重复性的,有确定时间的 工作。
|
||||
|
||||
区别: 项目集管理和项目组合股那里的生命周期、活动、目标、重点、和效益都和项目股那里不同。
|
||||
联系: 项目组合、项目集、项目、和运营都涉及相同的相关方,还可能需要使用相同的资源。 项目组合管理是主要排列所有备选项目的优先顺序,并选择一系列的排序靠前的、最有利于实现战略目标的正确项目来做。主要就是进项投资决策,项目组合经理往往由组织中的高级管理人员兼任。
|
||||
项目集管理是要正确的地完成一系列相互配置的项目以获得最大的效益。管理项目见的内在联系。 5、项目组合管理和项目集管理的主要工作有哪些?
|
||||
答:
|
||||
项目集管理
|
||||
项目集管理指在项目集中应用知识、技能与原则来实现项目集的目标,获得分别管理项目集组成
|
||||
部分所无法实现的利益和控制。项目集组成部分指项目集中的项目和其他项目集。项目管理注重项
|
||||
目本身的相互依赖关系,以确定管理项目的最佳方法。项目集管理注重作为组成部分的项目与项目
|
||||
集之间的依赖关系,以确定管理这些项目的最佳方法。项目集和项目间依赖关系的具体管理措施可
|
||||
能包括:
|
||||
|
||||
- 调整对项目集和项目的目的和目标有影响的组织或战略方向;
|
||||
- 将项目集范围分配到项目集组成部分;
|
||||
- 管理项目集组成部分之间的依赖关系,从而以最佳方式实施项目集;
|
||||
- 管理可能影响项目集内多个项目的项目集风险;
|
||||
- 解决影响项目集内多个项目的制约因素和冲突;
|
||||
- 解决作为组成部分的项目与项目集之间的问题;
|
||||
- 在同一个治理框架内管理变更请求;
|
||||
- 将预算分配到项目集内的多个项目;
|
||||
- 确保项目集及其包含的项目能够实现效益。
|
||||
|
||||
项目组合管理
|
||||
项目组合是指为实现战略目标而组合在一起管理的项目、项目集、子项目组合和运营工作。
|
||||
项目组合管理是指为了实现战略目标而对一个或多个项目组合进行的集中管理。项目组合中的项
|
||||
目集或项目不一定彼此依赖或直接相关。
|
||||
项目组合管理的目的是:
|
||||
|
||||
- 指导组织的投资决策。
|
||||
- 选择项目集与项目的最佳组合方式,以达成战略目标。
|
||||
- 提供决策透明度。
|
||||
- 确定团队和实物资源分配的优先顺序。
|
||||
- 提高实现预期投资回报的可能性。
|
||||
- 实现对所有组成部分的综合风险预测的集中式管理。
|
||||
|
||||
此外,项目组合管理还可确定项目组合是否符合组织战略。
|
||||
要实现项目组合价值的最大化,需要精心检查项目组合的组成部分。
|
||||
53
实践积累/专业领域/PMP/课程作业/20200929.md
Executable file
53
实践积累/专业领域/PMP/课程作业/20200929.md
Executable file
@@ -0,0 +1,53 @@
|
||||

|
||||
|
||||
1、什么是项目生命周期,它是由什么组成的?
|
||||
|
||||
答:项目生命周期是指项目从开始到结束所经历的一系列阶段。
|
||||
由 启动,规划,执行,监控,收尾五大过程组。
|
||||
2、什么是项目生命周期管理法,采用这种方法的最大好处是什么?
|
||||
答:所谓项目生命周期管理法,就是指将不同的项目不同项目阶段过程灵活选择合适的管理方法。
|
||||
最大的好处是,可以灵活应对项目的包含的各种因素。可以将项目的各个阶段之间的关系顺序,迭代和交替有序灵活开展。
|
||||
3、什么是项目阶段关口,在阶段关口是紧前阶段是否达到结束标准,还是紧后阶段是否达到开始标准哪一个更重要,为什么?
|
||||
答:项目阶段关口,设立在项目阶段的结束点。
|
||||
==在阶段关口是紧前阶段达到结束标准====比====紧后阶段达到开始标准====更加====重要==
|
||||
因为,紧前阶段达到结束标准可以释放各种资源,项目风险降低,会沉淀成本
|
||||
紧后阶段达到开始标准,代表未来….
|
||||
4、项目生命周期有哪几种类型,预测型生命周期适合什么样的项目,适应型生命周期适合什么样的项目?
|
||||
答:
|
||||
|
||||
- 预测型生命周期 ,适合传统瀑布型,适合项目一开始,使用的技术和需求都十分清晰的项目
|
||||
- 迭代型生命周期
|
||||
- 增量型生命周期
|
||||
- 适应型生命周期,敏捷型,适合那种一开始只知道部分需求和功能的技术的项目。
|
||||
|
||||
==需求明确,产品清晰,无需变更,风险较低的项目==
|
||||
==需求不清,产品模糊,频繁变更,风险较高====的项目==
|
||||
|
||||
- 混合型生命周期
|
||||
|
||||
5、什么是迭代?
|
||||
答:迭代是指定期重复性的工作,在规定的时间重复执行一些管理动作
|
||||
6、项目有哪五大过程组,哪四大通用阶段?
|
||||
答: 由 启动,规划,执行,监控,收尾五大过程组。
|
||||
有 开始项目阶段,组织与准备阶段,执行项目工作阶段,结束项目阶段四大通用阶段。
|
||||
7、什么是项目信息,它分为几个维度,分别出现在项目的哪些过程组?
|
||||
答:项目数据是在整个项目生命周期需要收集、分析、和转化的大量的数据。从各个过程收集项目数据,并在项目团内内共享。
|
||||
==在各个过程中所收集的数据经过结合相关背景的分析、汇总转化为项目信息。==
|
||||
==主要分为==
|
||||
==工作绩效数据====:====主要出现在执行过程和监控过程==
|
||||
==工作绩效信息:控制过程,监控==
|
||||
==工作绩效报告:整体项目控制过程,整合管理==
|
||||
==三个维度。==
|
||||
8、什么是ITTO,他们的典型组成因素有哪些?
|
||||
答:ITTO是指每个项目管理过程通过合适的项目管理工具和技术将一个或多个输入转化成一个或多个输出。
|
||||
Input指一个过程的输入,上个阶段的产物或各类项目文件组成
|
||||
Technology和Tool,指工具,软件或模板;技术主要是 方法论或最佳实践
|
||||
Output为输出。可交付成果,更新后的项目文件或计划,或总结报告。
|
||||
典型的组合成因素
|
||||
9、什么是效益管理计划,它包括哪些主要内容?
|
||||
答:效益管理计划是描述了项目实现效益的方式和时间,以及应制定的效益衡量机制。
|
||||
项目效益指为发起组织和项目预期受益方创造价值的行动、行为、产品、服务或成果的结果。
|
||||
主要内容有:目变效益、战略一致性、实现效益的时间、效益责任人、测量指标、假设、风险。
|
||||
10、在项目启动前有一个阶段叫什么名字?这个阶段我们主要做哪些工作?
|
||||
答:在项目启动前的一个阶段叫项目前期准备工作。
|
||||
主要做需求评估、商业论证和效益管理计划。
|
||||
30
实践积累/专业领域/PMP/课程作业/20200930.md
Executable file
30
实践积累/专业领域/PMP/课程作业/20200930.md
Executable file
@@ -0,0 +1,30 @@
|
||||
3、思考题:事业环境因素分为哪两个类别分别包括哪些内容?组织过程资产分为哪两个类别,分别包括哪些内容?
|
||||
答:事业环境因素主要分为组织内部环境因素和组织外部环境因素
|
||||
组织内部环境因素主要有:
|
||||
|
||||
- 制度环境(组织治理框架,组织结构,项目管理信息系统,人事管理制度,工作授权系统,沟通制度)
|
||||
- 资源环境(基础设施,实物资源,人力资源,员工能力)
|
||||
- 文化环境(组织文化,政治氛围,管理实践)
|
||||
|
||||
组织的外部环境因素主要有:
|
||||
|
||||
- 宏观环境(社会环境,文化环境,市场条件,法律法规,财务因素,采购限制)
|
||||
- 行业环境(行业标准,商业数据库,学术研究资料,生产力指标,行业PMBOK)
|
||||
- 相关方环境(相关方期望,相关方文化,风险临界值)
|
||||
- 物理环境(工作条件,气候条件,客观限制)
|
||||
|
||||
组织过程资产主要分过程、政策和程序 和 组织知识库两种
|
||||
过程、政策和程序 组织过程资产主要有
|
||||
|
||||
- 具体的政策
|
||||
- 流程和程序
|
||||
|
||||
有形的组织过程资产主要有
|
||||
|
||||
- 工作模板
|
||||
- 工作指南
|
||||
- 共享知识库
|
||||
|
||||
4、事业环境因素和组织过程资产最重要的区分方式是什么?
|
||||
|
||||
> 答:主要区分方式
|
||||
7
实践积累/专业领域/PMP/课程作业/20201009.md
Executable file
7
实践积累/专业领域/PMP/课程作业/20201009.md
Executable file
@@ -0,0 +1,7 @@
|
||||
1、什么是系统型简单型组织结构,它有什么优点和缺点,如何区分简约型和有机型组织结构?
|
||||
2、职能式组织结构是如何划分的?它有哪些优点和缺点适合做什么样的类型的项目?
|
||||
3、协调员和联络员出现在什么组织结构中,如何区分协调员和联络员?
|
||||
4、平衡矩阵组织结构有什么优点和缺点?
|
||||
5、项目式组织结构和矩阵型组织结构的最大区别是什么?项目型组织结构的优点和缺点有哪些?
|
||||
6、复合型组织结构除了项目经理还有哪些人是专职服务于项目的,哪些人是兼职服务于项目的?
|
||||
7、预习PMO的类型和作用
|
||||
4
实践积累/专业领域/PMP/账户信息/PMI ORG.md
Executable file
4
实践积累/专业领域/PMP/账户信息/PMI ORG.md
Executable file
@@ -0,0 +1,4 @@
|
||||

|
||||
|
||||
Pssword:
|
||||
1q2w#E$R
|
||||
0
实践积累/专业领域/PMP/账户信息/Untitled-20260407225237.md
Executable file
0
实践积累/专业领域/PMP/账户信息/Untitled-20260407225237.md
Executable file
35
实践积累/专业领域/PMP/账户信息/项目经验填报.md
Executable file
35
实践积累/专业领域/PMP/账户信息/项目经验填报.md
Executable file
@@ -0,0 +1,35 @@
|
||||
中文
|
||||
项目1,
|
||||
**城市环境空气质量预报预警平台** 这个项目包含了城市空气质量预报预警业务管理平台,统计模型预报,实况与预报发布平台,智能短信报送平台,视频会商系统的建设等。
|
||||
|
||||
**启动**: 初始阶段我们做了什么准备;
|
||||
**规划**:如何规划这个项目;
|
||||
**实施**:我在这个项目里担任什么职务,这个项目是做什么用的,
|
||||
**监控**:这个项目实施过程监督;
|
||||
**收尾**:这个项目目前是否已经验收,客户满意度如何。
|
||||
|
||||
开始:根据国家对城市空气质量预报信息化要求,调研空气质量的预报和发布需求,主要解决城市环境监测中心在数据预报、会商和数据发布流程以及信息化支撑而启动项目。
|
||||
计划:编制项目管理计划,创建开发工作分解结构,主要分为预报业务平台,预报算法,预报发布平台,短信报送平台,视频会商系统等五大子系统分别编制时间进度计划,制定预算,人力资源管理、沟通和采购计划。
|
||||
执行:作为项目经理带领项目团队预报业务平台,预报发布平台,短信报送平台和预报算法的集成研发,将视频会商系统进项外包管理,组织整个项目按照预定计划推进。
|
||||
监控:每周五项目进度和问题汇总、月度评估后并向业主定期汇报项目状态,将业主需求变化推进项目变更,确保项目按照计划的推进。
|
||||
结束:结束各子系统的项目活动,把研发过程和项目管理过程分别归档,按照合同要求将交付物打包整理移交给业主,开展项目验收会,验收报告盖章签字,总结整理经验教训。
|
||||
|
||||
|
||||

|
||||
|
||||
中文:项目经验2 中海达监测云
|
||||
开始:旧有的监测软件产品无法满足国土地灾、矿山、大坝等安全监测行业市场需求,组织打造一款具备对安全监测设备的数据采集、审核、统计、查询、管理、专业分析和webgis展示服务的SAAS专业监测云平台,启动了这个项目。
|
||||
计划:将项目主要分为传感器数据采集,数据处理,web 综合分析平台,前端展示等四个子模块分别研发工作结构分解WBS,编制进度计划,人力资源计划和质量计划。
|
||||
执行:作为项目经理带领项目团队进行项目需求分析,原型设计,编写产品需求规格说明书,搭建和梳理出全新的监测软件产品的业务体系,根据监测产品需求来组织开发架构保障整个项目顺利完成。研发人员进行单元测试以及测试人员集成功能测试和性能测试。
|
||||
监控:每周与研发汇总项目问题和进度并定期汇报项目状态给上级领导,开展项目需求评审,代码评审,产品架构评审和需求变更评审会议。
|
||||
结束:结束各子模块的项目活动,编写产品测试报告和性能测试报告,按照项目业务需求将交付物打包运营部门,开展产品试运行,试运行结束后对项目验收报告,总结经验教训归档代码和研发文档。
|
||||
|
||||
中文:项目经验3 中海达解算云
|
||||
|
||||
开始:以前的gnss解算软件只能适合小型单个工程应用,无法满足越来越大量的GNSS实时解算需求,所以组织启动开发专注于gnss高精度定位技术在变形监测领域数据解算支撑平台、支持大量gnss数据接收、存储,处理、分布式实时解算和事后分析的云平台。
|
||||
|
||||
计划: 我根据立项需求制定产品的GNSS解算产品研发路线图,按照公司规定裁剪制定了项目管理计划, 主导编制进度计划、质量管理计划,配置管理等实施计划。
|
||||
|
||||
执行:作为项目经理带领项目团队开展项目详细分析和原型开发,主导沟通编写产品需求规格说明书,协调架构师搭建GNSS解算的分布式研发框架,根据项目管理计划来组织研发活动,分了三个迭代反复执行。在内部测试测试之后开展集成测试和性能测试等活动。
|
||||
|
||||
监控和收尾:每周定期汇报项目状态给QA,每月中旬沟通项目主要问题并沟通协调解决方案,开展项目评审会议以保障项目项目质量和进度。最后编写项目测试报告和事业部验收报告, 协调现场项目试运行。总结经验教训归档代码和算法经验,以便于下一个版本的迭代。
|
||||
88
实践积累/个人知识库/Docker/Docker 部署 MongoDB.md
Executable file
88
实践积累/个人知识库/Docker/Docker 部署 MongoDB.md
Executable file
@@ -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` 成功!
|
||||
17
实践积累/个人知识库/Docker/Docker安装redis.md
Executable file
17
实践积累/个人知识库/Docker/Docker安装redis.md
Executable file
@@ -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
|
||||
来源:简书
|
||||
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
||||
28
实践积累/个人知识库/Docker/INDEX_Docker.md
Executable file
28
实践积累/个人知识库/Docker/INDEX_Docker.md
Executable file
@@ -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 &amp; docker rmi &amp; docker prune 的差异]] | 196B | |
|
||||
| [[docker镜像清理]] | 485B | |
|
||||
| [[如何批量删除Docker中已经停止的容器]] | 1KB | |
|
||||
| [[安装docker-compose]] | 545B | |
|
||||
|
||||
---
|
||||
*共 10 个文件*
|
||||
3
实践积累/个人知识库/Docker/Rancher_Rancher的状态存储在什么地方?.md
Executable file
3
实践积累/个人知识库/Docker/Rancher_Rancher的状态存储在什么地方?.md
Executable file
@@ -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)>
|
||||
@@ -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)>
|
||||
12
实践积累/个人知识库/Docker/centos7设置docker开机自启动,并设置容器自动重启.md
Executable file
12
实践积累/个人知识库/Docker/centos7设置docker开机自启动,并设置容器自动重启.md
Executable file
@@ -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)>
|
||||
7
实践积累/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md
Executable file
7
实践积累/个人知识库/Docker/docker rm & docker rmi & docker prune 的差异.md
Executable file
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
2
实践积累/个人知识库/Docker/docker镜像清理.md
Executable file
2
实践积累/个人知识库/Docker/docker镜像清理.md
Executable file
@@ -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)>
|
||||
28
实践积累/个人知识库/Docker/如何批量删除Docker中已经停止的容器.md
Executable file
28
实践积累/个人知识库/Docker/如何批量删除Docker中已经停止的容器.md
Executable file
@@ -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)>
|
||||
4
实践积累/个人知识库/Docker/安装docker-compose.md
Executable file
4
实践积累/个人知识库/Docker/安装docker-compose.md
Executable file
@@ -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)>
|
||||
53
实践积累/个人知识库/Linux/CentOS_CentOS7防火墙设置.md
Executable file
53
实践积累/个人知识库/Linux/CentOS_CentOS7防火墙设置.md
Executable file
@@ -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
|
||||
来源:简书
|
||||
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
||||
50
实践积累/个人知识库/Linux/CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间.md
Executable file
50
实践积累/个人知识库/Linux/CentOS_Centos7安装搭建NTP服务器和NTP客户端同步时间.md
Executable file
@@ -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)>
|
||||
127
实践积累/个人知识库/Linux/CentOS_Harbor 开启https 认证.md
Executable file
127
实践积累/个人知识库/Linux/CentOS_Harbor 开启https 认证.md
Executable file
@@ -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)>
|
||||
@@ -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
|
||||
148
实践积累/个人知识库/Linux/CentOS_SELinux.md
Executable file
148
实践积累/个人知识库/Linux/CentOS_SELinux.md
Executable file
@@ -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)>
|
||||
12
实践积累/个人知识库/Linux/CentOS_centos支持rz、sz命令.md
Executable file
12
实践积累/个人知识库/Linux/CentOS_centos支持rz、sz命令.md
Executable file
@@ -0,0 +1,12 @@
|
||||
**centos支持rz、sz命令**
|
||||
|
||||
yum install lrzsz
|
||||
|
||||
|
||||
rz的用法
|
||||
在命令终端输入rz回车后,就会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。
|
||||
如图;选择要上传的文件–Add–OK
|
||||
|
||||
s
|
||||
sz的用法
|
||||
sz命令可以单下载一个文件,也可以多个文件同时下载
|
||||
38
实践积累/个人知识库/Linux/CentOS_查看CentOS版本方法.md
Executable file
38
实践积累/个人知识库/Linux/CentOS_查看CentOS版本方法.md
Executable file
@@ -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)>
|
||||
9
实践积累/个人知识库/Linux/CentOS_用户管理.md
Executable file
9
实践积累/个人知识库/Linux/CentOS_用户管理.md
Executable file
@@ -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)>
|
||||
88
实践积累/个人知识库/Linux/CentOS_调整 home分区 扩大 root分区.md
Executable file
88
实践积累/个人知识库/Linux/CentOS_调整 home分区 扩大 root分区.md
Executable file
@@ -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)>
|
||||
12
实践积累/个人知识库/Linux/CentOS_软件到底安装在哪里-opt or -usr or -usr-local.md
Executable file
12
实践积累/个人知识库/Linux/CentOS_软件到底安装在哪里-opt or -usr or -usr-local.md
Executable file
@@ -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
|
||||
49
实践积累/个人知识库/Linux/INDEX_Linux.md
Executable file
49
实践积累/个人知识库/Linux/INDEX_Linux.md
Executable file
@@ -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 个文件*
|
||||
60
实践积累/个人知识库/Linux/Ubuntu 16.04 64bit 系统的根目录下有这些文件夹.md
Executable file
60
实践积累/个人知识库/Linux/Ubuntu 16.04 64bit 系统的根目录下有这些文件夹.md
Executable file
@@ -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)>
|
||||
175
实践积累/个人知识库/Linux/Vim命令合集.md
Executable file
175
实践积累/个人知识库/Linux/Vim命令合集.md
Executable file
@@ -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!<Esc>,这里的Esc是必须的,否则命令不生效。
|
||||
w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。
|
||||
b 向后移动一个单词 2b 向后移动2个单词
|
||||
e,同w,只不过是光标停在单词尾部
|
||||
ge,同b,光标停在单词尾部。
|
||||
^ 移动到本行第一个非空白字符上。
|
||||
0(数字0)移动到本行第一个字符上,
|
||||
<HOME> 移动到本行第一个字符。同0健。
|
||||
$ 移动到行尾 3$ 移动到下面3行的行尾
|
||||
gg 移动到文件头。 = [[
|
||||
G(shift + g) 移动到文件尾。 = ]]
|
||||
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
|
||||
F 同f,反向查找。
|
||||
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
|
||||
Ctrl + e 向下滚动一行
|
||||
Ctrl + y 向上滚动一行
|
||||
Ctrl + d 向下滚动半屏
|
||||
Ctrl + u 向上滚动半屏
|
||||
Ctrl + f 向下滚动一屏
|
||||
Ctrl + b 向上滚动一屏
|
||||
**撤销和重做**
|
||||
u 撤销(Undo)
|
||||
U 撤销对整行的操作
|
||||
Ctrl + r 重做(Redo),即撤销的撤销。
|
||||
**删除命令**
|
||||
x 删除当前字符
|
||||
3x 删除当前光标开始向后三个字符
|
||||
X 删除当前字符的前一个字符。X=dh
|
||||
dl 删除当前字符, dl=x
|
||||
dh 删除前一个字符
|
||||
dd 删除当前行
|
||||
dj 删除上一行
|
||||
dk 删除下一行
|
||||
10d 删除当前行开始的10行。
|
||||
D 删除当前字符至行尾。D=d$
|
||||
d$ 删除当前字符之后的所有字符(本行)
|
||||
kdgg 删除当前行之前所有行(不包括当前行)
|
||||
jdG(jd shift + g) 删除当前行之后所有行(不包括当前行)
|
||||
:1,10d 删除1-10行
|
||||
:11,$d 删除11行及以后所有的行
|
||||
:1,$d 删除所有行
|
||||
J(shift + j) 删除两行之间的空行,实际上是合并两行。
|
||||
**拷贝和粘贴**
|
||||
yy 拷贝当前行
|
||||
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
|
||||
p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
|
||||
shift+p 在当前行前粘贴
|
||||
:1,10 co 20 将1-10行插入到第20行之后。
|
||||
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
|
||||
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
|
||||
ddp交换当前行和其下一行
|
||||
xp交换当前字符和其后一个字符
|
||||
**剪切命令**
|
||||
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
|
||||
ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
|
||||
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
|
||||
:1, 10 m 20 将第1-10行移动到第20行之后。
|
||||
**退出命令**
|
||||
:wq 保存并退出
|
||||
ZZ 保存并退出
|
||||
:q! 强制退出并忽略所有更改
|
||||
:e! 放弃所有修改,并打开原来文件。
|
||||
**窗口命令**
|
||||
:split或new 打开一个新窗口,光标停在顶层的窗口上
|
||||
:split file或:new file 用新窗口打开文件
|
||||
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
|
||||
Ctrl+ww 移动到下一个窗口
|
||||
Ctrl+wj 移动到下方的窗口
|
||||
Ctrl+wk 移动到上方的窗口
|
||||
关闭窗口
|
||||
:close 最后一个窗口不能使用此命令,可以防止意外退出vim。
|
||||
:q 如果是最后一个被关闭的窗口,那么将退出vim。
|
||||
ZZ 保存并退出。
|
||||
关闭所有窗口,只保留当前窗口
|
||||
:only
|
||||
录制宏
|
||||
按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。
|
||||
**执行shell命令**
|
||||
:!command
|
||||
:!ls 列出当前目录下文件
|
||||
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
|
||||
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
|
||||
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
|
||||
**注释命令**
|
||||
perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
|
||||
3,5 s/^/#/g 注释第3-5行
|
||||
3,5 s/^#//g 解除3-5行的注释
|
||||
1,$ s/^/#/g 注释整个文档。
|
||||
:%s/^/#/g 注释整个文档,此法更快。
|
||||
**帮助命令**
|
||||
:help or F1 显示整个帮助
|
||||
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
|
||||
:help 'number' Vim选项的帮助用单引号括起
|
||||
:help <Esc> 特殊键的帮助用<>扩起
|
||||
:help -t Vim启动参数的帮助用-
|
||||
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
|
||||
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
|
||||
**其他非编辑命令**
|
||||
. 重复前一次命令
|
||||
:set ruler? 查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
|
||||
:scriptnames 查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
|
||||
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
|
||||
Vim教程
|
||||
在Unix系统上
|
||||
$ vimtutor
|
||||
在Windows系统上
|
||||
:help tutor
|
||||
|
||||
:syntax 列出已经定义的语法项
|
||||
:syntax clear 清除已定义的语法规则
|
||||
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
|
||||
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案
|
||||
> 来自 <[https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html](https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html)>
|
||||
20
实践积累/个人知识库/Linux/ubuntu中管理用户和用户组.md
Executable file
20
实践积累/个人知识库/Linux/ubuntu中管理用户和用户组.md
Executable file
@@ -0,0 +1,20 @@
|
||||
1. 添加一个用户组并指定id为1002
|
||||
sudo groupadd -g 1002 www
|
||||
|
||||
2. 添加一个用户到www组并指定id为1003
|
||||
sudo useradd wyx -g 1002 -u 1003 -m
|
||||
|
||||
3. 修改用户的密码
|
||||
sudo passwd wyx
|
||||
|
||||
4. 删除一个用户
|
||||
sudo userdel wyx
|
||||
|
||||
5. 为该用户添加sudo权限
|
||||
sudo usermod -a -G adm wyx
|
||||
sudo usermod -a -G sudo wyx
|
||||
|
||||
6. 查看所有用户和用户组:
|
||||
cat /etc/passwd
|
||||
cat /etc/group
|
||||
> 来自 <[https://www.cnblogs.com/vincedotnet/p/4017574.html](https://www.cnblogs.com/vincedotnet/p/4017574.html)>
|
||||
7
实践积累/个人知识库/Linux/ubuntu查看进程.md
Executable file
7
实践积累/个人知识库/Linux/ubuntu查看进程.md
Executable file
@@ -0,0 +1,7 @@
|
||||
netstat –tln //查看服务监听端口
|
||||
netstat //查看进程号
|
||||
ps –aux //查看进程号
|
||||
ps –aux | more //全部查看
|
||||
ps –ef | grep mysql //查看mysql的进程
|
||||
kill -9 3306 //强制杀掉进程号3306
|
||||
> 来自 <[http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html](http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html)>
|
||||
9
实践积累/个人知识库/Linux/前言.md
Executable file
9
实践积累/个人知识库/Linux/前言.md
Executable file
@@ -0,0 +1,9 @@
|
||||
## Linux**==提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在****Linux****系** **统上工作离不开使用系统提供的命令。要想真正理解****Linux****系统,就必须从****Linux****命令学起,通过基础的命令学习可以进一步理解****Linux**==系统。
|
||||
## 不同**==Linux****发行版的命令数量不一样,但****Linux****发行版本最少的命令也有****200**==多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。
|
||||
## ◆** **安装和登录命令:**==login****、****shutdown****、****halt****、****reboot****、****install****、****mount****、****umount****、****chsh****、****exit****、****last**==;
|
||||
## ◆** **文件处理命令:**==file****、****mkdir****、****grep****、****dd****、****find****、****mv****、****ls****、****diff****、****cat****、****ln**==;
|
||||
## ◆** **系统管理相关命令:**==df****、****top****、****free****、****quota****、****at****、****lp****、****adduser****、****groupadd****、****kill****、****crontab**==;
|
||||
## ◆** **网络操作命令:**==ifconfig****、****ip****、****ping****、****netstat****、****telnet****、****ftp****、****route****、****rlogin****、****rcp****、****finger****、****mail****、** **nslookup**==;
|
||||
## ◆** **系统安全相关命令:**==passwd****、****su****、****umask****、****chgrp****、****chmod****、****chown****、****chattr****、****sudo ps****、****who**==;
|
||||
## ◆** **其它命令:**==tar****、****unzip****、****gunzip****、****unarj****、****mtools****、****man****、****unendcode****、****uudecode**==。
|
||||
> 来自 <[https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html](https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html)>
|
||||
182
实践积累/个人知识库/Linux/常用命令.md
Executable file
182
实践积累/个人知识库/Linux/常用命令.md
Executable file
@@ -0,0 +1,182 @@
|
||||
## 下载内容
|
||||
|
||||
1. **sudo apt-get insall ……**
|
||||
2. **sudo apt-get undate**
|
||||
3. **sudo apt-get upgrade**
|
||||
4. **sudo apt-get -f install**
|
||||
|
||||
## 删除命令
|
||||
|
||||
1. **rm 文件**
|
||||
2. **rm -r 文件夹**
|
||||
|
||||
## 移动命令
|
||||
|
||||
1. **cp 文件 最终路径**
|
||||
2. **cp -r 文件夹 最终路径 (这样可以把一个文件夹的所有文件全部移到最终路径)**
|
||||
>
|
||||
**apt-get:**
|
||||
## debian系系统的软件包管理程序(其图形化前端就是大名鼎鼎的新立得了),会自动帮你搞定依赖关系
|
||||
## 最常用参数:
|
||||
## update —-与你的软件源(在/etc/apt/sources.list中列出)更新软件包列表,换源后需要执行
|
||||
## upgrade —-根据update得到的源软件库与本地已经安装的对比,(如果需要升级就)全部升级
|
||||
## install —-安装软件包(可以使用tab补全软件包的名字,比较方便)
|
||||
## remove —-卸载软件包
|
||||
## purge —-卸载软件包,同时删除该软件的配置文件
|
||||
## source —-从源里下载软件包的源码到当前目录(执行此命令的目录)并解压(除非指定–download-only参数)
|
||||
## 该地址由/etc/apt/sources.list中的 deb-src 行指定
|
||||
## check —-用来(自动)修复(已装)软件包之间的依赖关系
|
||||
## clean —-清除/var/cache/apt/archives/包括其子目录partial/下的所有软件包缓存
|
||||
## autoclean —-比clean常用,我的理解是删除低版本的缓存而保留高版本的(或者包括非当前源里的软件包?)
|
||||
**aptitude:**
|
||||
## 此为PT同学补充,他的说法是aptitude比apt-get少个横线,tab补全比较容易(=.=)~大概神牛都比较懒吧
|
||||
## 不得不提下蛋蛋童鞋以前说过的ubuntu彩蛋:) <仅限于UBUNTU 8.04>
|
||||
## man apt —-最后会看到 “本apt有着超级牛力” or “this APT has a super-cow power”
|
||||
## man aptitude —-会看到 “这个aptitude没有超级牛力”
|
||||
## 看看aptitude的参数,你就会明白为什么aptitude会标称”高级软件包管理程序”了
|
||||
## 最常用参数:
|
||||
## search —-在(你的源的)所有软件包列表中搜索该软件,search的表达式可以很复杂,具体看man
|
||||
## 其余常用参数同apt-get
|
||||
**cat:**
|
||||
## 把(一个或多个)文件内容(连接)显示到标准输出
|
||||
## 当文本文件很小,而且你只是想看下,并不打算用gedit或者vim之类编辑器编辑的时候,可以cat一下,我是用来配合grep使用
|
||||
**cd:**
|
||||
## 切换当前工作目录
|
||||
## 不同于其他命令,这是一个shell内置命令,所以没有手册页可看…够基础,所以才会出现在本篇文章中(=.=)郁闷
|
||||
## 最常用参数:
|
||||
## . —-切换到当前目录(貌似没有什么意义)(.这个目录可以通过ls -a看到)
|
||||
## .. —-切换到上层目录
|
||||
## ~ —-回到家目录(/home/你的登录名/)
|
||||
**chmod****:**
|
||||
## 改变文件的权限位
|
||||
## linux文件系统的权限位有两种表示方法,要是详细说下,非得累死老鼠不可=.=,所以只说8进制数表示:)
|
||||
## 简要介绍下:ls -l可以显示出文件的权限,比如(-rwxr-xr–),代表了三种用户的权限
|
||||
## 第一个rwx,代表文件所有者的权限,即(读,写,执行),用二进制表示为111,代表八进制中的4+2+1=7
|
||||
## 第二个r-x,代表文件所有者同一用户组其他用户的权限,即(读, ,执行),用二进制表示为101,代表八进制中的5=4+0+1
|
||||
## 第三个r–,代表其他用户的权限,即(读, , ),二进制表示为100,代表八进制的4=4+0+0
|
||||
## 所以这个文件的权限位为754
|
||||
## 这也就是chmod的用法,例如chmod 751 myfile #将该文件权限设定为rwxr-x–x
|
||||
## 最常用参数:
|
||||
## -v —-列出当前正在执行的步骤
|
||||
## -R —-递归式,即改变非空目录下的一切为指定权限
|
||||
**cp****:**
|
||||
## 拷贝文件和目录
|
||||
## 最常用参数:
|
||||
## -b —-为每个已经存在的目的文件作个备份
|
||||
## -d —-遇到软链接时不拷贝软链接所指向的文件;拷贝时保留links属性(链接数)
|
||||
## -p —-保留文件的访问权限,所有者,和时间戳
|
||||
## -R和-r —-递归式拷贝(cp过程遇到非空目录才有效),即拷贝目录,子目录,子目录的子目录…..
|
||||
## -a —-作用同-dpR
|
||||
## -s —-并不真的做拷贝,而只是为每个文件作软链接(符号链接)
|
||||
## -u —-同下面 mv 的-u参数
|
||||
**head, tail**
|
||||
## 就像这两个名字,一个显示文件头部,一个显示尾部
|
||||
## 最常用参数:
|
||||
## -n —-指定输出的(头部或尾部)行数, 当没有此参数时,默认显示10行
|
||||
**ifconfig****:**
|
||||
## 配置网卡
|
||||
## 最常用参数:
|
||||
## 没有参数 —-列出当前活动网卡的状态
|
||||
## -a —-列出所有网卡的状态
|
||||
## interface —-指定网卡名称比如eth0
|
||||
## up —-唤醒该网卡
|
||||
## down —-关闭该网卡
|
||||
## arp,mtu,netmask addr,…等等很多参数 =.=
|
||||
**ln****:**
|
||||
## 为文件建立链接
|
||||
## linux的链接分为两种:硬链接和软链接,ln默认建立硬链接(hard link),两种的区别请自己搜索:)
|
||||
## 最常用参数:
|
||||
## -s —-建立软链接(符号链接,可以理解为win下的快捷方式)
|
||||
## -f —-如果要建立的链接名已经存在,则删除之
|
||||
**ls****:**
|
||||
## 显示目录内容
|
||||
## 最常用参数:
|
||||
## -a —-显示指定目录所有文件,包括文件名以 . 开头的文件
|
||||
## -l —-显示文件详细信息(包括文件类型,权限,修改时间,访问时间,大小,文件名…)
|
||||
## -h —-将文件大小以方便阅读的形式表示出来,配合 -l 参数使用,常有奇效
|
||||
**man****:**
|
||||
## 阅读参考手册of~
|
||||
## 题外话:HX说这是linux最最难学的命令,因为man你学好了,就没有什么命令能难倒你了,=.=无敌了
|
||||
## man可以查的不仅仅是命令额(当然,因为man是无敌的嘛/ch)
|
||||
## 最常用参数:
|
||||
## man 阿拉伯数字
|
||||
## 阿拉伯数字1: 可执行程序(一般为用户安装的程序,如果提供了manpages的话)和shell命令
|
||||
## 阿拉伯数字2: 系统调用(例如 open调用,socket调用,chmod调用 等等等等),先装manpages-dev先
|
||||
## 阿拉伯数字3: 库函数调用(例如 man 3 printf),先装manpages-dev先
|
||||
## …….
|
||||
## 当你执行man ls 时, 和 man 1 ls结果是一样的,因为ls在man手册中只有一个入口
|
||||
## 当你想看chmod调用的手册页时,就要特别指定 man 2 chmod了~~因为chmod不止有一个入口
|
||||
## 在man的时候,可以通过j,k上下移动(和vi中类似),可以通过/查询,通过n,N查找下个,上个匹配(和vi类似)
|
||||
## q退出(也和vi类似….)
|
||||
## 比较有意思的一点:
|
||||
## 由于man 本身是个命令,所以,连man都是可以man的 =.=
|
||||
**mkdir****:**
|
||||
## 创建一个目录
|
||||
## 最常用参数:
|
||||
## -p —-如果给出的路径中父目录不存在,则同时创建父目录
|
||||
**mount****:**
|
||||
## 挂载文件系统(可理解为挂载一个分区)
|
||||
## 最常用参数:
|
||||
## -t —-指定文件系统类型,比如iso9660(挂载iso镜像为光盘,相当于虚拟光驱),ntfs,ext3,rfs等等
|
||||
## -l —-列出所有已经挂载的文件系统,支持卷标
|
||||
## -a —-挂载fstab中记录的所有分区
|
||||
## -n —-挂载的时候不写入/etc/mtab
|
||||
## -o —-相当常用的一个参数,指定挂载文件系统的”选项”,比如noatime,用来挂载BT专用分区很合适
|
||||
**mv****:**
|
||||
## 移动或者更名文件,取决于目的目录是否为当前目录
|
||||
## 最常用参数:
|
||||
## -b —-为每个已经存在的目的文件做个备份(防止覆盖)
|
||||
## -f —-不提示是否覆盖已经存在的目的文件
|
||||
## -i —-与-f参数相反
|
||||
## -u —-仅当源文件比目的文件更新或者目的文件不存在时候才移动
|
||||
## -v —-显示移动文件的进度(个人总是推荐使用此参数,明白你在做什么)
|
||||
**ps,top:**
|
||||
## 列出当前命令的执行状态,ps为静态,top为动态(top时’q’退出)
|
||||
## ps:这个命令本人更常用些,推荐给你看看=.=
|
||||
## 最常用参数(ps多用参数集合,而不是单个参数,并且配合grep使用)
|
||||
## -ef —-以标准语法列出当前所有进程状态,例如ps -ef | grep eva #列出eva的进程状态
|
||||
## aux —-以BSD语法列出………………………………..
|
||||
## -ejH —-列出进程树
|
||||
## -eLf —-同时列出线程状态
|
||||
**rm, rmdir:**
|
||||
## rm:删除文件或目录,rmdir:删除一个空目录(此命令个人认为没啥用,可以用rm -r替代)
|
||||
## rm最常用参数:
|
||||
## -f —-不提示不存在的文件,直接跳过
|
||||
## -i —-每个删除动作都提示 (=.= 删除多的话岂不是烦死)
|
||||
## -I —-删除多个文件(多于3个时)或者递归式删除(对于非空目录)提示一次
|
||||
## -r和-R —-递归式删除该目录下的一切东东
|
||||
## -v —-显示每个文件的删除动作(个人总是推荐使用此参数,明白你在做什么)
|
||||
**sudo,su:**
|
||||
## 这大概是装好系统之后第一个要用的命令吧?
|
||||
## sudo我们主要用来临时提升权限,主要用以管理员(超级用户)的权限来运行命令,当需要修改当前登录用户力所不能及的文件/目录
|
||||
## 时需要用sudo,或者su -c,当然sudo和su的作用范围不仅仅如此
|
||||
## 可以使用visudo来编辑/etc/sudoers文件来修改sudo更详细的动作(比如记住密码的时间戳长度),请谨慎修改!
|
||||
**sh:**
|
||||
## 在终端解释执行
|
||||
## 类似于’./’的形式,但PT给了不同点: ‘./’仅仅对当前目录下有执行权限的程序才有效,’sh’则不管这套
|
||||
## 想想也是哈, ‘./’仅仅是给出了一个文件的路径(在当前目录下)而已, 但这个文件能不能执行就不好说了
|
||||
## 所以用sh总是正确的
|
||||
**shutdown:**
|
||||
## 关闭系统,如果停留在TTY,请改用halt, poweroff等命令
|
||||
## 常用参数:
|
||||
## +m —-指定关机延迟的分钟
|
||||
## -c —-取消一个等待关机的请求(关掉运行此命令的终端也可:))
|
||||
## now —-立即关机
|
||||
## hh:mm —-手动指定时间(以24小时计)
|
||||
**tar:**
|
||||
## 打包/解包
|
||||
## 这个tar不多说了吧..到处都是tar.gz,tar.bz2的东东
|
||||
## 和ps命令一样,tar一般不用单个参数,而是多个参数的组合,记住参数x是解压(extract),c是创建包(creat)即可
|
||||
## 最常用参数:
|
||||
## -xvf —-详细列出解包的步骤
|
||||
## -cvf —-详细列出打包的步骤
|
||||
## -j —-用来说明这是个tar.bz2包,例如tar -xjvf myfile.tar.bz2
|
||||
## -t —-列出包中的文件列表
|
||||
## —–打包时常追加的参数:
|
||||
## -r —-追加到压缩包中
|
||||
## -u —-只把比包中更新的文件追加进去
|
||||
## -h —-不把符号链接添加到包中,而是添加此符号链接指向的文件
|
||||
## 附加说明:tar是个太强大的东东,常用的操作也就是打包解包,高级功能还是参阅man =.=
|
||||
**touch:**
|
||||
## 改变文件时间戳,默认包括修改时间和创建时间,默认修改为当前时间,默认如果文件不存在就新建(=.=是不是很罗嗦)
|
||||
> 来自 <[http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html](http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html)>
|
||||
401
实践积累/个人知识库/Linux/常用命令2.md
Executable file
401
实践积累/个人知识库/Linux/常用命令2.md
Executable file
@@ -0,0 +1,401 @@
|
||||
## 最近在项目中用到了Linux,然后自己只会那些简单的,发现头用的溜溜的,所以查了一下常用的命令,多查,多用。
|
||||
## 系统信息
|
||||
## arch 显示机器的处理器****架构****(1)
|
||||
## uname -m 显示机器的处理器架构(2)
|
||||
## uname -r 显示正在使用的内核版本
|
||||
## dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
|
||||
## hdparm -i /dev/hda 罗列一个磁盘的架构特性
|
||||
## hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
|
||||
## cat /proc/cpuinfo 显示CPU info的信息
|
||||
## cat /proc/interrupts 显示中断
|
||||
## cat /proc/meminfo 校验内存使用
|
||||
## cat /proc/swaps 显示哪些swap被使用
|
||||
## cat /proc/version 显示内核的版本
|
||||
## cat /proc/net/dev 显示网络适配器及统计
|
||||
## cat /proc/mounts 显示已加载的文件系统
|
||||
## lspci -tv 罗列 PCI 设备
|
||||
## lsusb -tv 显示 USB 设备
|
||||
## date 显示系统日期
|
||||
## cal 2007 显示2007年的日历表
|
||||
## date 041217002007.00 设置日期和时间 - 月日时分年.秒
|
||||
## clock -w 将时间修改保存到 BIOS
|
||||
|
||||
## 关机 (系统的关机、重启以及登出 )
|
||||
## shutdown -h now 关闭系统(1)
|
||||
## init 0 关闭系统(2)
|
||||
## telinit 0 关闭系统(3)
|
||||
## shutdown -h hours:minutes & 按预定时间关闭系统
|
||||
## shutdown -c 取消按预定时间关闭系统
|
||||
## shutdown -r now 重启(1)
|
||||
## reboot 重启(2)
|
||||
## logout 注销
|
||||
|
||||
## 文件和目录
|
||||
## cd /home 进入 '/ home' 目录'
|
||||
## cd .. 返回上一级目录
|
||||
## cd ../.. 返回上两级目录
|
||||
## cd 进入个人的主目录
|
||||
## cd ~user1 进入个人的主目录
|
||||
## cd - 返回上次所在的目录
|
||||
## pwd 显示工作路径
|
||||
## ls 查看目录中的文件
|
||||
## ls -F 查看目录中的文件
|
||||
## ls -l 显示文件和目录的详细资料
|
||||
## ls -a 显示隐藏文件
|
||||
## ls *[0-9]* 显示包含数字的文件名和目录名
|
||||
## tree 显示文件和目录由根目录开始的树形结构(1)
|
||||
## lstree 显示文件和目录由根目录开始的树形结构(2)
|
||||
## mkdir dir1 创建一个叫做 'dir1' 的目录'
|
||||
## mkdir dir1 dir2 同时创建两个目录
|
||||
## mkdir -p /tmp/dir1/dir2 创建一个目录树
|
||||
## rm -f file1 删除一个叫做 'file1' 的文件'
|
||||
## rmdir dir1 删除一个叫做 'dir1' 的目录'
|
||||
## rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容
|
||||
## rm -rf dir1 dir2 同时删除两个目录及它们的内容
|
||||
## mv dir1 new_dir 重命名/移动 一个目录
|
||||
## cp file1 file2 复制一个文件
|
||||
## cp dir/* . 复制一个目录下的所有文件到当前工作目录
|
||||
## cp -a /tmp/dir1 . 复制一个目录到当前工作目录
|
||||
## cp -a dir1 dir2 复制一个目录
|
||||
## ln -s file1 lnk1 创建一个指向文件或目录的软链接
|
||||
## ln file1 lnk1 创建一个指向文件或目录的物理链接
|
||||
## touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
|
||||
## file file1 outputs the mime type of the file as text
|
||||
## iconv -l 列出已知的编码
|
||||
## iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.
|
||||
## find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)
|
||||
|
||||
## 文件搜索
|
||||
## find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
|
||||
## find / -user user1 搜索属于用户 'user1' 的文件和目录
|
||||
## find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
|
||||
## find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
|
||||
## find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
|
||||
## find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限
|
||||
## find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
|
||||
## locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
|
||||
## whereis halt 显示一个二进制文件、源码或man的位置
|
||||
## which halt 显示一个二进制文件或可执行文件的完整路径
|
||||
|
||||
## 挂载一个文件系统
|
||||
## mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在
|
||||
## umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出
|
||||
## fuser -km /mnt/hda2 当设备繁忙时强制卸载
|
||||
## umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用
|
||||
## mount /dev/fd0 /mnt/floppy 挂载一个软盘
|
||||
## mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom
|
||||
## mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom
|
||||
## mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom
|
||||
## mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件
|
||||
## mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统
|
||||
## mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备
|
||||
## mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享
|
||||
|
||||
## 磁盘空间
|
||||
## df -h 显示已经挂载的分区列表
|
||||
## ls -lSr |more 以尺寸大小排列文件和目录
|
||||
## du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'
|
||||
## du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小
|
||||
## rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)
|
||||
## dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 用户和群组
|
||||
## groupadd group_name 创建一个新用户组
|
||||
## groupdel group_name 删除一个用户组
|
||||
## groupmod -n new_group_name old_group_name 重命名一个用户组
|
||||
## useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户
|
||||
## useradd user1 创建一个新用户
|
||||
## userdel -r user1 删除一个用户 ( '-r' 排除主目录)
|
||||
## usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性
|
||||
## passwd 修改口令
|
||||
## passwd user1 修改一个用户的口令 (只允许root执行)
|
||||
## chage -E 2005-12-31 user1 设置用户口令的失效期限
|
||||
## pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户
|
||||
## grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组
|
||||
## newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消
|
||||
## ls -lh 显示权限
|
||||
## ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示
|
||||
## chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
|
||||
## chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限
|
||||
## chown user1 file1 改变一个文件的所有人属性
|
||||
## chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
|
||||
## chgrp group1 file1 改变文件的群组
|
||||
## chown user1:group1 file1 改变一个文件的所有人和群组属性
|
||||
## find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件
|
||||
## chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限
|
||||
## chmod u-s /bin/file1 禁用一个二进制文件的 SUID位
|
||||
## chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的
|
||||
## chmod g-s /home/public 禁用一个目录的 SGID 位
|
||||
## chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件
|
||||
## chmod o-t /home/public 禁用一个目录的 STIKY 位
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消
|
||||
## chattr +a file1 只允许以追加方式读写文件
|
||||
## chattr +c file1 允许这个文件能被内核自动压缩/解压
|
||||
## chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件
|
||||
## chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接
|
||||
## chattr +s file1 允许一个文件被安全地删除
|
||||
## chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘
|
||||
## chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件
|
||||
## lsattr 显示特殊的属性
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 打包和压缩文件
|
||||
## bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件
|
||||
## bzip2 file1 压缩一个叫做 'file1' 的文件
|
||||
## gunzip file1.gz 解压一个叫做 'file1.gz'的文件
|
||||
## gzip file1 压缩一个叫做 'file1'的文件
|
||||
## gzip -9 file1 最大程度压缩
|
||||
## rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包
|
||||
## rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'
|
||||
## rar x file1.rar 解压rar包
|
||||
## unrar x file1.rar 解压rar包
|
||||
## tar -cvf archive.tar file1 创建一个非压缩的 tarball
|
||||
## tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
|
||||
## tar -tf archive.tar 显示一个包中的内容
|
||||
## tar -xvf archive.tar 释放一个包
|
||||
## tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下
|
||||
## tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包
|
||||
## tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包
|
||||
## tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
|
||||
## tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包
|
||||
## zip file1.zip file1 创建一个zip格式的压缩包
|
||||
## zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
|
||||
## unzip file1.zip 解压一个zip格式压缩包
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## RPM 包 - (Fedora, Redhat及类似系统)
|
||||
## rpm -ivh package.rpm 安装一个rpm包
|
||||
## rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告
|
||||
## rpm -U package.rpm 更新一个rpm包但不改变其配置文件
|
||||
## rpm -F package.rpm 更新一个确定已经安装的rpm包
|
||||
## rpm -e package_name.rpm 删除一个rpm包
|
||||
## rpm -qa 显示系统中所有已经安装的rpm包
|
||||
## rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包
|
||||
## rpm -qi package_name 获取一个已安装包的特殊信息
|
||||
## rpm -qg "System Environment/Daemons" 显示一个组件的rpm包
|
||||
## rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表
|
||||
## rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表
|
||||
## rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表
|
||||
## rpm -q package_name --whatprovides 显示一个rpm包所占的体积
|
||||
## rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l
|
||||
## rpm -q package_name --changelog 显示一个rpm包的修改历史
|
||||
## rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供
|
||||
## rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表
|
||||
## rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书
|
||||
## rpm --checksig package.rpm 确认一个rpm包的完整性
|
||||
## rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性
|
||||
## rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间
|
||||
## rpm -Va 检查系统中所有已安装的rpm包- 小心使用
|
||||
## rpm -Vp package.rpm 确认一个rpm包还未安装
|
||||
## rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件
|
||||
## rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包
|
||||
## rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## YUM 软件包升级器 - (Fedora, RedHat及类似系统)
|
||||
## yum install package_name 下载并安装一个rpm包
|
||||
## yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系
|
||||
## yum update package_name.rpm 更新当前系统中所有安装的rpm包
|
||||
## yum update package_name 更新一个rpm包
|
||||
## yum remove package_name 删除一个rpm包
|
||||
## yum list 列出当前系统中安装的所有包
|
||||
## yum search package_name 在rpm仓库中搜寻软件包
|
||||
## yum clean packages 清理rpm缓存删除下载的包
|
||||
## yum clean headers 删除所有头文件
|
||||
## yum clean all 删除所有缓存的包和头文件
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## DEB 包 (Debian, Ubuntu 以及类似系统)
|
||||
## dpkg -i package.deb 安装/更新一个 deb 包
|
||||
## dpkg -r package_name 从系统删除一个 deb 包
|
||||
## dpkg -l 显示系统中所有已经安装的 deb 包
|
||||
## dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包
|
||||
## dpkg -s package_name 获得已经安装在系统中一个特殊包的信息
|
||||
## dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表
|
||||
## dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表
|
||||
## dpkg -S /bin/ping 确认所给的文件由哪个deb包提供
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## APT 软件工具 (Debian, Ubuntu 以及类似系统)
|
||||
## apt-get install package_name 安装/更新一个 deb 包
|
||||
## apt-cdrom install package_name 从光盘安装/更新一个 deb 包
|
||||
## apt-get update 升级列表中的软件包
|
||||
## apt-get upgrade 升级所有已安装的软件
|
||||
## apt-get remove package_name 从系统删除一个deb包
|
||||
## apt-get check 确认依赖的软件仓库正确
|
||||
## apt-get clean 从下载的软件包中清理缓存
|
||||
## apt-cache search searched-package 返回包含所要搜索字符串的软件包名称
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 查看文件内容
|
||||
## cat file1 从第一个字节开始正向查看文件的内容
|
||||
## tac file1 从最后一行开始反向查看一个文件的内容
|
||||
## more file1 查看一个长文件的内容
|
||||
## less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作
|
||||
## head -2 file1 查看一个文件的前两行
|
||||
## tail -2 file1 查看一个文件的最后两行
|
||||
## tail -f /var/log/messages 实时查看被添加到一个文件中的内容
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 文本处理
|
||||
## cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT
|
||||
## cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中
|
||||
## cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中
|
||||
## grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"
|
||||
## grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇
|
||||
## grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行
|
||||
## grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"
|
||||
## sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"
|
||||
## sed '/^$/d' example.txt 从example.txt文件中删除所有空白行
|
||||
## sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行
|
||||
## echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容
|
||||
## sed -e '1d' result.txt 从文件example.txt 中排除第一行
|
||||
## sed -n '/stringa1/p' 查看只包含词汇 "string1"的行
|
||||
## sed -e 's/ *$//' example.txt 删除每一行最后的空白字符
|
||||
## sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部
|
||||
## sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容
|
||||
## sed -n '5p;5q' example.txt 查看第5行
|
||||
## sed -e 's/00*/0/g' example.txt 用单个零替换多个零
|
||||
## cat -n file1 标示文件的行数
|
||||
## cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行
|
||||
## echo a b c | awk '{print $1}' 查看一行第一栏
|
||||
## echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏
|
||||
## paste file1 file2 合并两个文件或两栏的内容
|
||||
## paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分
|
||||
## sort file1 file2 排序两个文件的内容
|
||||
## sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
|
||||
## sort file1 file2 | uniq -u 删除交集,留下其他的行
|
||||
## sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)
|
||||
## comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容
|
||||
## comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容
|
||||
## comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
|
||||
## 字符设置和文件格式转换
|
||||
## dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX
|
||||
## unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS
|
||||
## recode ..HTML < page.txt > page.html 将一个文本文件转换成html
|
||||
## recode -l | more 显示所有允许的转换格式
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 文件系统分析
|
||||
## badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块
|
||||
## fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性
|
||||
## fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性
|
||||
## e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性
|
||||
## e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性
|
||||
## fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性
|
||||
## fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性
|
||||
## fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性
|
||||
## dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 初始化一个文件系统
|
||||
## mkfs /dev/hda1 在hda1分区创建一个文件系统
|
||||
## mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统
|
||||
## mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统
|
||||
## mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统
|
||||
## fdformat -n /dev/fd0 格式化一个软盘
|
||||
## mkswap /dev/hda3 创建一个swap文件系统
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## SWAP文件系统
|
||||
## mkswap /dev/hda3 创建一个swap文件系统
|
||||
## swapon /dev/hda3 启用一个新的swap文件系统
|
||||
## swapon /dev/hda2 /dev/hdb3 启用两个swap分区
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 备份
|
||||
## dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份
|
||||
## dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份
|
||||
## restore -if /tmp/home0.bak 还原一个交互式备份
|
||||
## rsync -rogpav --delete /home /tmp 同步两边的目录
|
||||
## rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync
|
||||
## rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录
|
||||
## rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录
|
||||
## dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作
|
||||
## dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件
|
||||
## tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作
|
||||
## ( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容
|
||||
## ( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录
|
||||
## tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接
|
||||
## find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录
|
||||
## find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包
|
||||
## dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作
|
||||
## dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 光盘
|
||||
## cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容
|
||||
## mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件
|
||||
## mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件
|
||||
## mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件
|
||||
## cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件
|
||||
## gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件
|
||||
## mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件
|
||||
## cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中
|
||||
## cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3)
|
||||
## cdrecord --scanbus 扫描总线以识别scsi通道
|
||||
## dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD
|
||||
|
||||
## 返回顶部索引 ^
|
||||
|
||||
## 网络 - (以太网和WIFI无线)
|
||||
## ifconfig eth0 显示一个以太网卡的配置
|
||||
## ifup eth0 启用一个 'eth0' 网络设备
|
||||
## ifdown eth0 禁用一个 'eth0' 网络设备
|
||||
## ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址
|
||||
## ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)
|
||||
## dhclient eth0 以dhcp模式启用 'eth0'
|
||||
## route -n show routing table
|
||||
## route add -net 0/0 gw IP_Gateway configura default gateway
|
||||
## route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'
|
||||
## route del 0/0 gw IP_gateway remove static route
|
||||
## echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing
|
||||
## hostname show hostname of system
|
||||
## host** **www.example.com** **lookup hostname to resolve name to ip address and viceversa(1)
|
||||
## nslookup** **www.example.com** **lookup hostname to resolve name to ip address and viceversa(2)
|
||||
## ip link show show link status of all interfaces
|
||||
## mii-tool eth0 show link status of 'eth0'
|
||||
## ethtool eth0 show statistics of network card 'eth0'
|
||||
## netstat -tup show all active network connections and their PID
|
||||
## netstat -tupl show all network services listening on the system and their PID
|
||||
## tcpdump tcp port 80 show all HTTP traffic
|
||||
## iwlist scan show wireless networks
|
||||
## iwconfig eth1 show configuration of a wireless network card
|
||||
## hostname show hostname
|
||||
## host** **www.example.com** **lookup hostname to resolve name to ip address and viceversa
|
||||
## nslookup** **www.example.com** **lookup hostname to resolve name to ip address and viceversa
|
||||
## whois** **www.example.com** **lookup on Whois database
|
||||
|
||||
## GO TOP INDEX ^
|
||||
## Microsoft Windows networks (SAMBA)
|
||||
## nbtscan ip_addr netbios name resolution
|
||||
## nmblookup -A ip_addr netbios name resolution
|
||||
## smbclient -L ip_addr/hostname show remote shares of a windows host
|
||||
## smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb
|
||||
## mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a windows network share
|
||||
> 来自 <[http://blog.csdn.net/ww130929/article/details/69788517](http://blog.csdn.net/ww130929/article/details/69788517)>
|
||||
19
实践积累/个人知识库/Linux/更改所有子文件和子目录所有者权限.md
Executable file
19
实践积累/个人知识库/Linux/更改所有子文件和子目录所有者权限.md
Executable file
@@ -0,0 +1,19 @@
|
||||
有两个修改命令可以用到,「change mode」&「change owner」
|
||||
## 即chmod以及chown,其中可以用递归参数**==-R**==来实现更改所有子文件和子目录的权限。
|
||||
## 1、利用chmod修改权限:
|
||||
## 对Document/目录下的所有子文件与子目录执行相同的权限变更:
|
||||
## chmod -R 700 Document/
|
||||
|
||||
## -R参数是递归 处理目录下的所有文件以及子文件夹
|
||||
|
||||
700是变更后的权限表示(只有所有者有读和写以及执行的权限)
|
||||
|
||||
Document/ 是需要执行的目录
|
||||
|
||||
## 2、利用chown改变所有者:
|
||||
## 对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户
|
||||
## chown -R username:users Document/
|
||||
|
||||
## username:users users用户组的username,用户组参数不是必须有
|
||||
## 参考:http://rabbit52.com/2011/linux/ubuntu/linux-chmod-chown
|
||||
> 来自 <[http://blog.csdn.net/songyu0120/article/details/43408499](http://blog.csdn.net/songyu0120/article/details/43408499)>
|
||||
5
实践积累/个人知识库/Linux/查看目录大小.md
Executable file
5
实践积累/个人知识库/Linux/查看目录大小.md
Executable file
@@ -0,0 +1,5 @@
|
||||
## du -sh /*
|
||||
## 可以列出你整个VPS所有文件夹的大小。其中“/*”是控制分析哪个目录的,你根据上面的结果,然后灵活变化后面的路径就行了,例如:
|
||||
## du -sh /usr/*
|
||||
## 用这个命令来分析usr目录下的文件夹大小,最后定位到大文件,直接删除就行了。
|
||||
> 来自 <[https://www.hack520.com/504.html](https://www.hack520.com/504.html)>
|
||||
7
实践积累/个人知识库/Linux/百度云_百度云一年.md
Executable file
7
实践积累/个人知识库/Linux/百度云_百度云一年.md
Executable file
@@ -0,0 +1,7 @@
|
||||
| |
|
||||
| ------------- |
|
||||
| 106.12.121.86 |
|
||||
|
||||
我2be黑星
|
||||
|
||||

|
||||
38
实践积累/个人知识库/Linux/给双系统的ubuntu挂载windows的硬盘.md
Executable file
38
实践积累/个人知识库/Linux/给双系统的ubuntu挂载windows的硬盘.md
Executable file
@@ -0,0 +1,38 @@
|
||||
[https://blog.csdn.net/yaoxingshuai/article/details/50563245](https://blog.csdn.net/yaoxingshuai/article/details/50563245)
|
||||
|
||||
楼主给笔记本电脑装了双系统,常年放在寝室开着,平时用实验室的电脑,偶尔需要笔记本的时候就远程控制。后来就发现了一个问题,我远程连接linux的时候,只能看见Linux这个分区的内容,windows的D、E、F盘都没有,这个时候如果要找这些盘符里的文件就比较麻烦了
|
||||
|
||||
于是乎,机智的楼主看了一下Linux里的设备文件
|
||||
|
||||
cd /dev
|
||||
|
||||
ls -l sd*
|
||||
|
||||
能看见楼主的笔记本硬盘分了好几个区C D E F G H,为了确保准确,楼主又看了一下硬盘信息
|
||||
|
||||
fdisk -lu
|
||||
|
||||
第四列Blocks指的分区大小,sda1=52,436,128B 大概50GB,这不是我的C盘么
|
||||
|
||||
最后一个sda9 = 12545024B 大概 12GB就是我安装Linux的盘符
|
||||
|
||||
sda2 = sda5+sda6+sda7+sda8+sda9 一共大概450G,于是机制的楼主推断出sda5便是我要的D盘;
|
||||
|
||||
我的D盘,时尚时尚最时尚,我情不自禁的要把D盘挂载到Linux下,于是乎
|
||||
|
||||
cd /mnt 一般挂载到/mnt 或者 /media, 都可以
|
||||
|
||||
ls 发现目前啥都没有
|
||||
|
||||
mkdir thinkiii 我想把D盘挂载过来取名thinkiii,这个无所谓的
|
||||
|
||||
mount /dev/sda5 /mnt/thinkiii 这样便把sda5也就是D盘挂载到/mnt/thinkiii了
|
||||
|
||||
cd /mnt/thinkiii
|
||||
|
||||
ls 便可查看D盘的文件了
|
||||
|
||||
|
||||
————————————————
|
||||
版权声明:本文为CSDN博主「浴前带刀侍卫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
|
||||
原文链接:https://blog.csdn.net/yaoxingshuai/article/details/50563245
|
||||
16
实践积累/个人知识库/Linux/阿里云_Php.md
Executable file
16
实践积累/个人知识库/Linux/阿里云_Php.md
Executable file
@@ -0,0 +1,16 @@
|
||||
## 首先,安装mysql
|
||||
$ sudo apt-get install mysql-server$ sudo apt-get install mysql-client安装时输出root用户的密码
|
||||
## 在安装phpmyadmin
|
||||
$ sudo apt-get install phpmyadmin$ sudo apt-get install php-mbstring$ sudo apt-get install php-gettext安装时选择自动配置数据库,输入数据库root账号的密码如果不安装以上两个php软件包,则会报错或者白屏,提示找不到/usr/share/php/php-gettext/gettext.inc之类的错误
|
||||
## 建立**==/var/www/html** ==下的软连接
|
||||
$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
|
||||
## 修改php配置文件
|
||||
$ sudo vim /etc/php/7.0/apache2/php.inidisplay_errors = On(显示错误日志,出现两次,都要改,不然无效)extension=php_mbstring.dll (开启mbstring)
|
||||
|
||||
## 重启apache
|
||||
$ sudo /etc/init.d/apache2 restart
|
||||
## 1
|
||||
## 2
|
||||
## 访问端口localhost/phpmyadmin,输入账号密码即可
|
||||
## 重点提要:因为默认安装phpmyadmin时会安装apahce和php等依赖包,由于是16.04系统,会默认安装php7.0,php7.0又没有默认自带php-mbstring,php-gettext这两个包,所以会报错。
|
||||
> 来自 <[http://blog.csdn.net/l6807718/article/details/51374915](http://blog.csdn.net/l6807718/article/details/51374915)>
|
||||
2
实践积累/个人知识库/Linux/阿里云_Ubuntu 16.04 wordpress环境搭建.md
Executable file
2
实践积累/个人知识库/Linux/阿里云_Ubuntu 16.04 wordpress环境搭建.md
Executable file
@@ -0,0 +1,2 @@
|
||||
**阿里云下Ubuntu16下LAMP+wordpress建站记录**
|
||||
> 来自 <[http://blog.csdn.net/code12hour/article/details/63691403](http://blog.csdn.net/code12hour/article/details/63691403)>
|
||||
61
实践积累/个人知识库/Linux/阿里云_Ubuntu ftp使用.md
Executable file
61
实践积累/个人知识库/Linux/阿里云_Ubuntu ftp使用.md
Executable file
@@ -0,0 +1,61 @@
|
||||
## 搞了下**==FTP****服务器,基本上能遇到的问题都遇到了****-****。**==-!
|
||||
## 先说步骤====:
|
||||
## 1.**==安装****vsftpd**==软件包
|
||||
sudo apt-get install vsftpd
|
||||
## 2.====打开配置文件
|
||||
vim /etc/vsftpd.conf
|
||||
## 3.====修改参数
|
||||
## 一些参数可以去掉注释激活,为了方便,你也可以注释全部,然后添加下面的设置
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
# 这些设置系统默认是开启的,可以不管listen=NOlisten_ipv6=YESdirmessage_enable=YESuse_localtime=YESxferlog_enable=YESconnect_from_port_20=YES
|
||||
# 下面的就要自定义设置了,建议系统默认的不管,然后复制下面的
|
||||
# 是否允许匿名访问,NO为不允许anonymous_enable=NO#是否允许本地用户访问,就是linux本机中存在的用户,YES允许local_enable=YES#是否开启写模式,YES为开启write_enable=YES#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755local_umask=022
|
||||
# 是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),NO的话,白名单失效,和下面一个参数配合使用userlist_enable=YES#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能userlist_deny=NO#指定哪个文件作为userlist文件,我们稍后编辑这个文件userlist_file=/etc/vsftpd.user_list
|
||||
# 是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦chroot_local_user=YES#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外chroot_list_enable=YES#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录chroot_list_file=/etc/vsftpd.chroot_list#是否开启写模式,开启后可以进行创建文件夹等写入操作allow_writeable_chroot=YES
|
||||
# 设置ftp根目录的位置,这个文件我们稍后自己创建local_root=/var/myftp
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
## 重启====vsftpd
|
||||
|
||||
sudo /etc/init.d/vsftpd restart
|
||||
|
||||
## 4.**==添加****ftp**==用户
|
||||
## 顺便将将用户目录设置为我们上面的**==ftp**==根目录
|
||||
sudo useradd -d /var/myftp ftpuser
|
||||
## 设置用户密码
|
||||
sudo passwd ftpuser
|
||||
## 5.====创建需要的文件,设置文件夹权限
|
||||
## 上面我们指定了两个文件,**==userlist****文件和****list**==文件,有时候系统不会自动创建,你要自己创建
|
||||
vim /etc/vsftpd.user_list
|
||||
## 然后添加**==ftpuser**==进去作为白名单的一员
|
||||
vim /etc/vsftpd.chroot_list
|
||||
## 设为空即可
|
||||
## 创建用户文件夹,设置权限
|
||||
mkdir /var/myftp
|
||||
## 权限设置可以根据你的使用场景来设置,我这里在根目录下禁止此用户写,然后下面建两个文件夹,一个**==download****只允许读取,****upload**==允许写和读
|
||||
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
chmod 555 /var/myftpcd /var/myftpmkdir uploadchmod 755 uploadmkdir downloadchmod 555 download
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
|
||||
## 最后检查一下文件所有者,都改为====ftpuser
|
||||
## 6.**==使用****ftp**==,解决各种问题
|
||||
## linux**==访问输入****ftp** **加** **你的**==IP
|
||||
ftp xxx.xxx.xxx.xxx
|
||||
## 输入用户名**==ftpuser**==和密码
|
||||
## 如果登录出现**==530**==错误:
|
||||
vim /etc/pam.d/vsftpd
|
||||
## 注释掉====#auth required pam_shells.so
|
||||
## 然后**==ls**==一下,如果失败了,切换到被动模式即可
|
||||
passive mode
|
||||
## 然后**==mkdir****一下发现无法创建文件夹** ==550 create directory operation failed
|
||||
setsebool -P ftpd_disable_trans on/etc/init.d/vsftpd restart
|
||||
## 即可
|
||||
> 来自 <[https://www.cnblogs.com/dupengcheng/p/6790143.html](https://www.cnblogs.com/dupengcheng/p/6790143.html)>
|
||||
21
实践积累/个人知识库/Linux/阿里云_Ubuntu管理apache2.md
Executable file
21
实践积累/个人知识库/Linux/阿里云_Ubuntu管理apache2.md
Executable file
@@ -0,0 +1,21 @@
|
||||
1. 首先,安装Apache2,安装命令:sudo apt-get install apache2
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)3. 安装完成后,进入到/etc/apache2中(根据自己的实际安装目录),这边我配置文件在/etc/apache2中。 我们看到没有想象中的httpd.conf配置文件,这里要说明的是apache2的配置文件是apache2.conf,而不是http.conf。 打开apache2.conf。写入两条语句ServerName localhostDirectoryIndex index.html index.htm index.php这里的ServerName localhost是为了防止最后开启apache2服务的时候会提示DNS出错。DirectoryIndex index.html index.htm index.php是默认目录的写法。保存退出。可以在apache2.conf中加入 AddDefaultCharset GB2312  设置默认字符集,定义服务器返回给客户机默认字符集(由于西欧UTF-8是Apache默认字符集,因此当访问有中文的网页时会出现乱码,这时只要将字符集改成GB2312,再重启Apache服务即可)Listen 192.168.1.1:80 设置监听ip是192.168.1.1的地址和端口为80Listen 192.168.1.2:8080 设置监听ip是192.168.1.2的地址和端口为8080Alias /down "/sofТWare /download" 创建虚拟目录(创建名为down的虚拟目录,它对应的物理路径是:/sofТWare /download)Alias /ftp "/var/ftp" 创建虚拟目录(创建名为ftp的虚拟目录,它对应的物理路径是:/var/ftp)<Directory "/var/www/html"> 设置目录权限(<Directory "目录路径">此次写设置目录权限的语句</Directory>) Options FollowSymLinks page:116 AllowOverride None</Directory>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)7. 需要说明的是,在apache2中,根设置(默认主目录)在 /etc/apache2/sites-АVailable/default中,我们打开default,进行配置。如图,这里我们的默认主目录设置的路径是/var/www,文档最上方的VirtualHost后方的*代表通配符,即表示所有本机ip地址,监听端口为80,ServerName填写你注册的域名,没有可以不填。保存退出。
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)11. 至此,基本配置已经全部完成,查看本机ip地址。输入启用apache2的命令:/etc/init.d/apache2 restart.并在浏览器中输入本机ip地址。成功!
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
|
||||
|
||||
## END
|
||||
注意事项
|
||||
|
||||
18. 配置文件从httpd.conf变成了apache2.con > 来自 <[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
|
||||
> 来自 <[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)>
|
||||

|
||||
304
实践积累/个人知识库/Linux/阿里云_Ubuntu管理mysql.md
Executable file
304
实践积累/个人知识库/Linux/阿里云_Ubuntu管理mysql.md
Executable file
@@ -0,0 +1,304 @@
|
||||
一). ubuntu下mysql安装布局:
|
||||
/usr/bin 客户端程序和mysql_install_db
|
||||
/db 数据库和日志文件
|
||||
/var/run mysqld 服务器
|
||||
/etc/mysql mysql 配置文件my.cnf
|
||||
/usr/share/mysql 字符集,基准程序和错误消息
|
||||
/etc/init.d/mysql 启动mysql服务器
|
||||
二). 设置mysql服务器随开关机自动启动和关闭:
|
||||
系统 -> 系统管理 -> 服务
|
||||
进行到“服务设置”窗口后,激活mysql数据库服务即可
|
||||
三). 修改mysql数据库文件的存储目录:
|
||||
MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:
|
||||
1、home目录下建立data目录
|
||||
## cd /home
|
||||
## mkdir data
|
||||
2、把MySQL服务进程停掉:
|
||||
## mysqladmin -u root -p shutdown
|
||||
3、把/var/lib/mysql整个目录移到/home/data
|
||||
## mv /var/lib/mysql** **/home/data/
|
||||
这样就把MySQL的数据文件移动到了/home/data/mysql下
|
||||
4、找到my.cnf配置文件
|
||||
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
|
||||
## [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf** **/etc/my.cnf
|
||||
5、编辑MySQL的配置文件/etc/my.cnf
|
||||
为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
|
||||
## vi** **my.cnf** **(**==用****vi****工具编辑****my.cnf****文件,找到下列数据修改之**==)
|
||||
## # The MySQL server
|
||||
## [mysqld]** **port** **= 3306
|
||||
## #socket** **= /var/lib/mysql/mysql.sock**==(原内容,为了更稳妥用****“#”**==注释此行)
|
||||
## socket** **= /home/data/mysql/mysql.sock** **(加上此行)
|
||||
6、修改MySQL启动脚本/etc/init.d/mysql
|
||||
最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
|
||||
## [root@test1 etc]# vi** **/etc/init.d/mysql
|
||||
## #datadir=/var/lib/mysql====(注释此行)
|
||||
## datadir=/home/data/mysql** **(加上此行)
|
||||
7、重新启动MySQL服务
|
||||
/etc/init.d/mysql start(启动:sudo /etc/init.d/mysql start 停止:sudo /etc/init.d/mysql stop 重启:sudo /etc/init.d/mysql restart)
|
||||
或用reboot命令重启Linux
|
||||
如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。
|
||||
四). 配置mysql数据库的INNODB存储引擎:
|
||||
1 . 查看mysql存储引擎情况: 登录mysql数据库,在mysql>提示符下搞入show engines;命令。发现: InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎。
|
||||
2. 设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。
|
||||
3. 重启mysql服务器:mysqladmin -u root -p shutdown(回车),sudo /etc/init.d/mysql start(回车)。
|
||||
4. 登录mysql数据库,在mysql>提示符下搞入show engines;命令。如果出现 InnoDB |DEFAULT,则表示我们 设置InnoDB为默认引擎成功。
|
||||
ps: 这里我用重启命令sudo /etc/init.d/mysql restart,出现错误信息, 所以用了上面(步骤3)那种关闭服务又启动的笨方法。
|
||||
五)、MYSQL数据库表大小写问题
|
||||
vi /etc/mysql/my.cnf
|
||||
在[mysqld]后添加
|
||||
lower_case_table_names=0 区分大小写
|
||||
lower_case_table_names=1 不区分大小写
|
||||
重启MYSQL服务
|
||||
MYSQL在LINUX下数据库名、表名、列名、别名大小写规则如下:
|
||||
1.数据库名与表名是严格区分大小写的
|
||||
2.表的别名是严格区分大小写的
|
||||
3.列名与列的别名在所有的情况下均是忽略大小写的
|
||||
4.变量名也是严格区分大小写的
|
||||
MYSQL在WINDOWS下都不区分大小写
|
||||
六)、管理Mysql
|
||||
1、删除 mysql
|
||||
|
||||
1 sudo apt-get autoremove --purge mysql-server-5.0
|
||||
2 sudo apt-get remove mysql-server
|
||||
3 sudo apt-get autoremove mysql-server
|
||||
4 sudo apt-get remove mysql-common (非常重要)
|
||||
上面的其实有一些是多余的,建议还是按照顺序执行一遍
|
||||
|
||||
清理残留数据
|
||||
|
||||
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
|
||||
## 2、安装 mysql====
|
||||
1 sudo apt-get install mysql-server
|
||||
2 sudo apt-get install mysql-client
|
||||
3 sudo apt-get install php5-mysql(安装php5-mysql 是将php和mysql连接起来 )
|
||||
## 
|
||||
## 一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:====
|
||||
1 sudo netstat -tap | grep mysql
|
||||
|
||||
当您运行该命令时,您可以看到类似下面的行:
|
||||
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
|
||||
如果服务器不能正常运行,您可以通过下列命令启动它:
|
||||
1 sudo /etc/init.d/mysql restart
|
||||
|
||||
3、进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
配置 MySQL 的管理员密码:
|
||||
1 sudo mysqladmin -u root password newpassword
|
||||
[MySQL 导入慢的解决方法](http://www.gagahappy.com/mysqldump-import-slow/)
|
||||
MySQL导出的SQL语句在导入时有可能会非常非常慢。在导出时合理使用几个参数,可以大大加快导 入的速度。
|
||||
-e 使用包括几个VALUES列表的多行INSERT语法;
|
||||
–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
|
||||
–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。
|
||||
注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。
|
||||
首先确定目标库的参数值
|
||||
mysql>show variables like ‘max_allowed_packet’;
|
||||
mysql>show variables like ‘net_buffer_length’;
|
||||
根据参数值书写mysqldump命令,如:
|
||||
E:\eis>mysqldump -uroot -p eis_db goodclassification -e –max_allowed_packet=1048576 –net_buffer_length=16384 >good3.sql
|
||||
## 三**==.**==从数据库导出数据库文件:
|
||||
## 1.**==将数据库****mydb****导出到****e:\mysql\mydb.sql**==文件中:
|
||||
## 打开开始**==->****运行****->****输入****cmd** ==进入命令行模式
|
||||
## c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
|
||||
## 然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
|
||||
## 2.**==将数据库****mydb****中的****mytable****导出到****e:\mysql\mytable.sql**==文件中:
|
||||
## c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
|
||||
## 3.**==将数据库****mydb****的结构导出到****e:\mysql\mydb_stru.sql**==文件中:
|
||||
## c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql
|
||||
## 四**==.**==从外部文件导入数据到数据库中:
|
||||
## 从**==e:\mysql\mydb2.sql****中将文件中的****SQL**==语句导入数据库中:
|
||||
## 1.**==从命令行进入****mysql****,然后用命令****CREATE DATABASE mydb2;****创建数据库****mydb2**==。
|
||||
## 2.**==退出****mysql** **可以输入命令****exit****;或者****quit**==;
|
||||
## 3.**==在****CMD**==中输入下列命令:
|
||||
## c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
|
||||
## 然后输入密码,就**==OK**==了。
|
||||
## 五**==.**==下面谈一下关于导入文件大小限制问题的解决:
|
||||
## 默认情况下:**==mysql** **对导入文件大小有限制的,最大为****2M**==,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:
|
||||
## 1.**==在****php.ini**==中修改相关参数:
|
||||
## 影响**==mysql**==导入文件大小的参数有三个:
|
||||
**memory_limit=128M,upload_max_filesize=2M,post_max_size=8M**
|
||||
## 修改**==upload_max_filesize=200 M** ==这里修改满足你需要的大小,
|
||||
## 可以同时修改其他两项====memory_limit=250M post_max_size=200M
|
||||
## 这样就可以导入**==200M****以下的****.sql**==文件了
|
||||
> 来自 <[http://blog.csdn.net/qingrx/article/details/7987030](http://blog.csdn.net/qingrx/article/details/7987030)>
|
||||

|
||||
|
||||

|
||||
|
||||
进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
## 进入MySQL Command line client下
|
||||
|
||||
## 查看当前使用的数据库:
|
||||
## mysql>select database();
|
||||
## mysql>status;
|
||||
## mysql>show tables;
|
||||
## mysql>show databases;//可以查看有哪些数据库,返回数据库名(databaseName)
|
||||
## mysql>use databaseName; //更换当前使用的数据库
|
||||
## mysql>show tables; //返回当前数据库下的所有表的名称
|
||||
## 或者也可以直接用以下命令
|
||||
## mysql>show tables from databaseName;//databaseName可以用show databases得来
|
||||
## mysql查看表结构命令,如下:
|
||||
## desc 表名;
|
||||
## show columns from 表名;
|
||||
## 或者
|
||||
## describe 表名;
|
||||
## show create table 表名;
|
||||
## 或者
|
||||
## use information_schema
|
||||
## select * from columns where table_name='表名';
|
||||
## 查看警告:
|
||||
## Rows matched: 1 Changed: 0 Warnings: 1
|
||||
## mysql> show warnings;
|
||||
> 来自 <[http://database.51cto.com/art/201011/234471.htm](http://database.51cto.com/art/201011/234471.htm)>
|
||||
|
||||
|
||||
 
|
||||
|
||||
4]如何创建和删除一个数据库?
|
||||
|
||||
比如我要创建一个名为linux的数据库,应该运行如下命令
|
||||
|
||||
mysql> create database [数据库名];
|
||||
|
||||
所以我们应该运行如下的命令,来创建名为linux的数据库
|
||||
|
||||
mysql> create database linux;
|
||||
Query OK, 1 row affected (0.00 sec)
|
||||
|
||||
是不是建好了呢??肯定是建好了,因为都有OK了:)
|
||||
|
||||
查看是不是有linux这个数据库了呢?
|
||||
|
||||
代码:
|
||||
mysql> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| linux |
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
3 rows in set (0.00 sec)
|
||||
|
||||
那我们如何删除一个数据库呢??
|
||||
mysql> drop database [数据库名];
|
||||
|
||||
比如我们要把刚才创建的linux数据库删除,应该用下面的命令;
|
||||
mysql> drop database linux;
|
||||
Query OK, 0 rows affected (0.00 sec)
|
||||
|
||||
是不是已经删除了呢??
|
||||
|
||||
代码:
|
||||
mysql> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
2 rows in set (0.00 sec)
|
||||
|
||||
5]如何操作一个数据库呢,这个问题就比较多了,建议还是看一下mysql的手册吧。里面的东西太多了。如果操作一个数据库,首先是要指定一个数据库为当前数据库,应该用use命令
|
||||
|
||||
mysql>use [数据库];
|
||||
|
||||
比如我想指定linux这个数据库为当前数据库,应该是
|
||||
|
||||
mysql> use linux;
|
||||
Database changed
|
||||
|
||||
6]如何备份数据库??
|
||||
|
||||
比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump
|
||||
|
||||
命令格式如下:
|
||||
|
||||
shell> mysqldump -uroot -p linux > /root/linux.sql
|
||||
Enter password:在这里输入数据库的密码
|
||||
|
||||
通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份;其次:备份目的地是/root,备份的文件名是linux.sql。其实备份的位置和文件名,根据自己的情况来定。文件名可以自己来取,路径也可以自己来安排;
|
||||
|
||||
比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。
|
||||
shell> mysqldump -uroot -p linux > /home/beinan/linuxsir031130.sql
|
||||
Enter password:在这里输入数据库管理员root的数据库密码
|
||||
|
||||
这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql
|
||||
|
||||
综上所述,我们学习时要学会变通。:):)
|
||||
|
||||
5]如何把把备份的数据库导入到数据库中?
|
||||
|
||||
首先我们还是要操作上面几个过程,比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话),创建数据库等。
|
||||
|
||||
比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份,导入名为linux的数据库中,应该如下操作;
|
||||
|
||||
shell> mysql -uroot -p linux < /home/beinan/linuxsir031130.sql
|
||||
Enter password:在这里输入密码
|
||||
|
||||
如果机器好,数据库比较小,几分钟就好了。
|
||||
|
||||
6]其它一些比较常用的mysql指令;
|
||||
|
||||
查看状态
|
||||
mysql> show status;
|
||||
|
||||
查看进程
|
||||
|
||||
代码:
|
||||
mysql> show processlist;
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| 16 | root | localhost | NULL | Query | 0 | NULL | show processlist |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
查看表,应该先指定一个数据库为当前数据库;比如是名为linux的数据库;
|
||||
|
||||
mysql>use linux;
|
||||
mysql> show tables;
|
||||
Empty set (0.00 sec)
|
||||
|
||||
7]对mysql数据库常用命令的一点补充;
|
||||
|
||||
几个常用的mysql相关的管理命令
|
||||
|
||||
mysql 命令:基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。
|
||||
|
||||
mysqladmin 命令,用来创建和维护mysql数据库的命令,前面已经简单的提过;
|
||||
|
||||
isamchk 是用来修复、检查和优化.ism后缀的数据库文件;
|
||||
|
||||
mysqldump 是用于备份数据库,前面已经简单的说明过;
|
||||
|
||||
myisamchk 用来修复.myi后缀的数据库文件;
|
||||
|
||||
比如我们要检查名为linux的数据库.myi数据库表是否存在问题,应该用下面的命令;
|
||||
|
||||
要把mysqld服务器停下来
|
||||
shell> ../share/mysql.server stop
|
||||
|
||||
然后执行
|
||||
shell> myisamchk ../var/linux/*.MYI
|
||||
|
||||
上面的命令的意思就是检查所有的.myi文件,数据库的目录在../var/linux/目录中
|
||||
|
||||
如果有问题,应该用-r参数来修复
|
||||
shell> myisamchk -r ../var/linux/*.MYI
|
||||
|
||||
6]mysqlshow 命令:显示用户选择的数据库和表
|
||||
shell> mysqlshow -uroot -p [数据库名]
|
||||
|
||||
比如我要查看名为linux的数据库;应该是:
|
||||
|
||||
shell> mysqlshow -uroot -p linux
|
||||
|
||||
好了,到这里,你可能已经知道命令行下的所有基本操作了~
|
||||
|
||||
ps:补充一个。。
|
||||
|
||||
更改ROOT帐号名。
|
||||
|
||||
```sql
|
||||
update set user="新名字" where user="旧名字";
|
||||
```
|
||||
> 来自 <[http://blog.csdn.net/princewong/article/details/2003658](http://blog.csdn.net/princewong/article/details/2003658)>
|
||||
18
实践积累/个人知识库/Linux/阿里云_Ubuntu管理php.md
Executable file
18
实践积累/个人知识库/Linux/阿里云_Ubuntu管理php.md
Executable file
@@ -0,0 +1,18 @@
|
||||
安装php7(我这里装了好多,我也不知道哪些是非必需的)
|
||||
[plain] view plain copy
|
||||
apt-get install php7.0 php7.0-curl php7.0-gd php7.0-json php7.0-opcache php7.0-xml mcrypt php7.0-curl php7.0-cgi php7.0-xmlrpc php7.0-gd php-pear
|
||||
|
||||
重启apache2和mysql
|
||||
[plain] view plain copy
|
||||
systemctl restart apache2
|
||||
systemctl restart mysql
|
||||
|
||||
测试php和apache2
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/info.php
|
||||
输入
|
||||
[php] view plain copy
|
||||
<?php
|
||||
phpinfo();
|
||||
?>
|
||||
保存后访问你的域名或者公网ip:your_server_ip/info.php,看看有没有对应的信息,有就说明成功了。
|
||||
82
实践积累/个人知识库/Linux/阿里云_Ubuntu管理wordpress.md
Executable file
82
实践积累/个人知识库/Linux/阿里云_Ubuntu管理wordpress.md
Executable file
@@ -0,0 +1,82 @@
|
||||
WordPress的安装与配置
|
||||
下载wordpress:
|
||||
[plain] view plain copy
|
||||
wget https://wordpress.org/latest.zip
|
||||
安装unzip:
|
||||
[plain] view plain copy
|
||||
apt-get install unzip
|
||||
解压和后续操作
|
||||
[plain] view plain copy
|
||||
unzip -q latest.zip -d /var/www/html/
|
||||
cd /var/www/html/wordpress
|
||||
cp -a * ..
|
||||
rm -r wordpress/
|
||||
chown www-data:www-data -R /var/www/html/
|
||||
创建上传目录:
|
||||
[plain] view plain copy
|
||||
mkdir -p /var/www/html/wp-content/uploads
|
||||
chown www-data:www-data -R /var/www/html/wp-content/uploads
|
||||
|
||||
mysql相关操作
|
||||
创建mysql账户:
|
||||
[plain] view plain copy
|
||||
mysql -u root -p
|
||||
[sql] view plain copy
|
||||
```sql
|
||||
CREATE DATABASE wordpress character set utf8 collate utf8_bin;
|
||||
```
|
||||
GRANT ALL PRIVILEGES on wordpress.* to 'wpuser'@'localhost' identified by 'your_password';
|
||||
FLUSH PRIVILEGES;
|
||||
exit
|
||||
|
||||
编辑配置文件
|
||||
[plain] view plain copy
|
||||
cd /var/www/html
|
||||
mv wp-config-sample.php wp-config.php
|
||||
vim wp-config.php
|
||||
[plain] view plain copy
|
||||
/** The name of the database for WordPress */
|
||||
define('DB_NAME', 'wordpress'); /** MySQL database username */
|
||||
define('DB_USER', 'wpuser'); /** MySQL database password */
|
||||
define('DB_PASSWORD', 'your_password'); /** MySQL hostname */
|
||||
define('DB_HOST', 'localhost');
|
||||
|
||||
设置固定链接:
|
||||
如果是设置了虚拟主机的话,这部分可能和下面的操作不一样,我也不太清楚,可以去google搜一下
|
||||
[plain] view plain copy
|
||||
vim /etc/apache2/sites-available/000-default.conf
|
||||
[plain] view plain copy
|
||||
[...]
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /var/www/html
|
||||
ServerName server1.example.com
|
||||
<Directory /var/www/html/>
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
[...]
|
||||
就是在里面添加上ServerName到</Directory>这一段
|
||||
允许URL的重写以及Apache2的重启
|
||||
[plain] view plain copy
|
||||
a2enmod rewrite
|
||||
service apache2 restart
|
||||
创建.htaccess文件
|
||||
[plain] view plain copy
|
||||
touch /var/www/html/.htaccess
|
||||
chown :www-data /var/www/html/.htaccess
|
||||
chmod 664 /var/www/html/.htaccess
|
||||
|
||||
添加wordpress安全保护(其实我也不太懂具体作用)
|
||||
访问 https://api.wordpress.org/secret-key/1.1/salt/,
|
||||
然后打开wp-config.php
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/wp-config.php
|
||||
[plain] view plain copy
|
||||
define('AUTH_KEY', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_KEY', 'put your unique phrase here');
|
||||
define('LOGGED_IN_KEY', 'put your unique phrase here');
|
||||
define('NONCE_KEY', 'put your unique phrase here');
|
||||
define('AUTH_SALT', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_SALT', 'put your unique phrase here');
|
||||
define('LOGGED_IN_SALT', 'put your unique phrase here');
|
||||
define('NONCE_SALT', 'put your unique phrase here');
|
||||
将其对应填入。
|
||||
0
实践积累/个人知识库/Linux/阿里云_Untitled-20260407231646.md
Executable file
0
实践积累/个人知识库/Linux/阿里云_Untitled-20260407231646.md
Executable file
28
实践积累/个人知识库/Linux/阿里云_mysql用户权限设置.md
Executable file
28
实践积累/个人知识库/Linux/阿里云_mysql用户权限设置.md
Executable file
@@ -0,0 +1,28 @@
|
||||
## 关于**==mysql**==的用户管理,笔记
|
||||
|
||||
## 1====、创建新用户
|
||||
## 通过**==root**==用户登录之后创建
|
||||
## >>** **grant all privileges on *.* to** **testuser**==@localhost identified by** **"123456"** **;** **//** **创建新用户,用户名为****testuser****,密码为****123456** ==;
|
||||
## >>** **grant all privileges on *.* to** **testuser**==@localhost identified by** **"123456"** **;** **//** **设置用户****testuser****,可以在本地访问**==mysql
|
||||
## >>** **grant all privileges on *.* to** **testuser**==@"%" identified by** **"123456"** **;** **//** **设置用户****testuser****,可以在远程访问**==mysql
|
||||
## >>** **flush privileges** **;** **//** **mysql** **新设置用户或更改密码后需用**==flush privileges****刷新****MySQL****的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动****mysql**==服务器,来使新设置生效
|
||||
## 2====、设置用户访问数据库权限
|
||||
## >>** **grant all privileges on** **test_db.*** **to** **testuser@localhost identified by "123456" ;** **//** **设置用户**==testuser****,只能访问数据库****test_db****,其他数据库均不能访问** ==;
|
||||
## >>** **grant all privileges on** ***.*** **to** **testuser@localhost identified by "123456" ;** **//** **设置用户**==testuser****,可以访问****mysql****上的所有数据库** ==;
|
||||
## >>** **grant all privileges on** **test_db.user_infor** **to** **testuser@localhost identified by "123456" ;** **//** **设置用户**==testuser****,只能访问数据库****test_db****的表****user_infor****,数据库中的其他表均不能访问** ==;
|
||||
## 3====、设置用户操作权限
|
||||
## >>** **grant** **all privileges** **on *.* to** **testuser@localhost identified by "123456" WITH GRANT OPTION** **;** **//**==设置用户****testuser****,拥有所有的操作权限,也就是管理员** ==;
|
||||
## >> grant** **select** **on *.* to** **testuser@localhost identified by "123456" WITH GRANT OPTION** **;** **//**==设置用户****testuser****,只拥有【查询】操作权限** ==;
|
||||
## >>** **grant** **select,insert** **on *.* to** **testuser@localhost identified by "123456"** **;** **//**==设置用户****testuser****,只拥有【查询****\****插入】操作权限** ==;
|
||||
## >>** **grant** **select,insert,update,delete** **on *.* to** **testuser@localhost identified by "123456"** **;** **//**==设置用户****testuser****,只拥有【查询****\****插入】操作权限** ==;
|
||||
## >>** **REVOKE** **select,insert** **ON what FROM** **testuser**==//****取消用户****testuser****的【查询****\****插入】操作权限** ==;
|
||||
## 4====、设置用户远程访问权限
|
||||
## >>** **grant all privileges on *.* to** **testuser@**==“192.168.1.100”** **identified by** **"123456"** **;** **//****设置用户****testuser****,只能在客户端****IP****为****192.168.1.100****上才能远程访问****mysql** ==;
|
||||
## 5**==、关于****root**==用户的访问设置
|
||||
## 设置所有用户可以远程访问**==mysql****,****修改****my.cnf****配置文件,将****bind-address = 127.0.0.1****前面加****“#”****注释掉****,这样就可以允许其他机器远程访问本机****mysql**==了;
|
||||
## >>** **grant all privileges on *.* to** **root@"%" identified by** **"123456"** **;** **//** **设置用户**==root****,可以在远程访问**==mysql
|
||||
## >>** **select host,user from user;** **//**==查询****mysql**==中所有用户权限
|
||||
## 关闭**==root**==用户远程访问权限
|
||||
## >>** **delete from user where user="root" and host="%" ;** **//**==禁止****root****用户在远程机器上访问**==mysql
|
||||
## >>** **flush privileges** **;** **//**==修改权限之后,刷新****MySQL**==的系统权限相关表方可生效
|
||||
> 来自 <[https://www.cnblogs.com/candle806/p/4048651.html](https://www.cnblogs.com/candle806/p/4048651.html)>
|
||||
14
实践积累/个人知识库/Linux/阿里云_远程实例.md
Executable file
14
实践积累/个人知识库/Linux/阿里云_远程实例.md
Executable file
@@ -0,0 +1,14 @@
|
||||
远程连接密码: 148880
|
||||
|
||||
120.78.214.77(公)
|
||||
>
|
||||
|
||||
Mysql root 1q2w3e4r
|
||||
phpmyadmin 1q2w3e4r
|
||||
|
||||
Wordpress admin chill wuzhuoshan@163.com 1q2w3e4r
|
||||
|
||||
[ftp://cocomap.cn](ftp://cocomap.cn) chill 1q2w3e4r
|
||||
|
||||
网站统计——百度 ,双十二事变
|
||||
[https://tongji.baidu.com/web/11004934/overview/index](https://tongji.baidu.com/web/11004934/overview/index)
|
||||
15
实践积累/个人知识库/数据库/CAP定理(CAP theorem).md
Executable file
15
实践积累/个人知识库/数据库/CAP定理(CAP theorem).md
Executable file
@@ -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)>
|
||||
15
实践积累/个人知识库/数据库/Cpu 占用过高.md
Executable file
15
实践积累/个人知识库/数据库/Cpu 占用过高.md
Executable file
@@ -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
|
||||
132
实践积累/个人知识库/数据库/HiMonitor1.0 升级到1.3脚本注意事项.md
Executable file
132
实践积累/个人知识库/数据库/HiMonitor1.0 升级到1.3脚本注意事项.md
Executable file
@@ -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
|
||||
54
实践积累/个人知识库/数据库/INDEX_数据库.md
Executable file
54
实践积累/个人知识库/数据库/INDEX_数据库.md
Executable file
@@ -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 个文件*
|
||||
25
实践积累/个人知识库/数据库/MariaDB_Centos7安装mariadb,支持远程访问.md
Executable file
25
实践积累/个人知识库/数据库/MariaDB_Centos7安装mariadb,支持远程访问.md
Executable file
@@ -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)>
|
||||
18
实践积累/个人知识库/数据库/PostgreSQL_Pg12 安装过程.md
Executable file
18
实践积累/个人知识库/数据库/PostgreSQL_Pg12 安装过程.md
Executable file
@@ -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/)>
|
||||
4
实践积累/个人知识库/数据库/PostgreSQL_Postgresql 帐号密码修改方法.md
Executable file
4
实践积累/个人知识库/数据库/PostgreSQL_Postgresql 帐号密码修改方法.md
Executable file
@@ -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';
|
||||
11
实践积累/个人知识库/数据库/PostgreSQL_pg_hba.conf.md
Executable file
11
实践积累/个人知识库/数据库/PostgreSQL_pg_hba.conf.md
Executable file
@@ -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数据库,就将该配置项设置为“*”;
|
||||
7
实践积累/个人知识库/数据库/PostgreSQL_postgresql删除还有活动连接的数据库.md
Executable file
7
实践积累/个人知识库/数据库/PostgreSQL_postgresql删除还有活动连接的数据库.md
Executable file
@@ -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;`
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
systemctl start postgresql-12.service // 启动服务systemctl stop postgresql-12.service // 关闭服务systemctl restart postgresql-12.service // 重启服务systemctl status postgresql-12.service // 查看状态
|
||||
72
实践积累/个人知识库/数据库/SQL SERVER 游标使用.md
Executable file
72
实践积累/个人知识库/数据库/SQL SERVER 游标使用.md
Executable file
@@ -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
|
||||
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||
17
实践积累/个人知识库/数据库/SQLSERVER 数据库恢复挂起的解决办法.md
Executable file
17
实践积累/个人知识库/数据库/SQLSERVER 数据库恢复挂起的解决办法.md
Executable file
@@ -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
|
||||
```
|
||||
311
实践积累/个人知识库/数据库/SQLSERVER存储过程基本语法.md
Executable file
311
实践积累/个人知识库/数据库/SQLSERVER存储过程基本语法.md
Executable file
@@ -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
|
||||
|
||||
存储过程一般用在实现复杂的功能,数据操纵方面。
|
||||
26
实践积累/个人知识库/数据库/三峡数据变形值直接导出.md
Executable file
26
实践积累/个人知识库/数据库/三峡数据变形值直接导出.md
Executable file
@@ -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
|
||||
14
实践积累/个人知识库/数据库/关系型数据库遵循ACID规则.md
Executable file
14
实践积累/个人知识库/数据库/关系型数据库遵循ACID规则.md
Executable file
@@ -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)>
|
||||
12
实践积累/个人知识库/数据库/内蒙古数据FTP推送脚本快速获取.md
Executable file
12
实践积累/个人知识库/数据库/内蒙古数据FTP推送脚本快速获取.md
Executable file
@@ -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
|
||||
```
|
||||
26
实践积累/个人知识库/数据库/单个HiMonitor 站点数据.md
Executable file
26
实践积累/个人知识库/数据库/单个HiMonitor 站点数据.md
Executable file
@@ -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)
|
||||
```
|
||||
15
实践积累/个人知识库/数据库/去重.md
Executable file
15
实践积累/个人知识库/数据库/去重.md
Executable file
@@ -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
|
||||
103
实践积累/个人知识库/数据库/合肥董铺水库中间数据.md
Executable file
103
实践积累/个人知识库/数据库/合肥董铺水库中间数据.md
Executable file
@@ -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
|
||||
52
实践积累/个人知识库/数据库/回补中间一段时间的GNSS数据.md
Executable file
52
实践积累/个人知识库/数据库/回补中间一段时间的GNSS数据.md
Executable file
@@ -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
|
||||
55
实践积累/个人知识库/数据库/循环批量删除数据库表.md
Executable file
55
实践积累/个人知识库/数据库/循环批量删除数据库表.md
Executable file
@@ -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
|
||||
33
实践积累/个人知识库/数据库/循环造固定数据值脚本.md
Executable file
33
实践积累/个人知识库/数据库/循环造固定数据值脚本.md
Executable file
@@ -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
|
||||
26
实践积累/个人知识库/数据库/循环遍历插数据.md
Executable file
26
实践积累/个人知识库/数据库/循环遍历插数据.md
Executable file
@@ -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
|
||||
36
实践积累/个人知识库/数据库/批量创建app 表索引.md
Executable file
36
实践积累/个人知识库/数据库/批量创建app 表索引.md
Executable file
@@ -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;
|
||||
19
实践积累/个人知识库/数据库/批量删除表.md
Executable file
19
实践积累/个人知识库/数据库/批量删除表.md
Executable file
@@ -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
|
||||
40
实践积累/个人知识库/数据库/批量删除超前数据脚本.md
Executable file
40
实践积累/个人知识库/数据库/批量删除超前数据脚本.md
Executable file
@@ -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;
|
||||
77
实践积累/个人知识库/数据库/批量删除超前数据脚本(监测云).md
Executable file
77
实践积累/个人知识库/数据库/批量删除超前数据脚本(监测云).md
Executable file
@@ -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;
|
||||
66
实践积累/个人知识库/数据库/批量增加非聚集索引.md
Executable file
66
实践积累/个人知识库/数据库/批量增加非聚集索引.md
Executable file
@@ -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;
|
||||
7
实践积累/个人知识库/数据库/按日分组求均值.md
Executable file
7
实践积累/个人知识库/数据库/按日分组求均值.md
Executable file
@@ -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))
|
||||
14
实践积累/个人知识库/数据库/新增站点基准信息增加.md
Executable file
14
实践积累/个人知识库/数据库/新增站点基准信息增加.md
Executable file
@@ -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
|
||||
8
实践积累/个人知识库/数据库/无日志文件附加数据库失败解决.md
Executable file
8
实践积累/个人知识库/数据库/无日志文件附加数据库失败解决.md
Executable file
@@ -0,0 +1,8 @@
|
||||
## 第一步:先建立一个同名数据库,停止SQL SERVER200**==8****,将原来的.mdf****数据库文件****覆盖刚新建的.mdf****数据库文件**==,重新启动数据库第二步:查询分析器执行,
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7|**alter** **database** NEWDBNAME **set** emergency <br>**declare** @databasename **varchar**(255) <br>**set** @databasename='NEWDBNAME' <br>**exec** sp_dboption @databasename, N'single', N'true' <br>dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) --将目标数据库置为单用户状态 <br>dbcc checkdb(@databasename,REPAIR_REBUILD) <br>**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)>
|
||||
58
实践积累/个人知识库/数据库/松滋 2号店循环造rtk.md
Executable file
58
实践积累/个人知识库/数据库/松滋 2号店循环造rtk.md
Executable file
@@ -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
|
||||
51
实践积累/个人知识库/数据库/模拟一段数据.md
Executable file
51
实践积累/个人知识库/数据库/模拟一段数据.md
Executable file
@@ -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
|
||||
22
实践积累/个人知识库/数据库/解除数据库占用连接.md
Executable file
22
实践积累/个人知识库/数据库/解除数据库占用连接.md
Executable file
@@ -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 ;
|
||||
43
实践积累/个人知识库/数据库/运行中数据库收缩脚本.md
Executable file
43
实践积累/个人知识库/数据库/运行中数据库收缩脚本.md
Executable file
@@ -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
|
||||
```
|
||||
1
实践积累/个人知识库/数据库/链接服务器远程查询.md
Executable file
1
实践积累/个人知识库/数据库/链接服务器远程查询.md
Executable file
@@ -0,0 +1 @@
|
||||
>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user