[工具] Shell 批量检测服务器 TCP 端口的联通状态 (telnet 版)

介绍:

作者:朱明宇
名称:批量检测服务器 TCP 端口的联通状态
作用:批量检测服务器 TCP 端口的联通状态,并将此服务器无法联通的端口存储到 $checklist 文件里

使用方法:
1. 将此脚本和端口清单 $portlist 文件放在同一目录下
2. 端口清单 $portlist 每一个端口占用一行,格式为:<要联通端口号对应的 IP 地址>:<要联通的端口号>:<端口功能>,并和此脚本放在同一目录下
3. 在此脚本的分割线内写入相应的内容
4. 给此脚本添加执行权限
5. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <脚本名> <服务器 IP 地址 1> <服务器 IP 地址 2> ……

脚本分割线里的变量:
1. portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件
2. checklist=tcp_ports_checklist.txt #存放测试结果的文件

注意:
1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 此脚本会清空 $checklist
3. 执行此脚本前确保 telnet 命令已经安装
4. 执行此脚本可能有些慢

脚本:

#!/bin/bash

####################### Separator ########################

portlist=tcp_ports.txt
checklist=tcp_ports_checklist.txt

####################### Separator ########################

echo  > $checklist
maxnum=`cat $portlist | wc -l`

for hosts in $*
do

        echo $hosts >> $checklist

        for i in `seq 1 $maxnum`
        do

                ips=`sed -n $[i]p $portlist | awk -F':' '{print $1}'`
                ports=`sed -n $[i]p $portlist | awk -F':' '{print $2}'`
                remarks=`sed -n $[i]p $portlist | awk -F':' '{print $3}'`

                ssh $hosts "(sleep 1;) | telnet $ips $ports 2>&1" | grep 'timed out' >> $checklist

                if [ $? == 0 ];then
                        echo "`sed -n $[i]p $portlist`" >> $checklist
                        echo >> $checklist
                fi

        done

        echo >> $checklist

done

[命令] Linux 命令 sed (修改和打印文本的行)

内容目录:

内容一:sed 格式

内容二:sed 选项

内容三:sed 的参数

