awk单行实践

19 Nov 2009 Posted in  bash

客户提交一份预加载文件列表,采用了如下格式:
http://www.a.com/a/b/
a b c d e f g
h i j k l m n
http://www.b.com/b/c/
o p q r s t
u v w x y z
http://www.c.com/d/e
http://www.d.com/f/g
必须要把文件整理成完整的url,才好操作。
最初的设想,是以带http开头的行为RS,以n为OFS,然后打印RS
$0。随后发现这个想法问题多多——最主要的一点是:直接print $0的话,输出结果是不显示OFS的。
然后我才想到用for循环打印所有列的话,默认就已经分行了,不用定义OFS和ORS。
剩下的问题就是RS,然而不管我怎么写正则匹配表达式,结果都搞不定……唉
最后只能放弃这个想法,采用比较繁琐的办法: 继续阅读……


正则表达式

19 Nov 2009 Posted in 

系统整理一下正则表达式:
“.”匹配除了”n”以外的任一字符;
”匹配前一字符任意次;【“.”匹配任意个字符】
“^”匹配行首;
“$”匹配行尾;【“^$”匹配空行】
“[ ]”匹配其中某个字符;【“[^ ]”匹配此外任一字符】
“”匹配单词边界,即完整单词;
“?”匹配前一字符0或1次;
“+”匹配前一字符非0次;【可能要用转义一下】
“{ }”匹配次数; 继续阅读……


cache驻留时间(二、LM-factor算法)

19 Nov 2009 Posted in  CDN

好吧,满足某人的好奇,花开两朵,各表一枝了。
今天又看到关于LM-factor的另一种说法,特摘录如下:

