按月归档:2012年八月


AWK高级应用

$ awk ‘{print $3}’ test—–截取第三域(列)的内容。 $ awk ‘/^(no|so)/’ test—–打印所有以模式no或so开头的行。 $ awk ‘/^[ns]/{print $1}’ test—–如果记录以n或s开头,就打印这个记录。 $ awk ‘$1 ~/[0-9][0-9]$/(print $1}’ test—–如果第一个域以两个数字结束就打印这个记录。 $ awk ‘$1 == 100 || $2 < 50′ test—–如果第一个或等于100或者第二个域小于50,则打印该行。 $ awk ‘$1 != 10′ test—–如果第一个域不等于10就打印该行。 $ awk ‘/test/{print $1 + 10}’ test—–如果记录包含正则表达式test,则第一个域加10并打印出来。 $ awk ‘{print ($1 > 5 ? “ok “$1: “error”$1)}’ test—–如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。 $ [...]

iptables防火墙简单介绍

关于防火墙的简单了解:     iptables防火墙是由Netfilter项目开发。iptables目前已发展成为一个功能强大的防火墙,可与专有的商业防火墙相媲美。     iptables提供能了全面的协议状态跟踪,数据包的应用层检查,速率限制和一个功能强大的机制已制定过滤策略。   关于iptables和Netfilter之间的关系:     Linux提供的所有包过滤和包修改设施的官方项目名称Netfilter,此术语也指linux内核里面的一个框架,可以用于在不同阶段将函数挂接(hook)进网络栈.简单的理解就是,Netfilter提供了一个框架,iptables在它之上建立了防火墙功能。     linux的绝大多数功能都是以模块的形式扩充出来的,Netfilter也是以模块的形式存在于linux中,当linux多了一个Netfilter模块,linux防火墙功能也就多了一项。     其实不仅是Netfilter有模块,iptables也有模块,这些模块就位于/lib64/xtables/(32bit系统在/lib/xtables/)目录下,其中以libxt开头的是iptables模块,这些模块与Netfilter模块是一一相对应的,例如/lib/modules/`uname -r`/kernel/net/netfilter/xt_conntrack.ko模块,在/lib64/xtables/libxt_conntrack.so与之相对应。当下达与xt_conntrack.ko相关的指令时,iptables会根据libxt_conntrack.so模块的指示去检查语法是否正确。并将Netfilter相应模块载入到系统内存,iptables最后将规则写入到规则数据库中。     Netfilter本身并不对数据包进行过滤,它只是允许过滤的数据包的函数挂接的内核中合适的位置。Netfilter项目在内核中还提供了一些基础设施,比如链接跟踪和日志记录,任何iptables策略都可以使用这些设施来执行特定数据包的处理。         有关Netfilter的工作位置:         Netfilter模块存放的目录:             /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/             /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/        以上两个目录中的模块都与协议有关,因此在使用时应该注意相应的协议             /lib/modules/`uname -r/kernel/net/netfilter/        经过Netfilter组织的努力与协议无关的模块就存放在上面的目录,可同时应用于ipv4和ipv6的网络环境        链路层:根据链路层数据包包头的内容在防火墙中依规则进行过滤,例匹配MAC地址        网络层:根据数据包IP包头的内容作为过滤条件,例如:IP包头的长度,协议….        传输层:根据传输层包头的内容进行匹配,例如TCP包头的内容中的来源端端口号,目的端端口号,TCP包头的整体长度….

shell 删除文本中的重复行

三种常见方法: 第一,用sort+uniq,注意,单纯uniq是不行的。 shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复行不再一起的时候,uniq将服务删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。 第二,用sort+awk命令,注意,单纯awk同样不行,原因同上。 shell> sort -k2n file | awk ‘{if ($0!=line) print;line=$0}’ 当然,自己把管道后面的代码重新设计一下,可能不需要sort命令先排序拉。 第三,用sort+sed命令,同样需要sort命令先排序。 shell> sort -k2n file | sed ‘$!N; /^\(.*\)\n\1$/!P; D’ 最后附一个必须先用sort排序的文本的例子,当然,这个需要用sort排序的原因是很简单,就是后面算法设计的时候的“局部性”,相同的行可能分散出现在不同的区域,一旦有新的相同行出现,那么前面的已经出现的记录就被覆盖了,看了这个例子就好理解拉。 ffffffffffffffffff ffffffffffffffffff eeeeeeeeeeeeeeeeeeee fffffffffffffffffff eeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeee gggggggggggggggggggg 其实,这是我随便打进去的几行字,没想到就是必须用sort的很好例子,大家可以自己试试看。

优化TCP内核参数提高服务器并发

在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题。要提高linux系统下的负载能力,可以使用nginx等原生并发处理能力就很强的web服务器,如果使用Apache的可以启用其Worker模式,来提高其并发处理能力。除此之外,在考虑节省成本的情况下,可以修改linux的内核相关TCP参数,来最大的提高服务器性能。当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的。 Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数,来及时将TIME_WAIT状态的端口清理掉。 本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量: netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 这个命令会输出类似下面的结果: LAST_ACK 16 SYN_RECV 348 ESTABLISHED 70 FIN_WAIT1 229 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 18098