HAST – Highly Available Storage

2010年7月22日 16hot 没有评论

值得关注的高可用存储方案: http://wiki.freebsd.org/HAST

分类: BSD/linux 标签: ,

今天你孝了没有(转)

2010年7月21日 16hot 没有评论

在整理文件夹的时候,看到这篇以前拷贝的文章,看了后还是很受教育。特此贴出来和大家分享。

——————————————————————————————————————————

媳妇说:“煮淡一点你就嫌没有味道,现在煮咸 一点你却说咽不下。你究竟怎想怎么
样?”

母亲一见儿子回来,二话不说便把饭菜往嘴里送。她怒瞪他一眼。他试了一口,马上吐
出来, 儿子说:“我不是说过了吗,妈有病不能吃太咸!” “那好!妈是你的,以后
由你来煮!”媳妇怒气冲冲地回房。儿子无奈地轻叹一声,然后对母亲说:“妈,别吃
了,我去煮个面给?”

“仔,你是不是有话想跟妈说,是就说好了,别憋在心里!”

“妈,公司下个月升我职,我会很忙,至于老婆,她说很想出来工作,所以……”

母亲马上意识到儿子的意思:“仔,不要送妈去老人院。”声音似乎在哀求。

儿子沉默片刻,他是在寻找更好的理由。 “妈,其实老人院并没有甚么不好?知道老
婆一但工作,一定没有时间好好服侍。老人院有吃有住有人服侍照顾, 不是比在家里
好得多吗?”

“可是,阿财叔他……”

洗了澡,草草吃了一碗方便面,儿子便到书房去。他茫然地伫立于窗前,有些犹豫不
决。母亲年轻便守寡,含辛茹苦将他抚养成人,供他出国读书。但她从不用年轻时的牺
牲当作要胁他孝顺的筹码,反而是妻子以婚姻要胁他!真的要让母亲住老人院吗?他问
自己,他有些不忍。 “可以陪你下半世的人是你老婆,难道是你妈吗?”阿财叔的儿
子总是这样提醒他。 “你妈都这么老了,好命的话可以活多几年,为何不趁这几年好
好孝顺她呢?树欲静而风不息,子欲养而亲不在啊!”亲戚总是这样劝他。儿子不敢再
想下去,深怕自己真的会改变初衷。

晚,太阳收敛起灼热的金光,躲在山后憩息。一间建在郊外山岗的一座贵族老人院。

是的,钱用得越多,儿子才心安理得。当儿子领着母亲步入大厅时,崭新的电视机,42
英寸的荧幕正播放着一部喜剧,但观众一点笑声也没有。

几个衣着一样,发型一样的老妪歪歪斜斜地坐在发沙上,神情呆滞而落寞。有个老人在
自言自语,有个正缓缓弯下腰,想去捡掉在地上的一块饼干吃。儿子知道母亲喜欢光
亮,所以为她选了一间阳光充足的房间。从窗口望出去,树荫下,一片芳草如茵。几名
护士推着坐在轮椅的老者在夕阳下散步,四周悄然寂静得令人心酸。纵是夕阳无限好,
毕竟已到了黄昏,他心中低低叹息。

“妈,我……我要走了!”母亲只能点头。他走时,母亲频频挥手,她张着没有牙的
嘴,苍白干燥的咀唇在嗫嚅着,一副欲语还休的样子。儿子这才注意到母亲银灰色的头
发,深陷的眼窝以及打着细褶的皱脸。母亲,真的老了!

他霍然记起一则儿时旧事。那年他才6岁,母亲有事回乡,不便携他同行,于是把他寄
住在阿财叔家几天。母亲临走时,他惊恐地抱着母亲的腿不肯放,伤心大声号哭道:
“妈妈不要丢下我!妈妈不要走!” 最后母亲没有丢下他。

他连忙离开房间,顺手把门关上,不敢回头,深恐那记忆像鬼魅似地追缠而来。

他回到家,妻子与岳母正疯狂的把母亲房里的一切扔个不亦乐乎。身高3英寸的奖杯
──那是他小学作文比赛《我的母亲》第1名的胜利品!华英字典──那是母亲整个月
省吃省用所买给他的第1份生日礼物!还有母亲临睡前要擦的风湿油,没有他为她擦,
带去老人院又有甚么意义呢?

“够了,别再扔了!”儿子怒吼道。

