之前学linux四大神器grep sed cut awk的部分笔记

一、expect实现无交互登录:
1.例1:免密码登录ssh服务器(不是用秘钥)
2.服务器批量管理。

二、正则表达式
1.四大神器:grep sed cut awk

2.linux常用两种正则表达式引擎:
(1)基础正则表达式:BRE
(2)扩展正则表达式:ERE

(1)grep 文本过滤。
(2)sed流编辑器,实现编辑
(3)awk文本报告器,实现格式化文本输出。

4…grep强大检索

三、sed流编辑器

四、shell中色彩处理和awk使用技巧。
1.shell颜色处理。
(1)格式1:echo -e “\033[背景颜色;文字颜色m要输出的字符\033[0m”
(2)格式2:echo -e “\e[背景颜色;文字颜色m要输出的字符\e[0m”
(3)例:绿底蓝字 echo -e “\033[42;34m hello color \033[0m” (这个灵活使用,用的时候查)
(4)解释:
\033[0m 关闭所有属性
\033[1m 设置高亮度,加粗
\033[5m 闪烁(执行后后续一直是闪烁状态)
(5)30黑字 31红字 32绿字 33黄字 34蓝字 35紫字 36蓝绿色 37白字
(6)3x是字颜色,4x是背景颜色。(对应着看)

五、神器awk(只要你水平达到用awk无所不能)(awk可以和shell一样去编程)
1.awk—>gawk 即:gun awk(功能最强大的数据处理引擎之一)
2.模式扫描和处理语言,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
3.模式:
(1)正则表达式:/root/ 匹配含有root的行 /*.root/
(2)关系表达式:< > && || + *
(3)匹配表达式:~ !~

4.动作:
变量 命令 内置函数 流控制语句

5.语法结构如下:
(1)awk [options] 'BEGIN{print ‘start’} ‘pattern{commands}’ END{print ‘end’}'file
(2)其中:BEGIN END是AWK的关键字部,因此必须大写;这两部分开始块和结束块是可选的。
(3)开始模块 工作模块 结束模块

6.awk最好学习方法就是记具体的案例。

7.awk工作三个步骤:
(1)读:从文件、管道或标准输出读入一行然后把他放到内存中。
(2)执行:对每一行数据,根据awk命令按顺序执行。默认情况是处理每一行数据,也可指定模式。
(3)重复:一直重复上述两个过程直到文件结束。

8.awk两种不同类型变量:内建变量,自定义变量。

9.awk内置变量(预定义变量):(这个要死记)()
(1)$0当前行
(2)NF 字段数量 number field
(3)NR 行号,多文件递增 number record (FNR多文件时独立计数)
(4)\t 制表符
(5)\n 换行符
(6)~ 匹配
(7)!~ 不匹配
(8)-F’[:#/]'定义三个分隔符

10.参数:
(1)-F 分隔符,默认是空格。
(2)-f 调用脚本,加的是awk脚本
(3)NF代表最后一列
(4)$1 $2…
(5)-v 定义变量
(6)’{}'引用变量
(7){…}命令代码块,包含一条或多条命令
(8)BEGIN 初始化代码块
(9)/str/ 匹配代码块,可以是字符串或正则表达式
(10){print A;print B} 多条命令使用分号间隔
(11)END 结尾代码块
(12)NR 行号
(13)格式:awk [-F|-f|-v] 'BEGIN{}//{command1;command2} END{}'file

11.实际演示

基础演练:
(1)执行模块用单引号,-F用双引号。 注:外面用单引号,里面全部用双引号,防止匹配对匹配不上。
(2)echo AA BB CC DD | awk ‘{print $2}’
(3)echo “AA,BB,CC,DD” | awk -F “,” ‘{print $2}’
(4)awk -F: ‘{print $1}’ /etc/passwd
(5)echo “12AxAbADXaAD52” | awk -F “aA” ‘{print $2}’
(6)echo “12AxAbADXaAD52” | awk ‘BEGIN {FS=“aA”} {print $2}’
(7)过滤本系统的IP地址:
ifconfig eth0 | grep netmask | awk ‘{print $2}’

运算符篇:
(1)echo “3 2 3 4 5” > a.txt awk ‘{print $1+10}’ a.txt
(2)如果a.txt文件是多行,那么将同时操控多行。
(3)echo “1 2 3 4” | awk ‘{print $NF}’ 输出最后一列
(4)echo “1 2 3 4” | awk '{print $(NF-2)}'输出倒数第三列
(5)echo “1 2 3 4” | awk ‘{print $(NF/2-1)}’
(6)打印passwd文件中用户UID小于10的用户名和他登录使用的shell:
awk -F: ‘$3<10{print $1 $NF}’ /etc/passwd #格式太乱
awk -F: ‘$3<10{print $1 “<—>” $NF}’ /etc/passwd #格式化输出
awk -F: ‘$3<10{print $1 “\t” $NF}’ /etc/passwd #间隔一个tab
awk -F: ‘$3<10{print 1 , 1, 1,NF}’ /etc/passwd #间隔逗号,不用分号括住了。
(7)打印系统中UID大于1000且登录shell是/bin/bash的用户:
awk -F: ‘$3>=1000 && $NF=="/bin/bash"{print KaTeX parse error: Undefined control sequence: \t at position 4: 1 "\̲t̲"NF}’ /etc/passwd

添加开始和结束模块:
(1)开始:(也可以写一行)
BEGIN{
print “UserId\t\t\tShell”
print “-----------------”
FS=":"
}
$3>=500 && $NF=="/bin/bash"{
printf “%-20s %-20s\n”, 1 , 1, 1,NF
}
END{
print “-------”
}

注:
左对齐: “-” “%-20s” ; 右对齐: “+” “%+20s”

(2)在脚本中的一些应用:
例:统计当前内存的使用率
free -m | grep Mem | awk ‘{print $3/$2*100"%"}’

12.awk高级应用

基础知识:
(1)模式:
empty空模式,这个是常用的
/regular expression/ 仅处理被这个模式匹配到的行
(2)匹配模式例子1:awk -F: ‘/^root/{print $1}’ /etc/passwd
(3)匹配模式例子2:awk -F: ‘/^root/{print $0}’ /etc/passwd $0是打印整行
(4)行范围匹配 startline,endline.
awk -F: ‘(NR>=3&&NR<=6){print NR,$0}’ /etc/passwd
(5)打印ip地址(行号定位):ifconfig eth0 | awk -F ‘NR==2{print $2}’
(6)NR和FNR的区别。
(7)route -n 过滤第一行。
法一: route -n | grep -V ^Kernel
法二: route -n | sed 1d
法三: route -n | awk ‘NR!=1 {print $0}’
(8)匹配,用awk查出包括root字符的行,不包括root的行,以bash结尾的行
awk -F: ‘/root/{print $0}’ /etc/passwd
awk -F: ‘!/root/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 0}̲' /etc/passwd …/{print $0}’ /etc/passwd

条件表达式篇:
(1)UID>10,变量赋bbb;UID<10,变量赋aaa
awk -F: ‘{$3<10? USER=“aaa”:USER=“bbb”;print $1,USER}’ /etc/passwd
(2)同(1),另一种表达法
awk -F: ‘{if($3<10){print “user=>”$1}else{print “pass=>”$1}}’
(3)查出行号小于等于5且包括/bin/bash的行:
awk -F: ‘{if($3<=5 && NF ~ “/bin/bash”){print 1 , 1, 1,NF}}’ /etc/passwd

变量篇:
(1)var=value
awk ‘BEGIN{"KaTeX parse error: Expected 'EOF', got '}' at position 5: var"}̲' awk 'BEGIN{pr…var’"}’ #引用变量时,使用单引号+双引号括起来。

格式化输出篇:
(1)
(2)
(3)

13.实战-shell脚本实战
(1)检查服务器是否受到ddos攻击脚本:
(2)思路:通过netstat查看网络连接数。如果一个IP地址对服务器建立很多连接数(比如1分钟100个连接),认为发生了ddos。
(3)命令:netstat -ntu | awk ‘{print $5}’ | cut -d: -f4 | sort | uniq -c | sort -n
(4)解析: 截取外网IP和端口 | 截取外网的IP以:为分隔符 | 排序 | 排除相同选项的记录 | 排序并统计
(5)模拟DDOS:
ab命令:做压力测试的工具和性能的监控工具
语法:ab -n 要产生的链接数总和 -c同时打开的客户端数量 http://链接
安装:一般安装apache会默认带上
ab -n 1000 -c 10 模拟10台客户端,1000个链接访问。

linux一辈子都研究不完
我们不能一直在一块绕,我们要一直向前,然后遇到以前的在再回顾并加深。

上一篇:Windows平台下基于Python的邮件发送实现(以QQ邮箱为例)


下一篇:整数溢出学习