内容四:sed 的使用案例
4.1 案例一:使用 p 参数打印某一行数据
4.1.1 在 test.txt 文本里打印第二行的数据
4.1.2 在 test.txt 文本里打印第二行到第四行的数据
4.1.3 在 test.txt 文本里打印最后一行的数据
4.1.4 在 test.txt 文本里打印包含 eternalcenter 的数据
4.1.5 在 test.txt 文本里打印以 eternalcenter 结尾的数据
4.1.6 在 test.txt 文本里输出总行数
4.1.7 在 test.txt 文本里输出奇数行
4.1.8 在 test.txt 文本里输出偶数行
4.2 案例二:使用 a 参数在某一行下面追加一行数据
4.2.1 在 test.txt 文本里在第二行下面追加一行 eternalcenter
4.2.2 在 test.txt 文本里在 abc 那一行下面添加一行 eternalcenter
4.2.3 在 test.txt 文本里在以 a 开头的行下面添加 eternalcenter
4.2.4 在 test.txt 文本里在以 [a] 开头的行下面添加 eternalcenter
4.2.5 在 test.txt 文本里最后一行下面添加 eternalcenter
4.3 案例三:使用 i 参数在某一行上面插入一行数据
4.3.1 在 test.txt 文本里在第二行上面插入一行 eternalcenter
4.3.2 在 test.txt 文本里在 abc 那一行上面添加一行 eternalcenter
4.3.3 在 test.txt 文本里在以 a 开头的行上面添加 eternalcenter
4.3.4 在 test.txt 文本里在以 [a] 开头的行上面添加 eternalcenter
4.3.5 在 test.txt 文本里最后一行上面添加 eternalcenter
4.4 案例四:使用 c 参数替换某一行数据
4.4.1 在 test.txt 文本里将第二行替换成 eternalcenter
4.4.2 在 test.txt 文本里将 abc 那一行替换成 eternalcenter
4.4.3 在 test.txt 文本里将以 a 开头的那一行替换成 eternalcenter
4.4.4 在 test.txt 文本里将以 [a] 开头的那一行替换成 eternalcenter
4.4.5 在 test.txt 文本里将以 eternalcentre 开头的那一行替换成 eternalcenter ALL=(ALL) NOPASSWD: ALL
4.5 案例五:使用 d 参数删除某一行
4.5.1 在 test.txt 文本里删除第二行
4.5.2 在 test.txt 文本里删除包含 abc 的那一行
4.5.3 在 test.txt 文本里删除以 a 开头的那一行
4.5.4 在 test.txt 文本里删除以 [a] 开头的那一行
4.5.5 在 test.txt 文本里删除第二行到第四行
4.6 案例六:使用 s 参数替换某一行某些数据
4.6.1 在 test.txt 文本里将所有行的第一个 eternalcentre 换成 eternalcenter
4.6.2 在 test.txt 文本里将所有行的所有 eternalcentre 换成 eternalcenter
4.6.3 在 test.txt 文本里将包含 eternalcentre 的行换成 eternalcenter
4.6.4 在 test.txt 文本里将第三行的第二个 eternalcentre 换成 eternalcenter
4.6.5 在 test.txt 文本里在所有行前面添加 eternalcenter
4.6.6 在 test.txt 文本里将第二行替换成 eternalcenter
4.6.7 在 test.txt 文本里将最后一行替换成 eternalcenter
4.6.8 在 test.txt 文中里将第二到第三行替换成 eternalcenter
4.6.9 在 test.txt 文本里将 eternalcenter 前面的数据和后面的数据对调位置
4.6.10 在 test.txt 文本里删除每行的第一个字符和最后一个字符
4.6.11 在 test.txt 文本里删除每行的第二个字符和最后一个字符
4.6.12 在 test.txt 文本里删除所有的数字和空格
4.6.13 在 test.txt 文本里将所有的大写字母都添加括号
4.6.14 在 test.txt 文本里给第七行和第九行前面添加 “#”
4.6.15 在 test.txt 文本里删除第一个空格
4.7 案例七:使用 h、H、g、G 参数复制和粘贴
4.7.1 sed 命令的工作原理
4.7.2 h、H、g、G、d、D 参数的讲解
4.7.2.1 h、H、g、G、d、D 参数的作用简介
4.7.2.2 h、H、g、G、d、D 的功能示意图
4.7.3 h、H、g、G、d、D 的使用案例
4.7.3.1 将第一行的数据添加到第三行后面
4.7.3.2 将第一行的数据替换第三行
4.7.3.3 将第一行和第二行的数据添加到第三行后面
4.7.3.4 将第一行和第二行的数据替换第三行
4.7.3.5 将第一个以 a 开头的行的数据添加到第三行后面
4.7.3.6 将第一个和第二个以 a 开头的行的数据添加到第三行后面
4.8 案例八:sed 一次匹配多个参数

具体的内容:

内容一:sed 格式

# sed <option> <parameter> <file>

内容二:sed 选项

1) -n 或 –quiet 或 –silent 仅显示处理后的内容,没处理的内容就不显示了
2) -i 实现数据的变更
3) -e <脚本> 或 –expression=<脚本> 以指定的脚本来处理输入的文本
4) -r 支持扩展正则
5) -f <脚本文件> 或 –file=<脚本文件> 以指定的脚本文件来处理输入的文本
6) -h 或 –help 显示帮助内容
7) -V 或 –version 显示版本信息

内容三:sed 的参数

1) p 打印某一行的数据
2) a 在某一行下面追加一行的数据
3) i 在某一行上面插入一行的数据
4) c 替换某一行的数据
5) d 删除某一行
6) s 替换某一行的某些数据
7) h、H、g、G 复制和粘贴某些行的数据

内容四:sed 的使用案例
4.1 案例一:使用 p 参数打印某一行数据
4.1.1 在 test.txt 文本里打印第二行的数据

# sed -n 2p test.txt

4.1.2 在 test.txt 文本里打印第二行到第四行的数据

# sed -n 2,4p test.txt

4.1.3 在 test.txt 文本里打印最后一行的数据

