首页 > 其他分享 >第四周

第四周

时间:2023-12-31 12:32:13浏览次数:15  
标签:CA etc awk print 四周 root centos8

while read line

使用while read line和/etc/passwd,计算用户id总和。
[root@centos8 data]#vim uidsum.sh
#!/bin/bash
#********************************************************************
#FileName:     uidsum.sh
#Version:      1.0
#Date:         2023-12-26
#Author:       wenzi
#Description: This is description
#********************************************************************
while read line;do
    uid=`echo $line | awk -F ':' '{print $3}'`
    sum=$[$sum+$uid]
done < /etc/passwd
echo $sum

[root@centos8 data]#./uidsum.sh
86662

数组

介绍

变量:存储单个元素的内存空间

数组:存储多个元素的连续的内存空间,相当于多个变量集合

数组名和索引

  • 索引的编号从0开始,属于数值索引
  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本后支持
  • bash的数组支持索引不连续

声明数组

  • 普通数组可不事先声明,直接使用

declare -a array_name

  • 关联数组必须事先声明,再使用

declare -A array_name

两者不可相互转换

赋值

  • 一次只赋值一个元素

array_name[index]=value

week[1]="one"
week[2]="two"
  • 一次赋值全部元素

array_name=("var1" "var2" ...)

name=("zhangsan" "lisi" "wangwu")

serial=({1..10})

alpha=({a..z})

file=(*.sh)
  • 只赋值特定元素

array_name=([0]="var1" [3]="var2" ...)

[root@centos8 data]#num=({1..10})
[root@centos8 data]#num[${#num[@]}]=11
[root@centos8 data]#echo ${num[*]}
1 2 3 4 5 6 7 8 9 10 11

引用

  • 显示所有数组

delcare -a

  • 引用特定数组元素

${array_name[index]}   如果省略[index]下标将引用下标为0的元素

[root@centos8 data]#declare -a title=([0]="a" [3]="b" [4]="c")

[root@centos8 data]#echo ${title[3]}
b

[root@centos8 data]#echo ${title}
a
  • 引用数组所有元素

${array_name[*]}

${array_name[@]}

查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之,懒惰模式
${var/pattern/substr}


查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之,贪婪模式
${var//pattern/substr}


查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}


查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}
  • 数组长度或数组中元素个数

${#array_name[*]}

${#array_name[@]}

把var中的所有小写字母转换为大写
${var^^}


把var中的所有大写字母转换为小写
${var,,}
  • 数组的所有下标

${!array_name[*]}

${!array_name[@]}

[root@centos8 data]#declare -a title=([0]="a" [3]="b" [4]="c")

[root@centos8 data]#echo ${!title[@]}
0 3 4
[root@centos8 data]#echo ${!title[*]}
0 3 4

删除

  • 删除数组中某个元素会使索引不连续

unset array_name[index]

[root@centos8 data]#declare -a title=([0]="a" [3]="b" [4]="c")

[root@centos8 data]#unset title[3]
[root@centos8 data]#echo ${title[@]}
a c
  • 删除整个数组

unset array_name

[root@centos8 data]#vim fact.sh
#!/bin/bash
#********************************************************************
#FileName:     fact.sh
#Version:      1.0
#Date:         2023-12-27
#Author:       wenzi
#Description: This is description
#********************************************************************
factorial() {  
  local number=$1  
  local result=1  
  for ((i = 1; i <= number; i++)); do  
    result=$((result * i))  
  done  
  echo $result  
}  
  
echo "5的阶乘是: $(factorial 5)"

数组数据处理

${array_name[@]:offset:number}

${array_name[*]:offset:number}

  • offset指要跳过的元素个数
  • number指取出的元素个数

取出指定偏移量后(跳过几个)的所有元素

${array_name[@]:offset}

${array_name[*]:offset}

[root@centos8 data]#num=({1..10})
[root@centos8 data]#echo ${num[*]}
1 2 3 4 5 6 7 8 9 10

[root@centos8 data]#echo ${num[*]:2:4}
3 4 5 6

[root@centos8 data]#echo ${num[*]:3}
4 5 6 7 8 9 10

向数组中追加元素

array[${array[*]}]=value

array[${array[@]}]=value

#!/bin/bash
# chkconfig: - 96 3
# description: This is test service script

. /etc/init.d/functions 

start(){
    [ -e /var/lock/subsys/testsrv ] && exit || touch /var/lock/subsys/testsrv
    echo $PATH
    action "Starting testsrv"
    sleep 3
}
stop(){
    [ -e   /var/lock/subsys/testsrv ] && rm /var/lock/subsys/testsrv || exit
    action "Stopping testsrv"
}

status(){
    [ -e /var/lock/subsys/testsrv ] && echo "testsrv is running..." || echo "testsrv is stopped"
}

case $1 in 
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
status)
    status
    ;;
*)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 2
esac

变量中字符串的处理

基于偏移量取字符串

