Update from Sync Service

This commit is contained in:
FNS Service
2026-04-21 17:13:51 +08:00
parent 1cf8b7895b
commit c160565270
578 changed files with 0 additions and 17669 deletions

View File

@@ -1,246 +0,0 @@
---
title: Docker 容器化部署指南
tags:
- Docker
- DevOps
- 容器化
- Linux
created: 2026-04-21
---
# Docker 容器化部署指南
## 核心概念
| 概念 | 说明 |
|------|------|
| **镜像Image** | 只读模板,包含运行应用所需的文件系统 |
| **容器Container** | 镜像的运行实例,类似轻量级虚拟机 |
| **仓库Registry** | 存储和分发镜像的服务Docker Hub、GHCR |
| **Dockerfile** | 定义镜像构建步骤的脚本 |
## 常用命令
### 镜像操作
```bash
# 查看本地镜像
docker images
# 拉取镜像
docker pull nginx:latest
# 构建镜像
docker build -t myapp:1.0 .
# 删除镜像
docker rmi myapp:1.0
# 推送镜像
docker push myrepo/myapp:1.0
```
### 容器操作
```bash
# 运行容器
docker run -d --name myapp -p 8080:80 nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止/启动容器
docker stop myapp
docker start myapp
# 进入容器
docker exec -it myapp /bin/bash
# 查看日志
docker logs -f myapp
# 删除容器
docker rm myapp
```
### Docker Compose
```bash
# 启动服务
docker compose up -d
# 查看服务状态
docker compose ps
# 重启服务
docker compose restart
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
# 重新构建并启动
docker compose up -d --build
```
## Dockerfile 最佳实践
```dockerfile
# 1. 使用多阶段构建减小镜像体积
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 2. 生产镜像使用非 root 用户
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
# 3. 使用 .dockerignore 排除不必要的文件
# .git
# node_modules
# *.log
# .env
```
## 常用 Docker Compose 示例
### 基础 Web 应用
```yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: ${DB_PASSWORD}
restart: unless-stopped
volumes:
postgres_data:
```
### Clash + metacubexd代理面板
```yaml
version: '3.8'
services:
clash:
container_name: clash
image: metacubex/mihomo:Alpha
restart: unless-stopped
network_mode: host
pid: host
cap_add:
- ALL
volumes:
- ./config:/root/.config/mihomo
- /dev/net/tun:/dev/net/tun
dashboard:
container_name: dashboard
image: ghcr.io/metacubex/metacubexd:latest
restart: unless-stopped
network_mode: host
```
## 安装 DockerLinux
```bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# Docker Compose独立安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
## 网络模式选择
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| **bridge默认** | NAT 网络,端口需映射 | 单容器简单应用 |
| **host** | 共享宿主机网络栈 | TUN/透明代理、性能敏感应用 |
| **overlay** | 跨主机容器网络 | Docker Swarm 集群 |
| **none** | 禁用网络 | 隔离安全环境 |
## 常用参数
| 参数 | 说明 |
|------|------|
| `-d` | 后台运行detached |
| `-p 8080:80` | 端口映射(宿主机:容器) |
| `-v ./data:/data` | 卷挂载 |
| `-e KEY=val` | 环境变量 |
| `--name myapp` | 容器命名 |
| `--restart unless-stopped` | 自动重启策略 |
| `--network mynet` | 加入指定网络 |
| `-it` | 交互式终端 |
| `--rm` | 容器停止后自动删除 |
## 清理命令
```bash
# 删除已停止的容器
docker container prune
# 删除悬空镜像(无 tag
docker image prune
# 删除所有未使用的镜像
docker image prune -a
# 删除已停止的容器和未使用的镜像
docker system prune
# 完全清理(包括卷)
docker system prune -a --volumes
```
## 故障排查
| 问题 | 解决方案 |
|------|---------|
| 容器无法启动 | `docker logs <container>` 查看日志 |
| 端口冲突 | 检查宿主机端口占用 `netstat -tlnp` |
| 权限不足 | 确保用户在 docker 组 `groups $USER` |
| 镜像拉取慢 | 配置国内镜像加速 |
| TUN 不工作 | 确认 host 模式 + `/dev/net/tun` 挂载 |

View File

@@ -1,3 +0,0 @@
==单节点安装==
==在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)>

View File

@@ -1,7 +0,0 @@
==.==
==在您想要使用单个节点运行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)>

View File

@@ -1,88 +0,0 @@
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` 成功!

View File

@@ -1,17 +0,0 @@
**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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

View File

@@ -1,12 +0,0 @@
**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)>

View File

@@ -1,65 +0,0 @@
**docker rm & docker rmi & docker prune** **的差异**
**docker rm** **** ==删除一个或多个== **容器**
**docker rmi** **:**  ==删除一个或多个== **镜像**
**docker prune**==== ==用来删除不再使用的== **docker** **对象** 
**依据镜像名称来** **删除**
docker rm `docker ps -a |grep 10.10.200.175/rancher/* | awk '{print $1}'`
 docker stop `docker ps -a | awk '{print $1}'`
**Docker rm** **命令**
**语法**
docker rm [OPTIONS] CONTAINER [CONTAINER...]
==OPTIONS====说明:==
- **-f** **:** ==通过====SIGKILL====信号====强制删除====一个运行中的容器==
- **-l** **:** ==移除容器间的网络连接,而非容器本身==
- **-v** **:** ==删除与容器关联的卷==
 
**实例**
==强制删除容器====db01====、====db02======
docker rm -f db01 db02
 
==移除容器== ==my-nginx== ==对容器====db01====的连接,连接名====db01======
docker rm -l db01
 
==删除容器== ==my-nginx====,并删除容器挂载的数据卷:==
docker rm -v my-nginx
 
**Docker rmi** **命令**
**语法**
docker rmi [OPTIONS] IMAGE [IMAGE...]
==OPTIONS====说明:==
- **-f** **:** ==强制删除==
- **--no-prune** **:** ==不移除该镜像的过程镜像,默认移除==
 
**实例**
==强制删除本地镜像== ==mongo:3.2==
docker rmi -f mongo:3.2
![rootxuanwo REPOSITORY mongo tomcat python nglnx my...](Exported%20image%2020260407225313-0.png)
 
**Docker prune** **命令**
==删除== ==所有未被== ==tag== ==标记和未被容器使用的镜像======
docker image prune
 
==删除== ==所有未被容器使用的镜像======
docker image prune -a
 
==删除== ==所有停止运行的容器======
docker container prune
 
==删除== ==所有未被挂载的卷======
docker volume prune
 
==删除== ==所有网络======
docker network prune
 
==删除== ==docker== ==所有资源======
docker system prune
\> 来自 \<[https://www.cnblogs.com/miracle-luna/p/11111907.html](https://www.cnblogs.com/miracle-luna/p/11111907.html)\>

View File

@@ -1,7 +0,0 @@
<!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>

View File

@@ -1,2 +0,0 @@
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)>

View File

@@ -1,28 +0,0 @@
**方法一:**
==#====显示所有的容器,过滤出====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)>

View File

@@ -1,4 +0,0 @@
==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)>

View File