# sed -n '$p' test.txt

4.1.4 在 test.txt 文本里打印包含 eternalcenter 的数据

# sed -n '/eternalcenter/p' test.txt

4.1.5 在 test.txt 文本里打印以 eternalcenter 结尾的数据

# sed -n '/eternalcenter$/p' test.txt

4.1.6 在 test.txt 文本里输出总行数

# sed -n $= test.txt

4.1.7 在 test.txt 文本里输出奇数行

# sed -n 'p;n' test.txt

4.1.8 在 test.txt 文本里输出偶数行

# sed -n 'n;p' test.txt

4.2 案例二:使用 a 参数在某一行下面追加一行数据
4.2.1 在 test.txt 文本里在第二行下面追加一行 eternalcenter

# sed "2a eternalcenter" test.txt

4.2.2 在 test.txt 文本里在 abc 那一行下面添加一行 eternalcenter

# sed "/abc/a eternalcenter" test.txt

4.2.3 在 test.txt 文本里在以 a 开头的行下面添加 eternalcenter

# sed "/^a/a eternalcenter" test.txt

4.2.4 在 test.txt 文本里在以 [a] 开头的行下面添加 eternalcenter

# sed "/^\[a\]/a eternalcenter" test.txt

4.2.5 在 test.txt 文本里最后一行下面添加 eternalcenter

# sed "$a eternalcenter" test.txt

4.3 案例三:使用 i 参数在某一行上面插入一行数据
4.3.1 在 test.txt 文本里在第二行上面插入一行 eternalcenter

# sed "2i eternalcenter" test.txt

4.3.2 在 test.txt 文本里在 abc 那一行上面添加一行 eternalcenter

# sed "/abc/i eternalcenter" test.txt

4.3.3 在 test.txt 文本里在以 a 开头的行上面添加 eternalcenter

# sed "/^a/i eternalcenter" test.txt

4.3.4 在 test.txt 文本里在以 [a] 开头的行上面添加 eternalcenter

# sed "/^\[a\]/i eternalcenter" test.txt

4.3.5 在 test.txt 文本里最后一行上面添加 eternalcenter

# sed "$a eternalcenter" test.txt

4.4 案例四:使用 c 参数替换某一行数据
4.4.1 在 test.txt 文本里将第二行替换成 eternalcenter

# sed "2c\ eternalcenter" test.txt

或者:

# sed "2ceternalcenter" test.txt

4.4.2 在 test.txt 文本里将 abc 那一行替换成 eternalcenter

# sed "/abc/c\ eternalcenter" test.txt

或者:

# sed "/abc/ceternalcenter" test.txt

4.4.3 在 test.txt 文本里将以 a 开头的那一行替换成 eternalcenter

# sed "/^a/c\ eternalcenter" test.txt

或者:

# sed "/^a/ceternalcenter" test.txt

4.4.4 在 test.txt 文本里将以 [a] 开头的那一行替换成 eternalcenter

# sed "/^\[a\]/c\ eternalcenter" test.txt

或者:

# sed "/^\[a\]/ceternalcenter" test.txt

4.4.5 在 test.txt 文本里将以 eternalcentre 开头的那一行替换成 eternalcenter ALL=(ALL) NOPASSWD: ALL

# sed "/^eternalcentre/c\ eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt

或者:

# sed "/^eternalcentre/c\eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt

4.5 案例五:使用 d 参数删除某一行
4.5.1 在 test.txt 文本里删除第二行

# sed 2d test.txt

4.5.2 在 test.txt 文本里删除包含 abc 的那一行

# sed /"abc"/d test.txt

4.5.3 在 test.txt 文本里删除以 a 开头的那一行

# sed /"^a"/d test.txt

4.5.4 在 test.txt 文本里删除以 [a] 开头的那一行

# sed /"^\[a\]"/d test.txt

4.5.5 在 test.txt 文本里删除第二行到第四行

# sed '2,4d' test.txt

4.6 案例六:使用 s 参数替换某一行某些数据
4.6.1 在 test.txt 文本里将所有行的第一个 eternalcentre 换成 eternalcenter