“这么多垃圾,不把它扔掉,怎么放得下我的东西。” 岳母没好气地说。

“就是嘛!你赶快把你妈那张烂床给抬出去,我明天要为我妈添张新的!”

一堆童年的照片展现在儿子眼前,那是母亲带他到动物园和游乐园拍的照片。

“它们是我妈的财产,一样也不能丢!”

“你这算甚态度?对我妈这么大声,我要你向我妈道歉!” (这算什么儿子,把自己
的母亲送到养老院,然后把岳母接来住,要就一起去送,要就留自己的母亲)

“我娶你就要爱你的母亲,为甚么?嫁给我就不能爱我的母亲?”

雨后的黑夜分外冷寂,街道萧瑟,行人车辆格外稀少。一辆宝马在路上飞驰,频频闯红
灯,陷黄格,呼一声又飞驰而过。那辆轿车一路奔往山岗上的那间老人院,停车直奔上
楼,推开母亲卧房的门。他幽灵似地站着,母亲正抚摸着风湿痛的双腿低泣。 她见到
儿子手中正拿着那瓶风湿油,显然感到安慰的说:“妈忘了带,幸好你拿来!”他走到
母亲身边,跪了下来。 “很晚了,妈自己擦可以了,你明天还要上班,回去吧!”

他嗫嚅片刻,终于忍不住啜泣道:“妈,对不起,请原谅我!我们回家去吧!”

~~后语~~

随着自己愈长大,看着父母亲脸庞从年轻变憔悴,头发从乌丝变白发,动作从迅捷变缓
慢,多心疼!父母亲总是将最好、最宝贵的留给我们,像蜡烛不停的燃烧自己,照亮孩
子!而我呢?有没有腾出一个空间给我的父母,或者只是在当我需要停泊岸时,才会想
起他们……

其实父母亲要的真的不多,只是一句随意的问候「爸、妈,你们今天好吗?」随意买的
宵夜,煮一顿再普通不过的晚餐,睡前帮他们盖盖被子,天冷帮他们添衣服、戴手套
….都能让他们高兴温馨很久。有时,我常在想:我希望我的子女以后如何对我。那现
在,我有没有如此对待我的父母?我相信,人是环环相扣的;现在,你如何对待你的父
母;以后,你的子女就如何待你。

朋友,人世间最难报的就是父母恩,愿我们都能:以反哺之心奉敬父母,以感恩之心孝
顺父母!

~共勉之~

生命不要求我们成为最好的,只要求我们作最大的努力!

老人安养院墙上发现的一篇文章

孩子!当你还很小的时候,我花了很多时间,教你慢慢用汤匙、用筷子吃东西。教你系
鞋带、扣扣子、溜滑梯、教你穿衣服、梳头发、拧鼻涕。这些和你在一起的点点滴滴,
是多么的令我怀念不已。所以,当我想不起来,接不上话时,请给我一点时间,等我一
下,让我再想一想……极可能最后连要说什么,我也一并忘记。孩子!你忘记我们练习
了好几百回,才学会的第一首娃娃歌吗?是否还记得每天总要我绞尽脑汁,去回答不知
道你从哪里冒出来的吗?所以,当我重复又重复说着老掉牙的故事,哼着我孩提时代的
儿歌时,体谅我。让我继续沉醉在这些回忆中吧!切望你,也能陪着我闲话家常吧!孩
子,现在我常忘了扣扣子、系鞋带。吃饭时,会弄脏衣服,梳头发时手还会不停的抖,
不要催促我,要对我多一点耐心和温柔,只要有你在一起,就会有很多的温暖涌上心
头。

孩子!如今,我的脚站也站不稳,走也走不动。所以,请你紧紧的握着我的手,陪着
我,慢慢的。就像当年一样,我带着你一步一步地走。

若为人子女也不懂得如何体谅他们,那他们便只能于痛苦中渡过余生,黑暗中逝去……

[今天你孝了没有?]

分类: 转载 标签:

实战:用Carp实现故障转移和负载均衡集群(转)

2010年7月21日 16hot 没有评论

在服务器b上修改大致相同,只是carp网卡的有一点变动
ee /etc/rc.conf       #配置rc.conf文件,分别建立carp虚拟网卡。增加如下内容
cloned_interfaces=”carp0 carp1″
ifconfig_carp0=”vhid 1 advbase 5 advskew 100 pass passwd 192.168.1.100/24″
ifconfig_carp1=”vhid 2 advbase 5 pass passwd 192.168.1.100/24″

