awk巩固练习题

第1章 awk数组练习题

1.1 文件内容(仅第一行)

[root@znix test]# head -1 secure-20161219 access.log

==> secure-20161219 <==

Dec 11 03:49:25 localhost sshd[27087]: Failed password for invalid user support from 123.31.34.190 port 55493 ssh2

==> access.log <==

101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com.cn/mobile/theme/oldboy/home/index.html" "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; HUAWEI CRR-UL00 Build/HUAWEICRR-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.7.51_rbb7fa12.660 NetType/3gnet Language/zh_CN"

1.2 统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)

1.2.1 方法一

Failed 是用户登陆失败,连续多次的登陆失败,就是在暴力破解密码。

/Failed/ 关键词查找

$ (NF-3) 表示倒数第四列

fa[$(NF-3)]++ 使用数组,对不同的ip分类累加

for(pol in fa)    for循环 使用pol 变量,逐个的取出fa[$(NF-3)] 数组中的内容。

print pol,fa[pol] 显示数组的内容,以及pol的次数,即统计.

[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t

218.65.30.126    17163

218.65.30.61     17163

125.16.71.175    4

169.46.38.74     9

183.136.238.78   30

218.2.0.16       10

122.228.238.66   1

……

1.2.2 方法二

sort排序,把一样的都放在一起,uniq去重经常合并 -c 参数是计数.

[root@znix test]# awk '/Failed/{print $(NF-3)}' secure-20161219 |sort|uniq -c|sort -n

1.2.3 结果统计

[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t|wc -l

88

1.3 统计access.log文件中对ip地址去重并统计重复数

使用数组对不同的ip进行统计

与第一题类似,这里只是统计的位置改变,变为$1.

[root@znix test]# awk '{hotel[$1]++}END{for(pol in hotel)print pol,hotel[pol]}' access.log |head -3

101.226.125.115 284

180.154.137.177 516

101.226.125.116 127

1.4 统计access.log文件中网站一共使用了多少流量

统计总数较为简单

i=i+$10可以写为 i+=$10

i累计相加,然后再输出最后一个i的值即可。

[root@znix test]# awk '{i=i+$10}END{print i}' access.log

2478496663

1.5 统计access.log文件中每个ip地址使用了多少流量(一个栗子)

统计ip使用的流量,将每个ip归类,与上一题不同的是,上一题是统计次数,这是统计他的流量

hotel[$1]+=$10 可以写为 hotel[$1]=hotel[$1]+$10 让循环的时候相加的不是1,而是$10的数字,进而就可以得出每个ip使用的流量.

[root@znix test]#  awk '{hotel[$1]+=$10}END{for(pol in hotel)print pol,hotel[pol]}' access.log |sort -rnk2|head

114.83.184.139 31362956

117.136.66.10 22431302

116.216.30.47 21466000

223.104.5.197 21464856

116.216.0.60 19145329

114.141.164.180 17219553

114.111.166.22 17121524

223.104.5.202 16911512

116.228.21.187 15969887

112.64.171.98 15255013

1.6 统计access.log文件中,同一个ip的出现次数以及他使用的流量总数。

查看数组元素里面的内容 数组的名字+数组元素的下标

下标相同的数组,能够一起使用.

两个有关的数组,只要有一个共同使用的元素,可以在一个循环中使用.

[root@znix test]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log |sort -rnk3|head |column -t

114.83.184.139   1982   31362956

117.136.66.10    1662   22431302

116.216.30.47    506    21466000

223.104.5.197    961    21464856

116.216.0.60     957    19145329

114.141.164.180  695    17219553

114.111.166.22   753    17121524

223.104.5.202    871    16911512

116.228.21.187   596    15969887

112.64.171.98    10856  15255013

1.6.1 [优化]让显示的结果更好看

[root@znix test]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print "ip:"pol,"次数:"count[pol],"流量:"sum[pol]}' access.log |sort -rnk3|head |column -t

ip:70.39.157.199   次数:1   流量:16049

ip:70.39.157.198   次数:1   流量:15965

ip:70.39.157.195   次数:1   流量:1569

ip:68.180.230.250  次数:5   流量:40644

ip:66.249.82.96    次数:30  流量:402543

ip:66.249.82.93    次数:36  流量:358729

ip:66.249.82.90    次数:61  流量:1640266

ip:66.249.82.185   次数:1   流量:1569

ip:66.249.82.181   次数:3   流量:258284

ip:66.249.82.177   次数:6   流量:374716

1.7 sort命令

1.7.1 sort默认是按照字母的顺序排序。

对与数字来说,sort命令将他一视同仁,按照顺序进行排序

[root@znix test]# seq 20|sort

1

10

11

12

13

14

15

16

17

18

19

2

20

3

4

5

6

7

8

9

1.7.2 sort命令的其他参数

-n 表示,将内容视为数字,能按照数字顺序进行排列

-r 表示逆序排列

-k 指定按照哪一列的顺序进行排列。

[root@znix test]# seq 20|sort -rnk1

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

1.8 对于统计IP使用的流量的一个栗子.

假如现在有个文本,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3

g  2

f  6

d  9

即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:

a  4

b  8

c  2

d  16

f  6

g  2

即将相同的字母后面的数字加在一起,按字母的顺序输出。

1.8.1 使用数组进行统计

数组会进行分类计数,显示的时候可以显示数据统计的结果,与数组的名字,即结果.

[root@znix files]# awk '{a[$1]=a[$1]+$2}END{for(i in a)print i,a[i]}' w.txt

a 4

b 8

c 2

d 16

f 6

g 2

1.8.2 变量的不同形式

这里将变量写为数组而已.

{i=i+$2}

{hotel[$1]=hotel[$1]+$2}

一些式子的简写:

i++   ====>>  i=i+1

i+=2  ====>>  i=i+2

i+=$1 ====>>  i=i+$1

1.9 awk中一些其他的命令

再awk里面使用 |" "  里面加上命令即可

sort 命令放在后面进行排序会将BEGIN的内容也会排序

在awk循环中进行排序,就不会贵BEGIN 的内容产生影响

[root@znix test]# awk 'BEGIN{print "ip","count"}{count[$1]++}END{for(pol in count)print pol,count[pol]|"sort -rnk2"}' access.log  |head |column -t

ip              count

58.220.223.62   12049

112.64.171.98   10856

114.83.184.139  1982

117.136.66.10   1662

115.29.245.13   1318

223.104.5.197   961

116.216.0.60    957

180.111.48.14   939

223.104.5.202   871

第2章 回顾补充

2.1 远程连接连不上了之检查端口

2.1.1 方法一telnet

使用方法  telnet  [ip]  [port]

[f:\~]$ telnet 10.0.0.201 22

Connecting to 10.0.0.201:22...

Connection established.

To escape to local shell, press 'Ctrl+Alt+]'.

SSH-2.0-OpenSSH_5.3

2.1.2 方法二 ss -lntup

[root@znix ~]# ss -lntup|grep 22

tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1140,4))

tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1140,3))

2.1.3 方法三 强大的nmap

[root@znix test]# nmap -p22 10.0.0.201

Starting Nmap 5.51 ( http://nmap.org ) at 2017-09-22 11:10 CST

Nmap scan report for 10.0.0.201

Host is up (0.000072s latency).

PORT   STATE SERVICE

22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds

2.1.4 方法四 lsof -i:22

-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )

 [root@znix ~]# lsof -i:22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

sshd    1140 root    3u  IPv4  10300      0t0  TCP *:ssh (LISTEN)

sshd    1140 root    4u  IPv6  10302      0t0  TCP *:ssh (LISTEN)

sshd    1334 root    3u  IPv4  11050      0t0  TCP 10.0.0.201:ssh->10.0.0.1:42256 (ESTABLISHED)

sshd    1700 root    3u  IPv4  12198      0t0  TCP 10.0.0.201:ssh->10.0.0.1:42772 (ESTABLISHED)

2.1.5 方法五 nc

使用方法: nc ip port

[root@znix ~]# nc 10.0.0.201 22

SSH-2.0-OpenSSH_5.3

2.2 linux中要安装的一些软件

[root@znix ~]#  yum install  telnet tree lrzsz nmap nc dos2unix    -y

       telnet 远程连接服务,可以进行测试

       tree   让文件,目录以树的形式显示

       lrzsz  linux与windows文件相互传递

       nmap 强大的扫描工具

       nc   网络探测工具

       dos2unix 将dos格式的文本转换为unix格式

2.3 查看系统网关的方法 ip命令

2.3.1 查看系统的网关

ip r 与ip route 相同

[root@znix test]# ip r

10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.201

169.254.0.0/16 dev eth0  scope link  metric 1002

default via 10.0.0.2 dev eth0

2.3.2 参看网卡的详细-IP地址

ip address show eth0  与 ip a s eth0 相同。

[root@znix test]# ip address show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:a8:e4:14 brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

    inet6 fe80::20c:29ff:fea8:e414/64 scope link

       valid_lft forever preferred_lft forever

2.4 【面试题】 ps aux 里面的vsz rss 区别

vsz  虚拟内存(物理+swap)

rss  是物理内存

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

mysql-8.0.11-winx64 安装配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000): Access denied ...

mysql-8.0.11-winx64 安装配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000...

2991
来自专栏杨建荣的学习笔记

MySQL 8.0初体验

从决定安装MySQL 8.0到开始行动,也就不到一个小时的时间,一个小时的时间能干些啥呢,来简单体验下8.0,官网上能看到这个丰富的表情包。

1104
来自专栏FreeBuf

技术分享:MSSQL注入xp_cmdshell

存储过程为数据库提供了强大的功能,其类似UDF,在MSSQL中xp_cmdshell可谓臭名昭著了。MSSQL强大的存储过程也为黑客提供了遍历,在相应的权限下,...

2195
来自专栏Porschev[钟慰]的专栏

Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

前言   前面一有写到一篇Node.js+Express构建网站简单示例https://cloud.tencent.com/developer/article/...

1.2K9
来自专栏技术博客

Win7下SQLite的简单使用

  SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。...

472
来自专栏逸鹏说道

SQL SERVER几种数据迁移/导出导入的实践

SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入)。 (一...

3769
来自专栏Samego开发资源

web性能测压工具 | siege

2078
来自专栏乐百川的学习频道

scrapy 进阶使用

前段时间我写了一篇《scrapy快速入门》,简单介绍了一点scrapy的知识。最近我的搬瓦工让墙了,而且我又学了一点mongodb的知识,所以这次就来介绍一些s...

2987

Windows 平台 Docker Machine 使用 - 如何设置你的主机

最近我一直在玩Docker。其中有许多原因,可以肯定的一点是:我喜欢玩最新的技术,甚至帮助构建一两个演示版或一个实验环境。我在Windows上运行我的设置,这是...

22510
来自专栏虚拟化云计算

定制虚拟机smbios信息

在某些需要给机器做认证和加密的场景下,会需要读取机器的厂家和主板等信息,这些信息都存放在SMBIOS信息中。在虚拟化场景下可以定制虚拟机的SMBIOS信息。

853

扫码关注云+社区