WelcomeYou :

感谢光临 DH`s BLOG 。欢迎常来踩!


预览模式: 普通 | 列表

Tokyo Tyrant 缺点:在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位CPU、操作系统上安装运行。 

一、安装
1、首先编译安装tokyocabinet数据库

wget http://www.1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz
tar zxvf tokyocabinet-1.4.45.tar.gz
cd tokyocabinet-1.4.45/
./configure
#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
#./configure --enable-off64
make
make install
cd ../


2、然后编译安装tokyotyrant
wget http://www.1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
tar zxvf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40/
./configure
make
make install
cd ../




二、配置
1、创建tokyotyrant数据文件存放目录
mkdir -p /ttserver/


2、启动tokyotyrant的主进程(ttserver)
(1)、单机模式
ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000


(2)、双机互为主辅模式
服务器192.168.1.91:
ulimit -SHn 51200
ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000


服务器192.168.1.92:
ulimit -SHn 51200
ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000


(3)、参数说明
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname] 

-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978 
-thnum num : 指定线程数。默认为8个线程。 
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。 
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号) 
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。

如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中:
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000


如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:
ulimit -SHn 51200


3、停止tokyotyrant(ttserver)
ps -ef | grep ttserver

找到ttserver的进程号并kill,例如:
kill -TERM 2159




三、调用
1、任何Memcached客户端均可直接调用tokyotyrant。

2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:
(1)、写数据,将数据“value”写入到“key”中:
curl -X PUT http://127.0.0.1:11211/key -d "value"


(2)、读数据,读取“key”中数据:


(3)、删数据,删除“key”:

日本是这么学中文的

 

这个教材也太与时俱进了。。。。

 

Cage The Elephant Ain't No Rest For The Wicked

很有感觉的一首歌 歌词写得也很GOOD

在线播放文件 -- cage the elephant ain`t no rest for the wicked
 

Cage The Elephant Ain't No Rest For The Wicked

I was walking down the street,
我走在路上

When out the corner of my eye
透过余光

I saw a pretty little thing approaching me.
看到一个美丽的小尤物正靠近我

She said "I've never seen a man
她说:“我从未见过一个男人

Who looks so all alone,
像你这样孤单

Could you use a little company?
你是否想找个伴?
     
If you pay the right price
如果价钱合适

Your evening will be nice,
你今晚将过的很愉快

or you can go and send me on my way."
或者你走吧让我继续这样下去”

I said "You're such a sweet young thing
我说:“你如此年轻可爱

Why you do this to yourself?"
为何要干这一行?”

She looked at me and this is what she said, 
她看着我说:

"Oh, there ain't no rest for the wicked, 
黑暗困境永不会终止,

Money don't grow on trees.
钱不会长在树上

I got bills to pay, 
帐要还

I got mouths to feed,
家要养

There ain't nothing in this world for free.
世上没有免费的东西

I know I can't slow down,
我知道我不能慢下脚步

I can't hold back,Though you know, I wish I could.
尽管我想退缩但你知道我不能

Oh, there ain't no rest for the wicked,
哎,黑暗困境永不会终止

Until we close our eyes for good".
只有闭上眼睛时才能一了百了

Not even fifteen minutes later
过了还不到十五分钟

I'm still walking down the street,
我走在这条街上

When I saw a shadow of a man creep out of sight.
我看到一条黑影窜出

Then he walks up from behind
他从身后走上来

And puts a gun up to my head,
拿枪指着我的头

He made it clear he wasn't looking for a fight.
他明白的告诉我,他不是来找麻烦的

He said "Give me all you've got
他说:把所有都掏出来

I want your money not your life,
我要你的钱不要你的命

But if you try to make a move I won't think twice." 
不过如果你想耍聪明或者反抗,我会毫不犹豫”

I said "You can have my cash
我告诉他“你可以把钱拿走

But first you know I got to ask
但是首先我想问

What made you want to live this kind of life?"
是什么逼你走上这条道?”

He said "There ain't no rest for the wicked, 
他说:黑暗困境永不会终止

Money don't grow on trees.
钱不会长在树上

I got bills to pay, 
帐要还

I got mouths to feed, 
家要养