ee /etc/sysctl.conf     #修改sysctl文件启用carp的arpbalance和carp抢占功能。增加如下内容
net.inet.carp.preempt=1
net.inet.carp.arpbalance=1

重启两台服务器即 可生效。
如果不想重启服务器,立即生效则进行下列命令
服务器a
ifconfig carp0 create
ifconfig carp0 vhid 1 advbase 5 pass passwd 192.168.0.100/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advbase 5 advskew 100 passwd 192.168.0.100/24
sysctl net.inet.carp.preempt=1
sysctl net.inet.carp.arpbalance=1

服务器b

ifconfig carp0 create
ifconfig carp0 vhid 1 advbase 5 advskew 100 pass passwd 192.168.0.100/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advbase 5 passwd 192.168.0.100/24
sysctl net.inet.carp.preempt=1
sysctl net.inet.carp.arpbalance=1

ok,现在可以看到效果了。如果两台服务器正常,则客户请求分 别由两台服务器均衡的提供服务。当断掉其中一台服务器,则另一台服务器,可立即接管所有服务。当这台服务器恢复服务,则又会自动启用负载均衡。

分类: BSD/linux 标签: ,

FreeBSD 7.0 用ng_fec实现双网卡绑定笔记(转)

2010年7月21日 16hot 没有评论

参考了网友在5.x、6.3下双网卡绑定的文档,于是自己在7.0下做了次实验,结果成功通过。

自己做了些修改,留个笔记。

1. 编译和加载netgraph.ko、ng_fecko、ng_socket.ko模块

a. 编译
#cd /usr/src/sys/modules/netgraph/
#cd netgraph/ && make && make install clean
#cd ../fec && make && make install clean
#cd ../socket && make && make install clean

b. 加载
#cat << EOF >> /boot/loader.conf
ng_ether_load=”YES”
ng_fec_load=”YES”
ng_socket_load=”YES”
EOF

c. 修改rc.conf
#sed -i.bak -e ’s/^\(defaultrouter\)/#\1/’ -e ’s/^\(ifconfig_\)/#\1/’ /etc/rc.conf

2. 编辑启动脚本
# cat << EOF > /etc/bonding
#!/bin/sh
MYIP=xxx.xxx.xxx.xxx
GW=xxx.xxx.xxx.xxx
NIC1=bge0
NIC2=bge1

/usr/sbin/ngctl mkpeer fec dummy fec
/usr/sbin/ngctl msg fec0: add_iface ‘”‘\${NIC1}’”‘
/usr/sbin/ngctl msg fec0: add_iface ‘”‘\${NIC2}’”‘
/usr/sbin/ngctl msg fec0: set_mode_inet
/sbin/ifconfig fec0 promisc
/sbin/ifconfig \${NIC1} promisc
/sbin/ifconfig \${NIC2} promisc
/sbin/ifconfig fec0 inet \${MYIP} netmask 0xfffffe00
/sbin/ifconfig fec0 up
/sbin/route add default \${GW}
EOF

# chmod 400 /etc/bonding
# echo “sh /etc/bonding” >> /etc/rc.local

3. 重启系统
# reboot

# ifconfig
bge0: flags=28943 metric 0 mtu 1500
options=9b
ether 00:13:21:c8:54:6b
media: Ethernet autoselect (1000baseTX )
status: active
bge1: flags=28943 metric 0 mtu 1500
options=9b
ether 00:13:21:c8:54:6b
media: Ethernet autoselect (1000baseTX )
status: active
lo0: flags=8049 metric 0 mtu 16384
inet 127.0.0.1 netmask 0xff000000
fec0: flags=28943 metric 0 mtu 1500
ether 00:13:21:c8:54:6b
inet xxx.xxx.xxx.xxx netmask 0xfffffe00 broadcast xxx.xxx.xxx.xxx
media: Ethernet none
status: active

原文: http://www.cublog.cn/u/17709/showart_573233.html

分类: BSD/linux 标签: ,

FreeBSD Netgraph Interface Bonding

2010年7月21日 16hot 没有评论

The following is used on FreeBSD to combine two physical interfaces (fxp1, fxp2) into a single virtual interface (ngeth0). This method allows one to take the feeds from a traditional two-output tap and present a single virtual interface to NSM applications.

