shell常用资料(备查)

While的使用

while read line
do
       mysql ab -e "insert into filter values (null,'$line','xxxxxxxx','xxxxxxxx',1,8,1,1,188,'abc')"
done = '"$sunday"%' and time >files/blog_we
ek_num
                done
   fi
  done

上面做了2次for语句,第一次表示i从1-7,而第二次a是从1-99.上面第一个for语句是为了查询今天是否为星期天而产生的。

Advertisements

一个用shell完成的统计程序

要是shell里能进行很好的循环就好了。以及shell最不容易控制的就是’,”,`这3个标点符号的区别。`这个倒是比较简单,就是在shell里只是表示运行外部程序。”和’这个如果单独使用是没有任何问题的,但是一旦要配合使用就区分起来十分麻烦。

这个日志统计程序中总共用了500多行,先定义30个日期。这个要是能用循环就非常简单了。但是我还是用比较傻的一个个来进行定义。


day=`date -d -1days +%F`

 day_1=`date -d -2days +%F`

这里要是能够使用的数组来进行定义就非常简单了。


for i in {2..30}

do

eval day_$i=`date -d -"$i"days +%F`

eval echo \$day_$i

done

 

通过上面就可以进行循环定义了。

这里需要定义和引用变量的过程比较多,一个数据往往要转换多次才可以得到最后真实的数据,这里一共进行了4次数据的赋值工作加一次if判断工作。还好现在总的执行时间还在0.02秒以内完成。不然就必须得修改这样一个程序了。


login_user=`mysql -h$db -u$dbuser -p$dbpass -e "select distinct id from test.iplog where time like '"$day"%'" |sed -n '2,$'p > login_user.diff`

这个是用来统计今天有哪些用户登陆过了系统,并把结果写入到login_user.diff中


reg_30_user=`mysql -h$db -u$dbuser -p$dbpass -e "select id from test.user_desc where registertime like '"$day_30"%'" | sed -n '2,$'p > reg_30_user.diff && cat login_user.diff >> reg_30_user.diff`

这里在数据库中进行一次like操作,这个其实是很费时间的如果条数过多的话。查询出来通过sed来取出用户名到一个文件中同时跟今天的登录用户名进行合并。


login_user_number=`mysql -h$db -u$dbuser -p$dbpass -e "select count(distinct id) from test.iplog where time like '"$day"%'" | sed -n '2'p`

这个是用来统计今天登陆过系统的用户数。


num_30_reg=`cat reg_30_user.diff | sort | uniq -d | wc -l`

这个用来统计前面第30天注册的用户在今天到底有多少人登陆了。这个其实是可以跟上面这个语句进行合并的,但是怎么都测试不通过。也考虑过用select in操作来进行,首先是要进行行列转换


uniq_30_user=`mysql -h$db -u$dbuser -p$dbpass -e "select count(distinct id) from test.user_desc where registertime like  '"$day_30"%'" | sed -n '2'p`

计算那天的注册用户数量。这样根据前面2个数据可以知道注册用户的实际登陆频率是怎么样的。


if  [ $uniq_30_user -eq 0 -o $num_30_reg -eq 0 ];

then

per_30=0.00

else

per_30=`awk 'BEGIN {x='"$num_30_reg"';y='"$uniq_30_user"';printf "%.2f\n",x/y}'`

echo $per_30

fi;

首先是判断过去某一天的注册用户数是否为0,以及那天的注册用户在今天登陆数是否0,在shell中,除法的两边都不能为0,这个还跟普通的公式不同。如果2个数都为0,那直接赋值0.00给它,不然就进行除法运算,并保留2位小数。这个表达式的单引号双引号可是困惑了整整一天时间。

最后就是mysql插入的语句,把这30个数据最后按照一定的规律插入到表中就可以了。

jsp session过期时间

昨天从其它部门搞了一套统计程序过来。发现个问题,过了一段时间后我点任何链接都会给我重定向到首页登陆页中,但是看表象应该是已经登陆进去了。
问了下我们的开发,应该是session保持的问题。有修改web.xml文件就可以解决了,但是找了下web.xml中,里面已经包含了如下内容了



                        -1


一般google搜索出来的永不过期都是这样的结果。而且这个系统在其它部门中使用中没有出现我这样的问题。看来应该是resin版本不同导致的了,他们是3.1,我们是3.0。继续放狗搜索才找到这个timeout配置还必须在servlet-mapping设置的后面。看来这种bug应该是3.1都修复了,之前的el表达式识别也是resin版本不同造成的应该。


                action
                *.do



                        -1


qpopper错误一解

qpoper是用来运行pop3服务的。由于我的邮件服务器是用postfix的。
按正常来说是可以用/etc/postfix/aliases这个文件来控制,用来aliase系统账户跟真实的邮件账户。这样可以一定得保护系统账户的安全。但是由于这次是用qpopper4.0.16这个最新版本,发现怎么都没法跟那个aliases文件进行连接。
qpoper安装很简单,但是奇怪的是还是要自己每次手动建立man8目录

mkdir -p /usr/local/qpopper/man/man8/

但这次由于出了问题,所以只能是换种安装方式来进行了。

