五月, 2008


30
五 08

同桌

  好多年没有听到过这样的称呼了,最记忆犹新的,是我的小学同桌,她寄给我过一张明信片,上面写着“亲切的唤一声老同桌……”,我至今都记得她的名字。
  今天被一个新同事这样称呼,感觉好亲切。立刻使我“不安的心”安宁了许多。
  之所以不安,是因为我的钱包找到了,果然是被我猜中的很恶心的事实。
  我实在是很无语。三十多岁的仪表堂堂的帅小伙子,怎么看都不能联想到能做出这样的事情来。
  我很难过,我真的很难过,我看着他被打,而且跪在地上认错。我看在眼里,心里说不出的滋味,我真的意识到,我有罪,我给了别人犯错的机会,甚至有可能就因此毁了别人一生……
  我一直在想,我到底是善良还是懦弱,昨天晚上,我叫嚣着,假如真的让我知道是他干的,我会抽他,然而当我真的确定知道的时候,心里却只想着,把现金还给我就行了,我甚至没有想着要他赔偿因为要补办身份证而跑回郑州的来往车费。
  我被董爷教训了,而且我也意识到这一点儿:我太“善良”了,过分的善良,不是好事情,这不是对自己好不好,而是对社会,对其他人好不好的问题。
  我想到了一句话,《美国邮差》里的,大致意思是说:在太平年代,我们应该彬彬有礼;在战争年代,我们应该如下山猛虎,浴血奋战。还有歌曲《一条大河》里的歌词:朋友来了有好酒,若是那豺狼来了,迎接它的有猎枪……

  最后想说的是,BlogBus很好,真的很好,我们文武双全,又亲切,又年轻……  


28
五 08

Frysk GUI

  真的,应该认真阅读文档。
  CentOS 5.1的发行说明中,含有大量的有价值的信息。
Frysk GUI
frysk 项目的目的是创建一个智能的、分布式的、always-on 的系统监控和调试工具,它允许开发者和系统管理员来:

  • 监控运行的进程和线程(包括创建和终止事件)
  • 监控 locking primitive 的使用
  • 解开死锁
  • 收集数据
  • 从列表里选择任何进程来调试,或者允许 frysk 来打开崩溃或不正常的进程的源代码(或其他)窗口。

 在 红帽企业 Linux 5 里,frysk 图形用户界面只是一个技术预览,但 frysk 命令行接口是被完全支持的。

/usr/bin/fcatch
/usr/bin/fcore
/usr/bin/fhpd
/usr/bin/fparser
/usr/bin/fstack
/usr/bin/fstep
/usr/bin/ftrace


28
五 08

SVN服务端数据如何备份

貌似假如系统版本相同或相似或相当,可直接通过备份目录来备份、迁移SVN服务器数据。

不过在CentOS的发行说明里看到如下的方法,应该是更通用的。

Subversion
在 红帽企业 Linux 5 中,Subversion 版本控制系统是与 Berkeley DB 4.3 相关联的。如果从 红帽企业 Linux 4 进行了升级,而其中有使用 Berkeley DB 后端 “BDB”(而不是纯基于文件系统的 “FSFS” 后端)创建的 Subversion 存储库(repository),您需要注意存储库是否可以在升级后被访问。这个过程必须在 红帽企业 Linux 4 系统上执行,并应该在升级到 红帽企业 Linux 5 前 进行:

关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。

使用下面的命令对存储库进行备份:

svnadmin dump /path/to/repository | gzip > repository-backup.gz

在存储库中运行 svnadmin load 恢复命令:

gzip -d repository-backup.gz

svnadmin create /path/to/new_repository

svnadmin load /path/to/new_repository  < repository-backup

删除存储库中无用的日志文件:

svnadmin list-unused-dblogs /path/to/repository | xargs rm -vf

删除存储库中所有剩余的共享内存文件:

rm -f /path/to/repository/db/__db.0*


28
五 08

MySQL Slave实现同步关键步骤之一

CHANGE MASTER TO
MASTER_HOST=’192.168.1.124′,
MASTER_USER=’replicuser’,
MASTER_PASSWORD=’***********’,
MASTER_PORT=3307,
MASTER_LOG_FILE=’mysql-bin.000094′;

start slave;

show slave status\G

 


28
五 08

配置yum使用速度快的源

CentOS 中科大源
====
# CentOS-Base.repo
#
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.

#
#
[base]
name=CentOS-$releasever – Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://centos.ustc.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
#released updates
[updates]
name=CentOS-$releasever – Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://centos.ustc.edu.cn/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever – Addons
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
baseurl=http://centos.ustc.edu.cn/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://centos.ustc.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever – Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://centos.ustc.edu.cn/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
建议gpgkey仍然使用官方的地址,安全第一!
假如本地有安装源,比如:http://192.168.0.45/linux
那么可以使用如下两行命令编辑yum的配置文件,使用本地源来安装软件(update的话,恐怕仍然需要官方指定的源):
sed -i ‘s/^mirrorlist/#mirrorlist/g’                                      /etc/yum.repos.d/CentOS-Base.repo  
sed -i ‘/^#baseurl/abaseurl=http://192.168.0.45/linux/’  /etc/yum.repos.d/CentOS-Base.repo  

