6.1笔记

1. Bash脚本数组定义声明及引用
array_t=(1 2 3 4) #命令行中定义并测试
array_t1=(1,2,3,4) #使用逗号则做为一个整体
echo $array_t #默认打印第一个下标的变量
echo ${array_t[2]}
echo ${array_t[-2]}
echo $array_t1
2.普通数组,自定义索引位置
关联数组
关联数组支持字符串作为数组索引。使用关联数组必须先使用declare -A声明它
数组截取、替换
array_t=(1 2 3 4) #命令行中定义并测试
array_t1=(1,2,3,4) #使用逗号则做为一个整体
echo $array_t #默认打印第一个下标的变量
echo ${array_t[2]}
echo ${array_t[-2]}
echo $array_t1
array_t2[1]=1
array_t2[2]=2
array_t2[3]=3
array_t2[4]=4
echo ${array_t2[*]} #打印所有值
echo ${array_t2[@]} #也可用@符号
echo ${!array_t2[*]} #! 打印索引号,下标
echo ${!array_t2[@]} #也可用@符号
echo ${#array_t2[2]} #下标变量长度
echo ${#array_t2[*]} #显示数组中的元素个数(只统计值不为空的元素)
echo ${#array_t2[@]}
declare -A array_t3 # 声明之后就可以给其赋值了
array_t3=([name1]=westfile [name2]=linkpark)
echo ${array_t3[name1]} #name1 name2是关联数组的index
echo ${array_t3[name2]}
array_t3[name3]=u2 #也可分开赋值
array_t3[name4]=coldplay
echo ${array_t3[*]}
数组截取、替换
array_t=(1 2 3 4) #命令行中定义并测试
array_t1=(1,2,3,4) #使用逗号则做为一个整体
echo $array_t #默认打印第一个下标的变量
echo ${array_t[2]}
echo ${array_t[-2]}
echo $array_t1
array_t2[1]=1
array_t2[2]=2
array_t2[3]=3
array_t2[4]=4
echo ${array_t2[*]} #打印所有值
echo ${array_t2[@]} #也可用@符号
echo ${!array_t2[*]} #! 打印索引号,下标
echo ${!array_t2[@]} #也可用@符号
echo ${#array_t2[2]} #下标变量长度
echo ${#array_t2[*]} #显示数组中的元素个数(只统计值不为空的元素)
echo ${#array_t2[@]}
declare -A array_t3 # 声明之后就可以给其赋值了
array_t3=([name1]=westfile [name2]=linkpark)
echo ${array_t3[name1]} #name1 name2是关联数组的index
echo ${array_t3[name2]}
array_t3[name3]=u2 #也可分开赋值
array_t3[name4]=coldplay
echo ${array_t3[*]}
for循环遍历数组
2. Bash脚本信号捕捉
Linux利用信号与系统中的进程进行通信, kill -9
生成信号,bash shell允许用键盘上的组合键生成两种基本的Linux信号。 这个特性在需要停止或暂停程序时
很方便
中断进程
sleep 100
ctrl + c
暂停进程,可在进程运行期间暂停进程
sleep 100
ctrl + z
array_t4=(1 2 3 4 5 6)
echo ${array_t4[*]:2:2} #从数组全部元素中第2个元素向后截取2个元素出来
array_t41=${array_t1[*]:2:2} #截取并赋值
array_t42=${array_t1[*]/5/6} #数组中的5替换为6
array_t5=(one two three four five)
for循环遍历数组
for i in ${array_t5[*]};do
echo $i
done
for i in ${!array_t5[*]};do #i变成数组index的方法
echo ${array_t5[$i]}
done
#常用的三种方法
array_t6=($(ls /boot))
for i in ${array_t6[*]};do #以数组值的方式直接遍历数组
echo $i
done
for ((i=0;i<${#array_t6[*]};i++));do # 以数组变量个数的方式遍历数组
echo ${array_t6[$i]}
done
for i in ${!array_t6[*]};do # 以数组index的方式遍历数组
echo ${array_t6[$i]}
done
2. Bash脚本信号捕捉
Linux利用信号与系统中的进程进行通信, kill -9
生成信号,bash shell允许用键盘上的组合键生成两种基本的Linux信号。 这个特性在需要停止或暂停程序时
很方便
中断进程
sleep 100
ctrl + c
暂停进程,可在进程运行期间暂停进程
sleep 100
ctrl + z
通过 ps 可查看进程的状态
捕获信号
信号出现时捕获它们并执行其他命令 。trap命令允许来指定shell 脚本要监看并从shell中拦截信号
使用trap来忽略信号,并控制脚本的行为
more s1.sh
#!/bin/bash
# Testing signal trapping
#
trap "echo ' Sorry! I have trapped Ctrl-C' " SIGINT
#
echo This is a test script
#
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
echo "This is the end of the test script"
#
#trap命令会在每次检测到SIGINT信号时显示一行简单的文本消息。捕获这些信号会阻止用户用bash shell组合
键Ctrl+C来停止程序;每次使用Ctrl+C组合键,脚本都会执行trap命令中指定的echo语句,而不是处理该信号并
允许shell停止该脚本
捕获脚本退出
#除了在shell脚本中捕获信号,也可以在shell脚本退出时进行捕获。这是在shell完成任务时执行命令的一种简
便方法;捕获shell脚本的退出,只要在trap命令后加上EXIT信号
more s2.sh
#!/bin/bash
# Trapping the script exit
#
trap "echo Goodbye..." EXIT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
#因为SIGINT信号并没有出现在trap命令的捕获列表中,当按下Ctrl+C组合键发送SIGINT信号时,脚本就退出
了。但在脚本退出前捕获到了EXIT,于是shell执行了trap命令。
修改或移除捕获
#在脚本中的不同位置进行不同的捕获处理,只需重新使用带有新选项的trap命令
more s3.sh
#!/bin/bash
# Modifying a set trap
#
trap "echo ' Sorry... Ctrl-C is trapped.'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
trap "echo ' I modified the trap!'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Second Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
#修改了信号捕获之后,脚本处理信号的方式就会发生变化。但如果一个信号是在捕获被修改前接收到的,那么脚
本仍然会根据最初的trap命令进行处理
#修改了信号捕获之后,脚本处理信号的方式就会发生变化。但如果一个信号是在捕获被修改前接收到的,那么脚
本仍然会根据最初的trap命令进行处理
more s31.sh
#删除已设置好的捕获。只需要在trap命令与希望恢复默认行为的信号列表之间加上两个破折号就行了
#!/bin/bash
# Removing a set trap
#
trap "echo ' Sorry... Ctrl-C is trapped.'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
# Remove the trap
trap -- SIGINT
echo "I just removed the trap"
#
count=1
while [ $count -le 5 ]
do
echo "Second Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
#
3. Openssl的基本应用
openssl enc #enc进行加密
openssl enc -des3 -salt -a -in file -out file.des3 #加密文件;-des3加密算法,-salt默认参数,-a以
base流形式加密(默认),-in需要加密的文件,-out输出加密文件
openssl enc -des3 -d -salt -a -in file.des3 -out file #解密文件;-d解密
md5sum file #提取特征码
openssl dgst -md5 file #dgst关键字,-md5加密算法
openssl passwd #生成密文的密码
openssl passwd -1 #在kickstart脚本中使用过
openssl passwd -1 #两次生成不同,它会随机生成
openssl passwd -1 -salt xxx #指定salt(关键字)生成密码相同,字母可替换
openssl rand #生成随机密码
openssl rand -base64 12 #生成12位的随机数
openssl rand -base64 16
openssl genrsa #生成指定长的对称密钥
openssl genrsa -out file2048.key #生成大小为2048bit的file2048.key密钥文件
openssl rsa -in file2048.key -pubout #生成公钥
cat file2048.key
openssl req -new -x509 -key server512.key -out server.crt -days 365 #X.509是一种非常通用的证书格
式。所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合
X.509标准的应用
cat server.crt
openssl x509 -text -in server.crt #通过文本方式查看证书
4. Ca及Openssl应用
为了便于测试,CA服务器和WEB服务器的安装配置在一台服务器进行,客户端用windows
1.CA服务器创建私有CA请收并颁发
rpm -qa openssl && yum install openssl
cd /etc/pki/CA/
umask 077;openssl genrsa -out private/cakey.pem 4096 #genrsa 使用rsa算法生成密钥,4096 生
成一个4096位的密钥
2.自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365 #req 生成证书签署请
求,-news 新请求,-509 专门用于生成自签署证书,-days 有效天数
3.初始化环境(只有第一次创建CA时,才需要做此步骤)
cd /etc/pki/CA/
touch index.txt
echo 00 > serial #指定序列号从那个数字开始
4.把cacert.pem 文件拷贝至windows客户端
5.Web节点申请证书,为私钥请求证书创建单独目录便于存放
mkdir -p /etc/httpd/conf.d/ssl
cd /etc/httpd/conf.d/ssl
umask 077;openssl genrsa -out httpd.key 4096
6.生成证书签署请求
cd /etc/httpd/conf.d/ssl
openssl req -new -key httpd.key -out httpd.csr
7.将签署的请求文件发送给CA服务器
cp httpd.csr /etc/pki/CA/
8.CA签署证书
openssl ca -in httpd.csr -out httpd.crt -days 365
9.将签署好的证书发回给Web Server申请者
cp certs/httpd.crt /etc/httpd/conf.d/ssl/
cp cacert.pem /etc/httpd/conf.d/ssl/
10.Web节点配置httpd 支持使用ssl,及使用证书
yum install httpd mod_ssl -y
vi /etc/httpd/conf.d/ssl.conf #修改ssl支持
SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt #105行 修改为证书保存路径
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key #112行 修改为私有密钥保存路径
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem #127行 修改CA证书保存路径
systemctl restart httpd
11.在网页中显示需要加代码
vi /etc/httpd/conf.d/ssl.conf
shift+g
在</VitualHost>后面添加
DocumentRoot "/var/www/html/"
ServerName lp.com:443
<Directory "/var/www/html/">
AllowOverride All
Options None
require all granted
当然 域名名字必须提前在/etc/hosts 下修改好
在客户机上面压实在hosts下修改
12.客户端测试
把第4步的文件双击进行安装

猜你喜欢

转载自www.cnblogs.com/lp--/p/9120973.html
6.1