上面这张图来自于《Squid.Definitive.Guide》第七章,对squid的LM-factor算法作出了一个很直观的描述。
请注意这张图的起始时间坐标:Last-Modified,这个是由squid读取的原始web数据所规定的。
然后就是Date,这个是原始数据进入squid的缓冲的时间。
最后就是Expires,这个就是原始数据在squid中的缓冲过期时间。
可以很容易的得出结论,对于LM-factor算法来说,原始数据在squid中的缓冲时间为
(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)percent
所以,我们可以郑重得出结论,在squid的refresh_pattern设置中,percent与Min、Max两个值是完全没有关系!
最后总结一下,对于squid来说,缓冲的数据在cache中的存活时间是这样决定的:
如果有定义refresh_pattern:只要满足以下两个条件之一,缓冲对象过期
缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max
缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)
percent
用编程语言来描述,就是
if
((CURRENT_DATE-DATE)
elif
((CURRENT_DATE-DATE)/(DATE-LM_DATE)
elif
((CURRENT_DATE-DATE)>max){STABLE}
else{STABLE} 继续阅读……


cache驻留时间(一、refresh_pattern)

18 Nov 2009 Posted in  CDN

上一篇举了个缓存时间的事故,现在说说普通情况下影响这个的配置: 继续阅读……


游戏CDN加速猜想

18 Nov 2009 Posted in  CDN

没事去国内几个主要的CDN商网站看了看各个的CDN产品说明和解决方案,基本上大同小异(其实连小异我都没怎么找到)。唯一让我惊讶的是蓝汛Chinacache——蓝汛在自己网站上写着“游戏应用加速”,内容如下: 继续阅读……


squid一次诡异事故

18 Nov 2009 Posted in  squid

前几天出了一次诡异的事情。某客户在半夜2点钟更新了其网站的内容后,按照刷新规则,squid应该在15分钟内也更新成新内容的。但实际情况却是新网页一刷新没准就变成旧的,一直到5点左右这种现象才算是消失了。 继续阅读……


squid的一点小问题

17 Nov 2009 Posted in  squid

网站运行,出错是必然的。squid提供了一整套多国语言的错误信息页面,放在share/errors/目录下。
但是,让人很尴尬的一点是:squid默认的english错误页面中,居然会公开显示客户源站的IP地址。而有一部分客户,用CDN的目的之一就是要用CDN来分担攻击流量,保护自己。这下可好。生生给暴露出去了。
而附带的简体中文页面中,刚好就没这个信息。真不知道是在讽刺国人攻击性太强,心理太黑暗了么……
不管怎么说,得把这个改掉。最简单的办法,修改english页面,删除掉ERR_CONNECT_FAIL里那个关键的信息。关键的就是下面这一段: 继续阅读……


squid的SSL配置

16 Nov 2009 Posted in  squid

公司新进客户,要求加速它的论坛,比较奇怪的是,整个论坛居然都是https协议的网页。所以得做443端口的配置。
如果只是端口,一个https_port 443就够了。麻烦的地方在证书(之前就有客户死活不肯给证书,于是只能给做个端口转发,顶天了算是路由优化,何苦往CDN里投钱……)。
在拿到证书后,squid.conf里添加这么一句,SSL配置就算是完成了。但测试的时候问题可就多多了
squid https_port 443 cert=/test_ssl/server.cer key=/test_ssl/server.key defaultsite=bbs.test.com
客户源站在江苏电信,之前的普通静态加速时,为了更好的达到回源效果,所有的网通节点服务器都采用了二级代理的方式,通过BGP回源。
在按照普通域名走父方式配置完毕后,wget该客户的论坛首页做测试,所有的网通节点返回的状态码倒是200,可首页文件总字节数,只有209!用IE打开一看,赫然是一个“Hello
World!”暴汗……
改为直接回源后,立马恢复正常。实在不知道这个你好页面是哪里蹦出来的!
把这个问题交给百哥和谷婶,大家伙都说只要加上一条never_direct allow all就可以强制转发https协议到上级cache服务器就可以了。但我测试的结果很遗憾——209依然——不可行! 继续阅读……


squid防盗链配置

14 Nov 2009 Posted in  squid

做网站的,谁愿意自己辛辛苦苦的成果就被别人轻松转载,如果是文字的,一般也就禁鼠标右键,再没什么好办法(当然,名人好打官司另说),但如果是图片,影音的文件,大可以利用http协议的header信息进行控制,这就是大多数web服务器日志要记录的referer。
公司新进一测试客户,就要求CDN方配合做防盗链。 继续阅读……


awk变量(三续)

12 Nov 2009 Posted in  bash

网上闲逛,偶然看到一句统计TCP连接数的命令如右:netstat -n awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

要统计TCP连接数,其实用上wc命令,倒不甚难。不过为了熟悉NF的用途,便细细试试这条吧。
先看试验中netstat -n的结果:
bash [root@raocl rao]# netstat -n |awk '/^tcp/{print $0}' tcp 0 0 211.151.70.76:80 60.12.137.170:3157 SYN_RECV tcp 0 0 211.151.70.76:80 117.136.0.184:53476 SYN_RECV tcp 0 0 211.151.70.76:80 112.193.8.170:4281 SYN_RECV tcp 0 0 211.151.70.76:80 112.65.48.252:62480 ESTABLISHED tcp 0 0 211.151.70.76:80 113.205.102.168:3230 ESTABLISHED tcp 0 0 211.151.70.76:80 198.54.202.250:2714 ESTABLISHED tcp 0 1370 211.151.70.76:80 222.44.43.141:2070 FIN_WAIT1 tcp 0 0 211.151.70.76:80 220.248.86.74:53112 ESTABLISHED ……(下略)
然后详细打印一下那条命令里NF的每一个变化使用值:
bash [root@raocl rao]# netstat -n | awk '/^tcp/ {print ++S[$NF],S[$NF],$NF,NF}' ……(上略) 532 532 ESTABLISHED 6 8 8 LAST_ACK 6 533 533 ESTABLISHED 6 534 534 ESTABLISHED 6 33 33 TIME_WAIT 6 535 535 ESTABLISHED 6 536 536 ESTABLISHED 6
也就是利用awk的行处理特性,遍历了所有tcp开头的行。定义出不同状态命名的数组下标,并分别++计数赋值给数组元素。
最后,打印数组S,如下:
bash [root@tinysquid2 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 18 FIN_WAIT1 33 FIN_WAIT2 1 ESTABLISHED 508 SYN_RECV 5 LAST_ACK 11 继续阅读……


正则表达式一例

12 Nov 2009 Posted in  squid

前篇只记录了一些正则表达式,没有例子来说明。今天说个简单的例子。 继续阅读……


shell技巧——getopts

04 Nov 2009 Posted in  bash

在写sh脚本的时候,常常需要运行时输入一些数据。之前已经知道用基本的$*,执行的情况,大概就是$0 $1 $2 $3……
那么,那些系统命令里的参数又是怎么做出来的呢?我们自己的脚本如何搞出来$0-$1的效果呢?这就是getopts的作用了。举例如下:
bash #!/bin/bash echo "OPTIND starts at $OPTIND" while getopts ":pq:" optname do case "$optname" in "p") echo "Option $optname is specified" ;; "q") echo "Option $optname has value $OPTARG" ;; "?") echo "Unknown option $OPTARG" ;; ":") echo "No argument value for option $OPTARG" ;; *) # Should not occur echo "Unknown error while processing options" ;; esac echo "OPTIND is now $OPTIND" done
在使用getopts命令的时候,shell会自动产生两个变量OPTIND和OPTARG。 继续阅读……


分布式shell程序

04 Nov 2009 Posted in  linux

除了用expect+for循环以外,今天偶然看到分布式shell这个概念。随手百度一些资料,放到这里,等过段时间试试~~ 继续阅读……


awk变量(再续)

04 Nov 2009 Posted in  bash

在squid自动配置脚本里,用到了sed的/r把一个文件的内容插入另一个文件。今天看到awk对两个文件的处理方法,要通过不少运算,不怎么方便。不过作为加深对NR和FNR的不同的理解,还是有些作用。
先说下NR和FNR的不同。
在一次awk中,NR是从头计算到尾的,而FNR是每打开一个文件,就重新计算:
bash [root@raocl ~]# awk '{print NR,FNR,$0}' ts st 1 1 123 456 2 2 abc def 3 3 ABC DEF 4 4 654 321 5 1 123 456 6 2 abc def 7 3 ABC DEF 8 4 654 321
下面转载一个例子:
bash [root@raocl ~]# cat a 1000 北京市 地级 北京市 北京市 1100 天津市 地级 天津市 天津市 1210 石家庄市 地级 石家庄市 河北省 1210 晋州市 县级 石家庄市 河北省 1243 滦县 县级 唐山市 河北省 1244 滦南县 县级 唐山市 河北省 [root@raocl ~]# cat b 110000,北京市 120000,天津市 130000,河北省 130131,平山县 130132,元氏县 [root@raocl ~]# awk 'BEGIN{FS="[|,]";OFS=","}NRFNR{print $1,$2,a[$2]}' a b 110000,北京市,1000 120000,天津市,1100 130000,河北省, 130131,平山县, 130132,元氏县, 继续阅读……


awk变量(续)

04 Nov 2009 Posted in  bash

上回用的是-F(其实如果标准化一点,在BEGIN{}里还可以区分成输入输出的FS和OFS)、NR(当前行数)、NF(当前域数)和$0(当前行全部内容),如果是一般的处理,这些差不多也就够了。 继续阅读……


awk内置函数

04 Nov 2009 Posted in  bash

前几篇说awk变量,今天说函数。 继续阅读……


让进程在后台可靠运行的几种方法(转)

03 Nov 2009 Posted in  bash

  • nohup
    nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。让我们先来看一下nohup 的帮助信息:
    NOHUP(1)
    User
    Commands
    NOHUP(1)
    NAME
    nohup - run a command immune to hangups, with output to a
    non-tty
    SYNOPSIS
    nohup COMMAND [ARG]…
    nohup OPTION
    DESCRIPTION
    Run COMMAND, ignoring hangup signals.
    –help display this help and exit
    –version
    output version information and exit
    可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到nohup.out文件中。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用”> filename 2>&1”来更改缺省的重定向文件名。

** nohup 示例 继续阅读……


Linux命令行系统性能检测工具(转)

03 Nov 2009 Posted in  linux

※注:下面附图的命令输出信息,以红旗DC Server 5.0 for x86 Sp1为基础平台,可能在不同的操作系统或核心版本有较大区别,对比时请留意。 继续阅读……


fuser命令(转)

03 Nov 2009 Posted in  bash

fuser:使用文件或者套节字来表示识别进程。我常用的他的两个功能:查看我需要的进程和我要杀死我查到的进程。 继续阅读……


dd命令使用详解(转)

03 Nov 2009 Posted in  bash

  1. 命令简介

dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m 继续阅读……


curl使用简单介绍(转)

03 Nov 2009 Posted in  bash

原文地址: http://www.linuxidc.com/Linux/2008-01/10891p2.htm
Curl是Linux下一个很强大的http命令行工具,其功能十分强大。 继续阅读……


awk调用shell变量

03 Nov 2009 Posted in  bash

今天的问题:因为某个原因,需要长期探测对某机器的ping值情况。期望的输出格式是“丢包率 响应时间均值”。 继续阅读……


squid压力测试

03 Nov 2009 Posted in  testing

向公司申请了台设备做测试机,打算把公司各种应用服务都自己练练,熟悉一下。先从最传统的squid开始做压力测试。先发一个小东东http_load的测试: 继续阅读……


tcpwrapper

03 Nov 2009 Posted in  linux

今天去新浪面试。有一道笔试题,考的是tcpwrapper的用法。因为没见过这个东东,所以百度一下,选几篇文章总结一下。 继续阅读……


shell处理技巧

03 Nov 2009 Posted in  bash

脚本经常用的上,但老是记不住的一些东西: 继续阅读……