24
五 08

纪念5月12日汶川地震,史上最震撼灾难片精彩镜头集锦


23
五 08

转自夏磊同学

君生我未生,我生君已老。
君恨我生迟,我恨君生早。
君生我未生,我生君已老。
恨不生同时,日日与君好。
我生君未生,君生我已老。
我离君天涯,君隔我海角。
我生君未生,君生我已老。
化蝶去寻花,夜夜栖芳草。


21
五 08

来自李珮铱

你在春天,正直绽放;

你在夏天,五彩斑斓;

你在秋天,惊艳四方;

你在冬天,映雪独傲。

这世界有朋友真好……


20
五 08

天堂树

天堂树,其实我想的,一半是天堂,一半是树。

“我想做一棵树,就长在我们家”,是一个朋友的签名。
这让我立刻想起我们家院子里的两棵树,一棵是桐树,另一个也是桐树。现在已经不在了,现在的院子没有树。
想到院子,于是我想起,我有很久没有回家了。这次回郑,居然也没有回家一趟,老爸、老妈心里一定难过。
小燕子力求让我回家看看,结果也还是没有回去成。我不得不承认我越来越自私了,越来越只顾自己的感受而不愿多设身处地的去考虑别人。在父母那里,更是依然任性地以为自己是个孩子……我必须仔细思考一下这个问题,根源在哪里?
……
先回到树。
我想起公司出门不远处的小小广场上,有一棵极具特色的树,在上海。其实我不知道树的名字,同事们也没有人知道。五一的时候,几个朋友过来玩,有一个人居然知道,但是我仍然没有记住,短消息过去打听名字去了。
为这个树,我还特意拍了照片,在梨子的相机里,刚拿出来,放上来的:

说到相机,我准备买个D80,我决定了。除了计算机,我必须再搞出来个别的兴趣出来,不然担心活不长久。
说到兴趣,初中、高中时代关心、热衷的无线电通讯,现在貌似也有一定的实力可以搞起来了,可是似乎已经没有了当时的那种热烈的渴望。
……


17
五 08

郑大漫步

坐在郑州大学物理工程学院的研究生用实验室里……感慨良多。

在校园里漫步,回想起很多当初的感受,寂寞、孤独、空虚、无聊、凡此种种,好像大学非没有给我太多良好的印像,美好的,是那年青的岁月,道路两边的梧桐树,地上斑驳的阳光,绿油油的草地……还有天真浪漫的漂亮女生……


13
五 08

iptables端口转发

routing
decision
IN ——> PRE —> ——> FORWARD —–> —-> POST —–> OUT
interface  ROUTING  \       filter       /       ROUTING     interface
DNAT     |       tracking     ^       SNAT
REDIRECT |                      |       MASQUERADE
v                     |
INPUT                OUTPUT
| filter             ^ filter,DNAT
v                     |
\–> Local Process –/
user-space programs

-A PREROUTING -d 210.14.65.203 -p tcp -m tcp –dport 23 -j DNAT –to-destination 192.168.1.230:22
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -d 192.168.1.230 -p tcp -m tcp –dport 22 -j SNAT –to-source 192.168.1.21


13
五 08

使用MySQL的计划任务

原先,LAMP的程序员为了完成一些周期性的数据库操作任务,总是不得不借助于操作系统的帮助,比如Windows的计划任务,或者Linux的contab。MySQL5.1终于新增了Event Scheduler功能,可以直接在后台实现一下定时性的作业。但不知道什么原因,在英文版的参考手册中,位于触发器和视图之间的第20章Event Scheduler,在中文版中被删减掉了,手册的其他部分也没有丝毫提到它,好像它根本就不存在一样,所以它的知名度不是很高。有兴趣的读者可以参考http://dev.mysql.com/doc/refman/5.1/en/events.html获得比较完整的帮助。

1.1 开启
     MySQL的Event Scheduler是根据预先安排的计划进行数据库操作的数据库对象,可以看作是一种“时间触发器”。Event实际上是被一个特殊的event scheduler线程执行的,假如它正在运行的话,可以通过SHOW PROCESSLIST命令看到它。全局变量event_scheduler用来设定是否服务器端运行执行计划任务,该变量有如下三种值:
      OFF:计划任务处于停止状态,event scheduler线程没有运行。是event_scheduler的默认值;
      ON:计划任务处于运行状态,event scheduler线程启动,并执行所有的计划任务;
      DISABLED:该值将致使计划任务不可运行
     你可以使用下列的任意一句开启计划任务:
           SET GLOBAL event_scheduler = ON;
           SET @@global.event_scheduler = ON;
           SET GLOBAL event_scheduler = 1;
           SET @@global.event_scheduler = 1;