There ain't nothing in this world for free.
世上没有免费的东西

I know I can't slow down,
我知道我不能慢下脚步

I can't hold back,Though you know, I wish I could.
尽管我想退缩但你知道我不能

Oh no ain't no rest for the wicked,
哎,黑暗困境永不会终止

Until we close our eyes for good".
只有闭上眼睛时才能一了百了

Now a couple hours passed
现在几个小时过去了

And I was sitting at my house,
我坐在家里

The day was winding down and coming to an end.
天色渐暗一天将逝

So I turned on the TV
我打开电视

And flipped it over to the news,
换着频道,播到新闻

And what I saw I almost couldn't comprehend.
我看到难以理解的事情

I saw a preacher man in cuffs he'd taken money from the church,
我竟然一个牧师,带着手铐,从教堂里拿出钱

He's got this bank account with righteous dollar bills. 
他合法地把他们存入帐户

But even still I can't say much
但我没什么可说的

Because I know we're all the same, 
因为我知道我们都一样

Oh yes we've all got to satisfy those thrills. 
我们都要满足那欲望

"You know there ain't no rest for the wicked, 
你知道黑暗困境永不会终止,

Money don't grow on trees.
钱不会长在树上

We got bills to pay, 
帐要还

We got mouths to feed,
家要养

There ain't nothing in this world for free.
世上没有免费的东西

I know I can't slow down,
我知道我不能慢下脚步

I can't hold back,Though you know, I wish I could.
尽管我想退缩但你知道我不能

You know there ain't no rest for the wicked, 
你知道黑暗困境永不会终止

Until we close our eyes for good".
只有闭上眼睛时才能一了百了
 

linux awk用法小结

awk 用法:awk ' pattern {action} ' 

变量名 含义 
ARGC 命令行变元个数 
ARGV 命令行变元数组 
FILENAME 当前输入文件名 
FNR 当前文件中的记录号 
FS 输入域分隔符,默认为一个空格 
RS 输入记录分隔符 
NF 当前记录里域个数 
NR 到目前为止记录数 
OFS 输出域分隔符 
ORS 输出记录分隔符 

1、awk '/101/' file 显示文件file中包含101的匹配行。 
awk '/101/,/105/' file 
awk '$1 == 5' file 
awk '$1 == "CT"' file 注意必须带双引号 
awk '$1 * $2 >100 ' file 
awk '$2 >5 && $2<=15' file 
2、awk '{print NR,NF,$1,$NF,}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 
awk '/101/ {print $1,$2 + 10}' file 显示文件file的匹配行的第一、二个域加10。 
awk '/101/ {print $1$2}' file 
awk '/101/ {print $1 $2}' file 显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。 
3、df | awk '$4>1000000 ' 通过管道符获得输入,如:显示第4个域满足条件的行。 
4、awk -F "|" '{print $1}' file 按照新的分隔符“|”进行操作。 
awk 'BEGIN { FS="[: \t|]" } 
{print $1,$2,$3}' file 通过设置输入分隔符(FS="[: \t|]")修改输入分隔符。 