返回字符串变量var的字符的长度,一个汉字算一个字符
${#var}


返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
${var:offset}


返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
${var:offset:number}


取字符串的最右侧几个字符,取字符串的最右侧几个字符, 注意:冒号后必须有一空白字符
${var: -length}


从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容,即:掐头去尾
${var:offset:-length}


先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-length前空格,并且length必须大于offset
${var: -length:-offset}
[root@centos8 data]#name="abcdefghijklmn"
[root@centos8 data]#echo ${#name}
14
[root@centos8 data]#echo ${name:3}
defghijklmn
[root@centos8 data]#echo ${name:3:2}
de
[root@centos8 data]#echo ${name: -4}
klmn
[root@centos8 data]#echo ${name:4:-5}
efghi
[root@centos8 data]#echo ${name: -5:-3}
jk

基于模式取子串

[root@wenzi ~]# echo '{print $2}' > cs.awk
[root@wenzi ~]# tail -n 3  /etc/services | awk -f cs.awk
48619/tcp
48619/udp
49000/tcp
[root@centos8 data]#file="var/log/message"
[root@centos8 data]#echo ${file#*/}
log/message
[root@centos8 data]#echo ${file##*/}
message
[root@centos8 ~]#tail -n 3 /etc/services
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
 
 
[root@centos8 ~]#tail -n 3  /etc/services | awk '{print $2}'
45514/udp
45514/tcp
46998/tcp
 
[root@centos8 ~]#tail -n 3  /etc/services | awk -F '/' '{print $1}'
cloudcheck-ping 45514
cloudcheck      45514
spremotetablet  46998
 
 
[root@centos8 ~]#tail -n 3  /etc/services | awk -F '[/#]' '{print $3}'
 ASSIA CloudCheck WiFi Management keepalive
 ASSIA CloudCheck WiFi Management System
 Capture handwritten signatures
[root@centos8 data]#url="http://wenzi.com:8080"
[root@centos8 data]#echo ${url%:*}
http://wenzi.com
[root@centos8 data]#echo ${url%%:*}
http

查找并替换

查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之,懒惰模式
${var/pattern/substr}


查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之,贪婪模式
${var//pattern/substr}


查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}


查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}

查找并删除

[root@centos8 ~]#tail -n 3 /etc/services | awk 'BEGIN{print "Service\t\tPort\t\tDes\n"} {print $0}'
Service         Port            Des
 
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
 
 
[root@centos8 ~]#tail -n 3 /etc/services | awk '{print $0} END{print "-----END-----"}'
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
-----END-----

字符大小写转换

[root@wenzi ~]# tail -n 3 /etc/services | awk  '/^mata/{print $0}'
matahari        49000/tcp               # Matahari Broker

变量拓展

[root@wenzi ~]# tail -n 10 /etc/services | awk '/blp5/ && /tcp/ {print $0}'
blp5            48129/tcp               # Bloomberg locator
[root@centos8 data]#wz1=1;wz2=2;wz3=3
[root@centos8 data]#echo ${!wz*}
wz1 wz2 wz3

高级变量赋值

如下:var 和 str 为变量,针对 str 是否有设定来决定 var 的值。

  • [str:]代表 str 没有设定或为空的字符串
  • [str]代表没有该变量

变量设定方式

str没有设定

str为空字符串

str已设定为非空字符串

var=${str-expr}

var=expr

var=

var=$str

var=${str:-expr}

var=expr

var=expr

var=$str

var=${str+expr}

var=

var=expr

var=expr

var=${str:+expr}

var=

var=

var=expr

var=${str=expr}

str=expr

var=expr

str不变

var=

str不变

var=$str

var=${str:=expr}

str=expr

var=expr

str=expr

var=expr

str不变

var=$str

var=${str?expr}

expr输出至stderr

var=

var=$str

var=${str:?expr}

expr输出至stderr

expr输出至stderr

var=$str

求10个随机数的最大值与最小值

[root@centos8 ~]#tail -n 5 /etc/services | awk -v FS="/" -v OFS="---" '{print $1OFS$2}'
axio-disc       35100---udp               # Axiomatic discovery protocol
pmwebapi        44323---tcp               # Performance Co-Pilot client HTTP API
cloudcheck-ping 45514---udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514---tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998---tcp               # Capture handwritten signatures

实现阶乘算法

n!=1x2x3x...xn

递归

[root@centos8 ~]#tail -n 5 /etc/services | awk '{print NR $0}'
1axio-disc       35100/udp               # Axiomatic discovery protocol
2pmwebapi        44323/tcp               # Performance Co-Pilot client HTTP API
3cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
4cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
5spremotetablet  46998/tcp               # Capture handwritten signatures

迭代

[root@wenzi ~]# tail -n 5 /etc/services | awk 'END{print NR}'
5

进程和线程区别

  • 进程是操作系统分配资源的最小单位。
  • 线程是程序执行的CPU调度的最小单位。
  • 一个进程由一个或多个线程组成;线程是一个进程中代码的不同执行路线。
  • 进程之间互相独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(打开文件和信号),某进程的线程在其它进程不可见。

进程结构

Linux内核中使用 task_struct 结构来表示一个进程,这个结构体保存了进程的所有信息,这个结构体称为进程控制块(PCB)。

内核把进程存放在 任务队列task list 的双向循环列表中,列表中每一项都是task_struct结构。

进程控制块PCB包含信息:

  • 进程id、用户id和组id
  • 程序计数器
  • 进程的状态(就绪、运行、阻塞)
  • 进程切换时需要保存和恢复的CPU寄存器的值
  • 描述虚拟地址空间的信息
  • 描述控制终端的信息
  • 当前工作目录
  • 文件描述符表,包含很多指向file结构体的指针
  • 进程可以使用的资源上限(ulimit –a命令可以查看)
  • 输入输出状态:配置进程使用I/O设备

进程状态

第四周_centos

进程的基本状态

  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写
  • 控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态
  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

状态之间转换

  • 创建——>就绪:进程被创建并准备好等待执行
  • 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行——>就绪:
  • 主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的
  • 在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
  • 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求,读取磁盘中的文件
  • 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
  • 运行——>终止:进程完成其任务或被操作系统终止。

以下两种状态转换是不可能发生的:

  • 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  • 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

更多的状态:

R:running,该程序正在运作中。

S:sleep,该程序正处于睡眠状态,但可以被唤醒。

D:不可被中断的睡眠状态,通常该程序可能在等待I/O的情况(ex>打印)

T:stop,停止状态;暂停于内存,不会被调度,除非手动启动

