作为程序员一定要保持良好的睡眠,才能好编程

linux 相关统计命令详解 netstat sort wc cut

发布时间:2019-03-28

查询linux服务器有哪些IP在连接

netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $4}'| sort| uniq -c|sort -n
 
 
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10


看看第二条: netstat -ntu  查看连接在此服务器上的ip地址


awk 进行切分 取出 第5列    


cut -d: f1   以冒号分割 取出第一列


sort 进行一个从小到大的排序


uniq -c   -c或--count 在每列旁边显示该行重复出现的次数。


http://www.runoob.com/linux/linux-comm-uniq.html  uniq 命令的使用说明


sort -rn  按照连接倒序排序


head -n 10 取现10条



看一个命令解析:

cat detail.log | grep 2019-03-28 |awk '{print $3}'|cut -d: -f2 | uniq -c | sort -r | head -n 10


[root@iz25vpndgurz weixin]# cat detail.log | grep 2019-03-28 |awk '{print $3}'|cut -d: -f2 | uniq -c | sort -r | head -n 10
      9 123.116.211.221
      7 123.116.211.221
      5 123.116.211.221
      4 123.116.211.221
      3 178.255.215.82
      3 106.38.84.66
      2 66.249.75.154
      2 66.249.75.152
      2 66.249.69.40
      2 66.249.69.40
      
      
 [root@iz25vpndgurz weixin]# cat detail.log | grep 2019-03-28 |awk '{print $3}'|cut -d: -f2|uniq | wc -l
273






1、统计一下 web站点下有多少人访问


netstat -nat | grep :80 |wc -l



netstat命令篇


-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。


一般使用组合

-ntlp

-nat

-nt 显示关于tcp相关的任务


cut命令篇


分割字符串使用


-d: -f 1 -d后面是分隔符  -f 1 取出分割后的第一个字符还是第二个字符

-c num1-num2 从第num1个字符 取到num2 个字符


cut -c 1-3 取出1到第3个字符


[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}' | cut -c 1-3
172
172
172
172
172
172
[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}' | cut -c 1-6
172.28
172.28
172.28
172.28
172.28
172.28


cut命令中 -d : -f 1 联用

[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}'| cut -d : -f 1 
172.28.66.194
172.28.66.194
172.28.66.194
172.28.66.194
172.28.66.194
172.28.66.194

这是取出第一个串


取出分割后的第二个字符:

[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}'| cut -d : -f 2
22
22
22
22
22
22


以上就是cut 命令的使用了。


wc命令篇


-l 总共、共计

[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}'| cut -d : -f 2
22
22
22
22
22
22

#共计有多少条信息 wc -l
[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}'| cut -d : -f 2 | wc -l
6

 


sort命令篇

https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

sort -u 去除重复行



sort -r 倒序排 ,本身是自然排序


sort  -t  分割符号指定

sort -n 按照数值的形式指定 



sort -o 把结果输出到标准输出
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt
[rocrocket@rocrocket programming]$ cat number.txt
5
4
3
2
1


sort -n 以数字方式排序 

[rocrocket@rocrocket programming]$ cat number.txt
1
10
19
11
2
5
[rocrocket@rocrocket programming]$ sort number.txt
1
10
11
19
2
5
[rocrocket@rocrocket programming]$ sort -n number.txt
1
2
5
10
11
19



你有没有遇到过10比2小的情况。
我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了


sort -t  -k 

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)

指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

以上是sort命令





[root@localhost socket]# netstat -nt | grep :22 | awk '{print $4}'
172.28.66.194:22
172.28.66.194:22
172.28.66.194:22
172.28.66.194:22
172.28.66.194:22
172.28.66.194:22



统计连接ssh 的客户端有多少个:

netstat -nt | grep :22 | awk '{print $4}' | awk -F : '{print $1}' | sort -u | wc -l
1


又是一条综合性的语句: sort 和 awk 都可以进行分割

但是有一些区别,就是 sort 可以分割后,直接拿到排序 。awk拿到的值只有一列。

[root@localhost logs]# ps -ef | grep mysql | grep -v 'grep' | sort -r -k 2 -t ' '

mysql     6672  2127  0 Dec06 ?        00:00:28 /usr/local/mysql5.6/bin/mysqld --basedir=/usr/local/mysql5.6 --datadir=/usr/local/mysql5.6/data --plugin-dir=/usr/local/mysql5.6/lib/plugin --user=mysql --log-error=/usr/local/mysql5.6/data/localhost.localdomain.err --pid-file=/usr/local/mysql5.6/data/localhost.localdomain.pid
root      2127     1  1 Dec06 ?        00:16:13 /bin/sh /usr/local/mysql5.6/bin/mysqld_safe --datadir=/usr/local/mysql5.6/data --pid-file=/usr/local/mysql5.6/data/localhost.localdomain.pid

[root@localhost logs]# ps -ef | grep mysql | grep -v 'grep' | sort -r -k 2 -t ' ' | awk '{print $1 $2}'
mysql 6672



查看内存使用情况

 free -m 
 
 free -m | awk '{if(NR==2){print $3}}'