#!/bin/sh
kldload ng_ether
ifconfig fxp1 promisc -arp up
ifconfig fxp2 promisc -arp up

ngctl mkpeer . eiface hook ether
ngctl mkpeer ngeth0: one2many lower one
ngctl connect fxp1: ngeth0:lower lower many0
ngctl connect fxp2: ngeth0:lower lower many1

ifconfig ngeth0 -arp up

Remember to replace fxp1 and fxp2 with the interfaces on your FreeBSD system (e.g., em0, em1, etc.).

References

ngctl(8)
I believe I first heard of this technique here.

分类: BSD/linux, 转载 标签: ,

FreeBSD下使用csync2分布同步

2010年7月21日 16hot 没有评论

1、简述

最近因项目需要,找了相关的开源同步解决方案。由于采用FreeBSD系统,有些Linux专用的程序,是不能使用的了。即使可以使用,配置起来太 麻烦,需要Linux虚拟环境。这样代价太高。rsync,mrsync,等都看了遍,最终选择了csync2。

官方网站: http://oss.linbit.com/csync2/

使用手册: http://oss.linbit.com/csync2/paper.pdf

官方发布的正式版是1.34,需要sqlite2的支持。如果想用sqlite3,就需要从他们svn更新最新源码回来。SVN里的版本已经支持 sqlite3了。

使用SVN获取最新源码:

$ svn co  http://svn.linbit.com/csync2/trunk csync2-trunk

由于SVN的源码文件里,没有configure文件,需要自己手工生成。源码目录里有个autogen.sh文件,需要修改下,才能执行。

$ cd csync2-trunk
$ vi autogen.sh

aclocal-1.7
autoheader
automake-1.7 –add-missing –copy
autoconf

改为

aclocal-1.9
autoheader
automake-1.9 –add-missing –copy
autoconf

具体版本号,视里面已经安装的aclocal和automake版本来设置。

然后执行:

$ autogen.sh

执行过程中,会提示一些信息,基本不用管它。这时候生成configure文件了。不过如果现在就执行./configure,还会报4437行错误。将那行注释掉就好了。

#AM_PATH_LIBGNUTLS(1.0.0,0 ,  AC_MSG_ERROR([[gnutls not found; install gnutls, gnutls-openssl and libtasn1 packages for your system or run configure with --disable-gnutls]]) )

2、安装

在安装之前先安装相关的依赖包。下面时我用ports安装csync2-1.34时自动安装上的依赖包:

$pkg_info -r csync2-1.34_8
Information for csync2-1.34_8:

Depends on:
Dependency: pkg-config-0.23_1
Dependency: libtasn1-2.6
Dependency: sqlite-2.8.17_1
Dependency: libiconv-1.13.1_1
Dependency: gettext-0.18_1
Dependency: popt-1.14_1
Dependency: librsync-0.9.7_2
Dependency: libgpg-error-1.7_1
Dependency: libgcrypt-1.4.5
Dependency: gnutls-2.8.6_1

由于SVN版本使用的是sqlite3,所以还需要安装sqlite3-3.6.23.1_1。这些软件包,在/usr/ports 中安装就可以了。

# setenv LOCALBASE /usr/local/
# env CPPFLAGS=”-I${LOCALBASE}/include” LDFLAGS=”-L${LOCALBASE}/lib” LIBGNUTLS_CONFIG=”${LOCALBASE}/bin/pkg-config gnutls” ./configure
# make
# make install

没有什么意外的话,就OK了。如果提示缺什么软件包,到ports里安装。

3、配置

下面是源码包里带的配置文件范例:

% cat csync2.cfg
# Csync2 Example Configuration File
# ———————————
#
# Please read the documentation:
# http://oss.linbit.com/csync2/paper.pdf

