关于tokyo cabinet的python库 不指定

zeus , 2010/03/19 16:07 , Python , Comments(0) , Reads(595) , Via Original
tokyo cabinet是一个很有名的缓存数据库,在网上大致的描述是这样的:tokyo cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。(其运行条件是:linux kernel 2.6.16, ext3的文件系统,Intel Xeon quad core 2.3GHz 8G RAM compile gcc4.2.3(-O3参数编译优化) glibc2.7),支持几乎所有的主流平台,除了windows,哈哈哈!比起windows来说可能linux,unix,mac os x会更好点。

我是今年年初的时候在杭州的时候接触这个好东东的,我们的系统也是要用它来做服务器缓存的,当时是用的c来做的,回到北京以后,参加了一次python的会课,那次会课恰恰清风提到了tokyo cabinet在python中的应用,不过他好像当时并没有现成的python封装库,自己完成的一些封装,tokyo cabinet已经有c,perl,ruby,java,lua的官方版本,可是就是唯有python没有,据说这个作者不会python有关系,由于现在我做的东西急需一个cache数据库,所有又打起了它的主意,昨天在晚上google了下,得来全不费功夫.

这是一个现成的tokyo cabinet的python封装库http://github.com/rsms/tc,不过先得编译安装tokyo cabinet的c库,安装过程如下:

wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.43.tar.gz
tar zxvf tokyocabinet-1.4.43.tar.gz
cd tokyocabinet-1.4.43/
./configure
make
make install


然后再安装python的egg包,因为该项目是用git来管理的,所以先得安装git

git clone git://github.com/rsms/tc.git
cd tc
sudo python setup.py install

不过这里要注意有可能会出现有可能在安装的过程中会出现libtokyocabinet.so.8: cannot open shared object file: No such file or directory,请检查你的/etc/ld.so.conf文件,看它有没有包含你的tokyo cabinet的库路径,一般来讲tokyo cabinet会安装在/usr/local/lib下面,可以把这个路径写入/etc/ld.so.conf中,然后再ldconfig /etc/ld.so.conf就可以顺利安装了tc了

至于怎么去用,你可以参考下tc下的/lib/tc/test/的三个hdb.py,bdb.py,fdb.py的单元测试的例子,例子很详细
Tags: , ,

Ubuntu-tweak howto install? 不指定

zeus , 2010/03/15 13:38 , Linux&Bsd , Comments(0) , Reads(530) , Via Original
上面的方法,安装后不会自动更新。这是从Ubuntu-tweak官方站上转录的:

How to add the source of Ubuntu Tweak
添加源

open your terminal, first import the key:
开一控制台终端,下载及添加密钥

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com FE85409EEAB40ECCB65740816AF0E1940624A220

type the command to run gedit(or other editor in your opinion) to modify the sources.list:
编辑/etc/apt/sources.list文件,按照你的Ubuntu版本加入下面两行:

sudo gedit /etc/apt/sources.list

And put the two line into it(If you are using Ubuntu 8.04 Hardy or early) :

(注:我一般用System->Administration->Software Sources管理器添加第三方源)

deb http://ppa.launchpad.net/tualatrix/ubuntu hardy main
deb-src http://ppa.launchpad.net/tualatrix/ubuntu hardy main

Or Ubuntu 8.10 Intrepid:

deb http://ppa.launchpad.net/tualatrix/ubuntu intrepid main
deb-src http://ppa.launchpad.net/tualatrix/ubuntu intrepid main

Or Ubuntu 9.04 Jaunty:

deb http://ppa.launchpad.net/tualatrix/ubuntu jaunty main
deb-src http://ppa.launchpad.net/tualatrix/ubuntu jaunty main

Then update the source and install or upgrade Ubuntu Tweak:
然后更新源并安装Ubuntu Tweak。今后如有更新,系统会提示。

sudo apt-get update
sudo apt-get install ubuntu-tweak

if you have installed, just type:

sudo apt-get dist-upgrade
Tags: ,

rsync配置与应用 不指定

zeus , 2010/03/14 22:56 , Linux&Bsd , Comments(0) , Reads(472) , Via Original
简介
对于选择linux 作为应用平台的的中小型企业或网站来说,往往面临如何实现数据远程备份或者网站镜象的问题,虽然有商业化的备份和镜象产品可供选择,但这些产品的价格往往过于昂贵。因此如何利用自由软件高效实现远程备份和网站镜象就成为一个值得讨论的话题。

通过网络进行远程数据备份或者网站镜象的最简单的方法就是使用wget,但是这种方式每次都需要将所有数据都重新在网络上传输一遍,而不考虑哪些文件是经过更新的,因此效率非常低下。尤其在需要备份的数据量很大的时候,往往需要花费数个小时来在网络上进行数据传输。

因此这里就介绍一种高效的网络远程备份和镜象工具-rsync,它可以满足绝大多数要求不是特别严格的备份需求。

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了--remote sync。它的特性如下:

可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
优化的流程,文件传输效率高。
可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。
软件下载
rysnc的主页地址为:

http://rsync.samba.org/

目前最新版本为2.4.6。可以选择从原始网站下载:http://rsync.samba.org/ftp/rsync/。也可以选择从本站下载:rsync 2.4.6。