# sed 's/eternalcentre/eternalcneter/' test.txt

4.6.2 在 test.txt 文本里将所有行的所有 eternalcentre 换成 eternalcenter

# sed 's/eternalcentre/eternalcneter/g' test.txt

4.6.3 在 test.txt 文本里将包含 eternalcentre 的行换成 eternalcenter

# sed 's/.*eternalcentre.*/eternalcneter/' test.txt

4.6.4 在 test.txt 文本里将第三行的第二个 eternalcentre 换成 eternalcenter

# sed '3s/eternalcentre/eternalcenter/2' 1.txt

4.6.5 在 test.txt 文本里在所有行前面添加 eternalcenter

# sed 's/^/eternalcenter/g' test.txt

4.6.6 在 test.txt 文本里将第二行替换成 eternalcenter

# sed '2s/.*/eternalcenter/' test.txt

4.6.7 在 test.txt 文本里将最后一行替换成 eternalcenter

# sed '$s/.*/eternalcenter/' test.txt

4.6.8 在 test.txt 文中里将第二到第三行替换成 eternalcenter

# sed '2,3s/.*/eternalcenter/' test.txt

4.6.9 在 test.txt 文本里将 eternalcenter 前面的数据和后面的数据对调位置

# sed "s/^\(.*\)\(eternalcenter\)\(.*\)$/\3\2\1/" test.txt

或者:

# sed -r "s/(.*)(eternalcenter)(.*)/\3\2\1/" test.txt

4.6.10 在 test.txt 文本里删除每行的第一个字符和最后一个字符

# sed 's/.//1;s/.$//' test.txt

4.6.11 在 test.txt 文本里删除每行的第二个字符和最后一个字符

# sed 's/.//2;s/.$//' test.txt

4.6.12 在 test.txt 文本里删除所有的数字和空格

# sed -r 's/[0-9]//g;s/^( )+//' test.txt

4.6.13 在 test.txt 文本里将所有的大写字母都添加括号

# sed 's/[A-Z]/(&)/g' test.txt

4.6.14 在 test.txt 文本里给第七行和第九行前面添加 “#”

# sed '7,9s/^/#/' test.txt

4.6.15 在 test.txt 文本里删除第一个空格

# sed -r 's/( )(.*)/\2/'

4.7 案例七:使用 h、H、g、G 参数复制和粘贴
4.7.1 sed 命令的工作原理

1) 从第一行开始一行一行地读取文本里的内容
2) 每读取一行就将数据存入到 pattern space 里面
3) 在 pattern sapce 中执行 sed 命令
4) 再打印 pattern space 中的内容然后将其清空
5) 之后重复以上操作再开始读取文本里的下一行
6) pattern space 里的数据可以存储到 hold space 里面


补充:
pattern space 相当于处理数据的流水线
hold space 相当于暂时存储数据的仓库

4.7.2 h、H、g、G、d、D 参数的讲解
4.7.2.1 h、H、g、G、d、D 参数的作用简介

1) g 将 hold space 中的内容拷贝到 pattern space 中,原来 pattern space 里的内容清除
2) G 将 hold space 中的内容 append 到 pattern space\n 后
3) h 将 pattern space 中的内容拷贝到 hold space 中,原来的 hold space 里的内容被清除
4) H 将 pattern space 中的内容 append 到 hold space\n 后
5) d 删除 pattern 中的所有行,并读入下一新行到 pattern 中
6) D 删除 multiline pattern 中的第一行,不读入下一行

4.7.2.2 h、H、g、G、d、D 的功能示意图

P H     P H     P H
1    h  1 1  d    1

P H     P H     P H     P H
2 1  G  2 1  H  2 1  d    1
        1       1 2       2
                  1       1

P H     P H     P H
3 2  G  3 2  h  3 3
  1     2 1     2 2
        1       1 1

P H     P H
3 2  g  2 2
  1     1 1


注意:
1) 这里的 P 指的是 pattern space
2) 这里的 H 指的是 hold space


补充:
h 其实就是清空现在粘贴板里的内容然后重新复制
H 其实就是不清空现在粘贴板里的内容然后再再原来粘贴版的内容基础上再追加复制
g 其实就是替换粘贴
G 其实就是追加粘贴

