文本处理之AWK
gawk:模式扫描和处理语言,可以实现下面功能
文本处理
输出格式化的文本报表
执行算数运算
执行字符串操作
格式:
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
说明:
program通常是被放在单引号中,并可以由三种部分组成
BEGIN语句块 :通用语句块之前执行,常用于打印表头
模式匹配的通用语句块:文本处理语句
END语句块 :通用语句块之后执行,常做统计用
常见选项:
-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v var=value 变量赋值
Program格式:
pattern{action statements;..}
pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等
action statements:对数据进行处理,放在{}内指明,常见:print, printf
2 动作 print
print item1, item2, …
说明:
逗号分隔符
输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
如省略item,相当于print $0
固定字符符需要用“ ” 引起来,而变量和数字不需要
3.常见内置变量
FS:输入字段分隔符,默认为空白字符,功能相当于 -F,以变量的方式指定分隔符,可用于后续调用
OFS:输出字段分隔符,默认为空白字符 ,指定输出时的分隔符
NF:字段数量 ,字段一般指用分割符隔断的列数或段数
#引用变量时,变量前不需加$
一般把行成为记录,NR:记录的编号
FNR:各文件分别计数,记录的编号
范例:
1.取出各分区利用率,过滤第一行
[root@centos7 ~]# df | awk 'NR>1{print $1,$5}'
devtmpfs 0%
tmpfs 0%
tmpfs 2%
tmpfs 0%
/dev/sda2 2%
/dev/sda3 1%
/dev/sda1 14%
tmpfs 0%
2.取ip地址
[root@centos7 ~]# ip addr show eth0 |awk '/inet /{print $2}'
10.0.0.17/24
3.利用变量NR,取特定位
倒数第二段
[root@centos7 ~]# awk -F: '{print $(NF-1)}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log 此格式常用于取出日志中每个IP的访问次数
启动流程和系统服务
Linux启动流程
centos6启动流程
加电自检-->bootloader-->加载GRUB程序引导内核程序,根据grub.cnf文件将虚拟镜像加载到内存-->根据虚拟镜像加载文件系统-->执行init程序。根据inittab文件确定运行级别,执行rc.d下启动脚本-->执行rc.local
centos7启动流程
加电自检-->bootloader-->加载GRUB2程序引导内核程序,根据grub2.cfg文件将虚拟镜像加载到内存-->根据虚拟镜像加载文件系统-->/usr/lib/systemd/systemd初始化脚本
systemd
Systemd:从 CentOS 7 版本之后开始用 systemd 实现init进程,系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
Systemd新特性
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用socket式与D-Bus总线式激活服务
socket与服务程序分离
向后兼容sysv init脚本
使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,
systemctl无法与之通信和控制
系统状态快照
systemd 核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息
unit的配置文件
/usr/lib/systemd/system #每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/lib/systemd/system #ubutun的对应目录
/run/systemd/system #系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system #管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
unit的文件格式
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及”systemctl disable“命令在实现服务启用或禁用时用到 的一些选项
[Unit]
Description=The Nginx HTTP Server daemon # 描述信息
After=network.target remote-fs.target nss-lookup.target # 指定启动nginx之前需要其他
的其他服务,如network.target等
[Service]
# Type为服务类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
Type=forking
# 设置执行systemctl start nginx后需要启动的具体命令
ExecStart=/usr/local/nginx/sbin/nginx
# 设置执行systemctl reload nginx后需要执行的具体命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
# 设置执行systemctl stop nginx后需要执行的具体命令
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
# 设置在什么模式下被安装,设置开机启动的时候需要
WantedBy=multi-user.target
unit文件创建完成后执行,通知systemd重载此配置文件
[root@centos8 ~]#systemctl daemon-reload
加密和CA
加密
常见加密算法:对称加密,非对称加密,hash
对称加密算法:加密和解密使用同一个密钥
特性:
加密、解密使用同一个密钥,效率高
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
密钥过多
密钥分发
数据来源无法确认
非对称加密算法:密钥是成对出现 ,使用公钥加密,使用与之对应的私钥解密
公钥:public key,公开给所有人,主要给别人加密使用
私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数据加密:适合加密较小数据,比如: 加密对称密钥
hash :也称为散列算法,将任意数据缩小成固定大小的“指纹”,称为digest,即摘要
特性:
任意长度输入,固定长度输出
若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大。
无法从指纹中重新生成数据,即不要逆,具有单向性
功能:
数据完整性
密钥交换:
公钥加密:用目标的公钥加密对称密钥
DH (Deffie-Hellman):生成对称(会话)密钥
DH实现过程:
A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a]%p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b]%p = g^ab%p,生成为密钥
CA和证书
CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。
PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库: X.509:定义了证书的结构以及认证协议标准 版本号 序列号 签名算法 颁发者 有效期限 主体名称
证书类型: 证书授权机构的证书 服务器证书
用户证书获取证书两种方法:
自签名的证书: 自已签发自己的公钥
使用证书授权机构: 生成证书请求(csr) 将证书请求csr发送给CA CA签名颁发证书
openssl
openssl:开放式[安全套接层协议]
包括三个组件:
libcrypto:用于实现加密和解密的库
libssl:用于实现ssl通信协议的安全库
openssl:多用途命令行工具
Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符 来表示二进制数据的方法
两种运行模式:
交互模式
批处理模式
三种子命令:
标准命令
消息摘要命令
加密命令
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
ecparam enc engine errstr
gendh gendsa genpkey genrsa
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand req
rsa rsautl s_client s_server
s_time sess_id smime speed
spkac ts verify version
x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160
sha sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 rc5 rc5-cbc rc5-cfb
rc5-ecb rc5-ofb seed seed-cbc
seed-cfb seed-ecb seed-ofb zlib
标准命令和摘要命令可查看man帮助,或通过交互方式 --help查看
openssl命令对称加密
[root@centos7 data]# openssl enc -e -des3 -a -salt -in passwd -out passwd.crypto
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
解密:
[root@centos7 data]# openssl enc -d -des3 -a -salt -in passwd.crypto -out passwd.txt
enter des-ede3-cbc decryption password:
openssl命令单向哈希加密
[root@centos7 data]# openssl md5 passwd
MD5(passwd)= 388824fe0e2029fba5ef752f0e0fab2c
[root@centos7 data]# openssl sha512 passwd
SHA512(passwd)= 30ca186746000663a979473f1951e4c96215a3239bf17dc96cae4fbf7eeb6fac505ea327769c19e62a443d15c47ceeeb3ce56a8e947628ccc3e351ed2c36b2d2
[root@centos7 data]# openssl dgst passwd
MD5(passwd)= 388824fe0e2029fba5ef752f0e0fab2c
openssl 命令生成用户密码
[root@localhost ~]# openssl passwd --help
Usage: passwd [options]
Valid options are:
-help Display this summary
-in infile Read passwords from file
-noverify Never verify when reading password from terminal
-quiet No warnings
-table Format output as table
-reverse Switch table columns
-salt val Use provided salt
-stdin Read passwords from stdin
-6 SHA512-based password algorithm
-5 SHA256-based password algorithm
-apr1 MD5-based password algorithm, Apache variant
-1 MD5-based password algorithm
-aixmd5 AIX MD5-based password algorithm
-crypt Standard Unix password algorithm (default)
-rand val Load the file(s) into the random number generator
-writerand outfile Write random data to the specified file
[root@localhost ~]# openssl passwd -6 123456
$6$Tv.eATpT4Ljy9QU6$dF3Hp0oU8rOCXjpsiMOuu6LyKDOPHlZrkyqRij2bReje1tmfZ5RZEdUJXHyBL3mqKKdksecDchOZfYaeyrwL9/
[root@localhost ~]# openssl passwd -6 -salt centos 123456
$6$centos$NulCOw5VeDxNl4A26gQuhdhugHb3n/ZlAzqnw1h7/9S./4F2zj0kbQUtGIVW4hozP1xLLuGM/Q8fbvTxcvvaX/
openssl命令生成随机数
[root@localhost ~]# openssl rand -base64 5
HjJD9Rw=
openssl命令实现 PKI
生成私钥
[root@localhost ~]# openssl genrsa -out test.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
...................................................................+++++
....................+++++
e is 65537 (0x010001)
[root@localhost ~]# ls
anaconda-ks.cfg test.key
提取公钥
[root@localhost ~]# openssl rsa -in test.key -pubout -out key.pub
writing RSA key
[root@localhost ~]# ls
anaconda-ks.cfg key.pub test.key
[root@localhost ~]# cat key.pub
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZdcGvHeBSC9TPcszY9H
Az5XSKGZs8KXhxyhE52XdYjdOSme3o1VbIDAJStfaBabBPsM8QyTv2kv8ec8jdZ2
hTlvHIjGY4Vi9ZwRA8nxvVbzsoNBbGpWHHwEBMjuVeqAiBTtSWLdLnjNlDpbovpk
Z+ewsJZJkwl4oNM1/hMptAvAI+6Pn5AwTEDJbKQxFwri4cd35tFmRen6pDmAHQ2n
JS5DSNKskvMvvHFmvERrikMOk+H1cQPt3RMXP4/JO1qWjLQRSceutB+ygOpRyv0t
0HCikt+4DQ6PBWGd/imj2I4hGANXarGMpEGdu4Pm3Yl2/py/WCTZ6U80BdxaDho1
RQIDAQAB
-----END PUBLIC KEY-----
[root@localhost ~]# cat test.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzZdcGvHeBSC9TPcszY9HAz5XSKGZs8KXhxyhE52XdYjdOSme
3o1VbIDAJStfaBabBPsM8QyTv2kv8ec8jdZ2hTlvHIjGY4Vi9ZwRA8nxvVbzsoNB
bGpWHHwEBMjuVeqAiBTtSWLdLnjNlDpbovpkZ+ewsJZJkwl4oNM1/hMptAvAI+6P
n5AwTEDJbKQxFwri4cd35tFmRen6pDmAHQ2nJS5DSNKskvMvvHFmvERrikMOk+H1
cQPt3RMXP4/JO1qWjLQRSceutB+ygOpRyv0t0HCikt+4DQ6PBWGd/imj2I4hGANX
arGMpEGdu4Pm3Yl2/py/WCTZ6U80BdxaDho1RQIDAQABAoIBADatqMtpxFisymvr
2TiagJJ2RBSHFi/e8xn2HUjwQtX5noyTazNZd3yyCWhZTriKOpRqiJibdbgUq7G0
hEBc54yrJ8f5AHp7gUQ9S7EsRmTK+Wliy0WgSmKtAQycu/aRtbl7h1hbOOQhMNvZ
YYHJAmc4EaAFeG/otvJe+h8mzZKaiz5/pD/cqmDNm5hZSN0kNJJ4s1yT/kC+D5u4
TC9rxoUkfrfZjtqEDy91QbN7xuoc/ZZsj7vfB2RBh2sGPKQyIj8WCpi8QARYPoXy
Hz7DZ3b74H7V3+fVV/SzK7u75jkiCkQ85raGkw5D3csosZYJxCv+yKK+MlNw2oqs
wG4WkMkCgYEA8cnAykYSN1X2yK3yXzl5cb/8t0ksV4GaohC/QDRotGeclkdA6LIp
lWHLaDhlZGNeToNvkKzbTXFjYmNpamxL7D4jmdcy51DCSqT1QD4kpTDnE0OSZM8q
J3+KNdJKOB/HN7o8rBepDe8lF2t01VYBpOc6lQ5Fq09GIcNDSV+Y5PcCgYEA2azx
irmfMRNPuaEpARf6hOuqS76kVyoeKu5dMxOApFsAkS7rdwhuC+xtovkN523OKmEy
D5LMUB7yPq16iJpCecMW3Dh3N4gjWUHZNDMCNoPvUjq7/3g2PseQuaSyLzlnmYWe
yzvO7ULjp4y9Xd0FMEUbEb0CF8Do/pYIQuZj9KMCgYATTXgGrfFmWYaKHtjqoTwA
yML0HvNbSQ1/QrcB+S0iueLWXHniGdcYBeanO1lc2lH9EqEle6dGV3cHs8gGpv6o
rY1KCtQVg2z/aIvrxQpH5c+Myig1xBQpcxUlltQ2BtNwr32If5sPcbgUVo/NOECJ
WaxjmfAV7Q48Q8prYSZjoQKBgQDD8mXAvlWqRLsI3CVgQaiXTNmQs72WZWigttAY
8V5lFTJOfxEhpuoBO8R55353rSXginwY/smC+kiQ2XMrUsmyeEa02POgfqFrcNZI
of5E+sFNoWeokhsqqlUCeFqaHi+/SERoqJ8ef48VPaEdxJ8uE5dJgX5HybUzr/Uh
2+lwxwKBgESIgyDdg4rWX/NoAjNBKao7FA6KSUCbyLGHZPjQ97ZwR00c2dpz/OO/
b1VCG3Xe6HhFSCnh33GYnV2IT2i0UegAK9HlaIL69n/wxnxsIFGgGKpD/cGoWZmR
JI7y33iK0qZIniomiMb6UVxvZ30hAHr8Yq5iXAKgC9axHFDRzinb
-----END RSA PRIVATE KEY-----
生成加密key
[root@localhost data]# openssl genrsa -out test2.key -des3 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
...+++++
..............+++++
e is 65537 (0x010001)
Enter pass phrase for test2.key:
Verifying - Enter pass phrase for test2.key:
解密key
[root@localhost data]# openssl rsa -in test2.key -out test2.key
Enter pass phrase for test2.key:
writing RSA key
http协议
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协 议的文本数据进行加密处理后,成为二进制形式传输
HTTPS工作简化过程:
1.用户发起https请求连接到服务器443端口
2.服务端将证书传送给客户端,证书内包含公钥和证书信息
3.客户端验证证书是否有效,证书有效,客户端使用从证书内获得的公钥进行非对称加密自身生成的一个随机值,传送给服务端
4.服务端使用私钥解密获得随机值,并将数据使用随机值进行对称加密发送给客户端
5.客户端使用自身生成的随机值解密服务端发送数据,获得内容
作业
1、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
#!/bin/bash
#通过awk取出PV大于100的ip地址和现已有的防火墙规则ip,通过对比找出不是现有防火墙规则的ip添加到iptables
awk -F' ' '{ip[$1]++}END{for(i in ip){if(ip[i]>100){print i}}}' access_log >ip.txt
iptables -nL | awk '/REJECT/{print $4}' >iptables.txt
#可通过比较两个文件获取未添加规则的ip
#grep -vf iptables.txt ip.txt > ip_new.txt
#while read line
#do
# iptables -A INPUT -s ${line} -j REJECT
#done < ip_new.txt
while read line
do
grep ${line} iptables.txt >/dev/null && echo "${line} is ok " || iptables -A INPUT -s ${line} -j REJECT
done < ip.txt
2、描述密钥交换的过程
对称加密:加密方和解密方协商使用同一个密钥进行加密和解密
非对称加密:加密方和解密方各自拥有一组公钥和密钥,并将各自密钥发布,加密方使用解密方公钥对数据进行加密发送给解密方,解密方使用自身密钥对加密数据进行解密
DH:
1.双方协商出公开的证书g,大素数p
2.双方各自生成隐秘数据a,b(a,b<p),并根据公式g^a(b)%p,得出B,A发送给对方
3.双方将得到的B,A对p进行取模运算:[(g^b%p)^a]%p = g^ab%p,生成各自的密钥
3、https的通信过程
1.用户发起https请求连接到服务器443端口
2.服务端将证书传送给客户端,证书内包含公钥和证书信息
3.客户端验证证书是否有效,证书有效,客户端使用从证书内获得的公钥进行非对称加密自身生成的一个随机值,传送给服务端
4.服务端使用私钥解密获得随机值,并将数据使用随机值进行对称加密发送给客户端
5.客户端使用自身生成的随机值解密服务端发送数据,获得内容
4、使用awk以冒号分隔获取/ettc/passwd文件第一列
[root@localhost data]# awk -F':' '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
systemd-coredump
systemd-resolve
tss
polkitd
unbound
sssd
sshd
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/270042.html