Jan 29, 2010
实这时最好用日志轮询,之前这个WEB服务器没有做这个配置,本应该配置WEB服务器时就应该做的。现在配置下也不晚。
1.首先得要软件http://cronolog.org/download/index.html
Version 1.6.2 released 2002-01-24 (gzip’ed tar file)
Version 1.6.1 released 1999-12-20 (gzip’ed tar file)
Win 32 version (ZIP file)
Version 1.6 released 1999-12-16 (gzip’ed tar file)
Version 1.5b9 released on 4 June 1998 (gzip’ed tar file)
Version 1.4 released 20 December 1996 (gzip’ed tar file)
如果有Windows的要下Win_32_version(ZIP file) Linux习惯用哪种包就用哪种.
2. 在Linux 下安装cronolog
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure (注意:默认是安装在/usr/local下 cronolog的命令在/usr/local/sbin下,这个要清楚)
make ; make install
3.在Windows下安装cronolog
在Windows下很简单,直接把cronolog.exe解压Copy到apache目录下的bin目录中.
4.配置都是一样的格式,不过要注意Linux和Windows下斜杠的方向.
Linux下
例:cronolog命令在/usr/local/sbin 下 日志文件在 /usr/local/apache2/logs/下
在FormatLog附近加入两句:
CustomLog [...]
Jan 26, 2010
有时候经常使用sort来排序,需要预处理把需要排序的field语言在最前面。实际上这是
完全没有必要的,利用-k参数就足够了。
比如sort all
1 4
2 3
3 2
4 1
5 0
如果sort -k 2的话,那么执行结果就是
5 0
4 1
3 2
2 3
1 4
它按照第二个域进行排序。
如下为man sort:
Usage: sort [OPTION]… [FILE]…
Write sorted concatenation of all FILE(s) to standard output.
Ordering options:
Mandatory arguments to long options are mandatory for short options too.
-b, –ignore-leading-blanks ignore leading blanks
-d, –dictionary-order consider only blanks and alphanumeric characters
-f, –ignore-case fold lower case [...]
Jan 26, 2010
不知觉间,php使了两年多了,中间踩过不知多少坑,当然,也从中体悟到
很多东西,也做了不少东西,多多少少有些感想,慢慢总结下来吧。
1 php语方层面很随意:
这也主要是由它的功能及所属的层面决定的吧。php弱类型,在变量比较的
时候可以选择使用==或===,前者表示变量转换成同类型后的值是不是相等,
而后者则是要求首先是类型相同,然后值也相同。
php变量可以动态定议,它不需要提前定意一个变量,也不必要定义的时候
指定该变量的类型。比如var $variable;则一个$variable变量便产生了,
它的类型实际是由赋于它的值决定的。因此这一方面,使用都可以少了许多
束缚。
2 php有很好的正则支持:
php提供了较为丰富的正则支持,如preg_match, preg_match_all等。
如果想从一个字符串或文件中提取出来一些片段,那是十分方便的。比如
有如下文本:
192.168.1.1 xxx user:zja601 url:http://blog.niukey.com
如果我们想提取出user和url的话,如简单语句就可搞定:
if (preg_math(’/^.*user:([^\s]*)\surl:(.*)$/’, $string, $arr_result)) {
printf(”user is:%s url is:%s”, $arr_result[1], $arr_result[2]);
}
简单吧,当然,shell脚本可能会有更简单的办法,比如:sed -n ’s/^.*user:\([\s]*\)\burl:\(.*\)$/\1 \2/p’
但php可以结合其它的一些场合,而不像shell那么孤立的功能,使得整体功能更加
灵活。
3 php有强大的函数库:
比如数组$_GET参数到字符串形式的来回转换,有explode和build_string_query就很轻
松的搞定了。比如数组的array_merge,push, pop等等,可能帮助你事半功位。比如php数
组的强大功能,给你在c/c++花很大力气才能达到的效果。比如操作pdf,文件等函数,在
需要的时候文档一下即可搞定。
4 php对面向对象的思想支持的也相对不错:
从php4之后,php对面象对象支持的越来越好。特别是interface的抽象,可能使设计的
时候更加关注接口间的合理性考量。php的继承关系也达到了一个很好的复用效果,如果你
是一位C++爱好者,那么也试一下php的C++版本吧,一定会有不错的效果。php的对象的
执行也是动态的,就是在c++或java里讲的后期绑定吧。
5 php语言的动态性:
php语言具有动态性,它在动态执行的时候,解析代码。源代码写好即可执行,不必要
经历一个繁琐的编译过程。动态性也表现为程序运行时解析,因此它只解析运行到的代码
而不去解析未执行的代码。(尽管有人说这一点并不太好)动态性的另外一个层面就是上
面讲的对象的动态性了。
其实php也有其内在的陷阱
比如函数参数的引用传递,比如函数返回值的引用返
回,这些都有可能造成php的fatal的出现。另外,正是由于php的弱类型,往往有
时候,我们不能很精确的把握程序进行时的值或状态。如果真的想得到当时的值或
状态,可能花费的力气并不值得(并不是做不到)。php的@符号用来抑制一些错误
的报出,有时候不做一些额外的判断,就有可能有意想不到的问题产生。php函数名
的长度会影响其执行的效率,这可能许多程序员不会注意到(当然很多场合不必要去
注意这些事),尽管我们选择php语言,不是选择它的效率。php动态执行,因此一
些有基本语法错误的地方,如果程序运行时走不到,那么有可能就不会被发现。诸如
此类的还有很多。。。
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 25, 2010
我们在运行程序的时候,经常遇到给它定义一个变量的情况,比如
-D -v。当然,不同的项目可能不同。但shell程序,如何给它传递一些
自定义的变量呢?
比如有如下代码:
#!/bin/shell
#file test.sh
if [ -z ${PARAM1} ]; then
PARAM1=test1
fi
echo ${PARAM1}
#end shell
test1为我们为test.sh设置的默认变量值,如果运行sh test.sh
那么输出为:
test1
如果我们想给其传一个参数为test2,那么该如何实现呢?
实际很简单:
PARAM1=hello sh test.sh
那么输出就是hello了,简单吧!
详细的判断条件文章请参考:shell常用条件判断
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 25, 2010
猛然发现磁盘/dev/sda2的空间占用率为100%,df命显示结果如下:
FileSystem XXX Used%
/dev/sda2 xxx 100%
………………………………….
为什么呢?
于是想着一般临时或日志文件都存放在/var目录下,于是执行了如下命令
cd /var && du -sh `ls`
吓了一大跳,spool/clientmqueue占用了好几G的空间,为什么呢?仔细思考了
一下,应该是一些未被处理的消息被以文件的形式存在了这里。因此,如果没有
紧要的消息队列,此目录下的文件是可以清理的。
cd /var/spool/clientmqueue && rm * -rf
好了,问题解决了~~~~~~~~~~
上面解决了磁盘空间的问题,但出现这种问题的源头在哪呢?于是看了一下clientmqueue内部
的一个文件,显示是脚本运行的一个错误。与是查证了一下该脚本是以crontab方式运行的,
如下:
1 * * * * * cd /home/test/test && sh test.sh
问题找出来了,原来对于结果没有进行重定向!修改一下吧
1 * * * * * cd /home/test/test && sh test.sh 1>/dev/null 2>/dev/null
再看clientmqueue目录下,果真不再有新的文件生成了:)
实际上,输出重定向有另外一种更简洁的写法,即&>/dev/null,上述代码可写成:
1 * * * * * cd /home/test/test && sh test.sh &>/dev/null
怎么样,是不是更简洁了。
多谢
张久安
If you enjoyed this post, make [...]
Jan 22, 2010
上面搞了几篇休闲的文章,下面接着写篇技术方面的东西吧。
文件的合并与拆分是经常遇到的问题,比如为了对日志的统一管理及查询,
可能经常需要将许多日志合并成一个,然后对这一个文件作处理,这样可以
提高工作效率,下面来给大家先讲述如何利用awk来实现文件的合并。
利用awk命令实现文件的合并:
比如有文件f1, f2, f3,f4,可以利用下面的命令来实现文件的合并:
for i in `seq 1 4`; do awk ‘{print FILENAME ” ” $0;}’ f$i >> fall; done
好了,现在fall的第一个字段为文件名,后面为文件的内容,简单吧!
有时候又会遇到另外一个问题,比如定位问题的时候,我们知道它在哪
个文件出了错,想更细节的在这个文件去查找,但如果在fall内部查找,可能
会花大量的时候流费在定位出问题的点上。为了解决这个问题,就需要文件的
切分还原了。下面来介绍一下文件的拆分。
利用awk命令实现文件的拆分:
我们可以使用如下简单的合令来完成此项任务:
awk ‘{fname=$0; sub($1, “”, $0); print $0 >> fname;}’ fall
简单吧,快试验一下吧。
如果想了解更为详细的awk用法,请到这里转转吧:http://blog.niukey.com/2009/05/12/awk%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E5%B0%8F%E8%8A%82/
多谢
张久安
awk ‘
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 5, 2010
NLP Toolbox
CLT http://complingone.georgetown.edu/~linguist/compling.html
GATE http://gate.ac.uk/
Natural Language Toolkit(NLTK)
http://nltk.org
MALLET http://mallet.cs.umass.edu/index.php/Main_Page
OpenNLP http://opennlp.sourceforge.net/
English Stemmer
Snowball http://snowball.tartarus.org/
English POS Tagger
Stanford POS Tagger http://nlp.stanford.edu/software/tagger.shtml
TreeTagger http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/
TnT http://www.coli.uni-saarland.de/~thorsten/tnt/
English&Chinese Parser
Stanford Parser http://nlp.stanford.edu/software/lex-parser.shtml
Berkeley Parser http://nlp.cs.berkeley.edu/Main.html#Parsing
English Keyphrase Extractor
KEA http://www.nzdl.org/Kea/index_old.html
English Name Entity Recognizer
Stanford NER http://nlp.stanford.edu/software/CRF-NER.shtml
Chinese Word Segmentator 中科院ICTCLAS http://www.nlp.org.cn/project/project.php?proj_id=6
Stanford Word Segmenter http://nlp.stanford.edu/software/segmenter.shtml
Topic Modeling Tools
Matlab [...]
Dec 29, 2009
个人总结了一下QQ开源项目:(开源代码不要用于商业用途,只限于技术研究)
第一个要说的就是lumaqq了,基于linux平台的开源项目。
相关介绍:查看此处
第二个是myqq3,是一款支持linux和windows平台的qq客户端。
相关介绍:查看此处
第三个是myqq-jieflower。有了这三个,基本对qq客户端就了解的差不多了。
相关介绍:查看此处
如果想了解更详细的信息,请参照相关协议
查看此处
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Dec 25, 2009
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。
查看文件编码
在Linux中查看文件编码可以通过以下几种方式:
1.在Vim中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
2. enca (如果你的系统中没有安装这个命令,可以用sudo yum install -y enca 安装 )查看文件编码
$ enca filename
filename: Universal transformation format 8 bits; UTF-8
CRLF line terminators
需要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:
Unrecognized encoding
文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8
2. enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
enconv -L zh_CN -x UTF-8 filename
3. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
如果你只是想对文件名进行编码转换,可以参照这篇文章:
If you enjoyed this post, make sure you subscribe [...]
Dec 25, 2009
一、利用iconv函数族进行编码转换
在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。
iconv函数族的头文件是iconv.h,使用前需包含之。
#include <iconv.h>
iconv函数族有三个函数,原型如下:
(1) iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。
(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。 (3) int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。
例子1: 用C语言实现的转换示例程序
/* f.c : 代码转换示例C程序 */
#include <iconv.h>
#define OUTLEN 255
main()
{
char *in_utf8 = “姝e?ㄥ??瑁?”;
char *in_gb2312 = “正在安装”;
char out[OUTLEN];
//unicode码转为gb2312码
rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
printf(”unicode–>gb2312 out=%sn”,out);
//gb2312码转为unicode码
rc = g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN);
printf(”gb2312–>unicode out=%sn”,out);
}
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = [...]