Z:zombie,僵尸状态,进程已经终止,但无法被移除至内存外。

X:死亡状态,进程彻底结束,可回收该进程相关资源;几乎在进程状态变为X的瞬间就会被清理掉,所以很难捕捉到该状态进程

<:高优先级

N:低优先级

s:表示此为父进程,它还有子进程

+:前台进程

l:多线程进程

IPC通信 和 RPC通信

同一主机

  • pipe:管道,单向传输。例如,在一个Shell脚本中,我们可以使用管道将一个命令的输出作为另一个命令的输入,实现数据传递和处理。
  • socket:套接字文件,双工通信。
  • Memory-maped file:文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
  • shared memory:共享内存。
  • signal:信号
  • Lock:对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开
  • semaphore:信号量,一种计数器,类似停车场车位计数器

不同主机:socket 即IP+Port

  • RPC:remote procedure call,远程过程调用
  • 例如:将函数定义在单独的文件中,shell脚本中通过类似 . /etc/os-release 方式读取函数后可正常调用函数。
  • 例如:在一个分布式文件系统中,可以使用RPC来实现不同节点之间的文件读写操作。
  • MQ:消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

前台、后台

前台作业:通过终端启动,且启动后一直占据终端(foreground)。

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端),你无法使用 ctrl + c 终止它,可以使用 bg/fb 呼叫该工作。

查看目前背景工作状态:jobs

jobs [-lrs]

-l:显示除工作编号与进程外,同时列出PID。

-r:显示正在后台running的工作。

-s:显示正在后台stop的工作。

第四周_CA_02

+:代表最近一次被移至后台的工作     -:代表倒数第二个被移至后台的工作

  • 将命令移至背景中执行:&
  • 将当前工作移至背景中暂停:ctrl + z
  • 将背景工作移至前景:fg jobnum
  • 让后台停止的进程在后台运行:bg jobnum 或 kill -18 %jobnum
  • 让后台运行的进程在后台停止:kill -19 %jobnum

nohup 命令 &> /dev/null &

可将终端执行的命令置于后台,关闭终端后不影响程序运行。

内核设计流派及特点

  • 单内核:Linux、Unix

把左右的系统服务都放到内核里,所有功能都集成于同一个程序,分层实现不同的功能,系统庞大复杂。

  • 微内核:Windows,HarmonyOS

简化内核功能,在内核之外的用户态尽可能多的实现系统服务,同时加入相关之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差。

Linux使用单内核,且实现功能模块化,相当于吸收了微内核有点。

rocky启动流程

  1. UEFI/BIOS 初始化,运行POST开机自检。
  2. 选择启动设备。
  3. 引导加载程序 Grub2,加载程序的配置文件:
  • /etc/grub.d/
  • /etc/default/grub
  • /boot/grub2/grub.cfg
  1. 加载 initramfs 驱动模块(可实现根文件系统的挂载)。
  2. 加载虚拟根中的内核。
  3. 虚拟根的内核初始化。第一支程序为systemd。
  4. 执行 initrd.target 所有单元,包括挂载 /etc/fstab。
  5. 从 initramfs 根文件系统切换至磁盘根目录。
  6. systemd 执行默认 target 配置,配置文件 /etc/systemd/system/default.target。
  7. systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统。
  8. systemd 启动 multi-user.target 下的服务。
  9. systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 文件。
  10. systemd 执行 multi-user.target 下的 getty.target 及登录服务。
  11. systemd 执行 graphical 需要的服务。

GRUB工作流程

  1. 依据BIOS中设置的启动设备,从其MBR中加载gurb程序
  2. grub程序识别分区文件系统
  3. grub程序提供显示菜单功能,用户可选择启动的内核
  4. grub程序加载内核
  5. 内核加载完毕后,将控制权移交给内核

chkconfig服务脚本

固定写法部分

  • #/bin/bash ---> shebang机制,必写
  • # chkconfig: - 96 3 ---> 必写,- 表示任何运行级别下都不启动,可改为“2345”等;96 表示S启动时顺序;3 表示K关闭时顺序;可通过chkconfig --list 服务名 查看。仅影响开机启动时的设定。
  • # description: xxx ---> 必写,表示描述
#!/bin/bash
# chkconfig: - 96 3
# description: This is test service script

. /etc/init.d/functions 

start(){
    [ -e /var/lock/subsys/testsrv ] && exit || touch /var/lock/subsys/testsrv
    echo $PATH
    action "Starting testsrv"
    sleep 3
}
stop(){
    [ -e   /var/lock/subsys/testsrv ] && rm /var/lock/subsys/testsrv || exit
    action "Stopping testsrv"
}

status(){
    [ -e /var/lock/subsys/testsrv ] && echo "testsrv is running..." || echo "testsrv is stopped"
}

case $1 in 
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
status)
    status
    ;;
*)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 2
esac

systemd服务配置文件

etc/systemd/system

这是系统默认的systemd配置文件目录。在这个目录中,可以创建和修改自定义的systemd服务单元配置文件。这些配置文件定义了服务的名称、依赖项、启动顺序、运行环境等等。

/usr/lib/systemd/system

这是系统级别的systemd配置文件目录。在这个目录中,通常包含一些系统级别的服务和应用程序的配置文件。这些配置文件通常由软件包管理器在安装过程中自动创建和更新。类似CentOS6中的 /etc/init.d 目录

/usr/local/lib/systemd/system

这是用户级别的systemd配置文件目录。在这个目录中,可以创建和修改用户级别的服务单元配置文件。这些配置文件只在当前用户的主目录下有效,不会影响其他用户。

/run/systemd/system

这是运行时创建的systemd配置文件目录。在这个目录中,会存储正在运行的服务单元的配置文件。这些配置文件只在当前会话中有效,当系统重新启动时,这些配置文件会被清除。