Sep="|" 
awk -F $Sep '{print $1}' file 按照环境变量Sep的值做为分隔符。 
awk -F '[ :\t|]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表空格、:、TAB、|同时做为分隔符。 
awk -F '[][]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表[、] 
5、awk -f awkfile file 通过文件awkfile的内容依次进行控制。 
cat awkfile 
/101/{print "\047 Hello! \047"} --遇到匹配行以后打印 ' Hello! '.\047代表单引号。 
{print $1,$2} --因为没有模式控制,打印每一行的前两个域。 
6、awk '$1 ~ /101/ {print $1}' file 显示文件中第一个域匹配101的行(记录)。 
7、awk 'BEGIN { OFS="%"} 
{print $1,$2}' file 通过设置输出分隔符(OFS="%")修改输出格式。 
8、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在处理任意行之前进行的操作。 
{max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一个域的最大值。 
(表达式1?表达式2:表达式3 相当于: 
if (表达式1) 
表达式2 
else 
表达式3 
awk '{print ($1>4 ? "high "$1: "low "$1)}' file 
9、awk '$1 * $2 >100 {print $1}' file 显示文件中第一个域匹配101的行(记录)。 
10、awk '{$1 == 'Chi' {$3 = 'China'; print}' file 找到匹配行后先将第3个域替换后再显示该行(记录)。 
awk '{$7 %= 3; print $7}' file 将第7域被3除,并将余数赋给第7域再打印。 
11、awk '/tom/ {wage=$2+$3; printf wage}' file 找到匹配行后为变量wage赋值并打印该变量。 
12、awk '/tom/ {count++;} 
END {print "tom was found "count" times"}' file END表示在所有输入行处理完后进行处理。 
13、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4; 
END {print "The total is $" cost>"filename"}' file gsub函数用空串替换$和,再将结果输出到filename中。 
1 2 3 $1,200.00 
1 2 3 $2,300.00 
1 2 3 $4,000.00 

awk '{gsub(/\$/,"");gsub(/,/,""); 
if ($4>1000&&$4<2000) c1+=$4; 
else if ($4>2000&&$4<3000) c2+=$4; 
else if ($4>3000&&$4<4000) c3+=$4; 
else c4+=$4; } 
END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file 
通过if和else if完成条件语句 

awk '{gsub(/\$/,"");gsub(/,/,""); 
if ($4>3000&&$4<4000) exit; 
else c4+=$4; } 
END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file 
通过exit在某条件时退出,但是仍执行END操作。 
awk '{gsub(/\$/,"");gsub(/,/,""); 
if ($4>3000) next; 
else c4+=$4; } 
END {printf "c4=[%d]\n",c4}"' file 
通过next在某条件时跳过该行,对下一行执行操作。 


14、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 把file1、file2、file3的文件内容全部写到fileall中,格式为 
打印文件并前置文件名。 
15、awk ' $1!=previous { close(previous); previous=$1 } 
{print substr($0,index($0," ") +1)>$1}' fileall 把合并后的文件重新分拆为3个文件。并与原文件一致。 
16、awk 'BEGIN {"date"|getline d; print d}' 通过管道把date的执行结果送给getline,并赋给变量d,然后打印。 
17、awk 'BEGIN {system("echo "Input your name:\\c""); getline d;print "\nYour name is",d,"\b!\n"}' 
通过getline命令交互输入name,并显示出来。 
awk 'BEGIN {FS=":"; while(getline< "/etc/passwd" >0) { if($1~"050[0-9]_") print $1}}' 
打印/etc/passwd文件中用户名包含050x_的用户名。 

18、awk '{ i=1;while(i<NF) {print NF,$i;i++}}' file 通过while语句实现循环。 
awk '{ for(i=1;i<NF;i++) {print NF,$i}}' file 通过for语句实现循环。 
type file|awk -F "/" ' 
{ for(i=1;i<NF;i++) 
{ if(i==NF-1) { printf "%s",$i } 
else { printf "%s/",$i } }}' 显示一个文件的全路径。 
用for和if显示日期 
awk 'BEGIN { 
for(j=1;j<=12;j++) 
{ flag=0; 
printf "\n%d月份\n",j; 
for(i=1;i<=31;i++) 

if (j==2&&i>28) flag=1; 
if ((j==4||j==6||j==9||j==11)&&i>30) flag=1; 
if (flag==0) {printf "%02d%02d ",j,i} 


}' 
19、在awk中调用系统变量必须用单引号,如果是双引号,则表示字符串 
Flag=abcd 
awk '{print '$Flag'}' 结果为abcd 
awk '{print "$Flag"}' 结果为$Flag
标签: awk linux

dell R610 硬盘测速

[root@localhost ~]# fdisk -l               

Disk /dev/sda: 146.1 GB, 146163105792 bytes
255 heads, 63 sectors/track, 17769 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      514048+  83  Linux
/dev/sda2              65         325     2096482+  82  Linux swap / Solaris
/dev/sda3             326       17769   140118930   83  Linux
[root@localhost ~]# hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   19272 MB in  2.00 seconds = 9643.81 MB/sec
 Timing buffered disk reads:  396 MB in  3.00 seconds = 131.88 MB/sec