编译安装
rsync的编译安装非常简单,只需要以下简单的几步:

[root@www rsync-2.4.6]# ./configure
[root@www rsync-2.4.6]# make
[root@www rsync-2.4.6]# make install

但是需要注意的是必须在服务器A和B上都安装rsync,其中A服务器上是以服务器模式运行rsync,而B上则以客户端方式运行rsync。这样在web服务器A上运行rsync守护进程,在B上定时运行客户程序来备份web服务器A上需要备份的内容。

rsync服务器
1、rsync服务器的启动

在web服务器A上需要以守护进程方式来启动rsync服务器,只需要运行:

[root@www rsync-2.4.6]# /usr/local/bin/rsync --daemon

即可启动。rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。

如果要在启动时把服务起来,有几种不同的方法,比如:

a、加入inetd.conf

编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873。编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync --daemon

注:对于xinetd,设置方法类似。

b、加入rc.local

编辑/etc/rc.d/rc.local,在最后添加:

/usr/local/bin/rsync --daemon

2、rsync的配置

对于rsync服务器来说,最重要和复杂的就是它的配置了。rsync服务器的配置文件为/etc/rsyncd.conf,其控制认证、访问、日志记录等等。

该文件是由一个或多个模块结构组成。一个模块定义以方括弧中的模块名开始,直到下一个模块定义开始或者文件结束,模块中包含格式为name = value的参数定义。每个模块其实就对应需要备份的一个目录树,比方说在我们的实例环境中,有三个目录树需要备份:/www/、/home /web_user1/和/home/web_user2/,那么就需要在配置文件中定义三个模块,分别对应三个目录树。

配置文件是行为单位的,也就是每个新行都表示一个新的注释、模块定义或者参数赋值。以#开始的行表示注释,以""结束的行表示下面一行是该行的继续。参数赋值中等号后可能是一个大小写不敏感的字符串、一个以trure/false表示的布尔值。

全局参数

在文件中[modlue]之前的所有参数都是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。

motd file

"motd file"参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。

log file

"log file"指定rsync的日志文件,而不将日志发送给syslog。

pid file

指定rsync的pid文件。

syslog facility

指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。

模块参数

在全局参数之后就需要定义一个或多个模块了,模块中可以定义以下参数:

comment

给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

path

指定该模块的供备份的目录树路径,该参数是必须指定的。

use chroot

如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true。

max connections

指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

lock file

指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。

read only

该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。

list

该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。

uid

该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是"nobody"。

gid

该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为"nobody"。

exlude

用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是 exclude还是include。

但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exlude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。

exlude from

指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exlude列表定义。

include

用来指定多个由空格隔开的多个rsync并应该exlude的模式列表。这等同于在客户端命令中使用--include来指定模式,结合include和 exlude可以定义复杂的exlude/include规则。一个模块只能指定一个include选项,但是可以在模式前面使用"-"和"+"来指定是exclude还是include。

include from

指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users

该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file

该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的 secures file名,需要限式指定一个。(例如:/etc/rsyncd.secrets)

strict modes

该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。

hosts allow

该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:

o xxx.xxx.xxx.xxx,客户主机只有完全匹配该IP才允许访问。例如:192.167.0.1

o a.b.c.d/n,属于该网络的客户都允许连接该模块。例如:192.168.0.0/24

o a.b.c.d/e.f.g.h,属于该网络的客户都允许连接该模块。例如:192.168.0.0/255.255.255.0

o 一个主机名,客户主机只有拥有该主机名才允许访问,例如:backup.linuxaid.com.cn。


o *.linuxaid.com.cn,所有属于该域的主机都允许。

默认是允许所有主机连接。

hosts deny

指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

ignore errors

指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。

ignore nonreadable

指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。

transfer logging

使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。

log format

通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:

o %h 远程主机名

o %a 远程IP地址

o %l 文件长度字符数

o %p 该次rsync会话的进程id

o %o 操作类型:"send"或"recv"

o %f 文件名

o %P 模块路径

o %m 模块名

o %t 当前时间

o %u 认证的用户名(匿名时是null)

o %b 实际传输的字节数

o %c 当发送文件时,该字段记录该文件的校验码

默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。在源代码中同时发布有一个叫rsyncstats的perl脚本程序来统计这种格式的日志文件。

timeout

通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。

refuse options

通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名,而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩,应该是:"dont compress = *"。

dont compress

用来指定那些不进行压缩处理再传输的文件,默认值是

*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

rsync客户命令
在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

首先,rsync的命令格式可以为:

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

rsync [OPTION]... [USER@]HOST:SRC DEST

rsync [OPTION]... SRC [SRC]... DEST

rsync [OPTION]... [USER@]HOST::SRC [DEST]

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六种不同的工作模式:

拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。

使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。

使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。

从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。

从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。

列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
1、用法

在使用rsync传输文件时,需要指定一个源和一个目的,其中一个可能是远程机器的资源信息。例如:

rsync *.c foo:src/

表示将传输当前目录下所有以.c结尾的文件到机器foo的src目录下。如果任何文件已经存在于远程系统,则会调用远程更新协议来实现仅仅传输那些更新过的文件。