./configure --prefix=/usr/local/qpopper --enable-standalone --enable-auth-file=/etc/mailauth --enable-64-bit  --disable-check-pw-max --enable-specialauth
make
make install

上面的方式就是使用本地认证,然后可以允许的用户都是放在/etc/mailauth文件中进行限制。当然系统新建这个用户的时候请使用-s /sbin/nologin已防止来登录到系统中来。
启动:

/usr/local/qpopper/sbin/popper qpopper -s 110

popper启动还有很多其它的参数,刚弄这个不是太熟悉,等有空了再看看其他参数是干嘛用的。

urchin的安装及使用

Urchin是google收购的一个日志分析工具。界面跟google analytics是几乎完全一样的。但是google analytics每个月的统计只能在500W PV以内,这个对于稍微有点规模的网站是不可忍受的。所以我们还是需要自己来架设一个urchin 首先需要下载一个urchin6501_linux2.6_kernel.tar.gz 这个是根据自己monitor的系统版本来进行确定的。然后还需要有一个mysql或者postgresql 创建相应的数据库和数据库用户。这里数据库名为urchin,数据库账户为urchin,urchin的账户密码为urchinapassword, urchin账户拥有urchin库的all权限。

root@monitor# mysql -u root -p
mysql> create database urchin character set utf8;
mysql> GRANT ALL ON urchin.* to 'urchin'@'10.2.%' IDENTIFIED BY 'urchinpassword';

接着使用程序目录下的install.sh脚本进行安装,这里主要是选择安装目录,数据库配置连接等等。

 ./install.sh 

安装完成后就可以通过下列网址查看urchin

http://yourserver:

修改admin用户的密码,因为我实在不知道默认admin的密码是啥

/usr/local/urchin/util/uconf-manager table=uusers action=update ucus_name="admin" ucus_password="123456" key1=ucus_name print=status

这里是把admin用户的密码设置为123456

这样我们就能通过上面的网站看到urchin的界面了,记住了申请试用必须使用IE来进行。Firefox一直有些界面看不到。

其他配置:

首先需要一个域名下放置urchin.js这个js代码。这个代码需要修改如下部分。

//-- UTM User Settings
var _udn="xiaonei.com";               //这个是你网站一级目录
var _ugifpath="http://track.xiaonei.com/__utm.gif";  //__utm.gif的地址

track.xiaonei.com 这个最好是独立的域名,这样urchin就不会分析这个域名内其他不相关的日志了。

__utm.gif和urchin.js都在安装文件中存在,根据上面的建议进行修改和放置。

关于日志配置:

默认nginx的日志格式,urchin是无法进行分析的。还必须要做相应的修改后urchin才能进行分析。

log_format urchin '$remote_addr $http_host - [$time_local]  "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_cookie"';

新建配置:

Urchin默认是英文界面,可以在显示中选择中文。基本设置如下:

step1

step2step3step4

urchin的原理:就是在所有的页面都会嵌入这个urchin.js来访问那个__utm.gif图片,通过这个来收集用户本地的相关信息来记录到gif图片域名下的日志中,然后urchin就来分析这个日志,所以这个分析结果的内容会比一般的多。

xiaonei

与沉一船吃饭

虽然去过各种各样的公司,除了公司年会就再也没跟公司老板吃过饭,这次居然有幸跟沉一船吃饭,那真是三生有幸。以前最大也就跟CTO一起吃饭,比如nelson huang和james shen这两位CTO,基本算是欢迎部门新员工或者是领导刚到任的接风会。

吃饭那天天气晴朗,气温十分的高,吃饭时间是临近12点45分了,各位领导就坐,我十分“有幸”跟领导一桌,另外几位同志就没那么好的运气了,非常乖巧的先占了一桌。就坐完领导开始自己点菜了,当然我本人连菜谱都没摸到,也许领导是熟门熟路的主。点完菜有一点空余时间,一船老大可能十分高兴,于是直接就站在凳子上跟大家喊话。

话说我军是第二支杀入日本战场的部队,前面一支先锋队叫百度。不过还好2支队伍是2条战线的。那各自也算是先遣队。但是能在国外过活的网站能有多少呢?能在中国生存的国外网站有多少呢?所以一些叫本地化的知识还是很管用的。沉一船估计我们这条船会沉的。听完一船领导讲话,终于开始吃饭了。

菜上来了都,可居然没啥可吃的,看着领导大快朵颐终于明白另外一桌同事的幸运了,我们这一桌都装进船里了。

这个世界有些人对于名声很看重,有些人对于做了什么事很看重,有些人看的是过去,有些人看的是未来。看过去的比较简单,但是对于这个我们还是要有自己的判断,听这听那最终做决定的还是你自己。而对于未来那更是困难。如果根据过去来把握未来这个是十分十分困难的事情。

这一条船到底沉不沉不光看船好不好,更重要的是船员好不好。泰坦尼克号这个船够好了吧,可最后还是沉了。Yahoo!在多年以前多么的风光无限,可虽然还没沉可也已经千疮百孔了。

船沉了,摆渡失败,这是最坏的解决了。