第四周作业-shell编程与进程管理

一、实例:计算用户id总和

[root@rocky-240220 Documents]# touch abc.txt                                      #生成passwd文件
[root@rocky-240220 Documents]# cat /etc/passwd > /home/wang/Documents/abc.txt

[root@rocky-240220 Documents]# cat allid.sh            
#!/bin/bash
main()
{
        sum=0
        while read x;do
                y=`echo $x|cut -d":" -f3`
                let sum+=$y
        done < abc.txt
        echo $sum
}
main
[root@rocky-240220 Documents]# bash allid.sh
85746

二、数组使用总结

2.1,数组基本使用方法

declare  -a  array_name                  #普通数组可不声明直接使用;数组引用下标默认为数字

declare  -A  array_name                  #关联数组必须先声明;数组引用下标元素自定义

declare  -a                                        #显示所有普通数组

${array_name[index]}                       #引用下标元素的数组元素

${array_name[@]}                           #引用数组的所有元素

${array_name[*]}                             #引用数组的所有元素

${#array_name[@]}                         #显示数组的元素个数

unset  array_name[index]                 #删除数组的引用下标对应的元素

unset  array_name                          #删除整个数组

使用范例

[root@rocky-240220 Documents]# declare -a xx                  
[root@rocky-240220 Documents]# declare -A yy
[root@rocky-240220 Documents]# xx=({1..9})
[root@rocky-240220 Documents]# yy[a]=11
[root@rocky-240220 Documents]# yy[b]=22
[root@rocky-240220 Documents]# yy[c]=33
[root@rocky-240220 Documents]# echo ${yy[a]}
11

[root@rocky-240220 Documents]# echo ${xx[@]}
1 2 3 4 5 6 7 8 9
[root@rocky-240220 Documents]# echo ${#xx[@]}
9
[root@rocky-240220 Documents]# unset yy[a]

[root@rocky-240220 Documents]# echo ${yy[*]}
22 33

2.2,数组数据和字符串处理

${array_name[@]:offset:number}                 #offset要跳过元素个数,number要取出元素个数

array_name[${#array_name[*]}]=value        #向数组追加元素

${#var}                                                          #取字符串长度

${var:offset:number}                                     #对字符串切片,同理数组

${var:  -length}                                             #取字符串最右侧length字符

${var:offset:-length}                                      #去掉字符串左侧offset字符和右侧length字符

${var:  -length:offset}                                    #截取字符串左侧length字符,从右取offset字符

${var#*word}                                                #删除从左向右第一个word左侧部分

${var##*word}                                              #删除从左向右最后一个word左侧部分

${var#word}                                                 #删除第一个以word开头的部分

${var##word}                                               #删除所有以word开头的部分

${var%word*}                                               #删除从右向左第一个word右侧部分

${var%%word*}                                           #删除从右向左最后一个word右侧部分

${var/pattern/sub}                                        #查找第一个pattern替换为sub(无sub为删除)

${var//pattern/sub}                                       #查找所有pattern替换为sub(无sub为删除)

${var^^}                                                       #将所有小写字母转换为大写

${var,,}                                                        #将所有大写字母转换为小写

使用范例

[root@rocky-240220 Documents]# str=abc你我他112323
[root@rocky-240220 Documents]# echo $str
abc你我他112323
[root@rocky-240220 Documents]# echo ${#str}
12
[root@rocky-240220 Documents]# echo ${str:2:3}
c你我
[root@rocky-240220 Documents]# echo ${str: -3}
323
[root@rocky-240220 Documents]# echo ${str:2:-3}
c你我他112
[root@rocky-240220 Documents]# echo ${str: -4:2}
23
[root@rocky-240220 Documents]# echo ${str#*2}
323
[root@rocky-240220 Documents]# echo ${str##*2}
3
[root@rocky-240220 Documents]# echo ${str%2*}
abc你我他1123
[root@rocky-240220 Documents]# echo ${str%%2*}
abc你我他11
[root@rocky-240220 Documents]# echo ${str/a/A}
Abc你我他112323
[root@rocky-240220 Documents]# echo ${str//1}
abc你我他2323
[root@rocky-240220 Documents]# echo ${str^^}
ABC你我他112323
[root@rocky-240220 Documents]# echo ${str,,}
abc你我他112323

三、实例:求10个随机数最大值和最小值

[root@rocky-240220 Documents]# cat compare.sh
#!bin/bash
sc()
{
        for i in {0..9};do                    #生成随机数数组
                arr[$i]=$RANDOM
        done
        echo ${arr[*]}
        flag=1
        i=9
        while (( $flag ));do                   #冒泡排序,从小到大
                flag=0
                for (( j=0;$j<$i;j++ ));do
                        let n=j+1
                        if (( ${arr[$j]} > ${arr[$n]} )); then
                                temp=${arr[$j]}
                                arr[$j]=${arr[$n]}
                                arr[$n]=$temp
                                flag=1
                        fi
                done
                let i--
        done
        echo "${arr[0]} is smallest"
        echo "${arr[9]} is largest"
}

main()
{
        declare -A arr
        sc
}
main
[root@rocky-240220 Documents]# bash compare.sh
21724 26397 18579 18873 17516 16549 8885 20277 18633 13726
8885 is smallest
26397 is largest

四、实例:阶乘算法实现

[root@rocky-240220 Documents]# cat jc.vim
#!bin/bash
func_1()
{
        if [[ $1 -eq 0 || $1 -eq 1 ]]; then
                echo 1
        else
                temp=$( func_1 $[ $1-1 ] )
                echo $(( $1*temp ))
        fi
}
main()
{
        read -p "please input number: " num
        func_1 $num
}
main
[root@rocky-240220 Documents]# bash jc.vim
please input number: 5
120

五、解析进程和线程区别

进程:一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体

线程:程序执行中一个单一的顺序控制流程

组成颗粒度独立性调度速度
进程程序、数据集合、程序控制块是操作系统分配资源的最小单位

进程之间相互独立,

单一进程可拥有多个线程

上下文切换一般
线程线程ID、当前指令指针、寄存器和堆栈是程序执行的CPU调度的最小单位同一进程下的线程共享程序的内存空间和进程级资源,不同进程下线程不可见上下文切换快

六、解析进程结构

进程控制块PCB包含信息:

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

七、总结进程状态

创建:新建PCB写入控制和管理进程的信息,完成资源分配
就绪:进程已准备好,已分配到所需资源,只要分配到CPU时间片就可立即执行
执行:进程处于就绪后被调用,进入执行状态
阻塞:正在执行的进程由于进行I/O请求而等待I/O的完成暂时无法继续运行,进入阻塞状态
终止:进程运行结束,或出现错误,或被系统终止

ps aux命令输出中进程的状态:
运行:running
就绪:ready
睡眠:分两种,可中断(interruptable)和不可中断(uninterruptable)
停止:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,父进程结束前,子进程不关闭,杀死父进程可关闭僵死进程

常用命令

ps  aux                #显示所有进程信息

pstree  -p            #显示进程树

prtstat                 #显示进程信息

pidof                   #按进程查找进程号

top                     #实时显示进程信息

free  -h               #显示内存大小

八、简述IPC、RPC通信方式

pipe 管道,单向传输
socket 套接字文件,双工通信
memory-mapped file 文件映射,将文件映射到内存,多个进程共享这块内存
shm shared memory 共享内存
signal 信号
semaphore 信号量

同一主机通过以上方式实现通信

RPC 远程过程调用
MQ  消息队列

不同主机利用IP和端口通过以上方式实现通信

九、Linux前台作业与后台作业区别

前台作业:通过终端启动,且启动后持续占用终端

后台作业:可通过终端启动,启动后释放终端

后台作业优势:可同时运行多个进程,实现并行功能

十、总结内核设计流派及特点

宏内核:Unix、Linux,所有功能集成于同一个程序,分层实现不同功能
微内核:windows、Solaris、HarmonyOS,将各个功能做成不同的内核子系统

十一、总结Rocky启动流程、grub工作流程

Rocky启动流程

1,加电自检
2,引导加载程序(grub2)
3,加载内核信息并进行解压缩,尝试驱动所有的硬件设备
4,内核执行systemd,并获取默认的运行信息

5,执行initrd.target 所有单元,包括挂载 /etc/fstab
6,从initramfs根文件系统切换到磁盘根目录,

7,systemd执行默认target配置,配置文件/etc/systemd/system/default.target
8,systemd执行sysinit.target初始化系统及basic.target准备操作系统

9,systemd启动multi-user.target 下的本机与服务器服务

10,systemd执行multi-user.target 下的/etc/rc.d/rc.local
11,systemd执行multi-user.target下的getty.target及登录服务

grub工作流程

1阶段,读取MBR上的前446个字节

1.5阶段,读取0扇区后面的连续空间

2阶段,加载分区文件/boot/grub文件

十二、实例:chkconfig服务脚本编写

[root@rocky-240220 init.d]# cat test
#!bin/bash
#chkconfig - 96 3
#description: test chkconfig service
. /etc/init.d/functions
start()
{
        [ -e /var/lock/subsys/test  ] && exit || touch /var/lock/subsys/test
        echo $PASH
        action "starting test"
        sleep 3
}
stop()
{
        [ -e /var/lock/subsys/test ] $$ rm /var/lock/subsys/test || exit
        action "stopping test"
}
status()
{
        [ -e /var/lock/subsys/test ] && echo "test is running" || echo "test is stopped"
}

case $1 in
start)
        start
        ;;
stop)
        stop
        ;;
restart)
        stop
        start
        ;;
status)
        status
        ;;
*)
        echo $"useage: $0 {start|stop|status|restart}"
        exit2
esac

十三、systemd服务配置文件介绍

/usr/lib/systemd/system           #每个服务最主要的启动脚本,类似之前的/etc/init.d
/lib/systemd/system                #ubuntu的对应目录,兼容centos7,8和Ubuntu

/run/systemd/system               #系统执行过程中产生的服务脚本,比上面目录优先运行
/etc/systemd/system               #管理员建立的执行脚本,类似/etc/rcN.d/Sxx

[root@rocky-240220 init.d]# systemctl -t help
Available unit types:
service                                  #定义系统服务
socket                                  #定义通信时的socket文件
target                                   #用于模拟实现运行级别
device                                  #用于定义内核识别的设备
mount                                  #定义文件系统挂载点
automount                            #文件系统自动挂载点
swap                                   #标识swap设备
timer                                   
path                                    #定义文件系统中的一个文件或目录使用
slice                                    
scope                                 

十四、system启动流程介绍

1,加电自检
2,引导加载程序(grub2)
3,加载内核信息并进行解压缩,尝试驱动所有的硬件设备
4,内核执行systemd,并获取默认的运行信息

5,执行initrd.target 所有单元,包括挂载 /etc/fstab
6,从initramfs根文件系统切换到磁盘根目录,

7,systemd执行默认target配置,配置文件/etc/systemd/system/default.target
8,systemd执行sysinit.target初始化系统及basic.target准备操作系统

9,systemd启动multi-user.target 下的本机与服务器服务

10,systemd执行multi-user.target 下的/etc/rc.d/rc.local
11,systemd执行multi-user.target下的getty.target及登录服务

十五、Awk使用详解

awk基本格式:        awk  -F' '  -v  ' [ pattern ] { action } '  file

-F后面为字段分隔符,不加默认为多个连续的空白符

-v后面可加变量进行赋值,常见内置变量FS(定义字段分隔符),RS(指定输入换行分隔符),NF(定义最后一列列数),NR(定义行数)

pattern 决定触发条件,如BEGIN,END和正则表达式等

action 对数据进行处理,通常为print,print

使用范例

[root@rocky-240220 Documents]# df | awk -F' +|%' '{print $1,$5 }'
Filesystem Use
devtmpfs 0
tmpfs 0
tmpfs 2
tmpfs 0
/dev/mapper/rl-root 10
/dev/mapper/rl-home 1
/dev/sda1 26
tmpfs 1
tmpfs 0
[root@rocky-240220 Documents]# df | awk -F' +|%' 'NR!=1 {print $1,$5 }'
devtmpfs 0
tmpfs 0
tmpfs 2
tmpfs 0
/dev/mapper/rl-root 10
/dev/mapper/rl-home 1
/dev/sda1 26
tmpfs 1
tmpfs 0
[root@rocky-240220 Documents]# df | awk -F' +|%' 'NR!=1{print $(NF-2)}'
0
0
2
0
10
1
26
1
0

[root@rocky-240220 Documents]# df | awk -F' +|%' 'NR>=2{print $(NF-2)}'
0
0
2
0
10
1
26
1
0
[root@rocky-240220 Documents]# df | awk -F' +|%' 'NR>=2&&NR<5{print $(NF-2)}'
0
0
2

十六、Awk数组、函数介绍

awk常用数组格式:     awk  '{job[$1]++}END{for(i in job){print job[i],i}}'

使用job数组,指定$1为数组的下标、$1出现的次数为下标的赋值,并利用for循环遍历显示数组

awk常用内置函数:

rand():返回0到1之间的一个随机数
srand():配合rand函数生成随机数的种子
int():返回整数

length():返回指定字符串的长度
sub(r,s,t):对t字符串搜索r表示的模式匹配内容,并将第一个配置到的内容替换成s,即懒惰模式
gsub(r,s,t):对t字符串搜索r表示的模式匹配内容,并将所有配置到的内容替换成s,即贪婪模式

使用范例

[root@rocky-240220 Documents]# awk -F':' '{print $NF}' abc.txt
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
/sbin/nologin
[root@rocky-240220 Documents]# awk -F':' '{print $NF}' abc.txt > def.txt
[root@rocky-240220 Documents]# ls
abc.txt  allid.sh  compare.sh  def.txt  httpd.sh  jc.vim  test.sh

[root@rocky-240220 Documents]# awk '{job[$1]++}END{for(i in job) {print i,job[i]}}' def.txt
/bin/sync 1
/bin/bash 2
/sbin/nologin 42
/sbin/halt 1
/sbin/shutdown 1
[root@rocky-240220 Documents]# awk '{job[$1]++}END{for(i in job) {print job[i],i}}' def.txt |sort -nr
42 /sbin/nologin
2 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
[root@rocky-240220 Documents]# awk 'BEGIN{print rand()}'
0.924046
[root@rocky-240220 Documents]# awk 'BEGIN{srand();print rand()}'
0.474112
[root@rocky-240220 Documents]# awk 'BEGIN{srand();for(i=1;i<10;i++)print rand()*100}'
51.5927
20.0355
29.326
52.3549
88.2555
34.2915
94.4795
4.16584
91.3458
[root@rocky-240220 Documents]# awk 'BEGIN{srand();for(i=1;i<10;i++)print int(rand()*100)}'
97
58
38
6
74
59
28
13
90

[root@rocky-240220 Documents]# awk 'NR<5{print length($1)}' def.txt
9
13
13
13
[root@rocky-240220 Documents]# awk 'NR<5{sub("/",":",$1);print $1}' def.txt
:bin/bash
:sbin/nologin
:sbin/nologin
:sbin/nologin
[root@rocky-240220 Documents]# awk 'NR<5{gsub("/",":",$0);print $1}' def.txt
:bin:bash
:sbin:nologin
:sbin:nologin
:sbin:nologin

十七、CA管理相关工具介绍

对称加密算法:加密、解密使用同一算法,效率高

非对称加密算法:每组秘钥对分公钥和私钥,利用公钥加密的文件只能使用私钥解密,反之亦然(使用私钥加密数据目的在于证明发送方身份);效率低

单向哈希算法:任意长度输入,固定长度输出,验证数据完整性

通用加密方法:

十八、openssl签发证书步骤介绍

1,创建私有CA及所需文件

[root@rocky-240220 ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
mkdir: created directory '/etc/pki/CA'
mkdir: created directory '/etc/pki/CA/certs'
mkdir: created directory '/etc/pki/CA/crl'
mkdir: created directory '/etc/pki/CA/newcerts'
mkdir: created directory '/etc/pki/CA/private'
[root@rocky-240220 ~]# touch /etc/pki/CA/index.txt
[root@rocky-240220 ~]# echo 0F > /etc/pki/CA/serial
2,创建CA私钥

[root@rocky-240220 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@rocky-240220 CA]# cat private/cakey.pem                    #查看私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA4KwxnqwyLYZ+4cM6YknLlpIFJqEa82UOOP4M3iVt4bx+TWKm
POOtomGjeDsm4zchHfoAjGyGaMqAmL9r0XCxgTRMbd2ajxP5PkO8yXU37byIEkd/
UKUum2EFLxZogVc7hET8w1tQYCNAly4Fd+Z66fOqXh1jD2SRQm15TqXfNLkjHjXn
WlwKrX/w5f5qjw7CzbB5qJJ/3Dkw/XsWkjq7Jtv1OgwITWNkGSi9H5tP6SSvDBmS
JGk++8prsvhcezA2KEL7nGy34c4nTlkqeHWpKI4/LguYrm/bBR/xnVkkbxWYywkU
/j7wTqYCX5WgkG69dgpx8X0C9OIjT3D7Bzp12QIDAQABAoIBAHq9N4JiuirqzghS
GmQ1wnYooY2/97Q+Ye26xJbbxdLLoghuuziKfYI3axG05wK8TGhO+tu8MhWvg19v
O9y4fxCB3LsslFJT7Bca9Fjuo7ZKB+BMlP4er36NG0LlMARw/n+9HIUxLpDG0XOF
3dDp5f5Hcqxly4dOPpkWq23O6kinUUEUO9tmH/RZGHoXcH9OSZmb24pV23N7fMzm
fTqMI2SzGJYrMkgCxPZ587xxuVF9cGY8Dlv1E+FMwO6RABkxdaUDoe7cxq1lIvaW
uULgVc1q4Pdo36Ornbm8h8Uj9F68BGRi+sjuD3e5aQRhHlZpL7BGfSu3zUxZbefb
TmkuCYECgYEA/x9eQiL4kAmSvi4gpGTz0cPSbdmzhRNt7CCL359t+mpYGFuMOwwS
d22EUoMf6jXFnaZa3YRFLx1di4zVgu0xJ6xN1Vv0taVMQkWC5iMzuxynFcE2M/tG
bRwb+nR5iuk0pGZI+kpmxxabfu3O+qnuFp/BMeazpP+S16uZvuUWIUkCgYEA4XID
0ewalkXLFeiYhRINqgtolozJIUk0ogVNd9nUHGOpqCmvf3AHO/x/bT8yW/mNfPQj
gWEzix1kljhpoecpt0/wUsmBVCtywUrdUXE5miW5imFby8nBOAuBpD9y3piz2Zzv
L/mhvq6QdfJAIB9vp6YdG8n4SWoeNQ64lHTwQBECgYEAnB7tBpnx8+r30svVi+R/
VEl6N2D2u6P1K3+LORCOM6TqPhWfze6ISm9Jf1jgqem4Ac5wYohz8e4Ndb18Vz+h
Sf7mLn+0U4hRD2kMPpsiKAnTsbtn2Q2WvmRqNq0aR8iIP2acmBX5qTGLfHQ4qipd
GZkvl8LvAjSn/rTzQ99a2IkCgYA3FLAyPclRJcQ0mhuJh5unDBqFjegmJciiPUFs
IuBb/02YNHcYX7qkwVAw1Nvs9M/I061JEwKQ3qGQwj+sutnKW9GPqIPcmLD04OGp
4Ev+iXEHijnvVF/M3aLTCl16XTyz0k/uHMOT3vqUlpdsQcH55+/8th/fb/npZKtc
OiXowQKBgBlEIjbOwp2tVKl/76spU+Fhy3YIdbveVhkSHPz6oF/a/EZ0eo3bkV1L
nKKrxvinyQ7rJ/kGarP3wj9V3HvS8HLH8wMt+wqXPWyluvwPo0AHOXLaNwgbYi+o
6vn/A/2qxrbN2zG0Mz8yTrq6hiipSmmlVumv/z0KsFhjUzmWJjOI
-----END RSA PRIVATE KEY-----
3,给CA颁发自签名证书

[root@rocky-240220 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) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:www
Organizational Unit Name (eg, section) []:com
Common Name (eg, your name or your server's hostname) []:www.com
Email Address []:
[root@rocky-240220 CA]# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            7b:3c:bd:c4:cd:3f:a6:5c:04:7e:cb:dd:30:e4:5c:aa:e1:09:53:86
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = beijing, L = beijing, O = www, OU = com, CN = www.com
        Validity
            Not Before: Apr  3 06:23:36 2024 GMT
            Not After : Apr  1 06:23:36 2034 GMT
        Subject: C = CN, ST = beijing, L = beijing, O = www, OU = com, CN = www.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:e0:ac:31:9e:ac:32:2d:86:7e:e1:c3:3a:62:49:
                    cb:96:92:05:26:a1:1a:f3:65:0e:38:fe:0c:de:25:
                    6d:e1:bc:7e:4d:62:a6:3c:e3:ad:a2:61:a3:78:3b:
                    26:e3:37:21:1d:fa:00:8c:6c:86:68:ca:80:98:bf:
                    6b:d1:70:b1:81:34:4c:6d:dd:9a:8f:13:f9:3e:43:
                    bc:c9:75:37:ed:bc:88:12:47:7f:50:a5:2e:9b:61:
                    05:2f:16:68:81:57:3b:84:44:fc:c3:5b:50:60:23:
                    40:97:2e:05:77:e6:7a:e9:f3:aa:5e:1d:63:0f:64:
                    91:42:6d:79:4e:a5:df:34:b9:23:1e:35:e7:5a:5c:
                    0a:ad:7f:f0:e5:fe:6a:8f:0e:c2:cd:b0:79:a8:92:
                    7f:dc:39:30:fd:7b:16:92:3a:bb:26:db:f5:3a:0c:
                    08:4d:63:64:19:28:bd:1f:9b:4f:e9:24:af:0c:19:
                    92:24:69:3e:fb:ca:6b:b2:f8:5c:7b:30:36:28:42:
                    fb:9c:6c:b7:e1:ce:27:4e:59:2a:78:75:a9:28:8e:
                    3f:2e:0b:98:ae:6f:db:05:1f:f1:9d:59:24:6f:15:
                    98:cb:09:14:fe:3e:f0:4e:a6:02:5f:95:a0:90:6e:
                    bd:76:0a:71:f1:7d:02:f4:e2:23:4f:70:fb:07:3a:
                    75:d9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                38:21:31:D7:B7:CB:82:2A:5E:5B:A3:70:21:88:E1:A6:14:61:1A:20
            X509v3 Authority Key Identifier:
                keyid:38:21:31:D7:B7:CB:82:2A:5E:5B:A3:70:21:88:E1:A6:14:61:1A:20

            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         21:48:0c:4e:87:05:bc:7b:04:0e:ee:34:2e:0c:e1:09:bf:5a:
         d1:12:78:32:c0:42:d4:00:ff:0e:04:b0:19:46:a8:0b:45:c5:
         3c:19:ee:bf:86:31:71:0a:0e:c3:8c:bc:62:7f:60:4d:6b:4c:
         71:9c:68:5d:14:80:bc:0e:27:b0:72:f9:d2:57:2d:7a:b2:be:
         bc:3a:7f:ea:9d:9a:5b:34:82:1f:d6:33:25:7d:23:10:0e:af:
         67:42:4a:42:79:f9:7b:6e:be:54:0d:03:15:16:ac:2b:ce:b2:
         83:f8:5d:5e:77:d4:e9:1d:1b:43:77:6c:69:68:22:09:95:9d:
         26:a0:8a:a6:bb:54:9d:62:f1:84:e3:a9:71:ea:ea:87:d0:08:
         aa:95:cc:0a:bf:c0:df:a1:0b:d2:af:98:1d:f4:3f:5c:83:c4:
         ab:a9:bc:35:8e:ca:df:72:7f:f1:ea:7d:6f:ad:41:d7:07:c3:
         1e:4f:69:f0:d1:04:b0:4f:e3:6c:9b:fa:4f:39:9e:57:c4:8a:
         11:82:b5:f6:61:e2:c0:91:36:ac:00:21:3d:46:b4:c5:d8:65:
         1b:39:08:df:75:8c:49:21:66:f1:c9:b6:ef:73:db:36:a1:c1:
         d7:98:a6:81:c7:66:2f:77:45:a5:ce:34:1a:8e:57:97:de:35:
         39:c1:5a:ab
4,用户生成私钥文件

[root@rocky-240220 CA]# mkdir -p /home/data/app1
[root@rocky-240220 ~]# (umask 066;openssl genrsa -out /home/data/app1/app1.key 2048)

5,生成证书申请文件

[root@rocky-240220 ~]# openssl req -new -key /home/data/app1/app1.key -out /home/data/app1/app1.csr

6,CA颁发证书

[root@rocky-240220 ~]# openssl ca -in /home/data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt -days 1000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值