# group mygroup
# {
#     host host1 host2 (host3);
#     host host4@host4-eth2;
#
#     key /etc/csync2.key_mygroup;
#
#     #
#     # WARNING:
#     # You CANNOT use paths containing a symlink
#     # component in include/exclude options!
#     #
#     # Here is a real-life example:
#     # Suppose you have some 64bit Linux systems
#     # and /usr/lib/ocf is what you want to keep
#    # in sync. On 64bit Linux systems, /usr/lib
#     # is usually a symlink to /usr/lib64.
#     # This does not work:
#     #   include /usr/lib/ocf;
#     # But this does work:
#     #   include /usr/lib64/ocf;
#     #
#
#     include /etc/apache;
#     include %homedir%/bob;
#     exclude %homedir%/bob/temp;
#     exclude *~ .*;
#
#     action
#     {
#         pattern /etc/apache/httpd.conf;
#         pattern /etc/apache/sites-available/*;
#         exec “/usr/sbin/apache2ctl graceful”;
#         logfile “/var/log/csync2_action.log”;
#         do-local;
#        # you can use do-local-only if the execution
#        # should be done locally only
#        # do-local-only;
#     }
#
#     # The backup-directory needs to be created first!
#     backup-directory /var/backups/csync2;
#     backup-generations 3;
#
#     auto none;
# }
#
# prefix homedir
# {
#     on host[12]: /export/users;
#     on *:        /home;
# }

下面是我的配置:

# vi /usr/local/etc/csync2.cfg

# Csync2 Example Configuration File
# ———————————
#
# Please read the documentation:
# http://oss.linbit.com/csync2/paper.pdf