systemd启动流程

  1. systemd 执行默认 target 配置,配置文件 /etc/systemd/system/default.target。
  2. systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统。
  3. systemd 启动 multi-user.target 下的服务。
  4. systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 文件。
  5. systemd 执行 multi-user.target 下的 getty.target 及登录服务。
  6. systemd 执行 graphical 需要的服务。

awk

一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及
生成报表等等;在Linux下默认awk是gawk

awk 选项 ‘模式 {动作} ’ filename

工作原理

  1. 执行 BEGIN{ commands } 语句块中的语句。
  2. 从文件或标准输入(stdin)读取一行,然后执行 pattern{ commands } 语句块,它逐 行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  3. 当读至输入流末尾时,执行 END{ commands } 语句块。
BEGIN语句块:
可选的语句块。在awk开始从输入流中读取行 之前 被执行,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中

END语句块:
可选的语句块。在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成

pattern语句块:
可选的语句块。最重要的部分,如果没有提供pattern语句块,则默认执行 { print } ,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

awk是以行为一次处理的单位,字段为最小的处理单位;

每一行的每个字段都是变量名的,即$1,$2,$3…;$0代表一整行内容;

awk中变量可以直接使用,不用加上$符号;

第四周_awk_03

从文件中读取awk命令

[root@wenzi ~]# echo '{print $2}' > cs.awk
[root@wenzi ~]# tail -n 3  /etc/services | awk -f cs.awk
48619/tcp
48619/udp
49000/tcp

指定分隔符

[] 字符表示括号内任意一个字符,即每遇到一个 / 或 # 时,就分割一个字段

[root@centos8 ~]#tail -n 3 /etc/services
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
 
 
[root@centos8 ~]#tail -n 3  /etc/services | awk '{print $2}'
45514/udp
45514/tcp
46998/tcp
 
[root@centos8 ~]#tail -n 3  /etc/services | awk -F '/' '{print $1}'
cloudcheck-ping 45514
cloudcheck      45514
spremotetablet  46998
 
 
[root@centos8 ~]#tail -n 3  /etc/services | awk -F '[/#]' '{print $3}'
 ASSIA CloudCheck WiFi Management keepalive
 ASSIA CloudCheck WiFi Management System
 Capture handwritten signatures

变量赋值

[root@wenzi ~]# awk -v a=123 'BEGIN{print a}'
123
 
系统变量
[root@wenzi ~]# a=123 && awk -v a=$a 'BEGIN{print a}'
123
[root@wenzi ~]# a=123 && awk 'BEGIN{print '$a'}'
123
 
[root@centos8 ~]#awk -v "name=aa" 'BEGIN{print name;name="bb";print name}'
aa
bb

第四周_证书_04

BEGIN和END

[root@centos8 ~]#tail -n 3 /etc/services | awk 'BEGIN{print "Service\t\tPort\t\tDes\n"} {print $0}'
Service         Port            Des
 
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
 
 
[root@centos8 ~]#tail -n 3 /etc/services | awk '{print $0} END{print "-----END-----"}'
cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
-----END-----

匹配以 mata 开头的行

[root@wenzi ~]# tail -n 3 /etc/services | awk  '/^mata/{print $0}'
matahari        49000/tcp               # Matahari Broker

匹配包含blp5和tcp的行

[root@wenzi ~]# tail -n 10 /etc/services | awk '/blp5/ && /tcp/ {print $0}'
blp5            48129/tcp               # Bloomberg locator

匹配以blp5开头的行 至 以com开头的行

[root@wenzi ~]# tail -n 10 /etc/services | awk '/^blp5/,/^com/ {print $0}'
blp5            48129/tcp               # Bloomberg locator
blp5            48129/udp               # Bloomberg locator
com-bardac-dw   48556/tcp               # com-bardac-dw

第四周_awk_05

FS

[root@centos8 ~]#tail -n 5 /etc/services | awk -F '/' '{print $1}'
axio-disc       35100
pmwebapi        44323
cloudcheck-ping 45514
cloudcheck      45514
spremotetablet  46998

OFS

[root@centos8 ~]#tail -n 5 /etc/services | awk -v FS="/" -v OFS="---" '{print $1OFS$2}'
axio-disc       35100---udp               # Axiomatic discovery protocol
pmwebapi        44323---tcp               # Performance Co-Pilot client HTTP API
cloudcheck-ping 45514---udp               # ASSIA CloudCheck WiFi Management keepalive
cloudcheck      45514---tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998---tcp               # Capture handwritten signatures

NF

打印字段个数
[root@wenzi ~]# echo "a b c d e" | awk '{print NF}'
5
 
打印最后一个字段
[root@wenzi ~]# echo "a b c d e" | awk '{print $NF}'
e
 
打印倒数第二个字段
[root@wenzi ~]# echo "a b c d e" | awk '{print $(NF-1)}'
d
 
排除后两个字段
[root@wenzi ~]# echo "a b c d e" | awk '{$NF="";$(NF-1)="";print $0}'
a b c

NR

打印行数

[root@centos8 ~]#tail -n 5 /etc/services | awk '{print NR $0}'
1axio-disc       35100/udp               # Axiomatic discovery protocol
2pmwebapi        44323/tcp               # Performance Co-Pilot client HTTP API
3cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
4cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
5spremotetablet  46998/tcp               # Capture handwritten signatures

打印总行数

[root@wenzi ~]# tail -n 5 /etc/services | awk 'END{print NR}'
5

打印第三行

[root@wenzi ~]# tail -n 5 /etc/services | awk 'NR==3 {print $0}'
iqobject        48619/tcp               # iqobject

第四周_centos_06

不匹配blp5行

