存档

‘Programe’ 分类的存档

一个极简的抓某个分区文件被写入事件的stap脚本

2016年8月13日 1 条评论
#! /usr/bin/env stap
 
probe vfs.write
{
	if (dev == MKDEV($1, $2))
		printf ("%s(%d) 0x%x/%u argstr:%s, uid:%d\n", execname(), pid(), dev, ino, argstr, uid())
}

使用方法,例如:

stap inodewatch.stp 0x08 0x01;
# 这里的0x08,0x01是设备的major、minor号
分类: Programe 标签:

find prime within a range by using bash

2016年5月28日 没有评论

用bash找出10000到20000之间的所有质数

#!/bin/bash
for (( i=10000; i<20000; i++ ))
do
    k=$(echo "sqrt($i)" | bc)
    for (( j=2; j<=$k; j++ ))
    do
#        echo "i=$i;j=$j;k=$k"
        [[ $(($i%$j)) -eq 0 ]] && break
    done
    [[ $j -gt $k ]] && echo -n "$i "
done
echo "are prime"
分类: Programe 标签:

bash里的间接引用

2013年12月16日 没有评论

bash写代码的时候也许会经常有以下情况出现:
a=b
b=c
现在想由a怎么得到(输出)c
答案很简单:

a=b
b=c
echo ${!a}

即可。
另外一个问题继踵而至:
如果我们要通过变量a给变量b赋值,该怎么做呢?
答案是:

eval $a=d

即可将变量b的值变成d

分类: Programe, tips 标签:

写bash的那些坑(pitfall)

2013年11月23日 没有评论

原文来自于
我这里就我自己感觉到有必要说一下的记一下,其他完整的,我整理到wiki上吧

[ $foo = "bar" ] # wrong!
[ "$foo" = bar ] # right
[ x"$foo" = xbar ] # Also right!
[ bar = "$foo" ] # Also right!
[[ $foo = bar ]] # if U using bash or Korn shell, not by the older POSIX or BourneShell

原文来自于

分类: Programe, tips 标签:

改了一个nagios plugin:check_mem.pl

2010年11月27日 没有评论

  这个check_mem.pl其实不仅仅是个nagios插件(plugin),而且还是nrpe的插件(plugin),而且还带性能数据。原版的程序是将bufferscached的内存(free命令看到的)加在一起当做caches的内存,然后当做性能数据caches打印出来的。为了更加直观,我还是将其改回去了,把caches内存还是拆成cachedbuffers两部分,并都在性能数据中输出。

  对啦,这个程序在solaris下跑也许会有bug,主要是我对solaris下的内存划分还没做太多研究,原来的程序就支持solaris,我就把原来的代码做了些许改动。

  就这些了。代码在这里(https://github.com/haw-haw/some-nagios-plugins/blob/master/check_mem.pl)

用perl模块儿HTML::TreeBuilder::XPath从网页上抓数据

2010年5月31日 没有评论

perl上的好东西可真多呀
前段时间也搞了个抓东西的东东
但那个没用到HTML::TreeBuilder::XPath这个模块儿
这次我把HTML::TreeBuilder::XPath用来抓lego的一些数据
简直是太好用了!
不得不服:perl上的好东西太多了!
至于怎样获得要抓数据的Xpath
按照大多数人的搞法,用firefox(含插件FireXPath)+firebug
我也差不多是这么干的
用fireXPath找到XPath
然后稍作修改就拿来用的
代码呢
写的太臭
就不贴在这里了

分类: Programe 标签: , , , , ,

强制CGIProxy支持SSL

2010年4月20日 没有评论

CGIProxy是一个perl写的在线代理软件
通常只要系统装有openssl和perl模块儿Net::SSLeay
CGIProxy就支持SSL的
但是
如果CGIProxy没有跑在secure server上
也就是不是https,而仅是http的话
会出错,提示如下:

Retrieval of secure URLs through a non-secure proxy is forbidden.

我的web服务器是不支持https(关键是要支持的话要另花钱:)的
但好在系统上是有openssl和Net::SSLeay的
打开nph-proxy.cgi看看代码
将$OVERRIDE_SECURIT设成1就好了
像这样:

$OVERRIDE_SECURITY= 1 ;

hiphop for php from facebook

2010年2月11日 没有评论

hiphop for php是facebook开发的一款的php转换软件
他能将php代码转换成高度优化的c++代码
然后再用g++编译成二进制文件
用这样得到的二进制文件跑在服务器上取代php代码以提高性能
据说能将系统的cpu占有率降低50%

BTW:
据说hiphop for php将在2010年早期由facebook放出
我们拭目以待

使用perl中函数sysopen的一个弱智问题

2009年12月30日 没有评论

闲暇无聊学着写过一个perl程序
用来从网上抓点东西下来
再改吧改吧,存到本地的文件里
最早打开文件用的是open
但后来为了直接在open时就设定打开的文件的权限
就改用sysopen
像这样:

my $save_u = umask();
umask(0);
if (sysopen(FH, $path, O_RDWR|O_CREAT, $fmode)) {
print FH ($data);
close(FH);
} else {
print “Couldn’t open $path for writing:$!
\n”;
return 2;
}
umask($save_u);

但后来发现写入的文件尾巴上老有点问题
最开始老以为是某个替换内容用的正则表达式有问题
但查了半天都没查出来为什么
把每一个正则替换前后的数据都打印出来了没发现问题
最后甚至于把写到文件里去的数据打出来
还是没发现问题
最后就只有落到sysopen这里
认为是写错了
最后把sysopen那一行改成

if (sysopen(FH, $path, O_WRONLY|O_CREAT|O_TRUNC, $fmode)) {

这下终于好了
不过到今天才真正想明白为什么出问题
是因为sysopen时少了个参数O_TRUNC
这样的话打开的文件原来存在的话
没有执行truncate工作
直接从前往后写
也就是覆盖原来的内容
这种情况下
如果新内容比老内容多的话不会出问题
因为原来所有的内容都给覆盖掉了
可万一新内容比旧内容少的时候
就会留下老内容的一段尾巴
所以我们从页面上看老是尾巴上多一点东西
至于O_RDWR改成O_WRONLY则是非必须的
原因是为什么呢
这是因为打开原来存在的文件的时候没有truncate掉原来的内容
所以写到最后一段
如果没内容写了
那么原来文件的最后一部分就留下了
所以呢解决的方法很简单
在sysopen的option参数中加上O_TRUNC即可

perl程序出”Unknown encoding: gb18030″错的问题

2009年12月1日 1 条评论

写了个简单的perl程序
用来转码(gbk->utf8,utf8->gbk)之类
其中涌到了perl包Encode
发现个问题
当调用Encode包中的方法decode的时候,出错了
代码是这么写的
$html = decode($charset, $html);
当执行到这里的时候就报错:

Unknown encoding: gb18030

上面代码里的$charset是通过Encode::Detect::Detector->detect方法检测到的某个文件的编码
这里是gb18030

最后是怎么解决的呢
装了个perl包:Encode::HanExtra
并在程序里加上

use Encode::HanExtra;

问题就解决了