第四周作业

1、使用while read line和/etc/passwd,计算用户id总和。

root@hb-cj-rocky:/home/yuwanhai/myBash# cat id_sum.sh 
#!/bin/bash

sum=0

while read line; do
    uid=$(echo "$line" | awk -F: '{print $3}')
    sum=$((sum + uid))
done < /etc/passwd

echo "用户 ID 总和: $sum"

root@hb-cj-rocky:/home/yuwanhai/myBash# bash id_sum.sh 
用户 ID 总和: 72847

2、总结索引数组和关联数组,字符串处理,高级变量使用及示例。

  • 索引数组

数组名和索引

索引的编号从0开始,属于数值索引

emp[0]=mage
emp[1]=yuwanhai
title=(1 2 3)

echo ${emp[1]}
yuwanhai
---
#显示全部数组
echo ${emp[*]}
mage yuwanhai
---
echo ${emp[@]}
mage yuwanhai
#查看数组数据个数
echo ${#emp[@]}  
2
#删除一个数组
unset num[3]
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${num[*]}
1 2 3 5 6 7 8 9 0

unset 数组名  --删除整个数组
root@hb-cj-rocky:/home/yuwanhai/myBash# unset emp 

数组切片:

[root@centos8 ~]#num=({0..10})
[root@centos8 ~]#echo ${num[*]:2:3}
2 3 4
[root@centos8 ~]#echo ${num[*]:6}
6 7 8 9 10
  • 关联数组

索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持

declare -A ARRAY_NAME 
ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)
!!!关联数组必须先声明再调用
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# declare -A yu
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# yu[yu1]=yuwanhai1
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# yu[yu2]=yuwanhai2
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${yu[*]}
yuwanhai1 yuwanhai2
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${#yu[*]}
2
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${!yu[*]} --取关联数组下标
yu1 yu2

字符串切片

echo ${#var}
6
echo ${var:2:3} --取指定
rin
echo ${var: -3} --取尾
ing

基于模式取子串

#其中word可以是指定的任意字符,自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字

符串开头至第一次出现word字符串(含)之间的所有字符,即懒惰模式,以第一个word为界删左留右

root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# url=https://cn.bing.com/index.com
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${url#*/} --懒惰模式
/cn.bing.com/
---
root@hb-cj-rocky:/home/yuwanhai/myBash/Project11# echo ${url##*/} --贪婪模式
index.com

#同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符,即贪婪模式,以从右向
左的最后一个word为界删右留左
${var%%word*}
${var%%word}

替换

echo ${url/bing/baidu}
https://cn.baidu.com/index.com

删除

#删除var表示的字符串中第一次被pattern匹配到的字符串,懒惰模式

${var/pattern}

字符大小写转换

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

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

root@hb-cj-rocky:/home/yuwanhai/myBash# for i in {1..10}; do                                  echo $RANDOM >> rand.txt
done
root@hb-cj-rocky:/home/yuwanhai/myBash# cat max_min.sh 
#!/bin/bash
file="/home/yuwanhai/myBash/rand.txt"
min=$(head -n1 $file)
max=$(head -n1 $file)
while read line;do
	[ $max -lt $line  ] && max=$line
	[ $min -gt $line  ] && min=$line
done<$file
echo max=$max
echo min=$min
root@hb-cj-rocky:/home/yuwanhai/myBash# bash max_min.sh 
max=26389
min=196

4、使用递归调用,完成阶乘算法实现。

root@hb-cj-rocky:/home/yuwanhai/myBash# cat factorial.sh 
#!/bin/bash
factorial() {
    if [ "$1" -eq 0 ] || [ "$1" -eq 1 ]; then
        echo 1
    else
        local result=$(( $1 * $(factorial $(expr $1 - 1)) ))
        echo $result
    fi
}

factorial $1
root@hb-cj-rocky:/home/yuwanhai/myBash# bash factorial.sh 10
3628800

5、解析进程和线程的区别?

一个进程由多个线程组成,一个进程必须有一个线程。

进程是一个程序的副本是被载入内存的一个指令集合分配资源的单位。

线程是进程中的⼀个执⾏单元。

6、解析进程的结构。

进程一般由程序、数据集合和进程控制块三部分组成。

7、结合进程管理命令,说明进程各种状态。

image-20240428175247692

image-20240428180704108

root@hb-cj-rocky:/home/yuwanhai/myBash# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  1.0 171796  8120 ?        Ss   Apr27   0:02 /usr/lib/systemd/system
root           2  0.0  0.0      0     0 ?        S    Apr27   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Apr27   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Apr27   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   Apr27   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   Apr27   0:00 [netns]

8、说明IPC通信和RPC通信实现的方式。

同一主机

pipe 管道,单向传输
socket  套接字文件,双工通信
Memory-maped file  文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
shm shared memory 共享内存
signal 信号
Lock  对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开
semaphore 信号量,一种计数器, 

不同主机:socket=IP和端口号

RPC remote procedure call

MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

9、总结Linux,前台和后台作业的区别,并说明如何在前台和后台中进行状态转换。

前台作业:指当前在终端中运行的命令

后台作业:跟随系统启动终端关闭不会影响命令。

前台–>后台:运行中:ctrl+z 未运行:command&

后台–>前台:fg %[作业号]

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

  • 单内核设计:把所有功能集成于同一个程序(Linux)
  • 微内核设计:每种功能使用一个单独的子系统实现(Windows、Solaris)

11、总结rocky 启动流程,grub工作流程

1 POST加电自检

2 BOOTLOADER
grub0.97
1阶段:mbr 0 扇区的446字节
1.5阶段: 0扇区后面续空间
2阶段: /boot/grub/
grub.conf 定义
内核 root=xxxx
initramfs.img 加载rootfs,需要驱动,压缩文件,包括了个精简版的rootfs

grub-install

3 kernel
1)硬件
2)加载根文件系统

4 /sbin/init

12、手写chkconfig服务脚本,可以实现服务的开始,停止,重启。

# 服务名称
SERVICE_NAME="my_service"

# 启动命令
START_COMMAND="/path/to/start_command"

# 停止命令
STOP_COMMAND="/path/to/stop_command"

# 重启命令
RESTART_COMMAND="$START_COMMAND && $STOP_COMMAND"

# 检查服务状态
check_status() {
    if [ -f /var/run/${SERVICE_NAME}.pid ]; then
        echo "running"
    else
        echo "stopped"
    fi
}

# 启动服务
start_service() {
    $START_COMMAND
}

# 停止服务
stop_service() {
    $STOP_COMMAND
}

# 重启服务
restart_service() {
    $RESTART_COMMAND
}

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

13、总结systemd服务配置文件

systemd服务配置文件由三部分组成

[Unit]:定义与Unit类型相关的通用选项,用于提供unit描述消息,unit行为,依赖关系

[Service]:与特定类型相关的专用选项

[Install]:定义由systemclt enable/disable命令在实现服务开机启动或不启动时用到的一些选项

14、总结system启动流程

硬件启动POST

POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内

存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测

主板的ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出

程序,系统信息设置、开机加电自检程序和系统启动自举程序等

主板的RAM:CMOS互补金属氧化物半导体,保存各项参数的设定,按次序查找引导设备,第一个有引

导程序的设备为本次启动设备

启动加载器 bootloader

bootloader: 引导加载器,引导程序

  • ​ Windows: ntloader,仅是启动OS
  • ​ Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装 载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

Linux的bootloader

  • LILO:LInux LOader,早期的bootloader,功能单一
  • GRUB: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用GRUB 2.02

GRUB 启动阶段

  • primary boot loader :

​ 1st stage:MBR的前446个字节

​ 1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

  • secondary boot loader :2nd stage,分区文件/boot/grub/

启动文件放在:root@hb-cj-rocky:~# vim /boot/grub/grub.cfg

15、总结awk工作原理,awk命令,选项,示例。

工作原理:

  • 读输入文件之前执行的代码段(由BEGIN关键字标识)。
  • 主循环执行输入文件的代码段。
  • 读输入文件之后的代码段(由END关键字标识)。

awk命令格式:

image-20240428190800150

内置变量

awk中的变量分为:内置和自定义变量

image-20240425184743797

image-20240425184750416

image-20240425184813768

root@hb-cj-rocky:~# x=":" ; awk -v FS="$x" -v OFS="_"  'BEGIN{print "Begin"}{print $1,$3}END{print "End"}' /etc/passwd
root_0
bin_1

root@hb-cj-rocky:~# x=":" ; awk -v FS="$x"  'BEGIN{print "Begin"}{print $1,$3}END{print "End"}' /etc/passwd
##将分隔符作为可以活动的;

awk -F: 'BEGIN{print "Begin"}{print $1,$3}END{print "End"}' /etc/passwd

image-20240425185250435

root@hb-cj-rocky:~# cat a .txt 
a b c;1 2 3;x y z
root@hb-cj-rocky:~# awk -v RS=";" '{print $1}' a.txt 
a
1
x

image-20240425185433752

root@hb-cj-rocky:~# awk -v RS=";" -v ORS="+++" '{print $1}' a.txt 
a+++1+++x+++root@hb-cj-rocky:~# ^C

image-20240425185647145

Mounted0%0%3%3%24%2%0%root@hb-cj-rocky:~# df | awk '{print $(NF-1)}'
Mounted
0%
0%
3%
3%
24%
2%
0%
##不换行在一行输出 print换printf

第网络连接最多的IP

root@hb-cj-rocky:~# ss -nt
State     Recv-Q     Send-Q         Local Address:Port           Peer Address:Port     Process     
ESTAB     0          52                 10.0.0.11:22                 10.0.0.1:2129                 
root@hb-cj-rocky:~# ss -nt | awk '{print $(NF-1)}'
Peer
10.0.0.11:22
root@hb-cj-rocky:~# ss -nt | awk '{print $(NF-1)}'| awk -F: '{print $1}'
Peer
10.0.0.11

image-20240425190840081

root@hb-cj-rocky:~# ss -nt | awk '{print NR, $(NF-1)}'| awk -F: '{print $1}'
1 Peer
2 10.0.0.11

image-20240425190932844

root@hb-cj-rocky:~# awk '{print FNR}' /etc/passwd /root/a.txt 
1
2
3
4
5
6
7
8
1

image-20240425191310409

root@hb-cj-rocky:~# awk '{print FNR,FILENAME}' /etc/passwd /root/a.txt 
1 /etc/passwd
2 /etc/passwd
3 /etc/passwd
4 /etc/passwd
5 /etc/passwd
6 /etc/passwd

自定义变量
1,-v varname=value 变量名区分字符大小写
2,在program中直接定义,以下定义了3个自定义变量,其实形式像编程语言一样,定义的时候用分号。打印变量跟之前一样,用逗号隔开,注意,不需要用美元符号
3,也可以引用命令行定义的变量

实例:

root@hb-cj-rocky:~# awk -v "name=N86" 'BEGIN{print name}'
N86

root@hb-cj-rocky:~# awk -v "name=N86" 'BEGIN{print name;name="YU";print name}'
N86
YU

printf

printf使用的转义字符

转义字符定义
c字符
s字符串
d十进制整数
ld十进制长整数
u十进制无符号整数
lu十进制无符号长整数
x十六进制整数
lx十六进制长整数
o八进制整数
lo八进制长整数
e用科学记数法(e 记数法)表示的浮点数
f浮点数
g选用e或f中较短的一种形式

printf的修饰符

字符定义
-左对齐修饰符
#显示8 进制整数时在前面加个0 显示16 进制整数时在前面加0x
+显示使用d 、e 、f 和g 转换的整数时,加上正负号+或-
0用0而不是空白符来填充所显示的值

printf的格式说明符

格式说明符功能
%c打印单个ASCII 字符 printf(“The character is %c\n”,x) 输出: The character is A
%d打印一个十进制数 printf(“The boy is %d years old\n”,y) 输出:The boy is 15 years old
%e打印数字的e 记数法形式 printf(“z is %e\n”,z) 打印: z is 2.3e+0 1
%f打印一个浮点数 printf(“z is %f\n”, 2.3 * 2) 输出: z is 4.600000
%o打印数字的八进制 printf(“y is %o\n”,y) 输出:z is 17
%s打印一个字符串 print(“The name of the culprit is %s\n”,$1) 输出:The name of the culprit is Bob Smith
%x打印数字的十六进制值 printf(“y is %x\n”,y) 输出:x is f
root@hb-cj-rocky:~# awk -F: '{printf "%+20s\n",$1}' /etc/passwd
                root
                 bin
              daemon
                 adm
                  lp
                sync
            shutdown


root@hb-cj-rocky:~# awk -F: '{printf "%+20s  || %s\n",$1,$3}' /etc/passwd
                root  || 0
                 bin  || 1
              daemon  || 2
                 adm  || 3
                  lp  || 4
                sync  || 5


root@hb-cj-rocky:~# awk -F: '{printf "%+20s  || %f\n",$1,$3}' /etc/passwd
                root  || 0.000000
                 bin  || 1.000000
              daemon  || 2.000000
                 adm  || 3.000000

root@hb-cj-rocky:~# awk -F: '{printf "%+20s  || %d\n",$1,$3}' /etc/passwd
                root  || 0
                 bin  || 1
              daemon  || 2
                 adm  || 3
                  lp  || 4

16、总结awk的数组,函数。

## 数组格式

arr[idx]
arr[idx] = value

root@hb-cj-rocky:~# awk 'BEGIN{A[0]="yu1";A[1]="yu2";for(c in A){print c":"A[c]}}'
0:yu1
1:yu2
root@hb-cj-rocky:~# awk '!line[$0]++{print $0}' a.txt 
1 2 3 4 5 6
a
b
c
d
e
f
g
ca


root@hb-cj-rocky:~# awk '!line[$0]++{print $0}' a.txt --文本去重输出
1 2 3 4 5 6
a
b
c
d
e
f
g
ca

##统计一个ip或者一个字符出现的次ov
root@hb-cj-rocky:~# ss -nta | awk '!/State/{status[$1]++}END{for(i in status){print i,status[i]}}'
LISTEN 4
ESTAB 1

函数

awk的函数分为内置和自定义函数

常见内置函数

数值处理

rand():返回1和0之间随机数

srand():配置rand函数,生成随机数种子

int():返回整数

字符串处理

length(X):返回指定字符串长度

sub(r,s,x):对x字符串搜索r表示模式匹配的内容,并将第一个匹配内容替换为s

gsub(r,s,x):对x字符串搜索r,并将匹配的所有内容替换为s

split(s,array,r):对r为分隔符,切割字符串s,并将切割后的结果保存至array数组

自定义函数

root@hb-cj-rocky:~# vim func.awk
root@hb-cj-rocky:~# cat func.awk 
function max(x,y){
	x>y?var=x:var=y;
	return var
	}
BEGIN{print max(a,b)}
root@hb-cj-rocky:~# awk -v a=10 -v b=20 -f func.awk 
20

root@hb-cj-rocky:~# sort a.txt 
a
a
a
b
b
c
ca
d
d
e
e
e
e
f
g
root@hb-cj-rocky:~# sort a.txt |uniq -c
      3 a
      2 b
      1 c
      1 ca
      2 d
      4 e
      1 f
      1 g

17、总结ca管理相关的工具,根据使用场景总结示例。

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

image-20240428092429052

填写国家编码

##查看自签名
root@hb-cj-rocky:~# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            06:a0:06:58:d4:f7:11:f4:26:a2:a8:93:59:0e:d2:62:7e:1a:84:5e
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = beijing, L = beijing, O = mage, OU = n86, CN = www.magedu.org
        Validity
            Not Before: Apr 27 15:46:51 2024 GMT
            Not After : Apr 25 15:46:51 2034 GMT
        Subject: C = CN, ST = beijing, L = beijing, O = mage, OU = n86, CN = www.magedu.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:db:83:e8:d0:50:96:44:23:3f:50:82:9c:2e:58:
                    04:39:43:2c:5f:75:48:92:c8:df:4d:d9:90:eb:de:

root@hb-cj-rocky:/etc/pki# mkdir /data

root@hb-cj-rocky:/etc/pki# (umask 066; openssl genrsa -out /data/test.key 2048)

root@hb-cj-rocky:/etc/pki# 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) []:beijing
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:magedu
Organizational Unit Name (eg, section) []:n87
Common Name (eg, your name or your server's hostname) []:www.n86.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

#生成用户证书
root@hb-cj-rocky:/etc/pki# 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: 15 (0xf)
        Validity
            Not Before: Apr 27 16:19:44 2024 GMT
            Not After : Aug  5 16:19:44 2024 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = mage
            organizationalUnitName    = n86-class
            commonName                = www.n86.om
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Subject Key Identifier: 
                19:E2:AE:97:81:B2:BC:D7:8A:CF:2B:EB:AE:92:41:AA:17:EC:C9:27
            X509v3 Authority Key Identifier: 
                E2:2D:FC:DD:02:B8:61:54:F7:42:0A:21:E0:3D:0D:2C:14:A2:04:8F
Certificate is to be certified until Aug  5 16:19:44 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

root@hb-cj-rocky:/etc/pki# tree /etc/pki/CA/
/etc/pki/CA/
├── cacert.pem
├── certs
│   └── test.crt
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 0F.pem
├── private
│   └── cakey.pem
├── serial
└── serial.old

4 directories, 9 files

吊销证书

root@hb-cj-rocky:/etc/pki# openssl ca -revoke /etc/pki/CA/newcerts/0F.pem
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 0F.
Data Base Updated

root@hb-cj-rocky:/etc/pki# cat CA/index.txt
R	240805161944Z	240427162912Z	0F	unknown	/C=CN/ST=beijing/O=mage/OU=n86-class/CN=www.n86.om


root@hb-cj-rocky:/etc/pki# openssl crl -in /etc/pki/CA/crl.pem -noout -text
Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = beijing, L = beijing, O = mage, OU = n86, CN = www.magedu.org
        Last Update: Apr 27 16:31:38 2024 GMT
        Next Update: May 27 16:31:38 2024 GMT
        CRL extensions:
            X509v3 CRL Number: 
                1
Revoked Certificates:
    Serial Number: 0F
        Revocation Date: Apr 27 16:29:12 2024 GMT
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        7a:1f:1d:2d:56:84:0b:fc:69:9b:88:17:0b:f9:26:dd:ed:ff:
        6a:d2:19:5a:c8:ad:9f:46:b4:6a:9d:9e:bf:b4:ba:6d:f2:38:
        c2:57:33:f0:cf:2f:24:83:ac:21:90:e8:70:13:80:f2:a0:af:
        2f:56:67:a3:f3:41:c8:d4:97:85:88:ce:a0:4c:38:13:d9:bf:
        7b:f7:3b:ef:0c:6b:5b:34:df:ed:37:33:fb:a5:6e:39:c9:d7:
        5e:bb:3e:a8:64:4c:72:87:fa:b7:d5:0b:6e:f0:8b:9a:a7:aa:
        d0:de:69:29:8e:46:2f:5c:b6:39:2e:84:58:d1:dd:4a:23:37:
        f9:a4:f1:9f:c7:9b:ad:dd:00:55:7b:9c:0f:8b:3c:ac:35:d4:
        58:b6:8d:2a:63:be:05:e2:8c:28:8a:23:e6:a2:ef:ed:d3:7e:
        45:4c:4d:86:18:ec:c4:b9:11:7b:e4:fc:42:01:ae:26:57:35:
        74:af:99:1d:30:d4:9a:b8:37:83:31:e0:1d:31:95:1d:ea:99:
        5a:70:5d:28:79:12:25:b2:ed:2a:28:7a:24:67:2e:fa:5f:64:
        46:88:90:44:b6:a4:7c:df:5e:eb:fc:53:c8:8e:8e:aa:9b:55:
        7e:9c:47:06:15:63:8c:db:eb:8e:79:17:98:27:2a:86:c0:b9:
        bc:4f:01:6c

18、总结对称加密和非对称加密算法和用openssl签发证书步骤

​ 对称加密与解密密码相同、加密解密速度快,用户双方不能确认身份;

非对称加密算法:一共有四把钥匙,分别为信息传递双方的公钥与私钥,加密解密速度慢不能用于大量文件传输,用户双方能确认身份,一般用于传递少量信息如:对称加密的密钥;

openssl签发证书步骤:

  1. 生成私钥文件
  2. 生成证书请求文件
  3. 使用CA根证书和CA私钥,对证书请求进行签名,生成最终的证书文件
  4. 生成客户端私钥
  5. 生成客户端证书申请文件
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值