rsync -avz foo:src/bar /data/tmp

该命令则递归地传输机器foo上的src/bar目录下的所有内容到本地/data/tmp/bar目录中。文件以归档模式进行传输,以确保符号链结、属性、权限、属主等信息在传输中都被保存。此外,可以使用压缩技术来加快数据传输:

rsync -avz foo:src/bar/ /data/tmp

路径信息以"/"结尾时表示拷贝该目录,而不以"/"结尾表示拷贝该目录。当配合使用--delete选项时这两种情况的区别将会表现出来。

也可以以本地模式来使用rsync,如果SRC和DST路径中都没有任何":"符号则表示该命令运行在本地模式,等同于cp命令。

rsync somehost.mydomain.com::

这种模式则将会列出somehost.mydomain.com.可以访问的所有模块信息。

选项说明

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息

rsync foo/bar/foo.c remote:/tmp/

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
实例分析
这里假设有两台服务器:A和B。其中A是主web服务器,具有域名www.linuxaid.com.cn(202.99.11.120),B服务器是备份机,其域名为backup.linuxaid.com.cn(202.99.11.121)。其中A的web内容存放在以下几个地方:/www/和 /home/web_user1/和/home/web_user2/。我们需要在备份机B上建立对这几个目录内容的备份。

服务器配置实例

那么在www.linuxaid.com.cn上创建rsyncd的配置文件/etc/rsyncd.conf,内容如下:

uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[www]
path = /www/
ignore errors
read only = true
list = false
hosts allow = 202.99.11.121
hosts deny = 0.0.0.0/32
auth users = backup
secrets file = /etc/backserver.pas

[web_user1]
path = /home/web_user1/
ignore errors
read only = true
list = false
hosts allow = 202.99.11.121
hosts deny = 0.0.0.0/32
uid = web_user1
gid = web_user1
auth users = backup
secrets file = /etc/backserver.pas

[web_user2]
path = /home/web_user2/
ignore errors
read only = true
list = false
hosts allow = 202.99.11.121
hosts deny = 0.0.0.0/32
uid = web_user2
gid = web_user2
auth users = backup
secrets file = /etc/backserver.pas

这里定义有四个三个模块,分别对应于三个需要备份的目录树。这里只允许202.99.11.121备份本机的数据,并且需要认证。三个模块授权的备份用户都为backup,并且用户信息保存在文件/etc/backserver.pas中,其内容如下:

backup:bk_passwd

并且该文件只能是root用户可读写的,否则rsyncd启动时会出错。这些文件配置完毕以后,就需要在A服务器上启动rsyncd服务器:

rsync --daemon

客户命令示例

/usr/local/bin/rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/ssl.*/" --progress backup@202.99.11.120::www /backup/www/ --password-file=/etc/rsync.pass

上面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。 --progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。 --exclude "logs/" 表示不对/www/logs目录下的文件进行备份。--exclude "conf/ssl.*/"表示不对/www/conf/ssl.*/目录下的文件进行备份。

backup@202.99.11.120::www 表示对该命令是对服务器202.99.11.120中的www模块进行备份,backup表示使用backup来对该模块进行备份。

--password-file=/etc/rsync.pass来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有root可读。

这里将备份的内容存放在备份机的/backup/www/目录下。

[root@linuxaid /]# /usr/local/bin/rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/ssl.*/" --progress backup@202.99.11.120::www /backup/www/ --password-file=/etc/rsync.pass
receiving file list ... done
./
1
785 (100%)
1.py
4086 (100%)
2.py
10680 (100%)
a
0 (100%)
ip
3956 (100%)
./
wrote 2900 bytes read 145499 bytes 576.34 bytes/sec
total size is 2374927 speedup is 45.34

对其它两个模块操作的命令分别为:

/usr/local/bin/rsync -vzrtopg --delete --progress backup@202.99.11.120::web_user1 /backup/web_user1/ --password-file=/etc/rsync.pass

/usr/local/bin/rsync -vzrtopg --delete --progress backup@202.99.11.120::web_user2 /backup/web_user2/ --password-file=/etc/rsync.pass

可以将客户命令通过crontab -e命令来实现自动备份,如crontab -e:

 

一些示例脚本
这里这些脚本都是rsync网站上的例子:

1、每隔七天将数据往中心服务器做增量备份

#!/bin/sh

# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com

# directory to backup
BDIR=/home/$USER

# excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=owl

# your password on the backup server
export RSYNC_PASSWORD=XXXXXX


########################################################################

BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir

# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current

2、备份至一个空闲的硬盘

#!/bin/sh

export PATH=/usr/local/bin:/usr/bin:/bin

LIST="rootfs usr data data2"

for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done

DAY=`date "+%A"`

rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY

3、对vger.rutgers.edu的cvs树进行镜像

#!/bin/bash

cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin

RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi

rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog

sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`

if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi

rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0

FAQ
Q:如何通过ssh进行rsync,而且无须输入密码?
A:可以通过以下几个步骤

1. 通过ssh-keygen在server A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identity和identity.pub文件
2. 在server B上的home目录建立子目录.ssh
3. 将A的identity.pub拷贝到server B上
4. 将identity.pub加到~[user b]/.ssh/authorized_keys
5. 于是server A上的A用户,可通过下面命令以用户B ssh到server B上了
e.g. ssh -l userB serverB
这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到server B上了。

Q:如何通过在不危害安全的情况下通过防火墙使用rsync?
A:解答如下:

这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置sshd仅允许这个用户通过RSA认证方式进入。如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。如果客户机在防火墙内,则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。

Q:我能将更改过或者删除的文件也备份上来吗?
A:当然可以:

你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13 ...这样的命令来实现。
这样如果源文件:/path/to/some/file.c改变了,那么旧的文件就会被移到./backup-2000-2-13/path/to/some/file.c,
这里这个目录需要自己手工建立起来

Q:我需要在防火墙上开放哪些端口以适应rsync?
A:视情况而定

rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:

rsync --port 8730 otherhost::
或者
rsync -e 'ssh -p 2002' otherhost:

Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
A:rsync -av --include '*/' --exclude '*' source-dir dest-dir

Q:为什么我总会出现"Read-only file system"的错误呢?
A:看看是否忘了设"read only = no"了

Q:为什么我会出现'@ERROR: invalid gid'的错误呢?
A:rsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid = nogroup或者其它

Q:绑定端口873失败是怎么回事?
A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用--port参数来改变。

Q:为什么我认证失败?
A:从你的命令行看来:

你用的是:
> bash$ rsync -a 144.16.251.213::test test
> Password:
> @ERROR: auth failed on module test
>
> I dont understand this. Can somebody explain as to how to acomplish this.
> All suggestions are welcome.

应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test
Tags: ,

牛人总结日剧和韩剧的区别 不指定

zeus , 2010/03/14 21:25 , Joke , Comments(0) , Reads(517) , Via Original
日剧:医生多 韩剧:病人多

日剧:bt多 韩剧:自恋多

日剧:悬念多 韩剧:眼泪多

日剧:王子多 韩剧:灰姑娘多

日剧男:修眉多 韩剧男:眼袋多

日剧女:气质多(90%是自然美女) 韩剧女:发嗲多(90%是整形美女)

日剧:对社会问题的思考多(未婚妈妈、师生恋、忘年恋、婚外恋),矛盾来自人的内心

韩剧:对遗传基因的研究多(同父异母、同母异父、同胞兄弟姐妹),矛盾来自外界(身世或疾病)

每次看日剧的时候,总是在主人公努力微笑着说加油的时候我却哭了  

每次看韩剧的时候,总是在主人公哭得一塌糊涂的时候跟着一起哭

日剧多刻画草根阶层和小人物的生活,积极向上,教人抓(全部)住理想,奋勇前进,让你猜不到结尾  

韩剧多描绘童话中的公主和王子,白日做梦,哭哭啼啼,总是一开头就让你知道结尾

日剧是挖一个坑给你跳,你在坑里觉得很幸福
  
韩剧是挖一个坑给你跳,你在坑里觉得被骗了
  
日剧是出现问题解决问题  

韩剧是没有问题制造问题

日剧有想再看一遍,再被感动一遍的冲动

韩剧是巴不得快点看完这一遍,看完就好

日剧一年出五部经典

韩剧五年出一部经典

日剧看了一部就可以记得一生

韩剧看了一生就只记得一部

日剧1%是垃圾99%是精品

韩剧1%是精品99%是垃圾

可以什么都不想地看韩剧

却不能什么都不想地看日剧

想变白痴的时候看韩剧

想振作的时候看日剧

同是得绝症的女孩

日剧里面的人会用坚强的微笑迎接每一天,努力的活着,而我在电脑前流泪感动

韩剧里面的人则是有留不完的眼泪,我却在电视面前郁闷怎么还没死啊
Tags: ,
一直以来,OpenVPN要实现Windows下用户认证,没有一个可行的办法,有人给出用一个C编写的小程序,但在后续的版本下无法通过,也有人给出用批处理写的脚本来实现认证,但是这个脚本在有些版本的windows下无法取得环境变量password,故无法实现基于用户的认证,通过不懈的努力,阅读OpenVpn的有关文档以及有关批处理的命令的相关资料,终于找到一种不用环境变量,而用临时文件来进行身份认证的办法。

前面安装的过程,以及生成CA根证书的过程及服务器证书和客户机的过程就不再详述了,大家想要做的话也可以用baidu或google去网上找一下,windows平台下如何实现证书认证的方法。

这里说明一下,我这里用的最新的版本openvpn-2.1_rc13-install.exe,大家在用的时个要看清楚版本,有些参数在老版本上是没有的。下面先给出服务器端的配置文件server.ovpn

   1. local 192.168.8.2 #建立VPN的IP
   2. port 1194 #端口号,根据需要,自行修改,如果是用http代理连接,请不要修改
   3. proto udp #通过udp协议连接
   4. dev tap #win下必须设为tap
   5. server 192.168.100.0 255.255.255.0 # 虚拟局域网网段设置,请根据需要自行修改,不支持和拔号网卡位于同一网段
   6. ;push "route 0.0.0.0 0.0.0.0"  #表示client通过VPN SERVER上网
   7. keepalive 10 60
   8. ca "C:\\Program Files\\OPENVPN\\KEY\\ca.crt" #CA证书存放位置,请根据实际情况自行修改
   9. cert "C:\\Program Files\\OPENVPN\\KEY\\server.crt" #服务器证书存放位置,请根据实际情况自行修改
  10. key "C:\\Program Files\\OPENVPN\\KEY\\server.key" #服务器密钥存放位置,请根据实际情况自行修改
  11. dh "C:\\Program Files\\OPENVPN\\KEY\\dh1024.pem" #dh1024.pem存放位置,请根据实际情况自行修改
  12. push "redirect-gateway def1"
  13. push "dhcp-option DNS 192.168.8.13" #DNS,请根据实际情况自行修改
  14. mode server
  15. tls-server
  16. script-security 2  #这个参数是最新版才引入的,要设成2才能调用外部脚来进行身份认证
  17. auth-user-pass-verify  author.bat via-file  #采用身份验证的脚本及方法
  18. username-as-common-name
  19. status "C:\\Program Files\\OPENVPN\\log\\server.log" #LOG记录文件存放位置,请根据实际情况自行修改
  20. comp-lzo
  21. verb 4
  22.

上面的多数参数在其它文档中都有说,这里只解释其中的两项:

script-security 2  #新版本中必须有这个参数,否则不会调用外部脚本;老版本可以不要,这个在很多的配置文件中都没有

auth-user-pass-verify  author.bat via-file  #这里面的author.bat用来进行身份验证的脚本,后面via-file表示是通过临时文件来存储用户提交的用户名及密码;通常网上给出的参数是另一个via-env表示通过环境变量来传递用户名及变量,在openvpn的文档中有说明,这种方式存在安全隐患,有可能其它程序会读取环境变量,造成密码的泄露,另一方面,在windows 2003平台下password这个环境变量无法读取出来,因此在这个配置文件中采用了via-file的参数。



下面是客户端的配置文件:client.ovpn

   1. client
   2. dev tap #windows下面用tap,LINUX下用tun
   3. proto udp
   4. remote 192.168.8.2 1194 #VPN服务器的域名或IP 端口
   5. resolv-retry infinite
   6. nobind
   7. #http-proxy 192.168.1.1 80 #这里填入你的代理服务器地址和端口
   8. mute-replay-warnings
   9. ca "ca.crt"
  10. cert "client1.crt" #这里改成每个客户端相应的证书
  11. key "client1.key" #这里改成每个客户端相应的密钥
  12. auth-user-pass
  13. comp-lzo
  14. verb 4
  15. status openvpn-status.log

其中的auth-user-pass 说明向服务器发送用户名及密码来进行认证。

下面是进行身份验证的脚本author.bat,放到服务器端,为了方便起见,这里放到了与配置文件一个目录下面,你也可以放到任意的地方,只需修改服务器配置文件server.ovpn中的相应参数即可。

   1. @echo off
   2. rem get username and password from temp file as %1
   3. set v=1
   4. for /f  %%i  in (%1) do (
   5. if !v!==1 (
   6. set user=%%i
   7. set v=2
   8. )else set pass=%%i
   9. )
  10.
  11. rem check username and password with password.txt file
  12.
  13. for /f "tokens=1,2,3 delims=, " %%i in (password.txt) do if %%i==%user% if %%j==%pass% if %%k==1 exit /B 0
  14.
  15. echo 1

批处理文件中的第3行到第9行是用来读取临时文件中存储的客户机提交上来的用户名及密码,文件名做为一个参数传入到批处理文件里来,因此在for 语句中用了%1来获取文件名,临时文件中第一行是客户提交用户名,第二行密码,文件在脚本结束后自动删除;另外在循环里面要修改参数v的值,为此需要 cmd即命令行使用延时加载(具体内容可以参见前面的文章:批处理问题:SET 命令在 FOR 循环中失效 / SET 环境变量生存域/作用域),延时加载可以用 cmd /v:on来启动,也可在注册表做以下设定来启动:

在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的延迟扩展,这要通过设置使用 REGEDT.EXE 的注册表中的一个或两个 REG_DWORD 值,如果没有可以新建:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

值为0x1(启用延时加载) 或 0x0(不启用延时加载)

批处理的13到15行是通过读取服务器上用户名及密码的文件password.txt,来查找是否有与客户机相匹配的用户,如果有就返回0,如果没有就返回1。

passowrd.txt文件内容如下:

   1. lyj, password, 1
   2. aaa,123,0

第一个是用户名,第二个是密码,第三个是帐户是否启用(1为启用,0为禁用);每个参数之间用,(逗号)分开;

完成以上工作后,就可以启动服务器了,然后再启动客户端了。

以上程序的服务器端在windows server 2003 sp2下调试通过,客户机在windows server 2000下调试通过;该方法的好处就是简单易行,不用安装其它的程序,调试容易。

openvpn 的配置(包括用mysql认证) 不指定

zeus , 2010/03/14 13:50 , J2EE , Comments(0) , Reads(442) , Via Original
一、是建立 PKI (public key infrastructure). 切換到 /usr/share/doc/openvpn/examples/easy-rsa 目錄,執行:執行:設定環境變數
root@debian:~# . ./vars
以下東西產生出來會放到 ./keys/ 目錄下,可修改 vars 來改變位置

二、
root@debian:~# ./clean-all
root@debian:~# ./build-ca
會產生
ca.crt
ca.key

三、建立給 server 用的 certificate & key
root@debian:~# ./build-key-server server

當中問到 “Common Name” 設成 “server” 會產生

01.pem
server.crt
server.csr
server.key

四、產生給多個 client 用的 certificates & keys
當中問到 “Common Name” 設成 “client1″,以此類推

root@debian:~# ./build-key client1

產生

client1.crt
client1.csr
client1.key

root@debian:~# ./build-key client2
root@debian:~# ./build-key client3
(可只产生一个clinet)
root@debian:~# ./build-dh

root@debian:~# openvpn –genkey –secret ta.key

五、接著將 key 利用加密通道拷貝到 server 及 client 機器上(和配置文件放在同一个目录里)
两端都需要ca.crt 客户端需要 client.crt client.csr clinet.key ca.crt    ta.key 其他的server端都要用

六、server端修改/etc/openvpn/server.conf 可從 /usr/share/doc/openvpn/examples/sample-config-files/ 拿来当范本

local 192.168.1.*#(服务端IP)
port 1194 #(端口)
proto tcp #(协议)
dev tun#(设备 应该是一个网卡)

tls-server
ca ca.crt
cert server.crt
key server.key

tls-auth ta.key 0
dh dh1024.pem

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
上面几个文件要写清全路径

push “redirect-gateway”   # 自動將 client 的 default gateway 設成經由 VPN server 出去


keepalive 10 120 # 保持連線,每 10 秒 ping 一次,若是 120 秒未收到封包,即認定 client 斷線
comp-lzo

max-clients 10 # 最多同時只能有十個 client


user nobody
group nogroup # vpn daemon 執行時的身份(在非 Windows 平台中使用)

persist-key
persist-tun

status /etc/openvpn/easy-rsa/keys/openvpn-status.log
verb 3

# 以下二行是將 vpn server 內部的虛擬 ip 機器開放給 client 使用
push “route 192.168.10.0 255.255.255.0″
push “route 192.168.20.0 255.255.255.0″ (我没用这个功能)
七、 linux clinet端上修改 client.conf

client
dev tun
proto tcp
remote server-ip 1194
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3

服务端打开转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

现在说说Debian下OpenVpn 实现用户名密码验证
1.数据库部分:

1.1:安装mysql(自己google)
1.2:新建vpn数据库+添加表等
以管理员身份登录数据库:
mysql> create database vpn;
创建数据库vpn。
mysql> GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY ‘vpn123′;
授权localhost上的用户vpn(密码vpn123)有对数据库vpn的所有操作权限。
mysql> flush privileges;
更新sql数据库的权限设置。
mysql> use vpn;
使用刚创建的的vpn数据库。
mysql> CREATE TABLE vpnuser (
-> name char(20) NOT NULL,
-> password char(128) default NULL,
-> active int(10) NOT NULL DEFAULT 1,
-> PRIMARY KEY (name)
-> );
mysql> insert into vpnuser (name,password) values(’soai’,password(’soai’));
命令解释:
#创建vpn用户,对vpn这个database有所有操作权限,密码为vpn123
#active不为1,无权使用VPN

2.配置pam_mysql模块 (我在做的时候发现没有这个模块,debian 下这个模块的包名叫libpam-mysql)
创建/etc/pam.d/openvpn文件,文件内容如下:

auth sufficient pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2
account required pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2
3.配置server.conf在原基础上添加一下内容

3.1现在把openvpn-auth-pam.so拷贝到当前目录下..
cp /usr/lib/openvpn/openvpn-auth-pam.so /etc/openvpn/
3.2在server.conf中添加如下内容:
plugin ./openvpn-auth-pam.so openvpn #说明使用的插件,openvpn为插件的参数,使用pam的servicesname
client-cert-not-required #不请求客户的CA证书,使用User/Pass验证
username-as-common-name #使用客户提供的UserName作为Common Name
#client-to-client #如果让Client之间可以相互看见,去掉本行的注释掉,否则Client之间无法相互访问
#duplicate-cn #是否允许一个User同时登录多次,去掉本行注释后可以使用同一个用户名登录多次
4.现在需要把客户端client.ovpn修改一下:
原来是CA验证..现在不需要了..
把cert **.crt 和 key **.key 注释掉(我这没注释掉也一样用。。)
添加auth-user-pass
OK
现在可以了!~


Tags:

deb安装包的安装方法 不指定

zeus , 2010/03/14 13:48 , Linux&Bsd , Comments(0) , Reads(444) , Via Original
deb 是debian linux 的安装格式,跟red hat 的rpm相似
安装: dpkg -i file.deb

不过要安装dpkg的package,也可用alien这类软件将package转为rpm等格式,或直接下个rpm 或tar包。

关于deb包转换成rpm的方法:

sudo apt-get install alien #alien默认没有安装,所以首先要安装它。
sudo alien xxxx.rpm #将rpm转换位deb,完成后会生成一个同名的xxxx.deb。
sudo dpkg -i xxxx.deb #安装。
注:压力测试要区分基准测试,应用测试, 不同的应用有不同的表现, 基准测试主要测试服务器的性能,而不是服务器在某个应用下的表现.进入正题.

Siege(英文意思是围攻)是一个压力测试和评测工具
#./configure --prefix=/usr/local/siege ;
#make
#make install

任务列表:url.txt文件
siege -c 20 -r 2 -f url.txt
参数说明:
-c 20 并发20个用户
-r 2 重复循环2次
-f url.txt任务列表:URL列表

输出样例:

** Siege 2.59
** Preparing 20 concurrent users for battle. 这次“战斗”准备了20个并发用户
The server is now under siege.. done. 服务在“围攻”测试中:
Transactions: 40 hits 完成40次处理
Availability: 100.00 % 成功率
Elapsed time: 7.67 secs 总共用时
Data transferred: 877340 bytes 共数据传输:877340字节
Response time: 1.65 secs 相应用时1.65秒:显示网络连接的速度
Transaction rate: 5.22 trans/sec 平均每秒完成5.22次处理:表示服务器后台处理的速度
Throughput: 114385.92 bytes/sec 平均每秒传送数据:114385.92字节
Concurrency: 8.59 最高并发数 8.59
Successful transactions: 40 成功处理次数
Failed transactions: 0 失败处理次数

注意:由于速度很快,可能会达不到并发速度很高就已经完成。Response time显示的是测试机器和被测试服务器之间网络链接状况。Transaction rate则表示服务器端任务处理的完成速度。

辅助工具:
增量压力测试:

为了方便增量压力测试,siege还包含了一些辅助工具:
bombardment (1)
是一个辅助工具:用于按照增量用户压力测试:
使用样例:
bombardment url.txt 5 3 4 1
初始化URL列表:url.txt
初始化为:5个用户
每次增加:3个用户
运行:4次
每个客户端之间的延迟为:1秒

输出成CSV格式:
siege2csv.pl (1)
siege2csv.pl将bombardment的输出变成CSV格式:
Time Data Transferred Response Time Transaction Rate Throughput Concurrency Code 200 (note that this is horribly broken.)
242 60.22 603064 0.02 4.02 10014.35 0.08
605 59.98 1507660 0.01 10.09 25136.05 0.12
938 59.98 2337496 0.02 15.64 38971.26 0.26
1157 60 2883244 0.04 19.28 48054.07 0.78

webbench
-----------------------------------------
webbench最多可以模拟3万个并发连接去测试网站的负载能力
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

webbench -c 500 -t 30 http://127.0.0.1/test.jpg
参数说明:-c表示并发数,-t表示时间(秒)

测试结果示例:
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.
Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.
参数说明:
-c 20 并发20个用户
-r 2 重复循环2次
-f www.chedong.com.url 任务列表:URL列表

输出样例:
** Siege 2.59
** Preparing 20 concurrent users for battle. 这次“战斗”准备了20个并发用户
The server is now under siege.. done. 服务在“围攻”测试中:
Transactions: 40 hits 完成40次处理
Availability: 100.00 % 成功率
Elapsed time: 7.67 secs 总共用时
Data transferred: 877340 bytes 共数据传输:877340字节
Response time: 1.65 secs 相应用时1.65秒:显示网络连接的速度
Transaction rate: 5.22 trans/sec 平均每秒完成5.22次处理:表示服务器后台处理的速度
Throughput: 114385.92 bytes/sec 平均每秒传送数据:114385.92字节
Concurrency: 8.59 最高并发数 8.59
Successful transactions: 40 成功处理次数
Failed transactions: 0 失败处理次数

注意:由于速度很快,可能会达不到并发速度很高就已经完成。Response time显示的是测试机器和被测试服务器之间网络链接状况。Transaction rate则表示服务器端任务处理的完成速度。

辅助工具:
增量压力测试:
为了方便增量压力测试,siege还包含了一些辅助工具:
bombardment (1)
是一个辅助工具:用于按照增量用户压力测试:
使用样例:
bombardment urlfile.txt 5 3 4 1
初始化URL列表:urlfile.txt
初始化为:5个用户
每次增加:3个用户
运行:4次
每个客户端之间的延迟为:1秒

输出成CSV格式:
siege2csv.pl (1)
siege2csv.pl将bombardment的输出变成CSV格式:
Time Data Transferred Response Time Transaction Rate Throughput Concurrency Code 200 (note that this is horribly broken.)
242 60.22 603064 0.02 4.02 10014.35 0.08
605 59.98 1507660 0.01 10.09 25136.05 0.12
938 59.98 2337496 0.02 15.64 38971.26 0.26
1157 60 2883244 0.04 19.28 48054.07 0.78

APACHE 的 AB
-----------------------------------------
./ab -c 300 -n 1000 http://www.zaojiao.com/test.html

ab -n 全部请求数 -c 并发数 测试url
Concurrency Level: 50 #并发数
Time taken for tests: 92.76140 seconds #全部请求完成耗时
Complete requests: 10000 #全部请求数
Failed requests: 1974 #失败的请求
(Connect: 0, Length: 1974, Exceptions: 0)
Write errors: 0
Total transferred: 827019400 bytes #总传输大小
HTML transferred: 825219400 bytes
Requests per second: 108.61 [#/sec] (mean) #每秒请求数(平均)
Time per request: 460.381 [ms] (mean) #每次并发请求时间(所有并发)
Time per request: 9.208 [ms] (mean, across all concurrent requests) #每一请求时间(并发平均)
Transfer rate: 8771.39 [Kbytes/sec] received #传输速率

以下结果时间每次有所偏差,均取相对平均值。
test.html
1 1000 1.296 771/s
5 1000 0.4826 2072/s
10 1000 5.142 194/s

700 700 3.36 208/s
700 2100 6514 321/s
2000 2000 3.2 608
6000 6000 6.2 983

这三种工具从机理上是一样的,根据测试的要求选择合适的工具.

python模块之----os和os.path模块 不指定

zeus , 2010/03/14 01:02 , J2EE , Comments(0) , Reads(550) , Via Original
os和os.path模块
os.listdir(dirname):列出dirname下的目录和文件
os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.getenv()和os.putenv()函数分别用来读取和设置环境变量。
os.curdir:返回但前目录('.')
os.chdir(dirname):改变工作目录到dirname
os.sep 可以取代操作系统特定的路径分割符。
os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
os.remove()函数用来删除一个文件。
os.system()函数用来运行shell命令。
os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'

os.makedirs(dirname)创建多级目录,如:os.makedirs('/data/cc/ll/xx/zz')
os.mkdir(path) 创建多级目录
os.rmdir(path) # 删除目录 如:WIN: os.rmdir('E:\\book\\temp') LINUX: os.rmdir('/data/cc')
文件拷贝还可用shutil
import shutil
shutil.copyfile('listfile.py', 'd:/test.py') #复制文件
shutil.copystat(src,dst) #拷贝文件,连同文件的stat一起拷贝
shutil.copytree(src,dst) #拷贝目录,拷贝之前dst必须不存在

更多关于shutil的介绍请看python模块之----shutil模块
os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false
os.path.isfile(name):判断name是不是一个文件,不存在name也返回false
os.path.exists(name):判断是否存在文件或目录name
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式
os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext():分离文件名与扩展名
os.path.join(path,name):连接目录与文件名或目录
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路径

os.path.getsize(name):获得文件大小(字节大小)如果name是目录返回0L
os.path.getctime(path) 返回浮点数的系统时间,在类Unix系统上是文件最近更改的时间, 在Windows上是文件或目录的创建时间
os.path.getmtime(path) 文件或目录最后更改的时间
os.path.getatime(path) 文件或目录最后存取的时间
os.path.samefile(path1,path2) 如果2个路径指向同样的文件或目录,返回True(Windows上不可用)

glob模块
glob.glob("*.py") #返回当前目录下所有以.py为后缀的目录或文件,glob("*.py") 里面可用正则去匹配,返回一个LIST列表.

python字符串方法 string模块 不指定

zeus , 2010/03/14 01:01 , Python , Comments(0) , Reads(530) , Via Original
字符串中字符大小写的变换:
* S.lower() #小写
* S.upper() #大写
* S.swapcase() #大小写互换
* S.capitalize() #首字母大写
* String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
* S.title() #只有首字母大写,其余为小写,模块中没有这个方法

字符串在输出时的对齐:
* S.ljust(width,[fillchar]) #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
* S.rjust(width,[fillchar]) #右对齐
* S.center(width, [fillchar]) #中间对齐
* S.zfill(width) #把S变成width长,并在右对齐,不足部分用0补足

字符串中的搜索和替换:
* S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
* S.index(substr, [start, [end]])
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
* S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
* S.rindex(substr, [start, [end]])
* S.count(substr, [start, [end]]) #计算substr在S中出现的次数
* S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
* S.strip([chars])
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
* S.lstrip([chars])
* S.rstrip([chars]) 进行去除[chars]字符 如:s.rstrip('\n') 去掉换行符.
* S.expandtabs([tabsize])
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

字符串的分割和组合:
* S.split([sep, [maxsplit]])
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
* S.rsplit([sep, [maxsplit]])
* S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
* S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

字符串的mapping,这一功能包含两个函数:
* String.maketrans(from, to)
#返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
* S.translate(table[,deletechars])
#使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译 表。

字符串还有一对编码和解码的函数:
* S.encode([encoding,[errors]])
#其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
* S.decode([encoding,[errors]])

字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:
* S.startwith(prefix[,start[,end]]) #是否以prefix开头
* S.endwith(suffix[,start[,end]]) #以suffix结尾
* S.isalnum() #是否全是字母和数字,并至少有一个字符
* S.isalpha() #是否全是字母,并至少有一个字符
* S.isdigit() #是否全是数字,并至少有一个字符
* S.isspace() #是否全是空白字符,并至少有一个字符
* S.islower() #S中的字母是否全是小写
* S.isupper() #S中的字母是否便是大写
* S.istitle() #S是否是首字母大写的

字符串类型转换函数,这几个函数只在string模块中有:
* string.atoi(s[,base])
#base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
* string.atol(s[,base]) #转成long
* string.atof(s[,base]) #转成float

Pages: 7/67 First page Previous page 2 3 4 5 6 7 8 9 10 11 Next page Final page [ View by Articles | List ]