group mygroup
{
host fb1.isyi.com fb50.isyi.com fb51.isyi.com;

key /opt/etc/isyi.key;
include /opt/www/test;

action
{
pattern /opt/www/test/*;
exec “echo ok >> /tmp/csync2.log”;
}
auto younger;
}

配置好后,还需要修改/etc/hosts文件,将主机名和IP设置好。这个配置,三台服务器都需要配置一样。

192.168.56.1  fb1.isyi.com
192.168.56.50 fb50.isyi.com
192.168.56.51 fb51.isyi.com

生成key文件,这个key文件,需要复制到三台服务器,保证一样,否则不能同步:

# cd /opt/etc/
# csync2 -k isyi.key

生成CERT文件,需要在三台服务器分别生成:

setenv etc_path “/usr/local/etc”
openssl genrsa -out ${etc_path}/csync2_ssl_key.pem 1024
openssl req -batch -new -key ${etc_path}/csync2_ssl_key.pem -out ${etc_path}/csync2_ssl_cert.csr
openssl x509 -req -days 2000 -in ${etc_path}/csync2_ssl_cert.csr -signkey ${etc_path}/csync2_ssl_key.pem -out ${etc_path}/csync2_ssl_cert.pem

4、启动服务

分别在三台服务器执行:

# /usr/local/sbin/csync2 -ii -vv&

5、执行同步

在主服务器,需要向其他服务器同步的服务器执行:

# /usr/local/sbin/csync2 -xvv

6、附录

6.1、csync2的help

% ./csync2

csync2 SNAPSHOT – cluster synchronization tool, 2nd generation
LINBIT Information Technologies GmbH <http://www.linbit.com>
Copyright (C) 2004, 2005  Clifford Wolf <clifford@clifford.at>
This program is free software under the terms of the GNU GPL.

Usage: ./csync2 [-v..] [-C config-name] \
[-D database-dir] [-N hostname] [-p port] ..

With file parameters:
-h [-r] file..      Add (recursive) hints for check to db
-c [-r] file..      Check files and maybe add to dirty db
-u [-d] [-r] file.. Updates files if listed in dirty db
-o [-r] file..      Create list of files in compare-mode
-f [-r] file..      Force this file in sync (resolve conflict)
-m file..       Mark files in database as dirty

Simple mode:
-x [-d] [[-r] file..]   Run checks for all given files and update
remote hosts.

Without file parameters:
-c  Check all hints in db and eventually mark files as dirty
-u [-d] Update (transfer dirty files to peers and mark as clear)

-H  List all pending hints from status db
-L  List all file-entries from status db
-M  List all dirty files from status db

-S myname peername  List file-entries from status db for this
synchronization pair.

-T              Test if everything is in sync with all peers.

-T filename         Test if this file is in sync with all peers.

-T myname peername  Test if this synchronization pair is in sync.

-T myname peer file Test only this file in this sync pair.

-TT As -T, but print the unified diffs.

The modes -H, -L, -M and -S return 2 if the requested db is empty.
The mode -T returns 2 if both hosts are in sync.

-i  Run in inetd server mode.
-ii Run in stand-alone server mode.
-iii    Run in stand-alone server mode (one connect only).

-R  Remove files from database which do not match config entries.

Modifiers:
-r  Recursive operation over subdirectories
-d  Dry-run on all remote update operations

-B  Do not block everything into big SQL transactions. This
slows down csync2 but allows multiple csync2 processes to
access the database at the same time. Use e.g. when slow
lines are used or huge files are transferred.

-A  Open database in asynchronous mode. This will cause data
corruption if the operating system crashes or the computer
loses power.

-I  Init-run. Use with care and read the documentation first!
You usually do not need this option unless you are
initializing groups with really large file lists.

-X  Also add removals to dirty db when doing a -TI run.
-U  Don’t mark all other peers as dirty when doing a -TI run.

-G Group1,Group2,Group3,…
Only use this groups from config-file.

-P peer1,peer1,…
Only update this peers (still mark all as dirty).
Only show files for this peers in -o (compare) mode.

-F  Add new entries to dirty database with force flag set.

-t  Print timestamps to debug output (e.g. for profiling).

-s filename
Print timestamps also to this file.

-W fd   Write a list of directories in which relevant files can be
found to the specified file descriptor (when doing a -c run).
The directory names in this output are zero-terminated.

Creating key file:
./csync2 -k filename

Csync2 will refuse to do anything when a /var/etc/csync2.lock file is found.

分类: BSD/linux 标签: ,

拷贝VirtualBox磁盘文件

2010年7月16日 16hot 没有评论

由于VBox的磁盘文件有UUID,直接用cp拷贝,是行不通的。使用下面命令可以:

VBoxManage clonehd f202de6c-6425-4b0f-923f-2dda724c818c freebsd3.vdi

分类: BSD/linux 标签: ,

实易嵌入式智能DNS 3.1.0-RELEASE正式版发布

2010年7月15日 16hot 1 条评论

修正问题:

1、解决导入时重复记录问题
2、线路列表上下移动的问题
3、安全规则上下移动的问题
4、TXT记录安全 过滤限制了~符号的问题
5、 HTTP登录时,帐号信息不显示问题
6、添加 线路IP,停止、禁用状态不一致问题
7、在具体线路列表里,看不到改变后应用按钮问题

新增功能:

1、日志搜索功能
2、日志清空功能
3、日志导出功能
4、终端恢复默认 80端口
5、记录查找结果快速修改及分页功能
6、域名、记录备注功能
7、远程数据备份接口功能
8、产品注销注册功能
9、 重启DNS服务
10、黑名单功能(线路管理)
11、 DNSSEC 功能
12、设置系统时间功能

软件升级:

1、核心系统升级到FreeBSD-8.0最新稳定版本
2、 bind 升级到9.4-ESV最新稳定版本
3、分别支持32位和64位CPU两个版本

下载地址:

3.1.0-RELEASE 32位安装包

3.1.0-RELEASE 64位安装包

更多下载…

升级说明:

警告:

1、只能从3.0版本升级到3.1版本,不能从2.x版本升级到3.1版本

2、升级之前,务必先备份数据

1、备份数据,在“数据备份”,点击“导出数据”
2、上传升级
2.1、下载IMG文件;
2.2、在“升级系统”里,上传IMG;
2.3、其中“数字签名”,将下载描述里的MD5校验码拷贝到“粘贴数字签名”里;
2.4、上传成功后,会自动校验,升级完毕后会自动重启。
3、光盘升级
3.1、下载3.1版ISO文件,刻录光盘
3.2、重新安装系统;
3.3、启动后,登录进去,在“数据备份”,将备份文件导入,注意要选择“覆盖旧数据”;
3.4、数据导入后,将会自动重启。

分类: 实易智能DNS 标签: , ,

正则表达示全集,包括验证汉字在内(转)

2010年7月9日 16hot 没有评论

(“/^[\xa1-\xff]+$/”这是一个纯中文字符串
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式 收集于此,以备不时之需。

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计 1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? />
评注:网上流传的版本太 糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表 达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验 证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注: 表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$    //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$   //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$    //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$   //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母 的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和 26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式

分类: 开发 标签:

使用enca转换文件编码

2010年7月8日 16hot 没有评论

安装enca:

# cd /usr/ports/converters/enca
# make install clean

对一个目录下的文件进行转换编码:

# find . -type f | grep -E -v “.svn|.gif|.jpg|.png” | xargs enca -L zh_CN -x UTF-8

分类: BSD/linux, Shell 标签: , ,