[root@wenzi ~]# tail -n 5 /etc/services | awk '!/blp5/ {print $0}'
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker

乘法

[root@wenzi ~]# seq 5 | awk '{print $0*2}'
2
4
6
8
10

打印偶数行

[root@wenzi ~]# seq 5 | awk '$0%2==0 {print $0}'
2
4

正则

[root@wenzi ~]# seq 5 | awk '$0~/[34]/ {print $0}'
3
4
 
[root@wenzi ~]# seq 5 | awk '$0!~/[34]/ {print $0}'
1
2
5

流程控制

if语句

[root@wenzi ~]# seq 5 | awk '{if ($0==3) print $0}'
3
 
[root@wenzi ~]# echo "123abc#456cde 789aaa#aaabbb " | xargs -n1 | awk -F '#' '{if ($2~/[0-9]/) print $2}'
456cde
 
[root@wenzi ~]# seq 5 | awk '{if ($0==3) print $0;else print "no"}'
no
no
3
no
no
 
[root@wenzi ~]# seq 5 | awk '{if ($0==1){print "yes"} else if ($0==2){print "no"} else if ($0==3){print $0}}'
yes
no
3
 
 
[root@centos8 ~]#df
Filesystem          1K-blocks    Used Available Use% Mounted on
devtmpfs               892520       0    892520   0% /dev
tmpfs                  921932       0    921932   0% /dev/shm
tmpfs                  921932    9264    912668   2% /run
tmpfs                  921932       0    921932   0% /sys/fs/cgroup
/dev/mapper/cl-root 104806400 5080784  99725616   5% /
/dev/mapper/cl-data  52403200  398408  52004792   1% /data
/dev/nvme0n1p1         999320  197080    733428  22% /boot
tmpfs                  184384       4    184380   1% /run/user/0
 
判断分区利用率,大于20的输出full,小于20的输出为OK
[root@centos8 ~]#df | awk -F"[ %]+" '/\/dev/ {if($(NF-1)>10){print $(NF-1)" full"}else {print $(NF-1)" OK"}}'
0 OK
0 OK
5 OK
1 OK
22 full

while语句

[root@wenzi ~]# tail -n 3 /etc/services
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker
 
遍历打印所有字段
[root@wenzi ~]# tail -3 /etc/services | awk '{i=1;while(i<=NF){print $i;i++}}'
iqobject
48619/tcp
#
iqobject
iqobject
48619/udp
#
iqobject
matahari
49000/tcp
#
Matahari
Broker
 
[root@centos8 ~]#awk 'BEGIN{sum=0;i=1;while (i<=100){sum+=i;let i++};print sum}'
5050

for语句

[root@wenzi ~]# echo -e "1\t2\t3\n4\t5\t6\n7\t8\t9"
1       2       3
4       5       6
7       8       9
[root@wenzi ~]# echo -e "1\t2\t3\n4\t5\t6\n7\t8\t9" > cs.txt
[root@wenzi ~]# awk '{for(i=1;i<=NF;i++)print $i}' cs.txt
1
2
3
4
5
6
7
8
9
 
[root@centos8 ~]#awk 'BEGIN{for(i=1;i<=100;i++){sum+=i};print sum}'
5050

continue

中断本次循环

[root@centos8 ~]#awk 'BEGIN{for(i=1;i<=10;i++){if(i==5)continue;sum+=i};print sum}'
50

break

中断整个循环

[root@centos8 ~]#awk 'BEGIN{for(i=1;i<=10;i++){if(i==5)continue;sum+=i};print sum}'
10

next

提前结束对本行的处理而直接进入下一行处理(awk自身的循环)

[root@centos8 ~]#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
 
[root@centos8 ~]#cat /etc/passwd | head -n 3 | awk -F ':' '{if($3==1){next} print $1}'
root
daemon

数组

awk的数组是关联数组。如 weekdays["mon"]="Monday"

  • 可使用任意字符串,字符串使用双引号括起来
  • 如果某数组事先不存在,在引用时,awk会自动创建此元素,并将其初始值设为“空串”
  • 若要判断数组中是否存在某元素,要用“index in array”格式遍历
  • 若要遍历数组中每个元素,要用for循环
显示数组索引
[root@centos8 ~]#awk 'BEGIN{title["0"]="a";title["1"]="b";print "0" in title}'
1
 
判断数组索引是否存在
[root@centos8 ~]#awk 'BEGIN{title["0"]="a";title["1"]="b";if("0" in title){print "yes"}else{print "no"}}'
yes
 
遍历数组所有元素
[root@centos8 ~]#awk 'BEGIN{title["0"]="a";title["1"]="b";for(i in title){print i,title[i]}}'
0 a
1 b

函数

数值

第四周_数组_07

[root@centos8 ~]#awk 'BEGIN{srand();for(i=1;i<=10;i++){print int(rand()*100)}}'
28
94
7
64
72
93
37
36
54
27

字符串处理

第四周_数组_08

统计用户名长度
[root@centos8 ~]#cat /etc/passwd | head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]#cat /etc/passwd | cut -d ':' -f1 | awk '{print length()}' | head -n 3
4
3
6
[root@centos8 ~]#cat /etc/passwd | awk -F ':'  '{print length($1)}' | head -n 3
4
3
6

调用shell中命令

语法:system('cmd')

[root@centos8 ~]#awk 'BEGIN{system("hostname")}'
centos8.magedu.com

CA和证书

加密算法和协议

对称加密算法

加密和解密使用同一个秘钥。

特性
  • 加密、解密使用同一个秘钥,效率高
  • 将原始数据分割为固定大小的块,逐个加密
缺陷
  • 秘钥过多
  • 秘钥分发
  • 数据来源无法确认
常见算法