标签: linux
linux中用shell获取昨天、明天或多天前的日期:
在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:
# -d, --date=STRING display time described by STRING, not `now’
[root@Gman root]# date -d next-day +%Y%m%d #明天日期
20091024
[root@Gman root]# date -d last-day +%Y%m%d #昨天日期
20091022
[root@Gman root]# date -d yesterday +%Y%m%d #昨天日期
20091022
[root@Gman root]# date -d tomorrow +%Y%m%d # 明天日期
20091024
[root@Gman root]# date -d last-month +%Y%m #上个月日期
200909
[root@Gman root]# date -d next-month +%Y%m #下个月日期
200911
[root@Gman root]# date -d next-year +%Y #明年日期
2010
DATE=$(date +%Y%m%d --date ’2 days ago’) #获取昨天或多天前的日期
名称 : date
使用权限 : 所有使用者
使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
时间方面 :
% : 印出
% %n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],
其中 MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数
把计 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行,再显示目前日期 : date +%T%n%D
显示月份和日数 : date +%B %d
显示日期和设定时间(12:34:56) : date --date 12:34:56
设置系统当前时间(12:34:56):date --s 12:34:56
注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
ntp时间同步
linux系统下默认安装了ntp服务,手动进行ntp同步如下
ntpdate ntp1.nl.net
当然,也能指定其他的ntp服务器
-------------------------------------------------------------------
扩展功能
date 工具可以完成更多的工作,不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几,并得到相对于当前日期的相对日期。了解某一天是星期几
GNU 对 date 命令的另一个扩展是 -d 选项,当您的桌上没有日历表时(UNIX 用户不需要日历表),该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期究竟是星期几:
$ date -d "nov 22"
Wed Nov 22 00:00:00 EST 2006
$
在本示例中,您可以看到今年的 11 月 22 日是星期三。
所以,假设在 11 月 22 日召开一个重大的会议,您可以立即了解到这一天是星期三,而这一天您将赶到驻地办公室。
获得相对日期
d 选项还可以告诉您,相对于 当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
例如,您需要了解两星期以后的日期。如果您处于 Shell 提示符处,那么可以迅速地得到答案:
$ date -d ’2 weeks’
关于使用该命令,还有其他一些重要的方法。使用 next/last指令,您可以得到以后的星期几是哪一天:
$ date -d ’next monday’ (下周一的日期)
$ date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
$ date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
$ date -d last-month +%Y%m(上个月是几月)
$ date -d next-month +%Y%m(下个月是几月)
使用 ago 指令,您可以得到过去的日期:
$ date -d ’30 days ago’ (30天前的日期)
您可以使用负数以得到相反的日期:
$ date -d ’dec 14 -2 weeks’ (相对:dec 14这个日期的两周前的日期)
$ date -d ’-100 days’ (100天以前的日期)
$ date -d ’50 days’(50天后的日期)
这个技巧非常有用,它可以根据将来的日期为自己设置提醒,可能是在脚本或 Shell 启动文件中,如下所示:
DAY=`date -d ’2 weeks’ +"%b %d"`
if test "`echo $DAY`" = "Aug 16"; then echo ’Product launch is now two weeks away!’; fi 
标签: linux shell

删除.svn文件夹

在windows下,将下面的语句保存为svndelete.reg,双击写入注册表后,在svn的文件夹点击右键就会出现Delete SVN Folders,建议先备份svn文件再操作

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] 
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command] 
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

linux下的删除.svn文件夹命令

find . -type d -name ".svn"|xargs rm -rf

标签: svn

nginx文件类型错误解析漏洞,简单修复(cgi.fix_pathinfo=0)

#vi php.ini

设置:cgi.fix_pathinfo=0

没有这个参数?自己加

重启PHP

(此修改会影响到使用PATH_INFO伪静态的应用.)

技术含量0,写下提醒自己,漏洞来了,补!

 一种修改nginx.conf配置文件的临时解决方法

location ~* .*\.php($|/)
 
{
 
if ($request_filename ~* (.*)\.php) {
 
set $php_url $1;
 
}
 
if (!-e $php_url.php) {
 
return 403;
 
}
 
 
fastcgi_pass 127.0.0.1:9000;
 
fastcgi_index index.php;
 
include fcgi.conf;
标签: nginx