4.7.3 h、H、g、G、d、D 的使用案例
4.7.3.1 将第一行的数据添加到第三行后面

# sed -e '1h' -e '3G' test.txt

4.7.3.2 将第一行的数据替换第三行

# sed -e '1h' -e '3g' test.txt

4.7.3.3 将第一行和第二行的数据添加到第三行后面

# sed -e '1h' -e '2H' -e '3G' test.txt

4.7.3.4 将第一行和第二行的数据替换第三行

# sed -e '1h' -e '2H' -e '3g' test.txt

4.7.3.5 将第一个以 a 开头的行的数据添加到第三行后面

# sed -e '/^a/h' -e '3G' 1.txt

4.7.3.6 将第一个和第二个以 a 开头的行的数据添加到第三行后面

# sed -e '/^a/h' -e'/^a/H' -e '3G' 1.txt

4.8 案例八:sed 一次匹配多个参数

分别在 test.txt 文本里在 abc 和 bbb 那两行下面添加一行 eternalcenter

# sed -e "/abc/a eternalcenter" -e "/^bbb/a eternalcenter" test.txt

[命令] Linux 命令 grep (打印文本的行)

案例一:grep 使用正则表达式匹配

# grep -E '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

或者:

# egrep '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例二:grep 显示行号
2.1 grep 显示某些关键字所在行行号

# egrep -n '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
16:IPADDR=192.168.8.31
18:GATEWAY=192.168.8.55

2.2 grep 显示哪些行号是空行

# egrep -n ^$ /etc/resolv.conf

案例三:grep 取反匹配
3.1 grep 取反不匹配某些关键字

# egrep -v '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=5cda4d03-45c9-4856-80a6-f0bd0962d871
DEVICE=ens192
ONBOOT=yes
NETMASK=255.255.255.0
ZONE=public

3.2 grep 取反不显示空行

# egrep -v ^$ /etc/resolve.conf
### /etc/resolv.conf is a symlink to /var/run/netconfig/resolv.conf
### autogenerated by netconfig!
#
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
#     NETCONFIG_DNS_STATIC_SEARCHLIST
#     NETCONFIG_DNS_STATIC_SERVERS
#     NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
#     NETCONFIG_DNS_POLICY=''
#
# See also the netconfig(8) manual page and other documentation.
#
### Call "netconfig update -f" to force adjusting of /etc/resolv.conf.
nameserver 192.168.0.1

案例四:grep 完全匹配

# egrep -o '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
192.168.8.31
192.168.8.55

案例五:grep 匹配区分大小写

# egrep -i '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例六:grep 统计匹配成功次数

# egrep -c '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
2

案例七:grep 将匹配成功的部分自动添加颜色

# egrep --color=auto '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例八:grep 将匹配成功的部分自动取消颜色

# egrep --color=no '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192  
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例九:grep 一次匹配多个参数

# grep -e root -e zhumingyu /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhumingyu:x:1001:1001:root:/root:/bin/bash

[排错] Linux 解决删除数据后依旧无法释放空间

解决方法:

步骤一:理解出现问题的原因

当删除某些数据时,此数据正在被某个进程使用,则这些数据需要 kill 掉这个进程后才能被删除掉

步骤二:查看目录的使用状态

# df -h

(注意:如果出现已用存储加剩余存储小于总存储的情况,就代表出现了被删除的数据正在被进程使用的情况 )

步骤三:查看对应目录里所有一级子目录的大小

# du -ah --max-depth=1

步骤四:查看是否有进程在使用正在被删除的数据

# lsof | grep delete

步骤五:kill 这些进程以让这些数据被成功删除

# kill -9 `lsof | grep delete | awk '{print $2}'` 

(注意:kill 进程有一定的风险,请小心执行)

[实验] Linux 硬盘的加密 (通过 crypt 实现)

纪念:站主于 2019 年 11 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

步骤目录:

步骤一:硬盘加密后的注意事项

步骤二:生成一个新的分区
2.1 查看现有的分区
2.2 创建一个新的分区