DES、3DES、AES、IDEA、Blowfish、RC6

非对称加密算法

秘钥是成对出现

  • 公钥:public key,公开给所有人,主要给别人加密使用
  • 私钥:secret key,private key,自己留存,必须保证其私密性,用于自己加密签名
  • 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能
  • 数据加密:适合加密较小数据;如:加密对称秘钥
  • 数字签名:主要在于让接收方确认发送方身份
缺点
  • 密钥长,算法复杂
  • 加密解密,效率低下
常见算法

RSA、DSA、ECC

场景

非对称加密实现加密

接收者:生成公钥/秘钥对,公开公钥,保密秘钥

发送者:使用接收者的公钥来加密消息,将加密后的消息发送给接收者

接收者:使用秘钥来解密消息

非对称加密实现数字签名

发送者:生成公钥/秘钥对,公开公钥,保密秘钥,使用秘钥加密消息,将加密后的消息发送给接收者

接收者:使用发送者的公钥来解密

建立私有CA实现证书申请颁发

openssl配置文件:/etc/pki/tls/openssl.cnf

其中重要项:

[ CA_default ]
 
dir     = /etc/pki/CA        CA的主要目录,用于存储证书、私钥、CRL等文件。
certs       = $dir/certs         存储已颁发的证书
crl_dir     = $dir/crl       存储已签名的证书撤销列表(CRL)
database    = $dir/index.txt     数据库索引文件,存储证书对应哪个网站
#unique_subject = no            # Set to 'no' to allow creation of
                    # several certs with same subject.
new_certs_dir   = $dir/newcerts      新证书的默认存储位置
 
certificate = $dir/cacert.pem    CA的证书文件
serial      = $dir/serial        当前的序列号,用于标识新证书
#crlnumber   = $dir/crlnumber    # the current crl number
                    # must be commented out to leave a V1 CRL
crl     = $dir/crl.pem       当前的CRL文件
private_key = $dir/private/cakey.pem     CA的私钥文件
 
x509_extensions = usr_cert       要添加到证书的扩展
 
[ policy_match ]    匹配策略,用于定义证书主题字段的匹配规则
countryName     = match
stateOrProvinceName = match
organizationName    = match
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

三种策略:

  • match:要求申请填写的信息根CA设置的信息必须一致
  • optional:可有可无,跟CA设置信息可不一致
  • supplied:必须填写这项信息

建立私有CA

  • OpenCA:OpenCA开源组织使用Perl对OpenSSL进行二次开发而成的一套完善的PKI免费软件
  • openssl:相关包 openssl和openssl-libs
1、创建CA所需要文件

生成证书索引数据库文件
touch /etc/pki/CA/index.txt

指定第一个颁发证书的序列号
echo 01 > /etc/pki/CA/serial

2、生成CA私钥

cd /etc/pki/CA;(umask 066; openssl genrsa -out private/cakey.pem 2048)

3、生成CA自签名证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem

选项说明:

-new:生成新证书签署请求

-x509:专用于CA生成自签证书

-key:生成请求时用到的私钥文件

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE: 证书的保存路径

CentOS7
从CentOS7将/etc/pki/CA目录内容复制到CentOS8,免去建立目录的步骤
[root@wenzi ~]#tree -d /etc/pki/CA
/etc/pki/CA
├── certs
├── crl
├── newcerts
└── private
[root@wenzi ~]#scp -r  /etc/pki/CA [email protected]:/etc/pki/
 
 
CentOS8
生成CA私钥
[root@centos8 ~]#cd /etc/pki/CA;(umask 066; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................................................................................+++++
........................................................................................................................................................................................+++++
e is 65537 (0x010001)
[root@centos8 CA]#ll private/cakey.pem
-rw------- 1 root root 1675 Dec 31 04:42 private/cakey.pem
 
