01-Nginx 常用配置清单.md

Table of Contents

1: Nginx 配置

01-Docker命令详解.md

Table of Contents

1: docker

  • 容器技术
  • image
  • container
  • repository
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1: pdocker ps 显示过长问题:
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"

docker ps | less -S

# 2: docker如何将容器内文件复制到本地
docker container cp -a c56d9375ff28:/etc/kraken ./

# 3:
CMD: 指定容器被启动时要运行的命令
ENTRYPOINT: 同 CMD ,但不会被 docker run -t 覆盖

2: docker 的使用命令

2.1 docker –help

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
docker --help

管理命令:
  container   管理容器
  image       管理镜像
  network     管理网络
命令:
  attach      介入到一个正在运行的容器
  build       根据 dockerfile 构建一个镜像
  commit      根据容器的更改创建一个新的镜像
  cp          在本地文件系统与容器中复制 文件/文件夹
  create      创建一个新容器
  exec        在容器中执行一条命令
  images      列出镜像
  kill        杀死一个或多个正在运行的容器
  logs        取得容器的日志
  pause       暂停一个或多个容器的所有进程
  ps          列出所有容器
  pull        拉取一个镜像或仓库到 registry
  push        推送一个镜像或仓库到 registry
  rename      重命名一个容器
  restart     重新启动一个或多个容器
  rm          删除一个或多个容器
  rmi         删除一个或多个镜像
  run         在一个新的容器中执行一条命令
  search      在 Docker Hub 中搜索镜像
  start       启动一个或多个已经停止运行的容器
  stats       显示一个容器的实时资源占用
  stop        停止一个或多个正在运行的容器
  tag         为镜像创建一个新的标签
  top         显示一个容器内的所有进程
  unpause     恢复一个或多个容器内所有被暂停的进程

2.2 docker build

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
命令格式:docker build [OPTIONS] <PATH | URL | ->
Usage: Build an image from a Dockerfile.
常用选项说明

--build-arg       设置构建时的变量
--no-cache        默认false。设置该选项,将不使用Build Cache构建镜像
--pull            默认false。设置该选项,总是尝试pull镜像的最新版本
--compress        默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust 默认true。设置该选项,将对镜像进行验证
--file, -f        Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation       默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label           为生成的镜像设置metadata
--squash          默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t         镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network         默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q       默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm        默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true 即整个构建过程成功后删除中间环节的容器

示例

01-shell快速入门.md

Table of Contents

1: 第一个 shell 脚本

1
2
#!/bin/bash
echo "hello, world"
  • 运行程序可以作为解释器参数或者作为可执行程序
1
2
3
4
bash test.sh

chmod +x test.sh
test.sh

2: 变量 variable

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 1: 变量定义
# 需要注意的是变量名与等号之间不能有空格.
name="huruji"

# 2: 变量使用
# 使用在变量名前添加$即可,{}表示这个变量名的边界.
echo $name
echo ${name}

# 3: 只读变量
# 使用readonly可以将变量定义为只读变量,只读变量不能再次赋值
name="huruji"
readonly name

# 4: 删除变量
# 使用unset删除变量,之后不能再使用.
name="huruji"
unset name

3: 字符串 String

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 1: 字符串定义
# 字符串可以使用单引号和双引号,单引号中不能包含单引号,即使转义单引号也不次那个,双引号则可以,双引号也可以使用字符串.
name="huruji"
echo "my name is $name"