步骤三:创建逻辑卷
3.1 创建卷组
3.2 创建逻辑卷

步骤四:给逻辑卷加密
4.1 给逻辑卷加密
4.2 解锁逻辑卷
4.3 格式化逻辑卷
4.4 锁住逻辑卷

内容五:自动挂载加密逻辑卷
5.1 修改系统自动挂载文件
5.2 创建一个映射器
5.3 创建随机密钥文件
5.4 将密钥文件设为只读为 root
5.5 将密码添到 luks 中,让密码立刻生效
5.6 测试挂载效果
5.6.1 挂载加密逻辑卷
5.6.2 测试加密效果

具体的操作步骤:

步骤一:硬盘加密后的注意事项

1) 加密后不能直接挂载
2) 加密后硬盘丢失也不用担心数据被盗
3) 加密后必须做映射才能挂载

步骤二:生成一个新的分区
2.1 查看现有的分区

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   10G  0 disk 
└─vda1 253:1    0   10G  0 part /
vdb    253:16   0   10G  0 disk 

(补充:在这里是加了一个 vdb 硬盘用来进行分区并加密)

2.2 创建一个新的分区

# fdisk /dev/vdb
命令(输入 m 获取帮助):n
分区号 (1-8,默认 1):
起始 扇区 (0-20971440,默认 0):
Last 扇区 or +扇区 or +size{K,M,G,T,P} (0-20971440,默认 20971440):+5G
分区 1 已设置为 Linux native 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

2.2 查看新的分区

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   10G  0 disk 
└─vda1 253:1    0   10G  0 part /
vdb    253:16   0   10G  0 disk 
└─vdb1 253:17   0    5G  0 part 

步骤三:创建逻辑卷
3.1 创建卷组

# vgcreate mysqldatavg /dev/vdb1
WARNING: sun signature detected on /dev/vdb1 at offset 508. Wipe it? [y/n]: y
  Wiping sun signature on /dev/vdb1.
  Physical volume "/dev/vdb1" successfully created.
  Volume group "mysqldatavg" successfully created

3.2 创建逻辑卷

# lvcreate -n mysqldatalv -L 1G mysqldatavg
  Logical volume "mysqldatalv" created.

步骤四:给逻辑卷加密
4.1 给逻辑卷加密

# cryptsetup luksFormat /dev/mapper/mysqldatavg-mysqldatalv

WARNING!
========
这将覆盖 /dev/mapper/mysqldatavg-mysqldatalv 上的数据,该动作不可取消。

Are you sure? (Type uppercase yes): YES
输入 /dev/mapper/mysqldatavg-mysqldatalv 的口令:
确认密码:

4.2 解锁逻辑卷

# cryptsetup luksOpen /dev/mapper/mysqldatavg-mysqldatalv mysqldata
输入 /dev/mapper/mysqldatavg-mysqldatalv 的口令:

(补充:这里的 mysqldata 是解锁后的硬件名称)

4.3 格式化逻辑卷

# mkfs.ext4 /dev/mapper/mysqldata

(注意:要先解锁了逻辑卷以后才能格式化逻辑卷)

4.4 锁住逻辑卷

# cryptsetup luksClose mysqldata

内容五:自动挂载加密逻辑卷
5.1 修改系统自动挂载文件

# vim /etc/fstab

添加以下内容:

......
/dev/mapper/mysqldata /var/lib/mysql ext4 defaults 0 0

5.2 创建一个映射器

# vim /etc/cypttab

添加以下内容:

......
mysqldata /dev/mapper/mysqldatavg-mysqldatalv /root/keyfile luks

(补充:这里的三个参数分别代表:虚拟设备名、真实设备、密码的存储文件)

5.3 创建随机密钥文件

# dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

5.4 将密钥文件设为只读

# chmod 0400 /root/keyfile

5.5 将密码添到 luks 中,让密码立刻生效

# cryptsetup luksAddKey /dev/mysqldatavg/mysqldatalv /root/keyfile
输入任意已存在的口令:

5.6 测试挂载效果
5.6.1 挂载加密逻辑卷

# mount -a

5.6.2 测试加密效果

# df -h