@@ -1,144 +0,0 @@
---
title: GNSS 卫星导航定位知识库
tags:
- GNSS
- 北斗
- GPS
- 定位技术
- 华测导航
created: 2026-04-21
---
# GNSS 卫星导航定位知识库
## GNSS 概述
**GNSSGlobal Navigation Satellite System** = 全球导航卫星系统
| 系统 | 国家/组织 | 卫星数量 | 状态 |
|------|-----------|----------|------|
| **GPS** | 美国 | 31颗 | 成熟运营 |
| **北斗BDS** | 中国 | 50颗+ | 全球服务 |
| **GLONASS** | 俄罗斯 | 24颗 | 成熟运营 |
| **Galileo** | 欧盟 | 30颗 | 全球服务 |
## 北斗系统(中国)
### 发展历程
| 阶段 | 时间 | 状态 |
|------|------|------|
| 北斗一号 | 2000-2007 | 区域有源服务,已退役 |
| 北斗二号 | 2012 | 区域无源服务 |
| **北斗三号** | 2020至今 | **全球服务** |
### 性能指标(北斗三号)
- 水平精度:**< 0.3米**(精密单点定位)
- 垂直精度:**< 0.6米**
- 在轨卫星50颗+
- 空间信号精度:< 2米
### 关键时间节点
| 年份 | 里程碑 |
|------|--------|
| 2025 | 完成关键技术攻关 |
| 2027 | 发射3颗先导试验卫星 |
| 2029 | 开始组网卫星发射 |
| **2035** | **全面建成,定位精度达分米级** |
## 定位精度分级
| 精度等级 | 精度范围 | 应用场景 |
|----------|----------|----------|
| **米级** | 1-10m | 手机导航、车载导航 |
| **亚米级** | 0.1-1m | 无人机、精细农业 |
| **厘米级** | 1-10cm | 测量测绘、精准农业 |
| **毫米级** | <1cm | 形变监测、地震预警 |
## 高精度定位技术
### RTK实时动态定位
```
基准站 → 差分数据 → 流动站 → 厘米级坐标
```
- 原理:基准站已知坐标,与实时观测值对比,生成差分修正
- 精度1-2cm
- 延迟:实时(<1秒
- 依赖CORS连续运行参考站或自建基准站
### PPP精密单点定位
- 原理:单台接收机,利用精密星历和误差模型
- 精度:厘米级
- 延迟收敛需20-30分钟
- 优势:无需基准站
### PPP-RTK
- 结合PPP和RTK优势
- 快速收敛(<1分钟
- 广域覆盖
## 误差来源与削弱措施
| 误差源 | 量级 | 削弱措施 |
|--------|------|----------|
| 电离层延迟 | 几米-几十米 | 双频组合 |
| 对流层延迟 | 几十厘米 | 模型改正 |
| 多径效应 | 几厘米-几米 | 扼流圈天线 |
| 钟差 | 几米 | 差分定位 |
| 星历误差 | 几米 | 精密星历 |
## 行业应用
| 行业 | 应用场景 |
|------|----------|
| **测量测绘** | 大地测量、工程测量 |
| **精准农业** | 农机自动驾驶、植保无人机 |
| **自动驾驶** | 车道级定位 |
| **形变监测** | 大坝、桥梁、尾矿库 |
| **物联网** | 资产追踪、人员定位 |
## 华测导航300627
> 用户持仓相关股票
### 核心业务
- 高精度GNSS接收机
- 农机自动驾驶系统("慧农"系列)
- 测绘仪器
- 数据采集与处理软件
### 2025年报关键数据
| 指标 | 数值 | 同比 |
|------|------|------|
| 营业收入 | 36.99亿 | +13.78% |
| 归母净利润 | 6.85亿 | +17.49% |
| 农机+机器人板块 | 7.52亿 | **+41.49%** |
| 海外毛利率 | >76% | — |
### 行业政策利好
1. **北斗系统升级**:水平<0.3m,垂直<0.6m
2. **"十五五"目标**:北斗产业规模五年突破**1万亿元**
3. **管理办法落地**首部基准站管理办法正式施行2026.1.1
4. **下一代时间表**2035年分米级精度
## 常用术语
| 术语 | 说明 |
|------|------|
| **CORS** | 连续运行参考站系统 |
| **RTCM** | 实时数据交换标准 |
| **NTRIP** | 网络RTK传输协议 |
| **PPK** | 后处理动态定位 |
| **PPP** | 精密单点定位 |
| **SBAS** | 星基增强系统 |
| **地基增强** | 地面参考站增强 |
| **卫导星座** | 卫星几何分布 |

View File

@@ -1,9 +0,0 @@
RATIO
RATIO即整周模糊度分解后次最小RMS与最小RMS的比值。即
![RATIO RAT RMS RMS S RA 0 RATIO RAT RAT 1](Exported%20image%2020260407225341-0.png)
RATIO 反映了所确定出的整周未知数参数的可靠性,这一指标取决
于多种因素,既与观测值的质量有关,也与观测条件的好坏有关。
RATIO是反映基线质量好坏的最关键值通常情况下要求RATIO值
大于1.8。

View File

@@ -1,12 +0,0 @@
RMS 即均方根误差Root Mean Square
![vTpv](Exported%20image%2020260407225345-0.png)
其中:
V为观测值的残差
P为观测值的权
n-f为观测值的总数减去未知数个数。
RMS表明了观测值的质量。RMS越小观测值质量越好
反之,表明观测值质量越差。它不受观测条件(如卫星分布好坏)的影响。
依照数理统计的理论观测值误差落在1.96 倍RMS 的范围内的概率
是95%。

View File

@@ -1,8 +0,0 @@
==三台由独立观测获得基线向量构成的闭合环。==
==GPS控制网一般也构成一定的图形涉及如下的概念==
==1、观测时段测站上开始接收卫星信号到观测停止连续工作的时间段简称时段。==
==2、同步观测两台或两台以上接收机同时对同一组卫星进行的观测。==
==3、同步观测环三台或三台以上接收机同步观测获得基线向量构成的闭合环简称同步环。==
==4、独立观测环由独立观测获得基线向量构成的闭合环简称独立环。==
==5、====异步====观测环:在构成多边形环路的所有基线向量中,只要有非同步观测的基线向量,则称该多边形环路为====异步====观测环,简称====异步====环。==
> 来自 <[https://zhidao.baidu.com/question/182755838.html](https://zhidao.baidu.com/question/182755838.html)>

View File

@@ -1,17 +0,0 @@
1、 同步闭合环
同步环闭合差是由同步观测基线所组成的闭合环的闭合差。
由于同步观测基线间具有一定的内在联系,从而使得同步环闭合差在
理论上应总是为0 的。如果同步环闭合差超限,则说明组成同步环的基线
中至少存在一条基线向量是错误的。但反过来,如果同步环闭合差没有超
限,只能认为静态基线在质量上,绝大部分情况下是合格的,还不能说明
组成同步环的所有基线在质量上绝对合格。
2、异步闭合环
不是完全由同步观测基线所组成的闭合环称为异步环。异步环的闭合
差称为异步环闭合差。
当异步环闭合差满足限差要求时,则表明组成异步环的基线向量的质
量是合格的。当异步环闭合差不满足限差要求时,则表明组成异步环的基
线向量中至少有一条基线向量的质量不合格。要确定出哪些基线向量的质
量不合格可以通过多个相邻的异步环或重复基线来进行。
3、重复基线
不同观测时段对相同的两个测站间的观测结果就是所谓重复基线。这
些观测结果之间的差异就是重复基线较差。

View File

@@ -1,12 +0,0 @@
闭合差的定义
闭合环路检验是检测基线质量的有力方法。
闭合环可分为同步环、异步环和重复基线。
闭合环的闭合差在理论上应为0在实际测量中允许偏离一定的值
闭合环的限差请参见有关文献。
环的闭和差有以下几类:
1、分量闭合差
![Exported image](Exported%20image%2020260407225348-0.png)
2、全长相对闭合差
![Exported image](Exported%20image%2020260407225350-1.png)

View File

@@ -1,53 +0,0 @@
**一、****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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

View File

@@ -1,50 +0,0 @@
**NTP****简介:**
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
在计算机的世界里,时间非常地重要
例如对于火箭发射这种科研活动对时间的统一性和准确性要求就非常地高是按照A这台计算机的时间还是按照B这台计算机的时间
NTP就是用来解决这个问题的NTPNetwork 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****配置文件**
[![Exported image](Exported%20image%2020260407231343-0.gif)](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
[![Exported image](Exported%20image%2020260407231344-1.gif)](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****时间服务器**
[![Exported image](Exported%20image%2020260407231346-2.gif)](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
[![Exported image](Exported%20image%2020260407231348-3.gif)](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)>

View File

@@ -1,127 +0,0 @@
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)>

View File

@@ -1,20 +0,0 @@
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

View File

@@ -1,148 +0,0 @@
==一、前言==
==安全增强型 LinuxSecurity-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)>

View File

@@ -1,12 +0,0 @@
**centos支持rz、sz命令**
yum install lrzsz
rz的用法
在命令终端输入rz回车后就会出现文件选择对话框选择需要上传文件一次可以指定多个文件上传到服务器的路径为当前执行rz命令的目录。
如图选择要上传的文件AddOK
s
sz的用法
sz命令可以单下载一个文件也可以多个文件同时下载

View File

@@ -1,38 +0,0 @@
有以下命令可以查看:
# 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)>

View File

@@ -1,9 +0,0 @@
==用户列表文件:====/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)>

View File

@@ -1,88 +0,0 @@
**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)>

View File

@@ -1,12 +0,0 @@
/usr 系统级的目录可以理解为C:/Windows//usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的却是许多程序运行所必需的一些函数库文件可以理解为C:/Windows/System32
*比如Java的安装目录我会放在这里。
/usr/local用户级的程序目录可以理解为C:/Progrem Files/。
用户自己编译的软件默认会安装到这个目录下。
*比如HadoopTomcat的安装目录我一般会放在/usr/目录下
/opt给主机额外安装软件所摆放的目录。用户级的程序目录可以理解为D:/Softwareopt有可选的意思这里可以用于放置第三方大型软件或游戏当你不需要时直接rm -rf掉即可。在硬盘容量不够时也可将/opt单独挂载到其他磁盘上使用。
*比如临时上传到Linux里的软件tar.gz rpm等文件用作软件仓库。
————————————————
版权声明本文为CSDN博主「佛系亚当」的原创文章遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接https://blog.csdn.net/adamlinsfz/article/details/84307097

View File

@@ -1,298 +0,0 @@
---
title: Linux 系统管理指南
tags:
- Linux
- Shell
- Bash
- 系统管理
- Ubuntu
created: 2026-04-21
---
# Linux 系统管理指南
## 基础命令
### 文件与目录
```bash
# 目录操作
ls -la # 列出所有文件(含隐藏)
cd /path # 切换目录
pwd # 显示当前目录
mkdir -p a/b/c # 递归创建目录
rm -rf directory # 强制删除目录
# 文件操作
cp file1 file2 # 复制
mv file1 file2 # 移动/重命名
rm file # 删除
touch file # 创建空文件
# 查看文件
cat file # 全文显示
head -n 20 file # 前20行
tail -n 50 file # 后50行
tail -f log # 实时跟踪日志
less file # 分页查看
# 搜索
grep "pattern" file
find / -name "*.log"
locate filename
```
### 用户与权限
```bash
# 用户管理
sudo useradd -m -s /bin/bash username
sudo passwd username
sudo usermod -aG sudo username
sudo deluser username
# 权限
chmod 755 file # 数字形式
chmod +x script.sh # 添加执行权限
chown user:group file # 修改所有者
# 权限数字
# 4 = r, 2 = w, 1 = x
# 755 = rwxr-xr-x (所有者全部, 其他读+执行)
# 644 = rw-r--r--
# 600 = rw-------
```
### 进程管理
```bash
# 查看进程
ps aux | grep nginx
top # 实时监控(退出按 q
htop # 更友好的 top需安装
# 管理进程
kill PID # 温柔终止
kill -9 PID # 强制终止
killall nginx # 按名字终止
# 后台运行
nohup command & # 忽略挂断信号后台运行
command & # 后台运行
jobs # 查看后台任务
fg %1 # 调到前台
```
## 软件安装
### APTDebian/Ubuntu
```bash
# 更新源
sudo apt update
sudo apt upgrade
# 安装软件
sudo apt install nginx
sudo apt install docker.io
# 搜索
apt search nginx
# 卸载
sudo apt remove nginx
sudo apt autoremove
```
### YUM/DNFCentOS/RHEL
```bash
sudo dnf install nginx
sudo dnf update
sudo dnf remove nginx
```
### 系统服务systemd
```bash
# 管理服务
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx # 开机自启
sudo systemctl disable nginx # 禁用开机自启
# 查看服务
systemctl list-units --type=service --state=running
```
## 网络命令
```bash
# 查看网络
ip addr show
ip link set eth0 up/down
ss -tuln # 查看监听端口
netstat -tuln
# 网络测试
ping -c 4 google.com
curl -I https://example.com
wget https://example.com/file
# 端口转发
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
# 防火墙
sudo ufw allow 22 # 开放SSH
sudo ufw allow 80/tcp # 开放HTTP
sudo ufw allow 443/tcp # 开放HTTPS
sudo ufw enable
sudo ufw status
```
## 磁盘管理
```bash
# 查看磁盘使用
df -h
du -sh /var/log/*
# 挂载
sudo mount /dev/sdb1 /mnt/usb
sudo umount /mnt/usb
# 分区
sudo fdisk /dev/sdb
# 或使用 parted
# 创建文件系统
sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1
```
## Shell 脚本
```bash
#!/bin/bash
# 变量
NAME="World"
echo "Hello, $NAME!"
echo "当前目录: $(pwd)"
# 条件
if [ -f "file.txt" ]; then
echo "文件存在"
elif [ $age -ge 18 ]; then
echo "成年"
else
echo "未成年"
fi
# 循环
for file in *.txt; do
echo "处理: $file"
done
# 函数
function greet() {
echo "Hello, $1!"
}
greet "张三"
# 常用判断
# -f file 文件存在
# -d dir 目录存在
# -z string 字符串为空
# -n string 字符串非空
# -eq, -ne 数字相等/不等
# -lt, -gt 数字小于/大于
# 读取输入
read -p "请输入名称: " name
echo "你输入了: $name"
# 函数返回状态
function check() {
if [ $1 -gt 10 ]; then
return 0 # 成功
else
return 1 # 失败
fi
}
```
## 日志查看
```bash
# 系统日志
journalctl -u nginx # 查看nginx服务日志
journalctl -f # 实时跟踪
journalctl --since "1 hour ago"
# 应用日志
tail -f /var/log/nginx/access.log
tail -f /var/log/syslog
# 历史命令
history | grep apt
```
## 常用配置
### SSH
```bash
# 生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"
# 复制公钥到服务器
ssh-copy-id user@hostname
# SSH 配置 (~/.ssh/config)
Host myserver
HostName 192.168.1.100
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
```
### Crontab 定时任务
```bash
# 编辑 crontab
crontab -e
# 格式: 分 时 日 月 周 命令
# 示例:
# 0 9 * * 1-5 # 每周一到周五9点
# */15 * * * * # 每15分钟
# 0 2 * * * # 每天凌晨2点
# @reboot # 开机运行
```
## DockerLinux
```bash
# 安装 Docker
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
## 故障排查
| 问题 | 命令 |
|------|------|
| 端口占用 | `lsof -i :8080``ss -tulpn \| grep 8080` |
| 磁盘满 | `df -h` + `du -sh /*` |
| 内存满 | `free -h` + `top` |
| CPU 高 | `top``htop` |
| 服务起不来 | `systemctl status xxx` + `journalctl -u xxx` |
| 网络不通 | `ping 8.8.8.8` + `curl -I url` |

View File

@@ -1,60 +0,0 @@
==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)>

View File

@@ -1,175 +0,0 @@
**命令历史**
以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。
**启动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 移动到文件头。 = [[
Gshift + g 移动到文件尾。 = ]]
ffind命令也可以用于移动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 删除当前行之前所有行(不包括当前行)
jdGjd 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+oCtrl + 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)>

View File

@@ -1,20 +0,0 @@
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)>

View File

@@ -1,7 +0,0 @@
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)>

View File

@@ -1,9 +0,0 @@
==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)>

View File

@@ -1,182 +0,0 @@
==下载内容==
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-xx==
==最常用参数:==
==-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)>

View File

@@ -1,401 +0,0 @@
==最近在项目中用到了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)>

View File

@@ -1,19 +0,0 @@
有两个修改命令可以用到「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)>

View File

@@ -1,5 +0,0 @@
==du -sh /*==
==可以列出你整个VPS所有文件夹的大小。其中“/*”是控制分析哪个目录的,你根据上面的结果,然后灵活变化后面的路径就行了,例如:==
==du -sh /usr/*==
==用这个命令来分析usr目录下的文件夹大小最后定位到大文件直接删除就行了。==
> 来自 <[https://www.hack520.com/504.html](https://www.hack520.com/504.html)>

View File

@@ -1,38 +0,0 @@
[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=52436128B 大概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

View File

@@ -1,7 +0,0 @@
| |
| ------------- |
| 106.12.121.86 |
我2be黑星
![BCC instancehkvxkrp70 A 0 VNC 201911315213 00OG3 1...](Exported%20image%2020260407231429-0.png)

View File

@@ -1,16 +0,0 @@
==首先安装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.0php7.0又没有默认自带php-mbstringphp-gettext这两个包所以会报错。==
> 来自 <[http://blog.csdn.net/l6807718/article/details/51374915](http://blog.csdn.net/l6807718/article/details/51374915)>

View File

@@ -1,2 +0,0 @@
**阿里云下Ubuntu16下LAMP+wordpress建站记录**
> 来自 <[http://blog.csdn.net/code12hour/article/details/63691403](http://blog.csdn.net/code12hour/article/details/63691403)>

View File

@@ -1,61 +0,0 @@
==搞了下====FTP====服务器,基本上能遇到的问题都遇到了====-====。====-!==
==先说步骤====:==
==1.====安装====vsftpd====软件包==
sudo apt-get install vsftpd
==2.====打开配置文件==
vim /etc/vsftpd.conf
==3.====修改参数==
==一些参数可以去掉注释激活,为了方便,你也可以注释全部,然后添加下面的设置==
[![Exported image](Exported%20image%2020260407231630-0.gif)](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
[![Exported image](Exported%20image%2020260407231632-1.gif)](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====允许写和读==
[![Exported image](Exported%20image%2020260407231638-2.gif)](javascript:void\(0\);)
chmod 555 /var/myftpcd /var/myftpmkdir uploadchmod 755 uploadmkdir downloadchmod 555 download
[![Exported image](Exported%20image%2020260407231642-3.gif)](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)>

View File

@@ -1,21 +0,0 @@
1. 首先安装Apache2安装命令sudo apt-get install apache2
[![UbuntuApache2](Exported%20image%2020260407231508-0.jpeg)](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 /downloadAlias /ftp     "/var/ftp"                创建虚拟目录创建名为ftp的虚拟目录它对应的物理路径是/var/ftp<Directory "/var/www/html">       设置目录权限(<Directory "目录路径">此次写设置目录权限的语句</Directory>      Options FollowSymLinks        page:116      AllowOverride None</Directory>
[![UbuntuApache2](Exported%20image%2020260407231510-1.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
[![UbuntuApache2](Exported%20image%2020260407231513-2.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)7.  需要说明的是在apache2中根设置默认主目录在 /etc/apache2/sites-АVailable/default中我们打开default进行配置。如图这里我们的默认主目录设置的路径是/var/www,文档最上方的VirtualHost后方的*代表通配符即表示所有本机ip地址监听端口为80ServerName填写你注册的域名没有可以不填。保存退出。
[![UbuntuApache2](Exported%20image%2020260407231515-3.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
[![UbuntuApache2](Exported%20image%2020260407231517-4.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)11.   至此基本配置已经全部完成查看本机ip地址。输入启用apache2的命令:/etc/init.d/apache2 restart.并在浏览器中输入本机ip地址。成功
[![UbuntuApache2](Exported%20image%2020260407231522-5.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
[![UbuntuApache2](Exported%20image%2020260407231525-6.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
[![UbuntuApache2](Exported%20image%2020260407231527-7.jpeg)](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)>
[![UbuntuApache2](Exported%20image%2020260407231553-8.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)[![UbuntuApache2](Exported%20image%2020260407231559-9.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
[![UbuntuApache2](Exported%20image%2020260407231602-10.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)[![UbuntuApache2](Exported%20image%2020260407231605-11.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
[![UbuntuApache2](Exported%20image%2020260407231610-12.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)[![UbuntuApache2](Exported%20image%2020260407231612-13.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
[![UbuntuApache2](Exported%20image%2020260407231616-14.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
[![UbuntuApache2](Exported%20image%2020260407231620-15.jpeg)](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
> 来自 <[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)>
![plain aptget install apache2 aptget install libapa...](Exported%20image%2020260407231623-16.png)

View File

@@ -1,304 +0,0 @@
一). 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)>
![rootcocomap u mysqladmin u root p version Enter pa...](Exported%20image%2020260407231450-0.png)
![ysql show databases Sg Database I information perf...](Exported%20image%2020260407231452-1.png)
进入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)>
![mysql use wordpress Database changed mysql show ta...](Exported%20image%2020260407231457-2.png) ![4. 4. aptget install mysqlserver aptget install ph...](Exported%20image%2020260407231502-3.png)
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)>

View File

@@ -1,18 +0,0 @@
安装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();
?>
保存后访问你的域名或者公网ipyour_server_ip/info.php看看有没有对应的信息有就说明成功了。

View File

@@ -1,82 +0,0 @@
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');
将其对应填入。

View File

@@ -1,28 +0,0 @@
==关于====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)>

View File

@@ -1,14 +0,0 @@
远程连接密码 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)

View File

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

View File

@@ -1,53 +0,0 @@
![Exported image](Exported%20image%2020260407225214-0.png)
1、什么是项目生命周期它是由什么组成的
答:项目生命周期是指项目从开始到结束所经历的一系列阶段。
由 启动,规划,执行,监控,收尾五大过程组。
2、什么是项目生命周期管理法采用这种方法的最大好处是什么
答:所谓项目生命周期管理法,就是指将不同的项目不同项目阶段过程灵活选择合适的管理方法。
最大的好处是,可以灵活应对项目的包含的各种因素。可以将项目的各个阶段之间的关系顺序,迭代和交替有序灵活开展。
3、什么是项目阶段关口在阶段关口是紧前阶段是否达到结束标准还是紧后阶段是否达到开始标准哪一个更重要为什么
答:项目阶段关口,设立在项目阶段的结束点。
==在阶段关口是紧前阶段达到结束标准====比====紧后阶段达到开始标准====更加====重要==
因为,紧前阶段达到结束标准可以释放各种资源,项目风险降低,会沉淀成本
紧后阶段达到开始标准,代表未来….
4、项目生命周期有哪几种类型预测型生命周期适合什么样的项目适应型生命周期适合什么样的项目
答:
- 预测型生命周期 ,适合传统瀑布型,适合项目一开始,使用的技术和需求都十分清晰的项目
- 迭代型生命周期
- 增量型生命周期
- 适应型生命周期,敏捷型,适合那种一开始只知道部分需求和功能的技术的项目。
==需求明确,产品清晰,无需变更,风险较低的项目==
==需求不清,产品模糊,频繁变更,风险较高====的项目==
- 混合型生命周期
5、什么是迭代
答:迭代是指定期重复性的工作,在规定的时间重复执行一些管理动作
6、项目有哪五大过程组哪四大通用阶段?
答: 由 启动,规划,执行,监控,收尾五大过程组。
有 开始项目阶段,组织与准备阶段,执行项目工作阶段,结束项目阶段四大通用阶段。
7、什么是项目信息它分为几个维度分别出现在项目的哪些过程组
答:项目数据是在整个项目生命周期需要收集、分析、和转化的大量的数据。从各个过程收集项目数据,并在项目团内内共享。
==在各个过程中所收集的数据经过结合相关背景的分析、汇总转化为项目信息。==
==主要分为==
==工作绩效数据====:====主要出现在执行过程和监控过程==
==工作绩效信息:控制过程,监控==
==工作绩效报告:整体项目控制过程,整合管理==
==三个维度。==
8、什么是ITTO他们的典型组成因素有哪些
ITTO是指每个项目管理过程通过合适的项目管理工具和技术将一个或多个输入转化成一个或多个输出。
Input指一个过程的输入上个阶段的产物或各类项目文件组成
Technology和Tool,指工具,软件或模板;技术主要是 方法论或最佳实践
Output为输出。可交付成果更新后的项目文件或计划或总结报告。
典型的组合成因素
9、什么是效益管理计划它包括哪些主要内容
答:效益管理计划是描述了项目实现效益的方式和时间,以及应制定的效益衡量机制。
项目效益指为发起组织和项目预期受益方创造价值的行动、行为、产品、服务或成果的结果。
主要内容有:目变效益、战略一致性、实现效益的时间、效益责任人、测量指标、假设、风险。
10、在项目启动前有一个阶段叫什么名字这个阶段我们主要做哪些工作
答:在项目启动前的一个阶段叫项目前期准备工作。
主要做需求评估、商业论证和效益管理计划。

View File

@@ -1,30 +0,0 @@
3、思考题事业环境因素分为哪两个类别分别包括哪些内容组织过程资产分为哪两个类别分别包括哪些内容
答:事业环境因素主要分为组织内部环境因素和组织外部环境因素
组织内部环境因素主要有:
- 制度环境(组织治理框架,组织结构,项目管理信息系统,人事管理制度,工作授权系统,沟通制度)
- 资源环境(基础设施,实物资源,人力资源,员工能力)
- 文化环境(组织文化,政治氛围,管理实践)
组织的外部环境因素主要有:
- 宏观环境(社会环境,文化环境,市场条件,法律法规,财务因素,采购限制)
- 行业环境行业标准商业数据库学术研究资料生产力指标行业PMBOK
- 相关方环境(相关方期望,相关方文化,风险临界值)
- 物理环境(工作条件,气候条件,客观限制)
组织过程资产主要分过程、政策和程序 和 组织知识库两种
过程、政策和程序 组织过程资产主要有
- 具体的政策
- 流程和程序
有形的组织过程资产主要有
- 工作模板
- 工作指南
- 共享知识库
4、事业环境因素和组织过程资产最重要的区分方式是什么
> 答:主要区分方式

View File

@@ -1,7 +0,0 @@
1、什么是系统型简单型组织结构它有什么优点和缺点如何区分简约型和有机型组织结构
2、职能式组织结构是如何划分的它有哪些优点和缺点适合做什么样的类型的项目
3、协调员和联络员出现在什么组织结构中如何区分协调员和联络员
4、平衡矩阵组织结构有什么优点和缺点
5、项目式组织结构和矩阵型组织结构的最大区别是什么项目型组织结构的优点和缺点有哪些?
6、复合型组织结构除了项目经理还有哪些人是专职服务于项目的哪些人是兼职服务于项目的
7、预习PMO的类型和作用

View File

@@ -1,4 +0,0 @@
![Account Information Username Chi1120131212 550 cha...](Exported%20image%2020260407225227-0.png)
Pssword:
1q2w#E$R

View File

@@ -1,35 +0,0 @@
中文
项目1
**城市环境空气质量预报预警平台** 这个项目包含了城市空气质量预报预警业务管理平台,统计模型预报,实况与预报发布平台,智能短信报送平台,视频会商系统的建设等。
**启动** 初始阶段我们做了什么准备;
**规划**:如何规划这个项目;
**实施**:我在这个项目里担任什么职务,这个项目是做什么用的,
**监控**:这个项目实施过程监督;
**收尾**:这个项目目前是否已经验收,客户满意度如何。
开始:根据国家对城市空气质量预报信息化要求,调研空气质量的预报和发布需求,主要解决城市环境监测中心在数据预报、会商和数据发布流程以及信息化支撑而启动项目。
计划:编制项目管理计划,创建开发工作分解结构,主要分为预报业务平台,预报算法,预报发布平台,短信报送平台,视频会商系统等五大子系统分别编制时间进度计划,制定预算,人力资源管理、沟通和采购计划。
执行:作为项目经理带领项目团队预报业务平台,预报发布平台,短信报送平台和预报算法的集成研发,将视频会商系统进项外包管理,组织整个项目按照预定计划推进。
监控:每周五项目进度和问题汇总、月度评估后并向业主定期汇报项目状态,将业主需求变化推进项目变更,确保项目按照计划的推进。
结束:结束各子系统的项目活动,把研发过程和项目管理过程分别归档,按照合同要求将交付物打包整理移交给业主,开展项目验收会,验收报告盖章签字,总结整理经验教训。
![Initiating Planning S Executing Monitoring Closing](Exported%20image%2020260407225232-0.octet-stream)
中文:项目经验2 中海达监测云
开始:旧有的监测软件产品无法满足国土地灾、矿山、大坝等安全监测行业市场需求组织打造一款具备对安全监测设备的数据采集、审核、统计、查询、管理、专业分析和webgis展示服务的SAAS专业监测云平台启动了这个项目。
计划:将项目主要分为传感器数据采集数据处理web 综合分析平台前端展示等四个子模块分别研发工作结构分解WBS,编制进度计划,人力资源计划和质量计划。
执行:作为项目经理带领项目团队进行项目需求分析,原型设计,编写产品需求规格说明书,搭建和梳理出全新的监测软件产品的业务体系,根据监测产品需求来组织开发架构保障整个项目顺利完成。研发人员进行单元测试以及测试人员集成功能测试和性能测试。
监控:每周与研发汇总项目问题和进度并定期汇报项目状态给上级领导,开展项目需求评审,代码评审,产品架构评审和需求变更评审会议。
结束:结束各子模块的项目活动,编写产品测试报告和性能测试报告,按照项目业务需求将交付物打包运营部门,开展产品试运行,试运行结束后对项目验收报告,总结经验教训归档代码和研发文档。
中文项目经验3 中海达解算云
开始:以前的gnss解算软件只能适合小型单个工程应用无法满足越来越大量的GNSS实时解算需求所以组织启动开发专注于gnss高精度定位技术在变形监测领域数据解算支撑平台、支持大量gnss数据接收、存储处理、分布式实时解算和事后分析的云平台。
计划: 我根据立项需求制定产品的GNSS解算产品研发路线图按照公司规定裁剪制定了项目管理计划 主导编制进度计划、质量管理计划,配置管理等实施计划。
执行:作为项目经理带领项目团队开展项目详细分析和原型开发,主导沟通编写产品需求规格说明书,协调架构师搭建GNSS解算的分布式研发框架根据项目管理计划来组织研发活动分了三个迭代反复执行。在内部测试测试之后开展集成测试和性能测试等活动。
监控和收尾:每周定期汇报项目状态给QA每月中旬沟通项目主要问题并沟通协调解决方案开展项目评审会议以保障项目项目质量和进度。最后编写项目测试报告和事业部验收报告 协调现场项目试运行。总结经验教训归档代码和算法经验,以便于下一个版本的迭代。

View File

@@ -1,12 +0,0 @@
**EF Core Migration**
 **手动命令行的方式**
Update-Database -Verbose -c safeMonitorDbContext
| | | |
| ------------------------------------------- | --------------------------------- | ------------------------------- |
| VSCode | VS2017 | 说明 |
| dotnet ef migrations add InitialCreate | Add-Migration | 对当前EF实体模型增加一个配置文件 |
| dotnet ef database update | Update-Database | 对当前版本进行更新 |
| dotnet ef migrations remove | Remove-Migration | 删除最新的Migration |
| dotnet ef database update LastGoodMigration | Update-Database LastGoodMigration | 对指定版本进行更新 |
| dotnet ef migrations script | Script-Migration | 对当前更新生成一个sql的脚本我们可以使用脚本到数据库取执行 |

View File

@@ -1,9 +0,0 @@
| | | | |
| -------------- | --------------------- | ---- | ---------------------------------------------- |
| | OS | 是否开源 | 目的 |
| .NET Framework | Windows | 否 | 构建Windows应用程序构建运行在IIS上的Web应用程序 |
| .NET Core | Windows, Linux, macOS | 是 | 构建跨平台命令行应用程序、ASP.NET Core应用程序、云服务 |
| Xamarin | iOS, Android, macOS | 是 | 构建iOS、Android移动应用程序、macOS桌面应用程序 |
| .NET Standard | N/A | 是 | 创建可以被所有.NET实现(如.NET Core和.NET Framework)所引用的类库 |
> 来自 <[https://blog.csdn.net/chengbin0602/article/details/80424520](https://blog.csdn.net/chengbin0602/article/details/80424520)>

View File

@@ -1,359 +0,0 @@
---
title: .NET 开发知识库
tags:
- dotNET
- CSharp
- ASPNET
- Microsoft
- Backend
created: 2026-04-21
---
# .NET 开发知识库
## .NET 技术栈概述
| 技术 | 说明 |
|------|------|
| **.NET Framework** | 旧版 Windows 专用4.8 已停止更新) |
| **.NET Core** | 跨平台版本,已合并入 .NET 5+ |
| **.NET 5/6/7/8** | 统一跨平台版本,推荐使用 |
| **ASP.NET Core** | Web API / MVC 框架 |
| **Blazor** | 使用 C# 的 WebAssembly 框架 |
| **MAUI** | 跨平台移动应用框架 |
| **EF Core** | 轻量级 ORM |
## C# 核心语法
### 基础类型
```csharp
// 值类型
int num = 42;
double price = 19.99;
decimal money = 99.99m;
bool isActive = true;
char grade = 'A';
DateTime now = DateTime.Now;
// 引用类型
string name = "张三";
var list = new List<string>();
// 可空类型
int? nullableNum = null;
string? nullableStr = null;
// 集合初始化
var nums = new[] { 1, 2, 3, 4, 5 };
var names = new List<string> { "张三", "李四" };
// 字典
var dict = new Dictionary<string, int>
{
["a"] = 1,
["b"] = 2
};
```
### 类与接口
```csharp
// 类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
// 只读属性
public DateTime CreatedAt { get; }
// 构造函数
public User(string name)
{
Name = name;
CreatedAt = DateTime.UtcNow;
}
// 方法
public string GetDisplayName() => $"用户: {Name}";
}
// 接口
public interface IRepository<T>
{
T GetById(int id);
IEnumerable<T> GetAll();
void Add(T entity);
void Update(T entity);
void Delete(int id);
}
// 继承
public class UserRepository : IRepository<User>
{
public User GetById(int id) { /* ... */ return null; }
public IEnumerable<User> GetAll() { /* ... */ yield break; }
public void Add(User entity) { }
public void Update(User entity) { }
public void Delete(int id) { }
}
```
### 异步编程
```csharp
// async/await
public async Task<User> GetUserAsync(int id)
{
// 异步等待,不阻塞线程
var data = await _context.Users.FindAsync(id);
return data;
}
// 并行任务
public async Task<(User, Order)> GetUserAndOrderAsync(int userId, int orderId)
{
var userTask = _userRepo.GetByIdAsync(userId);
var orderTask = _orderRepo.GetByIdAsync(orderId);
await Task.WhenAll(userTask, orderTask);
return (userTask.Result, orderTask.Result);
}
// IAsyncEnumerable流式数据
public async IAsyncEnumerable<User> StreamUsersAsync()
{
await using var conn = new SqlConnection(_connectionString);
await using var reader = await conn.ExecuteReaderAsync("SELECT * FROM Users");
while (await reader.ReadAsync())
{
yield return new User { Id = reader.GetInt32(0), Name = reader.GetString(1) };
}
}
```
### LINQ 查询
```csharp
var users = new List<User>
{
new User { Id = 1, Name = "张三", Age = 25 },
new User { Id = 2, Name = "李四", Age = 30 },
new User { Id = 3, Name = "王五", Age = 25 }
};
// 条件查询
var adults = users.Where(u => u.Age >= 18);
// 投影
var names = users.Select(u => u.Name);
// 排序
var sorted = users.OrderByDescending(u => u.Age).ThenBy(u => u.Name);
// 分组
var grouped = users.GroupBy(u => u.Age)
.Select(g => new { Age = g.Key, Count = g.Count() });
// 联接
var joined = from u in users
join o in orders on u.Id equals o.UserId
select new { u.Name, o.OrderNo };
// 聚合
var count = users.Count();
var avgAge = users.Average(u => u.Age);
```
## ASP.NET Core Web API
### 最小模板
```csharp
var builder = WebApplication.CreateBuilder(args);
// 添加服务
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// 注册依赖
builder.Services.AddScoped<IUserRepository, UserRepository>();
var app = builder.Build();
// 中间件管道
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
```
### Controller 示例
```csharp
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
private readonly IUserRepository _repo;
public UsersController(IUserRepository repo)
{
_repo = repo;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<UserDto>>> GetAll()
{
var users = await _repo.GetAllAsync();
return Ok(users.Select(u => new UserDto(u)));
}
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetById(int id)
{
var user = await _repo.GetByIdAsync(id);
if (user == null) return NotFound();
return Ok(new UserDto(user));
}
[HttpPost]
public async Task<ActionResult<UserDto>> Create([FromBody] CreateUserDto dto)
{
var user = new User { Name = dto.Name, Email = dto.Email };
await _repo.AddAsync(user);
return CreatedAtAction(nameof(GetById), new { id = user.Id }, new UserDto(user));
}
[HttpPut("{id}")]
public async Task<IActionResult> Update(int id, [FromBody] UpdateUserDto dto)
{
var user = await _repo.GetByIdAsync(id);
if (user == null) return NotFound();
user.Name = dto.Name;
user.Email = dto.Email;
await _repo.UpdateAsync(user);
return NoContent();
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
await _repo.DeleteAsync(id);
return NoContent();
}
}
```
## Entity Framework Core
```csharp
// DbContext
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Order> Orders { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseNpgsql("Host=localhost;Database=mydb;Username=user;Password=pass");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 配置
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(u => u.Id);
entity.HasIndex(u => u.Email).IsUnique();
entity.Property(u => u.Name).HasMaxLength(50).IsRequired();
});
}
}
// 使用
using var context = new AppDbContext();
// 添加
context.Users.Add(new User { Name = "张三" });
await context.SaveChangesAsync();
// 查询
var user = await context.Users.FirstOrDefaultAsync(u => u.Id == 1);
// 更新
user.Name = "李四";
await context.SaveChangesAsync();
// 删除
context.Users.Remove(user);
await context.SaveChangesAsync();
// 原始 SQL
var users = await context.Users
.FromSqlRaw("SELECT * FROM users WHERE age > {0}", 18)
.ToListAsync();
```
## 依赖注入
```csharp
// 注册方式
builder.Services.AddScoped<IUserRepository, UserRepository>(); // 每次请求新实例
builder.Services.AddTransient<IMailService, MailService>(); // 每次注入新实例
builder.Services.AddSingleton<ISettings, AppSettings>(); // 全局单例
// 在类中注入
public class UserService
{
private readonly IUserRepository _userRepo;
private readonly IUnitOfWork _unitOfWork;
// 构造函数注入(推荐)
public UserService(IUserRepository userRepo, IUnitOfWork unitOfWork)
{
_userRepo = userRepo;
_unitOfWork = unitOfWork;
}
}
```
## 常用命令
```bash
# 创建项目
dotnet new webapi -n MyApi
dotnet new blazor -n MyBlazorApp
dotnet new classlib -n MyLibrary
# 添加包
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
# 运行
dotnet run
# 构建
dotnet build
# 发布
dotnet publish -c Release -o ./publish
# 测试
dotnet test
# 查看依赖
dotnet list package
```

View File

@@ -1,65 +0,0 @@
---
title: 智能体软件工程Agentic SE
tags:
- AI-Agent
- 软件工程
- 方法论
- 学术
created: 2026-04-21
source: 艾哈迈德·E·哈桑Ahmed E. Hassan2026年
translator: 李豪
---
# 智能体软件工程
> 与随机性队友一起以前所未有的规模构建可信赖的软件
## 关于作者
**艾哈迈德·E·哈桑Ahmed E. Hassan教授**
- 穆斯塔法奖得主(常比作诺贝尔级别荣誉)
- ACM Fellow、IEEE Fellow、AAIA Fellow
- 加拿大研究主席Canada Research Chair
- 加拿大女王大学 NSERC/BlackBerry 软件工程工业研究主席
- 全球引用次数最多的软件工程研究人员之一
- 唯一同时获得 ACM SIGSOFT 有影响力教育家奖2019和 IEEE TCSE 杰出教育家奖2020的学者
- 已培养出 35 位高校教授
## 核心论点
> **AI 不是工具,而是队友**——一个能力强大但会犯错的队友。因此,可靠性不能依赖于 AI 本身的完美,而必须通过工程系统来保障。
当 AI 能以前所未有的速度生成代码时,软件工程该怎么做?
## 四大部分结构
| 部分 | 内容 |
|------|------|
| **第一部分** | 建立概念基础 |
| **第二部分** | 解决 AI 队友的可靠性问题 |
| **第三部分** | 将协作扩展到团队规模 |
| **第四部分** | 为不同角色提供行动指南 |
## 读书建议
| 角色 | 建议 |
|------|------|
| 技术负责人/工程管理者 | 第一部分顺序读起,重点看第三、四部分 |
| 一线开发者 | 第一、二部分是核心章节 |
| 时间有限者 | 直接读第四部分(全书浓缩与行动路线图) |
## 与其他框架的关系
| 框架 | 关系 |
|------|------|
| **Harness Engineering** | Agentic SE 的第二部分对应可靠性保障 |
| **Superpowers** | Agentic SE 的第三部分对应团队协作扩展 |
| **Agent = Model + Harness** | 两本书共享同一核心公式 |
## 译者序摘要
译者李豪:
- 这是一部从软件工程学科本身出发,严肃思考人与 AI 如何协作构建可信赖软件的著作
- 本书提出了**智能体软件工程**这一框架
- 核心论点:可靠性不能依赖于 AI 本身的完美,而必须通过工程系统来保障

View File

@@ -1,129 +0,0 @@
---
title: Harness Engineering 知识体系
tags:
- AI-Agent
- Engineering
- Prompt-Engineering
- Context-Engineering
created: 2026-04-21
source: 基于11篇原始资料整理OpenAI/Anthropic/Thoughtworks/LangChain/HumanLayer/Inngest/学术界)
---
# Harness Engineering
> AI Agent = Model + Harness
>
> *"The model contains the intelligence and the harness is the system that makes that intelligence useful."* — LangChain
## 核心定义
**Harness** = 除模型以外的一切——工具、指令、状态管理、验证机制、运行时基础设施
让模型输出从"不可靠"变成"可信赖"的工程体系。
---
## 各机构视角
| 机构 | 侧重点 |
|------|--------|
| **LangChain** | 最宽泛Harness = 一切非模型的技术层 |
| **Anthropic** | 环境脚手架 + 长任务连续性 + clean state 理念 |
| **OpenAI** | 代码仓库即知识系统,强调"零人工代码"自动化 |
| **Thoughtworks** | 赛博内廷cybernetic governor区分"构建者挽具"vs"用户挽具" |
| **HumanLayer** | Harness = Context Engineering 的子集,专注上下文窗口管理 |
| **Inngest** | 持久化事件驱动基础设施 |
| **学术界CAR框架** | Control + Agency + Runtime 三元框架 |
---
## 五大大子系统walkinglabs 综合框架)
### 1. Instructions指令
告诉 Agent 做什么、按什么顺序、读什么文件。采用**渐进式披露**Progressive Disclosure而非巨型文件。
### 2. State状态
追踪已完成什么、正在做什么、接下来是什么。**持久化到磁盘**,确保会话间连续性。
### 3. Verification验证
只有通过测试才算完成。Agent 不能在无可运行证据的情况下宣告任务完成。
### 4. Scope范围
将 Agent 约束到**每次一个功能**,防止过度扩展和半途而废。
### 5. Session Lifecycle会话生命周期
- 开始时初始化
- 结束时清理
- 为下一次会话留下清晰的重启路径
---
## 两类控制Thoughtworks
| 类型 | 计算型 | 推理型 |
|------|--------|--------|
| 执行 | CPU确定性快速 | GPU/NPU语义分析 |
| 例子 | 测试/linter/类型检查 | LLM as Judge/AI代码审查 |
| 特点 | 结果可靠 | 成本高但能处理语义判断 |
### 前馈导引 + 反馈传感
- **前馈导引**Feedforward Guides在工作前注入上下文AGENTS.md、技能文件、引导脚本
- **反馈传感**Feedback Sensors工作后检测问题静态分析、日志、测试
---
## 三类调控维度Thoughtworks
| 维度 | 调控内容 | 例子 |
|------|----------|------|
| **可维护性挽具** | 代码内部质量 | 重复代码、圈复杂度、测试覆盖率 |
| **架构适应性挽具** | 架构特征 | 性能要求、可观测性标准、依赖方向规则 |
| **行为挽具** | 功能正确性 | 规格说明、测试套件、端到端验证 |
---
## CAR 框架(学术界)
三个维度:
- **Control控制** — 哪些指令保持权威
- **Agency智能体能力** — 哪些行动可用
- **Runtime运行时** — 状态如何延续、故障如何处理
提出 **Harness-sensitive** 概念:部分 Agent 性能提升可能来自 Harness 改进,而非模型本身。
---
## 实测效果Anthropic
同一模型 + 同一提示词构建2D复古游戏编辑器
| | 有Harness | 无Harness |
|--|-----------|-----------|
| 成本 | $9 | 更高 |
| 时间 | 20分钟 | 更长 |
| 结果 | 可运行 | 无法运行 |
**结论**Harness 改进可能比模型本身带来的性能提升更显著。
---
## 核心启示
1. **Harness 是杠杆** — 同一模型,有无 Harness 结果差异巨大
2. **验证即完成** — Agent 不能在无可运行证据的情况下宣告完成
3. **状态持久化** — 会话间的连续性是长任务的关键
4. **Scope 约束** — 防止 Agent 过度扩展和半途而废
5. **渐进式披露** — 指令文件不要堆成巨型文件
---
## 与 OpenClaw 的关系
OpenClaw 本身就是一种 **Harness** 的实现:
- `AGENTS.md` / `SOUL.md` / `USER.md` = Instructions 子系统
- `MEMORY.md` / `memory/` = State 子系统
- `HEARTBEAT.md` = Verification + Session Lifecycle
- Skills 系统 = 工具扩展Tool Harness
Harness Engineering 理论可以指导 OpenClaw 的优化方向。

View File

@@ -1,200 +0,0 @@
---
title: Superpowers 技能框架
tags:
- AI-Agent
- TDD
- Coding-Agent
- Software-Development
- 开源
created: 2026-04-21
source: https://github.com/obra/superpowers
stars: 161680
forks: 14117
language: Shell
author: Jesse Vincent (obra)
---
# Superpowers 技能框架
> 一个面向 AI 编码智能体的完整软件开发方法论
>
> GitHub: 161.7k ⭐ | MIT 许可证
## 核心定义
Superpowers 是由 **Jesse Vincent**obra开发的一套面向 AI 编码智能体的**技能框架与软件开发方法论**。
核心理念:**不试图让 AI"理解"最佳实践,而是构建一个"不遵守规范就无法推进"的系统**。
---
## 核心理念
### 与 Harness Engineering 的关系
Superpowers 是 Harness Engineering 的**具体实现**之一,专注于编码智能体场景。
| 维度 | Superpowers | Harness Engineering |
|------|-------------|---------------------|
| 核心等式 | 技能驱动工作流 | Agent = Model + Harness |
| 触发机制 | 技能在任意响应前自动检查 | 五大子系统 |
| 验证方式 | RED-GREEN-REFACTOR | verification-before-completion |
| 状态管理 | brainstorming文档 + plan文件 | State子系统 |
---
## 核心特点
### 1. 技能驱动的全流程工作流
| 阶段 | 技能 | 说明 |
|------|------|------|
| 需求探索 | brainstorming | 苏格拉底式提问,输出设计文档 |
| 工作区隔离 | using-git-worktrees | 独立Git worktree上开始工作 |
| 任务拆解 | writing-plans | 2-5分钟细粒度任务带文件路径和验证步骤 |
| 执行 | subagent-driven-development / executing-plans | 子智能体并发执行,两阶段审查 |
| 测试 | test-driven-development | 严格RED-GREEN-REFACTOR循环 |
| 审查 | requesting-code-review | 按严重程度上报问题 |
| 收尾 | finishing-a-development-branch | 验证测试,决策合并/PR/丢弃 |
### 2. 强制合规,而非依赖理解
技能检查置于**"任何响应或动作之前"**,从结构上杜绝跳过。
### 3. 心理说服原则的应用
基于沃顿商学院与恰尔蒂尼团队合作的论文《Call Me a Jerk: Persuading AI》
- **权威Authority** — 技能定义为强制工作流而非建议
- **承诺Commitment** — 使用技能前要求智能体公开声明
- **社会认同Social Proof** — 营造"不怕调用错技能"的文化
### 4. 技能的TDD开发
技能本身也通过TDD方式创建
- **RED** — 设计压测场景,让子智能体执行 → 暴露技能失效
- **GREEN** — 强化技能指令,重测通过
- **REFACTOR** — 优化技能表达
### 5. 多平台支持
- Claude Code官方市场
- OpenAI Codex CLI/App
- GitHub Copilot CLI
- Cursor
- Gemini CLI
- OpenCode
---
## 内置技能库
### Testing
- **test-driven-development** — RED-GREEN-REFACTOR循环
### Debugging
- **systematic-debugging** — 4阶段根因分析
- **verification-before-completion** — 确保真正修复
### Collaboration
- **brainstorming** — 苏格拉底式设计优化
- **writing-plans** — 详细实现计划
- **executing-plans** — 带检查点的批量执行
- **dispatching-parallel-agents** — 并发子智能体工作流
- **requesting-code-review** — 审查前检查清单
- **receiving-code-review** — 响应反馈
- **using-git-worktrees** — 并行开发分支
- **finishing-a-development-branch** — 合并/PR决策工作流
- **subagent-driven-development** — 两阶段审查快速迭代
### Meta
- **writing-skills** — 创建新技能的最佳实践
- **using-superpowers** — 技能系统介绍
---
## 安装方式
```bash
# Claude Code 官方市场
/plugin install superpowers@claude-plugins-official
# Claude Code Superpowers市场
/plugin marketplace add obra/superpowers-marketplace
/plugin install superpowers@superpowers-marketplace
# Cursor
/add-plugin superpowers
# OpenAI Codex CLI
/plugins → 搜索superpowers → 安装
# GitHub Copilot CLI
copilot plugin marketplace add obra/superpowers-marketplace
copilot plugin install superpowers@superpowers-marketplace
# Gemini CLI
gemini extensions install https://github.com/obra/superpowers
```
---
## 优势
| 优势 | 说明 |
|------|------|
| 自动化最佳实践 | 开发者无需反复提醒框架自动触发TDD、代码审查等规范 |
| 长时间自主运行 | 子智能体驱动开发使智能体能在数小时不偏离计划自主工作 |
| 并行开发能力 | Git worktree + 并发子智能体可同时推进多个独立任务 |
| 有据可查的质量保障 | verification-before-completion要求以证据代替断言 |
| 可扩展的技能生态 | 技能以Markdown文件SKILL.md形式存在 |
| 学术背书的心理机制 | 说服原则对LLM的有效性已有统计显著性的学术验证 |
| 开源免费 | MIT许可证 |
---
## 劣势
| 劣势 | 说明 |
|------|------|
| 学习曲线 | 需要理解完整工作流,初学者上手成本较高 |
| 流程开销 | brainstorming和planning对小型改动可能过重 |
| 依赖智能体平台 | 技能效果高度依赖底层编码智能体 |
| 提示词复杂度高 | 内嵌心理说服机制的提示词难以手动维护 |
| 子智能体成本 | Subagent-Driven Development会频繁启动新实例API成本较高 |
| 贡献限制 | 不接受新技能的社区贡献,修改必须兼容全部支持的平台 |
---
## 适用场景
| 场景 | 说明 |
|------|------|
| 中大型功能开发 | 需求不完全清晰、任务较多时brainstorming + writing-plans能有效防止方向跑偏 |
| 追求工程纪律的团队 | 强制执行TDD、代码审查等规范 |
| 长时间自主编程任务 | 需要智能体在无监督下稳定工作数小时 |
| 多任务并行开发 | 多个独立子任务可并行推进 |
| AI开发方法论研究 | 对"如何让AI遵守软件工程规范"感兴趣的研究者 |
| 自定义技能开发 | 团队已有内部规范可通过writing-skills创建专属技能 |
**不适合场景**快速原型验证、一次性脚本或极简改动、对API token成本极度敏感的项目
---
## 核心启示
1. **强制合规 > 依赖理解** — 不让AI"理解"TDD而是构建无法跳过的系统
2. **技能触发在工作流之前** — 任何响应前检查技能,从结构上杜绝跳过
3. **验证即完成** — 以证据(测试通过)代替断言("我认为完成了"
4. **TDD for Skills** — 技能本身也需要通过压测场景来验证有效性
5. **子智能体 + 两阶段审查** — 实现长时间自主工作的关键
---
## 参考资源
- **GitHub**: https://github.com/obra/superpowers
- **官方博客**: https://blog.fsck.com/2025/10/09/superpowers/
- **Discord社区**: https://discord.gg/35wsABTejz
- **Claude插件市场**: https://claude.com/plugins/superpowers

View File

@@ -1,181 +0,0 @@
---
title: 智能体软件工程知识图谱
tags:
- AI-Agent
- Agentic-SE
- Harness-Engineering
- Superpowers
- 软件工程
- 知识图谱
created: 2026-04-21
sources:
- AgenticSE_Book_CN艾哈迈德·E·哈桑2026
- Harness-Engineering知识体系11篇原始资料整理2026-04-20
- Superpowers技能框架obra161.7k stars2026-04-21
---
# 智能体软件工程知识图谱
> 串联三大框架:**Agentic SE** + **Harness Engineering** + **Superpowers**
>
> 核心公式:**AI Agent = Model + Harness**
---
## 一、核心共识
三大框架都认同:
1. **AI Agent = Model + Harness** — 模型提供智能Harness 让智能可用
2. **AI 是队友,不是工具** — 能力强大但会犯错,可靠性必须靠工程系统保障
3. **强制合规 > 依赖理解** — 不指望 AI 自发遵守规范,要构建无法跳过的系统
4. **验证即完成** — 以可运行的证据(测试通过)代替主观断言
---
## 二、框架定位对照
| 维度 | Agentic SE | Harness Engineering | Superpowers |
|------|------------|-------------------|-------------|
| **定位** | 学科级方法论 | 概念框架 | 具体技能实现 |
| **层级** | 理论与哲学 | 设计原则 | 工程实践 |
| **关注点** | 人+AI团队协作 | 除模型以外的一切 | 编码智能体工作流 |
| **起源** | 学术(哈桑教授) | 多机构综合LangChain/Anthropic/Thoughtworks等 | 工程实践Jesse Vincent |
---
## 三、核心概念映射
### 1. Agent = Model + Harness
| 组件 | Agentic SE 说法 | Harness Engineering 说法 | Superpowers 说法 |
|------|----------------|------------------------|-----------------|
| **Model** | AI队友 | 模型( intelligence | 底层编码智能体 |
| **Harness** | 工程系统保障可靠性 | 工具/指令/状态管理/验证/运行时基础设施 | 技能系统Skills |
### 2. 五大子系统(对应关系)
| # | Harness Engineering | Superpowers | Agentic SE |
|---|---------------------|--------------|------------|
| 1 | Instructions | brainstorming / writing-plans | 需求规范 + 设计文档 |
| 2 | State | 设计文档 + plan文件 + git log | 持久化状态管理 |
| 3 | Verification | test-driven-development / verification-before-completion | 验证与测试 |
| 4 | Scope | one feature at a time | 任务边界控制 |
| 5 | Session Lifecycle | init.sh / finishing-a-development-branch | 会话交接与收尾 |
### 3. 控制类型对照
| 类型 | Harness Engineering | Superpowers |
|------|---------------------|--------------|
| **计算型控制** | 测试/linter/类型检查 | test-driven-development |
| **推理型控制** | LLM as Judge / AI代码审查 | requesting-code-review |
| **前馈导引** | AGENTS.md / 技能文件 / 引导脚本 | brainstorming苏格拉底式提问 |
| **反馈传感** | 静态分析 / 日志 / 测试 | 两阶段审查(规格合规 + 代码质量) |
### 4. 质量保障维度
| 维度 | Harness Engineering | Superpowers |
|------|---------------------|--------------|
| **可维护性** | 重复代码/圈复杂度/测试覆盖率 | test-driven-development |
| **架构适应性** | 性能/可观测性/依赖规则 | writing-plans详细任务拆解 |
| **行为正确性** | 规格说明/测试套件/e2e验证 | RED-GREEN-REFACTOR + verification-before-completion |
---
## 四、CAR 框架Control-Agency-Runtime
来自学术界Harness Engineering 引用),与各框架的对应:
| 维度 | 定义 | 在Superpowers中的体现 |
|------|------|---------------------|
| **Control** | 哪些指令保持权威 | 技能触发在工作前,任何响应前检查 |
| **Agency** | 哪些行动可用 | subagent-driven-development子智能体执行 |
| **Runtime** | 状态如何延续、故障如何处理 | Session Lifecycle / finishing-a-development-branch |
---
## 五、心理说服原则
Superpowers 独家引入基于沃顿商学院论文《Call Me a Jerk》可补充到 Harness Engineering
| 原则 | 在Superpowers中的应用 |
|------|----------------------|
| **权威Authority** | 技能定义为强制工作流,而非建议 |
| **承诺Commitment** | 使用技能前要求智能体公开声明 |
| **社会认同Social Proof** | 营造"不怕调用错技能"的文化 |
---
## 六、实测效果
Anthropic 对比实验(同一模型 + 同一提示词):
| | 有Harness | 无Harness |
|--|-----------|-----------|
| 成本 | $9 | 更高 |
| 时间 | 20分钟 | 更长 |
| 结果 | 可运行 | 无法运行 |
**结论**Harness 改进带来的性能提升,可能比模型本身更显著。
---
## 七、知识体系演进路径
```
学术界CAR框架
Harness Engineering概念框架11家机构综合
┌─────────────────┴─────────────────┐
↓ ↓
Agentic SE理论专著 Superpowers工程实践
哈桑教授2026 Jesse Vincent161.7k stars
关注:人+AI协作 关注:编码智能体工作流
└─────────────────┬─────────────────┘
OpenClaw/Harness实践
```
---
## 八、对OpenClaw的指导意义
OpenClaw 本身就是一个 Harness 实现:
| OpenClaw组件 | 对应Harness子系统 |
|-------------|-----------------|
| AGENTS.md / SOUL.md / USER.md | Instructions |
| MEMORY.md / memory/ | State |
| HEARTBEAT.md | Verification + Session Lifecycle |
| Skills系统 | 工具扩展Tool Harness |
**优化方向**
1. 引入 Superpowers 的"技能触发在工作前"机制
2. 强化 verification-before-completion当前HEARTBEAT偏简单检查
3. 补充前馈导引:每次会话开始时主动说明上下文
4. 引入 TDD 思维:先定义验证方式,再执行任务
---
## 九、推荐阅读路径
```
入门 → 《Agentic SE》第四部分行动指南
进阶 → Harness-Engineering知识体系
实践 → Superpowers技能框架
落地 → OpenClaw优化方向
```
---
## 关联文档
- [[Harness-Engineering知识体系]]
- [[Superpowers技能框架]]
- [[code-reviewer技能]]
- [[fireworks-tech-graph技术图生成工具]]

View File

@@ -1,160 +0,0 @@
---
title: Docker一键部署Clash Meta (mihomo) + metacubexd面板教程
date: 2026-01-13
tags:
- Linux系统Docker
- Docker
- Clash
- mihomo
- metacubexd
- 代理
- 网络
source: https://www.cloud-guest.top/archives/gS23mQ65
---
# Docker 一键部署 Clash Meta (mihomo) + metacubexd 面板教程2026 年最新版)
**目标:** 使用最新 MetaCubeX/mihomo 内核 + 官方 metacubexd Web 面板,实现稳定、高性能的代理服务
**适用环境:** Linux 服务器 / NAS推荐 Ubuntu/Debian已安装 Docker + Docker Compose
**核心特点:**
- 使用 `network_mode: host`TUN/透明代理最稳)
- 容器别名统一为 `clash`(核心)+ `dashboard`(面板),操作更友好
- 提前处理 Country.mmdb 避免经典报错
## 1. 准备工作
安装 Docker & Docker Compose如果未安装一键执行
```bash
# Ubuntu/Debian 推荐方式2026 年最新)
curl -fsSL https://get.docker.com | sudo sh
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo usermod -aG docker $USER
```
创建项目目录:
```bash
mkdir -p ~/mihomo && cd ~/mihomo
```
## 2. 提前下载 GeoIP 数据库(必须!避免 not a directory 错误)
mihomo 需要 Country.mmdb文件不是文件夹
```bash
mkdir -p config
cd config
# 轻量版 country-lite.mmdb体积小 ≈1-2MB
curl -L https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/country-lite.mmdb \
-o Country.mmdb
```
**关键:** 启动前这个路径必须存在文件,否则 Docker 会自动创建成目录导致启动失败。
## 3. docker-compose.yml完整配置
```yaml
version: '3.8'
services:
clash:
container_name: clash
image: metacubex/mihomo:Alpha
restart: unless-stopped
network_mode: host
pid: host
ipc: host
cap_add:
- ALL
volumes:
- ./config:/root/.config/mihomo
- /dev/net/tun:/dev/net/tun
- /etc/localtime:/etc/localtime:ro
dashboard:
container_name: dashboard
image: ghcr.io/metacubex/metacubexd:latest
restart: unless-stopped
network_mode: host
```
## 4. 准备 mihomo 主配置文件 config.yaml
```yaml
# 基本端口与访问
mixed-port: 7890
allow-lan: true
external-controller: 0.0.0.0:9090
secret: ""
mode: rule
log-level: info
geodata-mode: false
geo-auto-update: true
geo-update-interval: 24
proxy-providers:
my-sub:
type: http
url: "https://你的机场订阅链接"
path: ./subscriptions/my-sub.yaml
interval: 86400
health-check:
enable: true
url: "https://www.gstatic.com/generate_204"
interval: 300
proxy-groups:
- name: "自动选择"
type: url-test
include-all: true
url: "http://www.gstatic.com/generate_204"
interval: 300
rules:
- MATCH,自动选择
```
## 5. 启动与常用命令
```bash
# 首次启动
docker compose up -d
# 查看核心日志
docker compose logs -f clash
# 重启核心
docker compose restart clash
# 更新镜像并重启
docker compose pull && docker compose up -d
# 停止+删除容器
docker compose down
```
## 6. 访问方式
- **Web 面板:** http://你的服务器IPhost模式默认80端口
- **连接后端:** http://127.0.0.1:9090
- **代理端口:** HTTP/SOCKS5混合端口 7890
## 7. 常见问题
| 问题 | 解决方案 |
|------|---------|
| not a directory | Country.mmdb必须是文件步骤2已解决 |
| 面板连不上 | 确认external-controller是0.0.0.0:9090 |
| TUN不工作 | 必须host模式 + /dev/net/tun挂载 |
## 8. 推荐资源
- mihomo仓库https://github.com/MetaCubeX/mihomo
- metacubexd面板https://github.com/MetaCubeX/metacubexd
- 官方文档https://wiki.metacubex.one/

View File

@@ -1,129 +0,0 @@
---
title: Harness Engineering 知识体系
tags:
- AI-Agent
- Engineering
- Prompt-Engineering
- Context-Engineering
created: 2026-04-21
source: 基于11篇原始资料整理OpenAI/Anthropic/Thoughtworks/LangChain/HumanLayer/Inngest/学术界)
---
# Harness Engineering
> AI Agent = Model + Harness
>
> *"The model contains the intelligence and the harness is the system that makes that intelligence useful."* — LangChain
## 核心定义
**Harness** = 除模型以外的一切——工具、指令、状态管理、验证机制、运行时基础设施
让模型输出从"不可靠"变成"可信赖"的工程体系。
---
## 各机构视角
| 机构 | 侧重点 |
|------|--------|
| **LangChain** | 最宽泛Harness = 一切非模型的技术层 |
| **Anthropic** | 环境脚手架 + 长任务连续性 + clean state 理念 |
| **OpenAI** | 代码仓库即知识系统,强调"零人工代码"自动化 |
| **Thoughtworks** | 赛博内廷cybernetic governor区分"构建者挽具"vs"用户挽具" |
| **HumanLayer** | Harness = Context Engineering 的子集,专注上下文窗口管理 |
| **Inngest** | 持久化事件驱动基础设施 |
| **学术界CAR框架** | Control + Agency + Runtime 三元框架 |
---
## 五大大子系统walkinglabs 综合框架)
### 1. Instructions指令
告诉 Agent 做什么、按什么顺序、读什么文件。采用**渐进式披露**Progressive Disclosure而非巨型文件。
### 2. State状态
追踪已完成什么、正在做什么、接下来是什么。**持久化到磁盘**,确保会话间连续性。
### 3. Verification验证
只有通过测试才算完成。Agent 不能在无可运行证据的情况下宣告任务完成。
### 4. Scope范围
将 Agent 约束到**每次一个功能**,防止过度扩展和半途而废。
### 5. Session Lifecycle会话生命周期
- 开始时初始化
- 结束时清理
- 为下一次会话留下清晰的重启路径
---
## 两类控制Thoughtworks
| 类型 | 计算型 | 推理型 |
|------|--------|--------|
| 执行 | CPU确定性快速 | GPU/NPU语义分析 |
| 例子 | 测试/linter/类型检查 | LLM as Judge/AI代码审查 |
| 特点 | 结果可靠 | 成本高但能处理语义判断 |
### 前馈导引 + 反馈传感
- **前馈导引**Feedforward Guides在工作前注入上下文AGENTS.md、技能文件、引导脚本
- **反馈传感**Feedback Sensors工作后检测问题静态分析、日志、测试
---
## 三类调控维度Thoughtworks
| 维度 | 调控内容 | 例子 |
|------|----------|------|
| **可维护性挽具** | 代码内部质量 | 重复代码、圈复杂度、测试覆盖率 |
| **架构适应性挽具** | 架构特征 | 性能要求、可观测性标准、依赖方向规则 |
| **行为挽具** | 功能正确性 | 规格说明、测试套件、端到端验证 |
---
## CAR 框架(学术界)
三个维度:
- **Control控制** — 哪些指令保持权威
- **Agency智能体能力** — 哪些行动可用
- **Runtime运行时** — 状态如何延续、故障如何处理
提出 **Harness-sensitive** 概念:部分 Agent 性能提升可能来自 Harness 改进,而非模型本身。
---
## 实测效果Anthropic
同一模型 + 同一提示词构建2D复古游戏编辑器
| | 有Harness | 无Harness |
|--|-----------|-----------|
| 成本 | $9 | 更高 |
| 时间 | 20分钟 | 更长 |
| 结果 | 可运行 | 无法运行 |
**结论**Harness 改进可能比模型本身带来的性能提升更显著。
---
## 核心启示
1. **Harness 是杠杆** — 同一模型,有无 Harness 结果差异巨大
2. **验证即完成** — Agent 不能在无可运行证据的情况下宣告完成
3. **状态持久化** — 会话间的连续性是长任务的关键
4. **Scope 约束** — 防止 Agent 过度扩展和半途而废
5. **渐进式披露** — 指令文件不要堆成巨型文件
---
## 与 OpenClaw 的关系
OpenClaw 本身就是一种 **Harness** 的实现:
- `AGENTS.md` / `SOUL.md` / `USER.md` = Instructions 子系统
- `MEMORY.md` / `memory/` = State 子系统
- `HEARTBEAT.md` = Verification + Session Lifecycle
- Skills 系统 = 工具扩展Tool Harness
Harness Engineering 理论可以指导 OpenClaw 的优化方向。

View File

@@ -1,60 +0,0 @@
## 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)>

View File

@@ -1,86 +0,0 @@
---
title: MeNav 个人导航站生成器
tags:
- 开源
- 导航站
- 静态网站
- GitHubPages
- 书签管理
created: 2026-04-21
source: https://github.com/rbetree/menav
stars: 256
forks: 167
language: JavaScript
---
# MeNav
> 一键部署的个人导航站生成器,支持书签导入与自动构建
## 概述
轻量级、高度可定制的个人导航网站生成器,完全静态部署,无需数据库和后端服务。
### 核心功能
- 🔖 浏览器书签一键导入HTML → YAML
- 🚀 GitHub Pages 一键部署Fork + Actions
- 🔄 MarksVault 扩展集成,自动同步书签
- 🎨 明亮 / 黑暗双主题,响应式布局
- 🐳 Docker 部署支持
- 📁 2-4 层多层级嵌套分类结构
**预览**: https://rbetree.github.io/menav/
## 技术栈
- HTML5 + CSS3 + JavaScript原生
- Handlebars 模板引擎
- Google Favicon API + Font Awesome 图标
## 安装使用
```bash
git clone https://github.com/rbetree/menav.git
cd menav
npm install
npm run dev # 本地预览
npm run build # 构建静态文件
```
## 书签导入
```bash
npm run import-bookmarks
# 放入 HTML 格式书签 → 自动转换为 config/user/pages/bookmarks.yml
```
## 部署方式
| 方式 | 说明 |
|------|------|
| **GitHub Pages推荐** | Fork → 启用 Actions → 提交配置 → 自动部署 |
| **Vercel / Netlify / Cloudflare Pages** | Build: `npm run build` / Output: `dist/` |
| **Docker** | `docker compose up -d` |
| **自建服务器** | `npm run build` → 复制 `dist/` → nginx/Apache |
## 定时更新
- RSS 文章聚合自动刷新
- GitHub Actions 默认每天 UTC 02:00 触发
## 评分
⭐⭐⭐⭐4/5
**优点**
- 零成本部署GitHub Pages
- 书签导入 + 自动同步,工作流完整
- 主题美观,响应式设计
- 模块化配置,易于定制
**局限**
- 需要 GitHub 生态(书签同步依赖 Actions
- 书签导入格式有要求
**适合场景**:个人主页、浏览器起始页、书签整理

View File

@@ -1,200 +0,0 @@
---
title: Superpowers 技能框架
tags:
- AI-Agent
- TDD
- Coding-Agent
- Software-Development
- 开源
created: 2026-04-21
source: https://github.com/obra/superpowers
stars: 161680
forks: 14117
language: Shell
author: Jesse Vincent (obra)
---
# Superpowers 技能框架
> 一个面向 AI 编码智能体的完整软件开发方法论
>
> GitHub: 161.7k ⭐ | MIT 许可证
## 核心定义
Superpowers 是由 **Jesse Vincent**obra开发的一套面向 AI 编码智能体的**技能框架与软件开发方法论**。
核心理念:**不试图让 AI"理解"最佳实践,而是构建一个"不遵守规范就无法推进"的系统**。
---
## 核心理念
### 与 Harness Engineering 的关系
Superpowers 是 Harness Engineering 的**具体实现**之一,专注于编码智能体场景。
| 维度 | Superpowers | Harness Engineering |
|------|-------------|---------------------|
| 核心等式 | 技能驱动工作流 | Agent = Model + Harness |
| 触发机制 | 技能在任意响应前自动检查 | 五大子系统 |
| 验证方式 | RED-GREEN-REFACTOR | verification-before-completion |
| 状态管理 | brainstorming文档 + plan文件 | State子系统 |
---
## 核心特点
### 1. 技能驱动的全流程工作流
| 阶段 | 技能 | 说明 |
|------|------|------|
| 需求探索 | brainstorming | 苏格拉底式提问,输出设计文档 |
| 工作区隔离 | using-git-worktrees | 独立Git worktree上开始工作 |
| 任务拆解 | writing-plans | 2-5分钟细粒度任务带文件路径和验证步骤 |
| 执行 | subagent-driven-development / executing-plans | 子智能体并发执行,两阶段审查 |
| 测试 | test-driven-development | 严格RED-GREEN-REFACTOR循环 |
| 审查 | requesting-code-review | 按严重程度上报问题 |
| 收尾 | finishing-a-development-branch | 验证测试,决策合并/PR/丢弃 |
### 2. 强制合规,而非依赖理解
技能检查置于**"任何响应或动作之前"**,从结构上杜绝跳过。
### 3. 心理说服原则的应用
基于沃顿商学院与恰尔蒂尼团队合作的论文《Call Me a Jerk: Persuading AI》
- **权威Authority** — 技能定义为强制工作流而非建议
- **承诺Commitment** — 使用技能前要求智能体公开声明
- **社会认同Social Proof** — 营造"不怕调用错技能"的文化
### 4. 技能的TDD开发
技能本身也通过TDD方式创建
- **RED** — 设计压测场景,让子智能体执行 → 暴露技能失效
- **GREEN** — 强化技能指令,重测通过
- **REFACTOR** — 优化技能表达
### 5. 多平台支持
- Claude Code官方市场
- OpenAI Codex CLI/App
- GitHub Copilot CLI
- Cursor
- Gemini CLI
- OpenCode
---
## 内置技能库
### Testing
- **test-driven-development** — RED-GREEN-REFACTOR循环
### Debugging
- **systematic-debugging** — 4阶段根因分析
- **verification-before-completion** — 确保真正修复
### Collaboration
- **brainstorming** — 苏格拉底式设计优化
- **writing-plans** — 详细实现计划
- **executing-plans** — 带检查点的批量执行
- **dispatching-parallel-agents** — 并发子智能体工作流
- **requesting-code-review** — 审查前检查清单
- **receiving-code-review** — 响应反馈
- **using-git-worktrees** — 并行开发分支
- **finishing-a-development-branch** — 合并/PR决策工作流
- **subagent-driven-development** — 两阶段审查快速迭代
### Meta
- **writing-skills** — 创建新技能的最佳实践
- **using-superpowers** — 技能系统介绍
---
## 安装方式
```bash
# Claude Code 官方市场
/plugin install superpowers@claude-plugins-official
# Claude Code Superpowers市场
/plugin marketplace add obra/superpowers-marketplace
/plugin install superpowers@superpowers-marketplace
# Cursor
/add-plugin superpowers
# OpenAI Codex CLI
/plugins → 搜索superpowers → 安装
# GitHub Copilot CLI
copilot plugin marketplace add obra/superpowers-marketplace
copilot plugin install superpowers@superpowers-marketplace
# Gemini CLI
gemini extensions install https://github.com/obra/superpowers
```
---
## 优势
| 优势 | 说明 |
|------|------|
| 自动化最佳实践 | 开发者无需反复提醒框架自动触发TDD、代码审查等规范 |
| 长时间自主运行 | 子智能体驱动开发使智能体能在数小时不偏离计划自主工作 |
| 并行开发能力 | Git worktree + 并发子智能体可同时推进多个独立任务 |
| 有据可查的质量保障 | verification-before-completion要求以证据代替断言 |
| 可扩展的技能生态 | 技能以Markdown文件SKILL.md形式存在 |
| 学术背书的心理机制 | 说服原则对LLM的有效性已有统计显著性的学术验证 |
| 开源免费 | MIT许可证 |
---
## 劣势
| 劣势 | 说明 |
|------|------|
| 学习曲线 | 需要理解完整工作流,初学者上手成本较高 |
| 流程开销 | brainstorming和planning对小型改动可能过重 |
| 依赖智能体平台 | 技能效果高度依赖底层编码智能体 |
| 提示词复杂度高 | 内嵌心理说服机制的提示词难以手动维护 |
| 子智能体成本 | Subagent-Driven Development会频繁启动新实例API成本较高 |
| 贡献限制 | 不接受新技能的社区贡献,修改必须兼容全部支持的平台 |
---
## 适用场景
| 场景 | 说明 |
|------|------|
| 中大型功能开发 | 需求不完全清晰、任务较多时brainstorming + writing-plans能有效防止方向跑偏 |
| 追求工程纪律的团队 | 强制执行TDD、代码审查等规范 |
| 长时间自主编程任务 | 需要智能体在无监督下稳定工作数小时 |
| 多任务并行开发 | 多个独立子任务可并行推进 |
| AI开发方法论研究 | 对"如何让AI遵守软件工程规范"感兴趣的研究者 |
| 自定义技能开发 | 团队已有内部规范可通过writing-skills创建专属技能 |
**不适合场景**快速原型验证、一次性脚本或极简改动、对API token成本极度敏感的项目
---
## 核心启示
1. **强制合规 > 依赖理解** — 不让AI"理解"TDD而是构建无法跳过的系统
2. **技能触发在工作流之前** — 任何响应前检查技能,从结构上杜绝跳过
3. **验证即完成** — 以证据(测试通过)代替断言("我认为完成了"
4. **TDD for Skills** — 技能本身也需要通过压测场景来验证有效性
5. **子智能体 + 两阶段审查** — 实现长时间自主工作的关键
---
## 参考资源
- **GitHub**: https://github.com/obra/superpowers
- **官方博客**: https://blog.fsck.com/2025/10/09/superpowers/
- **Discord社区**: https://discord.gg/35wsABTejz
- **Claude插件市场**: https://claude.com/plugins/superpowers

View File

@@ -1,242 +0,0 @@
---
title: Code Reviewer 代码审查专家技能
tags:
- AI-Skill
- Code-Review
- TDD
- Java
- Security
created: 2026-04-12
source: 用户分享的SKILL文件
---
# Code Reviewer 代码审查专家
> 经验丰富的代码审查者,遵循业界最佳实践,提供专业的代码评估和改进建议。
## 审查重点
| 维度 | 内容 |
| -------- | ---------------------- |
| **代码质量** | 命名规范、代码复杂度、重复代码 |
| **安全性** | SQL 注入风险、XSS 漏洞、认证授权问题 |
| **性能** | 算法效率、资源使用、缓存策略 |
| **可维护性** | 代码注释、模块化设计、测试覆盖 |
## 审查流程
1. 理解代码变更的目的
2. 检查代码风格和规范
3. 分析潜在的 Bug 和性能问题
4. 验证安全性
5. 提供建设性的改进建议
---
## 问题报告规范
每个问题必须包含以下**精确位置信息**
| 字段 | 说明 | 示例 |
|------|------|------|
| 文件路径 | 相对于项目根目录的完整路径 | `com/example/UserServiceImpl.java` |
| 行号范围 | 问题代码的起止行号 | `L45-L52``L45` |
| 类名 | 问题所在的类名 | `UserServiceImpl` |
| 方法名 | 问题所在的方法签名 | `getUserById(Long userId)` |
| 代码片段 | 有问题的具体代码(前后各 2-3 行上下文) | 见示例 |
### 问题输出格式
```
🔴 [严重] SQL注入风险
📁 文件: com/example/UserServiceImpl.java
📍 位置: L45-L48 | 类: UserServiceImpl | 方法: findByUsername(String)
🔗 代码上下文:
44 | public User findByUsername(String username) {
45 | String sql = "SELECT * FROM user WHERE username = '" + username + "'";
46 | return jdbcTemplate.queryForObject(sql, userMapper);
47 | }
💡 问题说明: 直接拼接用户输入到SQL语句中存在SQL注入风险
✅ 修复建议:
String sql = "SELECT * FROM user WHERE username = ?";
return jdbcTemplate.queryForObject(sql, userMapper, username);
```
### 严重程度分级
| 级别 | 含义 |
|------|------|
| 🔴 严重 | 需要立即修复的问题 |
| 🟡 中等 | 建议修复的问题 |
| 🟢 轻微 | 可选的改进建议 |
---
## 输出格式
### 文本报告
```
✅ 优点:列出做得好的地方
⚠️ 问题:
[级别] 问题标题
📁 文件: 完整文件路径
📍 位置: L行号 | 类: 类名 | 方法: 方法签名
🔗 代码上下文: (带行号的代码片段)
💡 问题说明: 详细描述
✅ 修复建议: 具体的修复方案或示例代码
📊 总体评分1-10 分
```
### HTML 报告(自动生成)
当用户要求审查代码时,**自动生成 HTML 报告**
- 文件名格式:`code-review-report-{timestamp}.html`
- 保存到工作区根目录
- 包含评分圆环、四维评分卡片、问题详情卡片
- 代码上下文IDE 风格行号 + 问题行高亮
---
## 典型问题示例
### 1. SQL 注入(🔴 严重)
```
📁 文件: UserServiceImpl.java
📍 位置: L45-L48 | 类: UserServiceImpl | 方法: findByUsername(String)
🔗 代码上下文:
→ 45 | String sql = "SELECT * FROM sys_user WHERE user_name = '" + username + "'";
→ 46 | return jdbcTemplate.queryForObject(sql, userMapper);
✅ 修复建议: 使用参数化查询
String sql = "SELECT * FROM sys_user WHERE user_name = ?";
return jdbcTemplate.queryForObject(sql, userMapper, username);
```
### 2. 循环内重复查询(🟡 中等)
```
📍 位置: L112-L118 | 类: TaskServiceImpl | 方法: batchProcess(List<Task>)
🔗 代码上下文:
110 | public void batchProcess(List<Task> tasks) {
111 | for (Task task : tasks) {
→ 112 | Device device = deviceMapper.selectById(task.getDeviceId());
→ 113 | task.setDeviceName(device.getName());
114 | taskMapper.updateById(task);
115 | }
116 | }
✅ 修复建议: 批量查询 + Map 缓存
Set<Long> deviceIds = tasks.stream().map(Task::getDeviceId).collect(toSet());
Map<Long, Device> deviceMap = deviceMapper.selectBatchIds(deviceIds)
.stream().collect(toMap(Device::getId, d -> d));
tasks.forEach(task -> task.setDeviceName(deviceMap.get(task.getDeviceId()).getName()));
```
### 3. 资源泄漏(🔴 严重)
```
📍 位置: L56-L62 | 类: DataHandler | 方法: processData(Connection)
🔗 代码上下文:
→ 56 | Statement stmt = conn.createStatement();
→ 57 | ResultSet rs = stmt.executeQuery("SELECT * FROM data");
58 | // 处理数据...
59 | } catch (SQLException e) {
60 | log.error("处理失败", e);
61 | }
✅ 修复建议: 使用 try-with-resources
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM data")) {
// 处理数据...
}
```
### 4. 空指针风险(🟡 中等)
```
📍 位置: L89-L92 | 类: DeviceServiceImpl | 方法: getDeviceStatus(Long)
🔗 代码上下文:
→ 89 | return device.getStatus().getName();
✅ 修复建议:
Device device = deviceMapper.selectById(deviceId);
if (device == null) throw new ServiceException("设备不存在: " + deviceId);
return Optional.ofNullable(device.getStatus()).map(Status::getName).orElse("未知状态");
```
### 5. 命名不规范(🟢 轻微)
```
📍 位置: L79 | 类: UserServiceImpl | 方法: f(UserQuery)
🔗 代码上下文:
→ 79 | public List<User> f(UserQuery query) {
✅ 修复建议: 重命名为 selectUserList 或 queryUserList
```
---
## 评分标准
### 总体评分1-10 分)
| 分数 | 评价 |
|------|------|
| 9-10 | 优秀,代码质量高,几乎没有问题 |
| 7-8 | 良好,有少量改进空间 |
| 5-6 | 中等,存在一些需要修复的问题 |
| 3-4 | 较差,有较多问题需要解决 |
| 1-2 | 很差,存在严重问题 |
---
## 使用方法
当用户说"审查代码"或"review 这个文件"时:
1. 仔细分析代码,记录每个问题的精确位置
2. 使用 Read/Grep 工具确认代码位置和上下文
3. 识别问题和优点,为每个问题收集:文件路径、行号范围、类名、方法签名、代码片段
4. 生成详细的 HTML 报告
5. 告知用户报告已生成并可以查看
---
## 代码位置识别指南
### 行号标注规范
| 类型 | 格式 | 示例 |
|------|------|------|
| 单行问题 | `L45` | `L45` |
| 连续多行 | `L45-L52` | `L45-L52` |
| 不连续多行 | `L45, L48, L52` | `L45, L48, L52` |
### 代码上下文格式
```
行号 | 代码内容
-----|----------------------------------------
43 | @Override
44 | public User getUserById(Long userId) {
→ 45 | String sql = "SELECT * FROM user WHERE id = " + userId;
46 | return jdbcTemplate.queryForObject(sql, userMapper);
47 | }
```
- 使用 `→` 标记问题行
- 保留前后 2-3 行上下文
- 行号右对齐,保持整齐

View File

@@ -1,114 +0,0 @@
---
title: fireworks-tech-graph 技术图生成工具
tags:
- AI工具
- 技术图
- SVG
- ClaudeCode-Skill
- 开源
created: 2026-04-21
source: https://github.com/yizhiyanhua-ai/fireworks-tech-graph
stars: 3862
forks: 338
language: Python
---
# fireworks-tech-graph
> 不用手画图了。用中文描述你的系统,几秒钟得到可直接发布的 **SVG + PNG** 技术图。
## 概述
将自然语言描述转化为精美的 SVG 技术图,并通过 `rsvg-convert` 导出高分辨率 PNG。内置 **7 种视觉风格**,深度覆盖 AI/Agent 领域常见图类型,并完整支持全部 14 种 UML 图类型。
## 7 种视觉风格
| # | 名称 | 背景色 | 字体 | 适用场景 |
|---|------|--------|------|----------|
| 1 | 扁平图标风(默认) | `#ffffff` | Helvetica | 博客、幻灯片、技术文档 |
| 2 | 暗黑极客风 | `#0f0f1a` | SF Mono / Fira Code | GitHub README、开发者文章 |
| 3 | 工程蓝图风 | `#0a1628` | Courier New | 架构设计文档、工程规范 |
| 4 | Notion 极简风 | `#ffffff` | system-ui | Notion、Confluence、内部 Wiki |
| 5 | 玻璃态卡片风 | `#0d1117` 渐变 | Inter | 产品官网、演讲 Keynote |
| 6 | Claude 官方风格 | `#f8f6f3` | system-ui | Anthropic 风格图表 |
| 7 | OpenAI 官方风格 | `#ffffff` | system-ui | OpenAI 风格图表 |
## 支持的图类型
### AI/Agent 领域(内置 Pattern
| 类型 | 流程 |
|------|------|
| RAG Pipeline | Query → Embed → VectorSearch → Retrieve → LLM → Response |
| Agentic RAG | RAG + Agent 循环 + 工具调用 |
| Agentic Search | Query → Planner → [Search/Calc/Code] → Synthesizer |
| Mem0 记忆层 | Input → Memory Manager → [VectorDB + GraphDB] → Context |
| Multi-Agent | Orchestrator → [SubAgent×N] → Aggregator → Output |
| Tool Call 流程 | LLM → Tool Selector → Execution → Parser → LLM循环 |
### UML 支持14 种)
类图、组件图、部署图、包图、复合结构图、对象图、用例图、活动图、状态机图、序列图、通信图、时序图、交互概览图、ER 图
## 形状词汇表
| 概念 | 形状 |
|------|------|
| 用户 / 人类 | 圆形 + 身体路径 |
| LLM / 模型 | 圆角矩形,双边框,⚡ |
| Agent / 编排器 | 六边形 |
| 短期记忆 | 虚线边框圆角矩形 |
| 长期记忆 | 实线圆柱体 |
| Vector Store | 带内环圆柱 |
| Graph DB | 三圆簇 |
| 工具 / 函数 | 带 ⚙ 的矩形 |
| API / 网关 | 六边形(单边框) |
| 消息队列 / 流 | 横向管道 |
| 决策节点 | 菱形 |
## 箭头语义
| 流类型 | 样式 | 含义 |
|--------|------|------|
| 主数据流 | 2px 实线 | 主要请求/响应路径 |
| 控制 / 触发 | 1.5px 实线 | 系统 A 触发 B |
| 记忆读取 | 1.5px 实线 | 从存储检索 |
| 记忆写入 | 1.5px 虚线 `5,3` | 写入/存储操作 |
| 异步 / 事件 | 1.5px 虚线 `4,2` | 非阻塞 |
| 反馈 / 循环 | 1.5px 曲线 | 迭代推理 |
## 安装
```bash
npx skills add yizhiyanhua-ai/fireworks-tech-graph
# 依赖
brew install librsvg # macOS
sudo apt install librsvg2-bin # Ubuntu/Debian
```
## 使用方式
触发词:`画图 / 帮我画 / 生成图 / 做个图 / 架构图 / 流程图`
```text
画一张 RAG 流程图
生成一张 Agentic Search 架构图
画一张微服务架构图风格2暗黑极客风
```
## 评分
⭐⭐⭐⭐⭐5/5
**优点**
- 7 种风格覆盖所有场景
- 内置 AI/Agent 领域知识,开箱即用
- 语义形状 + 箭头系统,图示专业
- 中文支持友好
**局限**
- 需要 Claude Code 或兼容 Skill 运行时
- 依赖 rsvg-convert 工具
**适合场景**技术博客配图、架构文档、PPT 素材、GitHub README

View File

@@ -1,23 +0,0 @@
---
title: GNSS 索引
tags:
- 索引
created: 2026-04-21
---
# GNSS
> 自动生成的索引文件
## 文件列表
| 文件名 | 大小 | 说明 |
|--------|------|------|
| [[RATIO]] | 439B | |
| [[RMS]] | 477B | |
| [[什么是GPS最简独立闭合环]] | 893B | |
| [[同步环、异步环和重复基线]] | 1KB | |
| [[闭合差]] | 488B | |
---
*共 5 个文件*

View File

@@ -1,9 +0,0 @@
RATIO
RATIO即整周模糊度分解后次最小RMS与最小RMS的比值。即
![RATIO RAT RMS RMS S RA 0 RATIO RAT RAT 1](Exported%20image%2020260407225341-0.png)
RATIO 反映了所确定出的整周未知数参数的可靠性,这一指标取决
于多种因素,既与观测值的质量有关,也与观测条件的好坏有关。
RATIO是反映基线质量好坏的最关键值通常情况下要求RATIO值
大于1.8。

View File

@@ -1,12 +0,0 @@
RMS 即均方根误差Root Mean Square
![vTpv](Exported%20image%2020260407225345-0.png)
其中:
V为观测值的残差
P为观测值的权
n-f为观测值的总数减去未知数个数。
RMS表明了观测值的质量。RMS越小观测值质量越好
反之,表明观测值质量越差。它不受观测条件(如卫星分布好坏)的影响。
依照数理统计的理论观测值误差落在1.96 倍RMS 的范围内的概率
是95%。

View File

@@ -1,8 +0,0 @@
==三台由独立观测获得基线向量构成的闭合环。==
==GPS控制网一般也构成一定的图形涉及如下的概念==
==1、观测时段测站上开始接收卫星信号到观测停止连续工作的时间段简称时段。==
==2、同步观测两台或两台以上接收机同时对同一组卫星进行的观测。==
==3、同步观测环三台或三台以上接收机同步观测获得基线向量构成的闭合环简称同步环。==
==4、独立观测环由独立观测获得基线向量构成的闭合环简称独立环。==
==5、====异步====观测环:在构成多边形环路的所有基线向量中,只要有非同步观测的基线向量,则称该多边形环路为====异步====观测环,简称====异步====环。==
> 来自 <[https://zhidao.baidu.com/question/182755838.html](https://zhidao.baidu.com/question/182755838.html)>

View File

@@ -1,17 +0,0 @@
1、 同步闭合环
同步环闭合差是由同步观测基线所组成的闭合环的闭合差。
由于同步观测基线间具有一定的内在联系,从而使得同步环闭合差在
理论上应总是为0 的。如果同步环闭合差超限,则说明组成同步环的基线
中至少存在一条基线向量是错误的。但反过来,如果同步环闭合差没有超
限,只能认为静态基线在质量上,绝大部分情况下是合格的,还不能说明
组成同步环的所有基线在质量上绝对合格。
2、异步闭合环
不是完全由同步观测基线所组成的闭合环称为异步环。异步环的闭合
差称为异步环闭合差。
当异步环闭合差满足限差要求时,则表明组成异步环的基线向量的质
量是合格的。当异步环闭合差不满足限差要求时,则表明组成异步环的基
线向量中至少有一条基线向量的质量不合格。要确定出哪些基线向量的质
量不合格可以通过多个相邻的异步环或重复基线来进行。
3、重复基线
不同观测时段对相同的两个测站间的观测结果就是所谓重复基线。这
些观测结果之间的差异就是重复基线较差。

View File

@@ -1,12 +0,0 @@
闭合差的定义
闭合环路检验是检测基线质量的有力方法。
闭合环可分为同步环、异步环和重复基线。
闭合环的闭合差在理论上应为0在实际测量中允许偏离一定的值
闭合环的限差请参见有关文献。
环的闭和差有以下几类:
1、分量闭合差
![Exported image](Exported%20image%2020260407225348-0.png)
2、全长相对闭合差
![Exported image](Exported%20image%2020260407225350-1.png)

View File

@@ -1,18 +0,0 @@
---
title: PMP 索引
tags:
- 索引
created: 2026-04-21
---
# PMP
> 自动生成的索引文件
## 文件列表
| 文件名 | 大小 | 说明 |
|--------|------|------|
---
*共 0 个文件*

View File

@@ -1,3 +0,0 @@
![[Untitled-20260407225004 - Ink.svg]]

View File

@@ -1,8 +0,0 @@
BCWP=EV
BCWS=PV
BAC 绩效测量基准 资金需求
道德与专业行为规范==> 责任,尊重,公正,诚实
通用项目的生命周期4阶段==>开始项目,组织与准备,执行项目工作,结束项目
项目经理的胜任力==>技术项目管理,领导力,战略和商务能力
整合的三个层面==>过程层面整合,认知层面整合,背景层面整合

View File

@@ -1,4 +0,0 @@
责任
尊重
公正
诚实

View File

@@ -1,16 +0,0 @@
阶段关口的审查,是偏向紧后阶段是否可以开始,还是偏向紧前阶段是否可以结束
三种制约因素:范围、时间、成本(质量)
六种制约因素:范围、时间、成本、质量、资源、风险
增量型,迭代,定期,在规定的时间重复执行一些管理动作,渐进明细
敏捷项目管理适合产品开发开发需求多变2到4周
阶段关口,关键界面,项目整合的关键,最容易发生风险 流程和流程的衔接
人和人
人和部门
流程和流程的衔接,人和人,人和部门,技术工作和管理工作的衔
![input tools techniques 0 output](Exported%20image%2020260407225026-0.png)
![[20200929 - Ink.svg]]

View File

@@ -1,3 +0,0 @@
工作授权系统 确保我们的 工作 让正确的人在正确的时候按照正确的逻辑被执行
资源分解结构
![1 2 3 4 5 6 1 2 3 4](Exported%20image%2020260407225035-0.png)

View File

@@ -1,8 +0,0 @@
![OBS](Exported%20image%2020260407225049-0.png)
![httpwww.hxtdpx.comhtmlPMPPMPrzpmpinf02945.html](Exported%20image%2020260407225053-1.png)
![httpwww.hxtdpx.comhtmlPMPPMPrzpmpinfo2947.html](Exported%20image%2020260407225102-2.png)
![httpwww.hxtdpx.comhtmlPMPPMPrzpmpinfo2947.html A B...](Exported%20image%2020260407225112-3.png) ![Exported image](Exported%20image%2020260407225125-4.png)
![00 Functional Or anization htt www.hxtd .com html ...](Exported%20image%2020260407225132-5.png)
![OO PMO](Exported%20image%2020260407225145-6.png)
![J A B c A](Exported%20image%2020260407225152-7.png)

View File

@@ -1,4 +0,0 @@
责任
尊重
公正
诚实

View File

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

View File

@@ -1,53 +0,0 @@
![Exported image](Exported%20image%2020260407225214-0.png)
1、什么是项目生命周期它是由什么组成的
答:项目生命周期是指项目从开始到结束所经历的一系列阶段。
由 启动,规划,执行,监控,收尾五大过程组。
2、什么是项目生命周期管理法采用这种方法的最大好处是什么
答:所谓项目生命周期管理法,就是指将不同的项目不同项目阶段过程灵活选择合适的管理方法。
最大的好处是,可以灵活应对项目的包含的各种因素。可以将项目的各个阶段之间的关系顺序,迭代和交替有序灵活开展。
3、什么是项目阶段关口在阶段关口是紧前阶段是否达到结束标准还是紧后阶段是否达到开始标准哪一个更重要为什么
答:项目阶段关口,设立在项目阶段的结束点。
==在阶段关口是紧前阶段达到结束标准====比====紧后阶段达到开始标准====更加====重要==
因为,紧前阶段达到结束标准可以释放各种资源,项目风险降低,会沉淀成本
紧后阶段达到开始标准,代表未来….
4、项目生命周期有哪几种类型预测型生命周期适合什么样的项目适应型生命周期适合什么样的项目
答:
- 预测型生命周期 ,适合传统瀑布型,适合项目一开始,使用的技术和需求都十分清晰的项目
- 迭代型生命周期
- 增量型生命周期
- 适应型生命周期,敏捷型,适合那种一开始只知道部分需求和功能的技术的项目。
==需求明确,产品清晰,无需变更,风险较低的项目==
==需求不清,产品模糊,频繁变更,风险较高====的项目==
- 混合型生命周期
5、什么是迭代
答:迭代是指定期重复性的工作,在规定的时间重复执行一些管理动作
6、项目有哪五大过程组哪四大通用阶段?
答: 由 启动,规划,执行,监控,收尾五大过程组。
有 开始项目阶段,组织与准备阶段,执行项目工作阶段,结束项目阶段四大通用阶段。
7、什么是项目信息它分为几个维度分别出现在项目的哪些过程组
答:项目数据是在整个项目生命周期需要收集、分析、和转化的大量的数据。从各个过程收集项目数据,并在项目团内内共享。
==在各个过程中所收集的数据经过结合相关背景的分析、汇总转化为项目信息。==
==主要分为==
==工作绩效数据====:====主要出现在执行过程和监控过程==
==工作绩效信息:控制过程,监控==
==工作绩效报告:整体项目控制过程,整合管理==
==三个维度。==
8、什么是ITTO他们的典型组成因素有哪些
ITTO是指每个项目管理过程通过合适的项目管理工具和技术将一个或多个输入转化成一个或多个输出。
Input指一个过程的输入上个阶段的产物或各类项目文件组成
Technology和Tool,指工具,软件或模板;技术主要是 方法论或最佳实践
Output为输出。可交付成果更新后的项目文件或计划或总结报告。
典型的组合成因素
9、什么是效益管理计划它包括哪些主要内容
答:效益管理计划是描述了项目实现效益的方式和时间,以及应制定的效益衡量机制。
项目效益指为发起组织和项目预期受益方创造价值的行动、行为、产品、服务或成果的结果。
主要内容有:目变效益、战略一致性、实现效益的时间、效益责任人、测量指标、假设、风险。
10、在项目启动前有一个阶段叫什么名字这个阶段我们主要做哪些工作
答:在项目启动前的一个阶段叫项目前期准备工作。
主要做需求评估、商业论证和效益管理计划。

View File

@@ -1,30 +0,0 @@
3、思考题事业环境因素分为哪两个类别分别包括哪些内容组织过程资产分为哪两个类别分别包括哪些内容
答:事业环境因素主要分为组织内部环境因素和组织外部环境因素
组织内部环境因素主要有:
- 制度环境(组织治理框架,组织结构,项目管理信息系统,人事管理制度,工作授权系统,沟通制度)
- 资源环境(基础设施,实物资源,人力资源,员工能力)
- 文化环境(组织文化,政治氛围,管理实践)
组织的外部环境因素主要有:
- 宏观环境(社会环境,文化环境,市场条件,法律法规,财务因素,采购限制)
- 行业环境行业标准商业数据库学术研究资料生产力指标行业PMBOK
- 相关方环境(相关方期望,相关方文化,风险临界值)
- 物理环境(工作条件,气候条件,客观限制)
组织过程资产主要分过程、政策和程序 和 组织知识库两种
过程、政策和程序 组织过程资产主要有
- 具体的政策
- 流程和程序
有形的组织过程资产主要有
- 工作模板
- 工作指南
- 共享知识库
4、事业环境因素和组织过程资产最重要的区分方式是什么
> 答:主要区分方式

View File

@@ -1,7 +0,0 @@
1、什么是系统型简单型组织结构它有什么优点和缺点如何区分简约型和有机型组织结构
2、职能式组织结构是如何划分的它有哪些优点和缺点适合做什么样的类型的项目
3、协调员和联络员出现在什么组织结构中如何区分协调员和联络员
4、平衡矩阵组织结构有什么优点和缺点
5、项目式组织结构和矩阵型组织结构的最大区别是什么项目型组织结构的优点和缺点有哪些?
6、复合型组织结构除了项目经理还有哪些人是专职服务于项目的哪些人是兼职服务于项目的
7、预习PMO的类型和作用

View File

@@ -1,4 +0,0 @@
![Account Information Username Chi1120131212 550 cha...](Exported%20image%2020260407225227-0.png)
Pssword:
1q2w#E$R

View File

@@ -1,35 +0,0 @@
中文
项目1
**城市环境空气质量预报预警平台** 这个项目包含了城市空气质量预报预警业务管理平台,统计模型预报,实况与预报发布平台,智能短信报送平台,视频会商系统的建设等。
**启动** 初始阶段我们做了什么准备;
**规划**:如何规划这个项目;
**实施**:我在这个项目里担任什么职务,这个项目是做什么用的,
**监控**:这个项目实施过程监督;
**收尾**:这个项目目前是否已经验收,客户满意度如何。
开始:根据国家对城市空气质量预报信息化要求,调研空气质量的预报和发布需求,主要解决城市环境监测中心在数据预报、会商和数据发布流程以及信息化支撑而启动项目。
计划:编制项目管理计划,创建开发工作分解结构,主要分为预报业务平台,预报算法,预报发布平台,短信报送平台,视频会商系统等五大子系统分别编制时间进度计划,制定预算,人力资源管理、沟通和采购计划。
执行:作为项目经理带领项目团队预报业务平台,预报发布平台,短信报送平台和预报算法的集成研发,将视频会商系统进项外包管理,组织整个项目按照预定计划推进。
监控:每周五项目进度和问题汇总、月度评估后并向业主定期汇报项目状态,将业主需求变化推进项目变更,确保项目按照计划的推进。
结束:结束各子系统的项目活动,把研发过程和项目管理过程分别归档,按照合同要求将交付物打包整理移交给业主,开展项目验收会,验收报告盖章签字,总结整理经验教训。
![Initiating Planning S Executing Monitoring Closing](Exported%20image%2020260407225232-0.octet-stream)
中文:项目经验2 中海达监测云
开始:旧有的监测软件产品无法满足国土地灾、矿山、大坝等安全监测行业市场需求组织打造一款具备对安全监测设备的数据采集、审核、统计、查询、管理、专业分析和webgis展示服务的SAAS专业监测云平台启动了这个项目。
计划:将项目主要分为传感器数据采集数据处理web 综合分析平台前端展示等四个子模块分别研发工作结构分解WBS,编制进度计划,人力资源计划和质量计划。
执行:作为项目经理带领项目团队进行项目需求分析,原型设计,编写产品需求规格说明书,搭建和梳理出全新的监测软件产品的业务体系,根据监测产品需求来组织开发架构保障整个项目顺利完成。研发人员进行单元测试以及测试人员集成功能测试和性能测试。
监控:每周与研发汇总项目问题和进度并定期汇报项目状态给上级领导,开展项目需求评审,代码评审,产品架构评审和需求变更评审会议。
结束:结束各子模块的项目活动,编写产品测试报告和性能测试报告,按照项目业务需求将交付物打包运营部门,开展产品试运行,试运行结束后对项目验收报告,总结经验教训归档代码和研发文档。
中文项目经验3 中海达解算云
开始:以前的gnss解算软件只能适合小型单个工程应用无法满足越来越大量的GNSS实时解算需求所以组织启动开发专注于gnss高精度定位技术在变形监测领域数据解算支撑平台、支持大量gnss数据接收、存储处理、分布式实时解算和事后分析的云平台。
计划: 我根据立项需求制定产品的GNSS解算产品研发路线图按照公司规定裁剪制定了项目管理计划 主导编制进度计划、质量管理计划,配置管理等实施计划。
执行:作为项目经理带领项目团队开展项目详细分析和原型开发,主导沟通编写产品需求规格说明书,协调架构师搭建GNSS解算的分布式研发框架根据项目管理计划来组织研发活动分了三个迭代反复执行。在内部测试测试之后开展集成测试和性能测试等活动。
监控和收尾:每周定期汇报项目状态给QA每月中旬沟通项目主要问题并沟通协调解决方案开展项目评审会议以保障项目项目质量和进度。最后编写项目测试报告和事业部验收报告 协调现场项目试运行。总结经验教训归档代码和算法经验,以便于下一个版本的迭代。

View File

@@ -1,88 +0,0 @@
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` 成功!

View File

@@ -1,17 +0,0 @@
**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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

View File

@@ -1,28 +0,0 @@
---
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 &amp; docker rmi &amp; docker prune 的差异]] | 196B | |
| [[docker rm &amp;amp; docker rmi &amp;amp; docker prune 的差异]] | 196B | |
| [[docker镜像清理]] | 485B | |
| [[如何批量删除Docker中已经停止的容器]] | 1KB | |
| [[安装docker-compose]] | 545B | |
---
*共 10 个文件*

View File

@@ -1,3 +0,0 @@
==单节点安装==
==在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)>

View File

@@ -1,12 +0,0 @@
**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)>

View File

@@ -1,7 +0,0 @@
<!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>

View File

@@ -1,7 +0,0 @@
<!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>

View File

@@ -1,2 +0,0 @@
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)>

View File

@@ -1,7 +0,0 @@
==.==
==在您想要使用单个节点运行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)>

View File

@@ -1,28 +0,0 @@
**方法一:**
## #**==显示所有的容器,过滤出****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)>

Some files were not shown because too many files have changed in this diff Show More