生成CA自签名证书
[root@centos8 CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN    国家
State or Province Name (full name) []:henan    省份
Locality Name (eg, city) [Default City]:zhengzhou    市名
Organization Name (eg, company) [Default Company Ltd]:wenzi    公司
Organizational Unit Name (eg, section) []:yunwei    部门
Common Name (eg, your name or your server's hostname) []:www.wenzi.com    使用证书的网站域名
Email Address []:[email protected]    邮箱
查看生成的CA自签证书,建议将此文件传输到windows系统,后缀改为.crt
[root@centos8 CA]#openssl x509 -in cacert.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            52:27:46:0b:52:67:5f:60:c8:bf:38:25:b9:c7:0e:66:d4:52:95:6a
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = henan, L = zhengzhou, O = wenzi, OU = yunwei, CN = www.wenzi.com, emailAddress = [email protected]
        Validity
            Not Before: Dec 30 20:50:35 2023 GMT
            Not After : Dec 27 20:50:35 2033 GMT
        Subject: C = CN, ST = henan, L = zhengzhou, O = wenzi, OU = yunwei, CN = www.wenzi.com, emailAddress = [email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:bc:ac:9d:47:2c:4c:83:a6:2c:12:52:ba:f7:93:
                    6b:33:a6:e1:f0:9b:e7:4c:51:59:b0:95:db:b2:68:
                    ec:4a:2c:36:57:73:72:11:3c:21:6e:d3:fb:5a:0f:
                    a4:ca:05:21:fd:d5:a6:d7:4d:1f:72:91:15:3e:60:
                    da:cf:3a:e3:b2:c6:7b:c3:0e:4e:39:14:2c:94:f1:
                    ae:47:30:64:27:95:76:84:12:2e:a2:e0:60:2f:7c:
                    c9:83:3b:c9:d9:6a:4d:1f:78:a6:41:ea:ac:12:85:
                    d3:9a:43:f9:24:c7:66:f0:09:c7:01:91:ee:6a:ec:
                    1d:a4:7f:72:19:43:ca:91:78:ac:23:9e:6b:43:84:
                    5e:40:09:61:5e:b6:32:f2:19:9d:c6:b7:00:f8:d0:
                    00:fd:66:f3:f7:a2:a3:5a:81:71:1a:b0:2a:c2:e7:
                    42:f8:a9:b7:54:f6:1e:da:47:87:4a:6a:29:26:7f:
                    16:20:b9:e9:76:a7:92:b2:19:3a:4e:de:b0:ab:63:
                    12:6e:7a:f3:64:e5:91:93:1f:35:09:0b:b6:79:dd:
                    a3:27:8d:7a:2d:9a:3b:7f:a1:b1:d3:df:a2:0a:81:
                    60:0e:ec:69:9b:1a:a7:32:19:71:fa:9a:f1:93:91:
                    e7:48:8f:be:2a:85:a4:6d:f7:90:92:92:d7:08:06:
                    94:65
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                5D:EE:41:48:03:D1:0D:A6:85:DA:BC:05:29:AF:81:BF:82:67:11:05
            X509v3 Authority Key Identifier:
                keyid:5D:EE:41:48:03:D1:0D:A6:85:DA:BC:05:29:AF:81:BF:82:67:11:05
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         5d:65:b2:c9:2d:8c:89:79:85:46:12:0a:17:12:87:21:3f:e1:
         f3:bb:f5:c4:82:24:b9:43:74:c2:d6:52:5c:80:65:75:9d:3c:
         45:fa:c4:88:5f:43:6d:1d:0e:3d:84:a0:e7:ab:60:35:f6:88:
         c0:ac:8e:c7:ca:70:f7:71:09:ea:03:6f:3a:c7:2f:4e:bd:3b:
         35:4c:ca:4e:ce:17:90:67:5a:8f:4b:8a:ef:3d:ce:3a:bc:9c:
         ee:2a:cf:7d:3a:f0:36:9b:f7:19:71:73:f5:e7:4d:30:50:8c:
         12:f8:f1:92:02:91:f7:3b:30:ce:07:4e:09:b9:f6:0f:72:92:
         4d:76:c4:11:6c:a9:e3:56:ca:2f:fc:9e:05:b5:dd:e4:86:45:
         6a:dd:c4:77:70:3e:bc:4a:5f:55:6e:eb:74:7d:46:4f:00:c4:
         db:23:bc:d3:71:74:ef:e0:e4:06:27:8a:29:b6:e0:62:b3:04:
         7e:fe:51:71:91:04:52:f4:61:12:55:37:48:8e:63:6a:50:05:
         a3:e2:15:8f:cf:e5:d1:5b:d1:9c:bc:33:b1:88:6e:1b:21:89:
         5b:3c:3f:34:0a:a3:b2:95:29:cf:8b:b6:fa:b9:47:28:17:56:
         ff:95:28:20:68:fe:94:c6:49:79:f7:8e:16:03:46:f0:68:bd:
         cd:a6:73:3c    

第四周_数组_09

第四周_awk_10

申请证书并颁发证书

1、为需要使用证书的主机生成生成私钥

(umask 066; openssl genrsa -out   /data/test.key 2048)

2、为需要使用证书的主机生成证书申请文件

openssl req -new -key /data/test.key -out /data/test.csr

3、在CA签署证书并将证书颁发给请求者

可以将客户端生成的申请文件发送至CA,生成证书后再把证书传送至客户端

openssl ca -in /data/test.csr  -out   /etc/pki/CA/certs/test.crt -days 100

注意:默认要求 国家,省,公司名称三项必须和CA一致

4、查看证书中的信息

openssl x509 -in /PATH/FROM/CERT_FILE -noout   -text|issuer|subject|serial|dates

查看指定编号的证书状态

openssl ca -status SERIAL

用户生成自己的私钥,私钥应该存放至各应用相应目录下
[root@wenzi ~]#(umask 066;openssl genrsa -out /data/test.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.........................+++++
.....+++++
e is 65537 (0x010001)
 
生成证书申请文件,其中国家代码、省名、公司名必须和CA中一致
[root@wenzi ~]#openssl req -new -key /data/test.key -out /data/test.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:luoyang
Organization Name (eg, company) [Default Company Ltd]:wenzi
Organizational Unit Name (eg, section) []:kaifa
Common Name (eg, your name or your server's hostname) []:www.wenzi.org
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
将客户端证书申请文件上传至CA
[root@wenzi ~]#rsync -av /data/test.csr [email protected]:/data/
[email protected]'s password:
sending incremental file list
test.csr
 
sent 1,135 bytes  received 35 bytes  780.00 bytes/sec
total size is 1,041  speedup is 0.89
 
 
在CA上颁发证书
提前创建这两个必须存在的文件,不然会报错,提示找不到文件
[root@centos8 CA]#touch /etc/pki/CA/index.txt;touch /etc/pki/CA/serial
 
指定证书颁发起始序号
[root@centos8 CA]#echo 01 > /etc/pki/CA/serial
 
颁发证书
[root@centos8 CA]#openssl ca -in /data/test.csr  -out   /etc/pki/CA/certs/test.crt -days 100
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 31 02:41:47 2023 GMT
            Not After : Apr  9 02:41:47 2024 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = henan
            organizationName          = wenzi
            organizationalUnitName    = kaifa
            commonName                = www.wenzi.org
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                35:72:9F:AE:C3:0D:1C:CE:43:34:84:F1:83:88:59:0E:DE:5E:B5:7C
            X509v3 Authority Key Identifier:
                keyid:5D:EE:41:48:03:D1:0D:A6:85:DA:BC:05:29:AF:81:BF:82:67:11:05
 
Certificate is to be certified until Apr  9 02:41:47 2024 GMT (100 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
 
查看当前CA目录下文件
[root@centos8 CA]#tree /etc/pki/CA/
/etc/pki/CA/
├── cacert.pem    
├── certs
│   └── test.crt
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 01.pem
├── private
│   └── cakey.pem
├── serial
└── serial.old
 
查看下一个颁发证书的序号
[root@centos8 CA]#cat /etc/pki/CA/serial
02
 
查看颁发记录。 有效期 序号 信息
[root@centos8 CA]#cat /etc/pki/CA/index.txt
V       240409024147Z           01      unknown /C=CN/ST=henan/O=wenzi/OU=kaifa/CN=www.wenzi.org/[email protected]
 
查看证书信息
[root@centos8 CA]#openssl x509 -in /etc/pki/CA/certs/test.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = henan, L = zhengzhou, O = wenzi, OU = yunwei, CN = www.wenzi.com, emailAddress = [email protected]
        Validity
            Not Before: Dec 31 02:41:47 2023 GMT
            Not After : Apr  9 02:41:47 2024 GMT
        Subject: C = CN, ST = henan, O = wenzi, OU = kaifa, CN = www.wenzi.org, emailAddress = [email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:f2:cf:6e:74:80:8f:e2:19:09:19:20:8f:3d:5b:
                    d6:3c:96:99:30:d7:07:9e:a0:5a:7c:79:a2:9a:d6:
                    63:cb:a9:77:f1:10:d5:5f:69:55:53:90:8a:13:66:
                    f9:77:7b:69:2c:0d:fe:fe:56:78:fa:fe:2e:43:c7:
                    f9:88:b9:a2:42:d2:47:4b:73:e0:5d:da:c7:66:ce:
                    fe:3f:e8:9f:fe:93:39:46:a4:7a:05:95:74:ef:fb:
                    91:7d:8f:63:d8:ed:d4:6a:71:77:8d:b0:f8:37:38:
                    a2:94:cf:69:f7:02:73:8e:ba:b7:c8:7f:c6:5f:4f:
                    71:2d:d3:b1:9f:92:03:66:79:26:cb:1e:44:67:11:
                    29:35:17:bb:a9:c7:98:0f:8c:b9:2b:89:13:9f:32:
                    27:69:e7:15:3e:5c:05:6c:dc:0d:e9:81:24:ad:83:
                    2c:71:da:f4:42:04:6b:68:13:2b:ce:19:aa:a8:63:
                    c7:3a:ac:4f:6e:4e:4b:12:69:a9:2c:96:c9:d8:df:
                    eb:7a:17:82:3f:d4:82:5b:0c:7a:7b:01:89:3b:ac:
                    6c:51:f7:f7:c0:3e:46:49:b2:a7:0d:65:df:ac:d9:
                    ec:e6:21:77:8b:56:00:f7:35:b7:01:b3:76:07:63:
                    bc:1e:28:84:a6:99:7e:91:21:17:b2:cd:cc:ab:40:
                    1c:9d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                35:72:9F:AE:C3:0D:1C:CE:43:34:84:F1:83:88:59:0E:DE:5E:B5:7C
            X509v3 Authority Key Identifier:
                keyid:5D:EE:41:48:03:D1:0D:A6:85:DA:BC:05:29:AF:81:BF:82:67:11:05
 
    Signature Algorithm: sha256WithRSAEncryption
         91:8a:ba:32:4a:c4:36:0e:83:bd:e2:95:48:52:02:ce:d6:78:
         5a:6b:73:ea:73:59:c7:68:f8:3e:fe:f7:52:2f:0a:3a:7b:8d:
         4c:ac:bf:d8:d4:46:73:c3:34:25:3e:51:cd:b2:85:a5:a1:1b:
         03:86:92:58:dd:f9:07:d6:72:ba:23:18:79:32:42:71:7d:c2:
         ce:f9:0f:00:99:36:00:45:f5:c6:e3:4f:93:aa:e4:5c:aa:ad:
         94:89:73:ca:09:e0:9d:64:41:7a:d6:60:da:35:c8:07:d8:f7:
         7b:6c:46:41:3c:4c:ee:af:9a:82:b0:1e:25:e8:09:7f:88:e8:
         55:7e:de:4e:23:3d:9c:21:ad:1b:e7:f9:7b:df:16:13:64:bc:
         5f:fb:95:4f:79:15:cd:01:7b:e9:30:fa:4d:7d:0d:97:fe:9e:
         06:40:c6:d0:e7:1f:ec:8a:4a:fd:ee:be:b3:50:8a:7a:9c:4d:
         86:b6:33:81:75:af:3e:88:a2:d4:9b:6c:12:73:8a:1e:c5:46:
         d7:7e:41:dc:ee:c1:15:29:74:f4:59:63:09:e9:9b:f3:53:4f:
         b5:e9:2d:a7:cc:cd:82:17:a0:1e:54:a1:36:a7:f6:a4:3e:eb:
         f0:14:de:be:41:e0:cc:78:36:d5:7a:ba:bb:04:8b:84:fb:3b:
         40:53:81:dd
 
将证书发送至客户端,完成
[root@centos8 CA]#rsync -a certs/test.crt [email protected]:/data/

将客户端收到的证书传递至windows系统查看

第四周_awk_11

第四周_数组_12

吊销证书

在客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE   -noout   -serial  -subject

在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行

echo 01 > /etc/pki/CA/crlnumber

更新证书吊销列表

openssl ca -gencrl -out /etc/pki/CA/crl.pem

查看crl文件

openssl crl -in /etc/pki/CA/crl.pem -noout -text

标签:CA,etc,awk,print,四周,root,centos8
From: https://blog.51cto.com/u_15894107/9047792

相关文章