第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的出现次数以及他使用的流量总数。

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

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

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

awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log

[root@znix test]#  awk '{count[$1]++;sum[$1]=sum[$1]+$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log |sort -nrk2 |column -t |head
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 流量:40254
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.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@clsn6 ~]# yum install  telnet tree  lrzsz  nmap nc  dos2unix    -y
[root@clsn6 ~]# yum install htop iotop iftop atop nethogs -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 是物理内存

awk高级进阶的更多相关文章

  1. 潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师

    潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师 讲的不错,可以学习 下面是教程的目录截图: 下载地址:http://www.fu83.cn/thread-283-1-1.htm ...

  2. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  3. AWK高级编程 转载

    AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与 ...

  4. 高级进阶DB2(第2版)——内部结构、高级管理与问题诊断

    <高级进阶DB2(第2版)——内部结构.高级管理与问题诊断> 基本信息 作者: 牛新庄    出版社:清华大学出版社 ISBN:9787302323839 上架时间:2013-7-3 出版 ...

  5. MEF高级进阶

    MEF高级进阶   好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四 ...

  6. .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?

    本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...

  7. 《Android高级进阶》读书笔记

    <Android高级进阶>是据我所知的市面上唯一一本技术工具书,比较的高大全,作者的目的是为了对全领域有个初步的概念 No1: 在Android系统中,拥有事件传递处理能力的类有以下三种 ...

  8. Git log diff config高级进阶

    Git 历史相关和 git config 高级进阶 前一段时间分享了一篇<更好的 git log>简要介绍怎么美化 git log 命令,其中提到了 alias命令,今天再继续谈谈 git ...

  9. [总]Android高级进阶之路

    个人Android高级进阶之路,目前按照这个目录执行,执行完毕再做扩展!!!!! 一.View的绘制 1)setContentView()的源码分析 2)SnackBar的源码分析 3)利用decor ...

随机推荐

  1. Celery学习--- Celery 最佳实践之与django结合实现异步任务

    django 可以轻松跟celery结合实现异步任务,只需简单配置即可 同步执行和异步执行 注意:即使Celery的任务没有执行完成,但是已经创建了任务ID.可以利用前台的定时任务发送Ajax异步请求 ...

  2. Linux 系统的主机别名文件

    修改主机名文件 # 方式一: 临时生效 hostname 主机名 hostname omc 临时生效 # 方式二: 编辑配置文件[永久生效] vim /etc/sysconfig/network [更 ...

  3. NLog写入Mongo日志配置

    Web网站中引入了NLog日志,日志记录在Mongo数据库中,经过两天的简单学习,现简要记录说明下: 首先贴出NLog的学习地址: https://github.com/NLog/NLog/wiki/ ...

  4. 索引&切片 切割split

    索引   s[n]                                                        # 中括号里n为一个数字 切片    s[0:9]           ...

  5. Spring 利用PropertyPlaceholderConfigurer占位符

      Hey Girl   博客园    首页    博问    闪存    新随笔    订阅     管理 posts - 42,  comments - 3,  trackbacks - 0 Sp ...

  6. 问题:win10防火墙不能自动启动

    问题:win10防火墙不能自动启动 描述:Windows防火墙不能自动启动,每次开机要手动启动,打开service.msc,里面防火墙的启动类型为手动,按钮为灰色,不能更改为自动,怎么办? 解决方法: ...

  7. python伪装网页访问

    # -*- coding:utf8 -*-#import urllib.request#url =' http://www.douban.com/'#webPage=urllib.request.ur ...

  8. javascript 中isPrototypeOf 、hasOwnProperty、constructor、prototype等用法

    hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeOf是用来判断要检查 ...

  9. Yii设置Cache缓存的方法

    先在配置文件components数组中加上: 'cache'=>array( 'class'=>'CFileCache'), 设置Cache: Yii::app()->cache-& ...

  10. nmap 扫描端口 + iftop 实时监控流量

    sleep 1|telnet 127.0.0.1 223 nmap 127.0.0.1 -p 223 -PN   (对禁ping IP) iftop -P -n -B -B 按字节显示 -N 切换 端 ...