linux下查找段落的工具,Linux shell工具grep awk cut sort uniq sort cut head tail sed使用小结...

博客分类:linux

Linux 系统中,有很多用于快速处理数据的工具如grep awk cut sort uniq sort,他们非常非常地好用。 如果你熟练掌握他们的使用技巧,他们则可以帮你快速定位问题。

最近碰到一个案例。 一个项目上数据库系统, ORACLE ,运行在 LINUX 上,报进程数满了。 看到这类问题,您不需要去深究什么警告日志,数据库中进程状况啊等等。马上 在操作系统层面上看看有哪些服务器连接到这台数据库服务器上。

(墙内链接: http://mikixiyou.iteye.com/blog/1538828)

这里使用的第一个工具就netstat 。他是系统管理工具,还不能算shell 工具。

通过netstat -ntu ,找出通过tcp 和udp 连接服务器的IP 地址列表。

[root@webdb4 ~]# netstat -ntu|more

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State

tcp        0      0 192.168.15.209:1521         192.168.15.65:37781         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37783         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37777         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37779         ESTABLISHED

tcp        0      0 10.100.15.209:49895         10.100.15.207:26069         ESTABLISHED

tcp        0      0 10.100.15.209:49898         10.100.15.213:6092          ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37785         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.181:21869        ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.181:21870        ESTABLISHED

tcp        1      0 192.168.15.209:26781        192.168.15.89:1521          CLOSE_WAIT

tcp        0      0 192.168.15.209:10332        192.168.15.211:6200         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.181:21875        ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37766         ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.181:21874        ESTABLISHED

tcp        0      0 192.168.15.209:1521         192.168.15.65:37761         ESTABLISHED

下面略掉,太多了,没法显示全。

这是所有与数据库服务器连接的外部IP 信息列表。

可以看到第五列是所有的外部IP 信息。根据这些信息,找出数目那个IP 是什么?或者根据IP 数目做一个排序。

第一步,使用grep 将tcp 过滤出来,也可以使用egrep 过滤多个条件

netstat -ntu|grep 'tcp'

netstat -ntu|egrep 'tcp|udp'

第二步,使用awk 将第五列单独截出来

netstat -ntu|grep 'tcp'|awk '{print $5}'

操作如下:

[root@webdb4 ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|more

192.168.15.65:37781

192.168.15.61:34281

192.168.15.65:37783

192.168.15.61:34282

192.168.15.65:37777

192.168.15.65:37779

10.100.15.207:26069

192.168.15.61:34275

10.100.15.213:6092

第三步,使用cut 将列信息以":" 为分隔符再分成不同的列, 显示第一个field

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1

第四步,使用sort 默认字符顺序将字段值排序

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort

sort 有很多选项,可以man sort 去看。

第五步,使用uniq 将已经排序好的字段计算不同值的数目

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c

uniq -c 根据相近的值计算和,因此之前需要排序好。

第六步,使用sort -n 数字升序方式再排一下结果

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -n

使用sort -nr ,可以按照数字降序排。

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -nr

第七步,使用head 或tail 取头部几行或尾部几行

取尾部10 行

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -n|tail -10

取头部10 行

netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -nr|head -10

[root@webdb4 ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -n|tail -10

8 192.168.15.133

8 192.168.15.62

10 192.168.15.181

11 192.168.15.61

12 192.168.15.204

15 192.168.15.63

17 192.168.15.100

18 192.168.15.92

30 192.168.15.65

32 192.168.15.146

[root@webdb4 ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -nr|head -10

32 192.168.15.146

30 192.168.15.65

18 192.168.15.92

17 192.168.15.100

15 192.168.15.63

12 192.168.15.204

11 192.168.15.61

10 192.168.15.181

8 192.168.15.62

8 192.168.15.133

这就得到我们要的结果。

这个结果中,我们可以看出各个服务器在数据库服务器上的网络连接数。

根据连接数,发现特别大的,肯定有问题。通常都应用服务端打开连接不关闭,或者出现异常无法关闭。

linux cut命令参数说明,以及实例

张映 发表于 2010-10-30

分类目录: linux

cut主要是用来分割文件中的字符串,并且根据要求进行显示的一个命令。虽然他的用法基本上都可以用其他的linux命令所代替,但是用cut会更方便一点。

一,cut参数说明

[zhangy@BlackGhost comte]$ cut --help

用法:cut [选项]... [文件]...

从每个文件中输出指定部分到标准输出。

长选项必须使用的参数对于短选项时也是必需使用的。

-b, --bytes=列表        //只选中指定的这些字节

-c, --characters=列表       // 只选中指定的这些字符

-d, --delimiter=分界符   // 使用指定分界符代替制表符作为区域分界

-f, --fields=列表        //只选中指定的这些域;并打印所有不包含分界符的 行,除非-s 选项被指定

-n                (忽略)

--complement       //补全选中的字节、字符或域

-s, --only-delimited        //不打印没有包含分界符的行

--output-delimiter=字符串    //使用指定的字符串作为输出分界符,默认采用输入 的分界符

--help        //显示此帮助信息并退出

--version        //显示版本信息并退出

仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔

开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。

每种参数格式表示范围如下:

N    从第1 个开始数的第N 个字节、字符或域

N-    从第N 个开始到所在行结束的所有字符、字节或域

N-M    从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

-M    从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

当没有文件参数,或者文件不存在时,从标准输入读取[zhangy@BlackGhost comte]$ cut --help

用法:cut [选项]... [文件]...

从每个文件中输出指定部分到标准输出。

长选项必须使用的参数对于短选项时也是必需使用的。

-b, --bytes=列表 //只选中指定的这些字节

-c, --characters=列表 // 只选中指定的这些字符

-d, --delimiter=分界符 // 使用指定分界符代替制表符作为区域分界

-f, --fields=列表 //只选中指定的这些域;并打印所有不包含分界符的 行,除非-s 选项被指定

-n (忽略)

--complement //补全选中的字节、字符或域

-s, --only-delimited //不打印没有包含分界符的行

--output-delimiter=字符串 //使用指定的字符串作为输出分界符,默认采用输入 的分界符

--help //显示此帮助信息并退出

--version //显示版本信息并退出

仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔

开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。

每种参数格式表示范围如下:

N 从第1 个开始数的第N 个字节、字符或域

N- 从第N 个开始到所在行结束的所有字符、字节或域

N-M 从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

-M 从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

当没有文件参数,或者文件不存在时,从标准输入读取

二,实例

1,测试文件

[zhangy@BlackGhost comte]$ cat test

test:x:1003:1003::/home/test:/bin/bash

张ying:x:1004:1004::/home/test:/bin/bash

policykit:x:102:1005:PolicyKit:/:/sbin/nologin

postfix:x:73:73::/var/spool/postfix:/bin/false[zhangy@BlackGhost comte]$ cat test

test:x:1003:1003::/home/test:/bin/bash

张ying:x:1004:1004::/home/test:/bin/bash

policykit:x:102:1005:PolicyKit:/:/sbin/nologin

postfix:x:73:73::/var/spool/postfix:/bin/false

上面是/etc/passwd文件中的一部分,加了点中文在里面

2,-b和-c的用法

[zhangy@BlackGhost comte]$ cut -b 1-10 test     //取得文件中第1个字节到第10个字节的内容

test:x:100

张ying:x:

policykit:

postfix:x:

[zhangy@BlackGhost comte]$ cut -b 1,4,5,7,10 test  //取文件中第1,4,5,7,10字节的内容

tt::0

�yig:    //为什么会出现乱码吗,因为汉字所占字节数大于1,分开的话,肯定会显示错误的

pick:

ptfx:[zhangy@BlackGhost comte]$ cut -b 1-10 test //取得文件中第1个字节到第10个字节的内容

test:x:100

张ying:x:

policykit:

postfix:x:

[zhangy@BlackGhost comte]$ cut -b 1,4,5,7,10 test //取文件中第1,4,5,7,10字节的内容

tt::0

�yig: //为什么会出现乱码吗,因为汉字所占字节数大于1,分开的话,肯定会显示错误的

pick:

ptfx:

-c的用法根-b差不多,只不过一个截取时是字节为单位,一个是以字符为单位

3,-d和-f的用法

[zhangy@BlackGhost comte]$ cut -f 1 test     //不分割都显示出来

test:x:1003:1003::/home/test:/bin/bash

张ying:x:1004:1004::/home/test:/bin/bash

policykit:x:102:1005:PolicyKit:/:/sbin/nologin

postfix:x:73:73::/var/spool/postfix:/bin/false

[zhangy@BlackGhost comte]$ cut -d : -f1  test  //分割了显示分割后的第一个域

test

张ying

policykit

postfix[zhangy@BlackGhost comte]$ cut -f 1 test //不分割都显示出来

test:x:1003:1003::/home/test:/bin/bash

张ying:x:1004:1004::/home/test:/bin/bash

policykit:x:102:1005:PolicyKit:/:/sbin/nologin

postfix:x:73:73::/var/spool/postfix:/bin/false

[zhangy@BlackGhost comte]$ cut -d : -f1 test //分割了显示分割后的第一个域

test

张ying

policykit

postfix

-d后面根的冒号是分割文件行的的分割符,-d一般情况下根-f一起使用,而不能和-b,-c一起使用

4,-s的用法

[zhangy@BlackGhost comte]$ cut -d : -f 1-5 -s --output-delimiter="|" test

test|x|1003|1003|

张ying|x|1004|1004|

policykit|x|102|1005|PolicyKit

postfix|x|73|73|

1. 如果你只想看文件的前5行,可以使用head命令,如:

head -5 /etc/passwd

2. 如果你想查看文件的后10行,可以使用tail命令,如:

tail -10 /etc/passwd

tail -f /var/log/messages

参数-f使tail不停地去读最新的内容,这样有实时监视的效果,当你在ppp拨号的过程中用它岂不是很方便!

3. 查看文件中间一段,你可以使用sed命令,如:

sed -n '5,10p' /etc/passwd

这样你就可以只查看文件的第5行到第10行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值