# 2: 字符串拼接
name="huruji"
hello="my name is ${name}"
# 3: 获取字符串长度
str="huruji"
echo ${#str} #6
# 4: 提取子字符串
str="huruji"
echo ${str:2:3}
# 5: 字符串查找
str="huruji"
echo `expr index "$str" u`
# 此时输出2,因为此时第一个字符位置从1开始

4: 数组 Array

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 1: 数组定义
names=("huruji" "greywind" "xie")
echo ${names[0]}
echo ${names[2]}
# 2: 数组读取
echo ${names[2]}
echo ${names[@]} # 使用@可以获取数组中的所有元素
# 3: 数组长度获取
length1=${#names[@]}
length2=${#names[*]}
echo $length1
echo $length2

5: Shell 参数传递

  • 执行 Shell 脚本的时候,可以向脚本传递参数,在 Shell 中获取这些参数的格式为$n,即$1,$2…….,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
echo "第一个参数是:$1"
echo "第一个参数是:$2"
echo "第一个参数是:$3"

# 运行shell
chmod +x test.sh
test.sh 12 13 14

# 此时输出:
第一个参数是:12
第一个参数是:13
第一个参数是:14
  • 此外,还有其他几个特殊字符来处理参数
    • $#:传递脚本的参数个数
    • $*:显示所有的参数
    • $@:返回所有参数
    • $-:显示 Shell 的使用的当前选项
    • $?:退出的状态,0 表示没有错误,其他则表示有错误

6: 运算

6.1 算数运算

  • 算数运算 原生 bash 不支持简单的数学运算,可以借助于其他命令来完成,例如 awk 和 expr,其中 expr 最常用.expr 是一款表达式计算工具,使用它能完成表达式的求值操作.
1
2
val=`expr 2 + 2`
echo $val
  • 需要注意的是运算符两边需要 空格 ,且使用的是反引号. 算术运算符包括:+ - × / % = == !=

6.2 关系运算

  • 关系运算 关系运算只支持数字,不支持字符串,除非字符串的值是数字.
1
2
3
4
5
6
7
8
a=12
b=13
if [ $a -eq $b ]
	then
	echo "相等"
else
	echo "不等"
fi

算数运算符:

01-Linux创建用户

1: userdel删除用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 若使用userdel haha 命令删除该用户时,并不能删除该用户的所有信息,
# 只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息

  [root@localhost /]# userdel haha
  [root@localhost /]# cat /etc/passwd | grep haha
  [root@localhost /]# cat /etc/shadow | grep haha
  [root@localhost /]# cat /etc/group | grep haha
  [root@localhost /]# cat /etc/gshadow | grep haha
  [root@localhost /]# find / -name "*haha*"

# 完全删除用户,慎用!!!
userdel -r haha

2: useradd创建用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 1 在home手动创建新用户home目录
useradd -d /home/haha haha

# 2 设置密码
passwd haha

# 3 设置sudo权限
(1)su root //进入root用户
(2)vim /etc/sudoers //打开sudo的配置文件
    修改sudoers文件:
    <1> 先找到所示的一行:(root ALL=(ALL)ALL)
    <2> 然后给普通用户haha添加sudo权限,在“root ALL=(ALL)ALL”这一行下面,加入如下图所示的一行(用户名 ALL=(ALL) ALL),并保存

3: 新用户使用ssh登录验证

02-Go编译相关

1: go 交叉编译

1.1 查看可支 platform

1
2
3
go tool dist list

// 支持的OS跟ARCH

1.2 Go 交叉编译命令

1
2
3
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -o vp-server_linux_amd64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build

1.3 编译命令

1.4 编译时传入参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var (
	VERSION    string
	BUILD_TIME string
	GO_VERSION string
)

func main() {
	fmt.Printf("%s\n%s\n%s\n", VERSION, BUILD_TIME, GO_VERSION)
}

// go build -ldflags "-X main.VERSION=1.0.0 -X 'main.BUILD_TIME=`date +"%Y-%m-%d %H:%M:%S"`' -X 'main.GO_VERSION=`go version`'"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# go
var (
	VERSION     string
	BUILD_TIME  string
	GO_VERSION  string
	COMMIT_ID   string
	AUTHOR      string
	BRANCH_NAME string
)

func init() {
	log.Infof("\nVERSION:%s \nBUILD_TIME:%s \nGO_VERSION:%s \nCOMMIT_ID:%s \nAUTHOR:%s \nBRANCH_NAME:%s\n",
		VERSION, BUILD_TIME, GO_VERSION, COMMIT_ID, AUTHOR, BRANCH_NAME)
}
# go build shell

#!/bin/sh

VERSION="v1.0.0"
BUILD_TIME=`date +"%Y-%m-%d %H:%M:%S"`
GO_VERSION=`go version`
COMMIT_ID=`git log |head -n 1| awk '{print $2;}'`
AUTHOR=`git log |head -n 3| grep Author| awk '{print $2;}'`
BRANCH_NAME=`git branch | awk '/\*/ { print $2; }'`

go build -ldflags \
"-X 'main.VERSION=${VERSION}' \
-X 'main.BUILD_TIME=${BUILD_TIME}' \
-X 'main.GO_VERSION=${GO_VERSION}' \
-X 'main.COMMIT_ID=${COMMIT_ID}' \
-X 'main.AUTHOR=${AUTHOR}' \
-X 'main.BRANCH_NAME=${BRANCH_NAME}' "

2: shell 脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
export LANG="en_US.UTF-8"

echo "开始编译vp-server项目... "
echo "----> 1: linux (64) ; "
echo "----> 2: windows (64) ; "
echo "----> 3: darwin (64) ; "

if read -p "======>请选择您要编译的环境 :" args
then
    echo "------> 你输入的环境是 $args <------"
else
    echo "\n抱歉,你输入超时了。"
fi

echo
projectName="video_server"

if [ $args -eq 1 ]; then
  CGO_ENABLED=0 GOOS=linux GOARCH=amd64    go build -v -a -o ${projectName}_linux_amd64
elif [ $args -eq 2 ]; then
  CGO_ENABLED=0 GOOS=windows GOARCH=amd64    go build -v -a -o ${projectName}_windows_amd64.exe
elif [ $args -eq 3 ]; then
  CGO_ENABLED=0 GOOS=darwin GOARCH=amd64    go build -v -a -o ${projectName}_darwin_amd64
else
    echo "输入的参数$args不正确,执行退出..."
    exit 1
fi
echo
echo "...build success!!! 编译成功..."

3: Makefile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.PHONY: all build clean run check cover lint docker help
BIN_FILE=hello
all: check build
build:
	@go build -o "${BIN_FILE}"
clean:
	go clean
	rm --force "xx.out"
test:
	go test
check:
	go fmt ./
	go vet ./
cover:
	go test -coverprofile xx.out
	go tool cover -html=xx.out
run:
	./"${BIN_FILE}"
lint:
	golangci-lint run --enable-all
docker:
	@docker build -t leo/hello:latest .
help:
	@echo "make 格式化go代码 并编译生成二进制文件"
	@echo "make build 编译go代码生成二进制文件"
	@echo "make clean 清理中间目标文件"
	@echo "make test 执行测试case"
	@echo "make check 格式化go代码"
	@echo "make cover 检查测试覆盖率"
	@echo "make run 直接运行程序"
	@echo "make lint 执行代码检查"
	@echo "make docker 构建docker镜像"

03-Git常见的命令集合

01-docker清理

Docker 清理常用方法

Docker 基于 Linux 内核通过操作系统和虚拟容器调用 CGroup, Namespace 等系统接口完成资源的分配与相互隔离,依赖系统资源运行,在分配回收过程中会产生一些垃圾,比如 docker stop 容器后没有执行 docker rm 删除。