WelcomeYou :

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


预览模式: 普通 | 列表

SVN 重置用户名密码-备份下省的再去搜

很多人抱怨使用了一些SVN的客户端软件,保存用户名和密码之后,找不到在什么地方修改,甚至卸载掉相关软件之后也没办法清除这些信息。 其实有些东西是保存在Documents and Settings\【user】\Application Data这个目录下的。 仔细找一下就有可能解决些问题。 用户名 密码保存在 C:\Documents and Settings\【user】\Application Data\Subversion\auth\svn.simple 这个目录下。 可以清除这个目录下的相关文件
标签: svn

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”:

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

mysql show

如果可以用navicat工具连过去,查看用户权限,修改用户权限都是很方便的,但很多时候MySQL都是只允许localhost访问,这时就只能用命令了

mysql> select * from mysql.user where user=’username’;

mysql> show grants for username@localhost;

show可以看到很多东西
show create database dbname;  这个可以看到创建数据库时用到的一些参数。
show create table tickets;    可以看到创建表时用到的一些参数

标签: mysql show