1.2 创建
     Event Scheduler作为一种数据库对象,其增删改的DDL语句与其他对象非常相似,无非CREATE、ALTER、DROP等,创建的基本语法是:
          CREATE EVENT        (1)
          [IF NOT EXISTS]        (2)
          event_name         (3)
          ON SCHEDULE schedule      (4)
          [ON COMPLETION [NOT] PRESERVE]   (5)
          [ENABLE | DISABLE]       (6)
          [COMMENT 'comment']       (7)
          DO sql_statement        (8)
     逐条介绍:
     (1) 创建Event嘛,这俩关键字当然不能少了
     (2) 如果不存在同名的数据库对象才创建
     (3) 计划任务的名字。作为数据库对象,都有一个本库内唯一的名字做标识
     (4) 计划任务的计划,重点就在这儿。有两个关键字来设定任务的执行计划:AT和EVERY:
          AT指定的是一个一次性计划,后面跟着一个时间戳,后续的sql语句将在指定的时间被执行一次;
          EVERY指定的是一个周期性计划,在该子句中可以指定从某时间点到某时间点期间,每隔某周期就执行一次该任务。
     (5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
     (6) 有效或失效。默认有效
     (7) 真正要执行的语句

1.3 实例
      首先是一个一次性计划任务的例子,该任务在指定的2008-02-06 23:59:00这个时间点,向messages表中插入一条记录:
          CREATE EVENT e_totals
          ON SCHEDULE AT ’2006-02-10 23:59:00′
          DO
          INSERT INTO messages VALUES (null, ‘admin’, ‘过年了!’, ‘祝大家鼠年发大财!!!’, ’127.0.0.1′,NOW());
      下面是一个周期性计划任务的例子,该任务在2008-02-06 23:59:00开始的一年内,每隔1小时就删除掉messages表的早先的10条记录:
          CREATE EVENT e_hourly
          ON SCHEDULE
          EVERY 1 HOUR STARTS ’2007-02-10 23:59:00′ ENDS ’2008-02-10 23:59:00′
          DO
          DELETE FROM messages limit 10;

     计划任务属于数据库服务器端的对象,创建好后,只要开启了event_scheduler,就可以自动触发执行了,不用在前台进行任何干预。当然一定要记住,只有MySQL5.1以上版本才支持该对象。
 


12
五 08

BASH中使用数组

Bash中还可以使用数组变量,其赋值有两种:

(1) name = (value1 … valuen) 此时下标从0开始
(2) name[index] = value

数组下标的范围没有任何限制,同时也不必使用连续的分量.

———————————————————-

$ A=(a b c def)
=========================================

$ echo ${A[@]} //取全部元素
a b c def
========================================
$ echo ${A[0]} //取第一个元素
a
========================================
//取得数组元素的个数
$ echo ${#A[@]}
4
$ echo ${#A
}
4
$ echo ${#A[3]} //取得元素3的长度
$
========================================

$ A[3]=yaoshuyin //将第三个元素重新赋值
$ echo ${A[@]}
a b c yaoshuyin

=======================================
//清除变量
$ unset A
$ echo ${A[@]}
$

=======================================

//清空变量,即将值变为空
$ A=
$ echo ${A[@]}
$
=======================================

A=B
B=C
unset $A 事实上所取消的变量是 B 而不是 A
=================示例 while循环=============

#建立数组
arrSource=(“arrJobs.php” “arrSubHangye.php” “arrFirst.php” )

arrDest=(“buildhr” \
“buildtrain/htdocs” \
“bankhr” \
“healthr” \
“elehr” \
)

#取数组无元素个数
lenArrSource=${#arrSource
}
lenArrDest=${#arrDest
}
#循环列出数组元素
i=0
while [ $i -lt $lenArrSource ]
do
echo ${arrSource[$i]}
let i++
done
i=0
while [ $i -lt $lenArrDest ]
do

echo ${arrDest[$i]}
let i++
done
=======================示例: for循环=========

#源文件
arrSource=(“/home/800hr/htdocs/login_jump.php”)

#目标网站
arrDest=(ithr elehr buildhr bankhr healthr ctvhr chenhr mechr clothr cneduhr 56hr tourhr foodhr greenhr cnlawhr waimaohr)

for outer in ${arrSource
} #${arrSource
} 是数组中的所有元素
do
for inner in ${arrDest
}
do
echo “ln -s $outer /home/${inner}/campus/”
done
done


10
五 08

独自黄昏

dsc04482.jpg 


6
五 08

find使用怪现象分析

当前结构如下:

./index.html

./Html/ok/index.html

./Html/ok/234897293.html

./Html/ok/2938489237.html

./Html/ok/ad.js

./Html/ok/bg.gif

在当前目录下运行:

find -name *.html

输出如下:

./index.html

./Html/ok/index.html

在./Html目录下执行:find -name *.html,输出为:

./ok/index.html

./ok/234897293.html

./ok/2938489237.html

于料想的结果不一致。经过思考,大概是因为shell在解析这个命令时,将*.html转义成了index.html

当使用:find -name “*.html”就不会有意外发生了!

或者 find -name  \*.html