同桌

Posted by 曹宇伟 on 五月 30th, 2008

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

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

Frysk GUI

Posted by 曹宇伟 on 五月 28th, 2008
  真的,应该认真阅读文档。
  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

SVN服务端数据如何备份

Posted by 曹宇伟 on 五月 28th, 2008

貌似假如系统版本相同或相似或相当,可直接通过备份目录来备份、迁移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*

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

Posted by 曹宇伟 on 五月 28th, 2008

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

 

配置yum使用速度快的源

Posted by 曹宇伟 on 五月 28th, 2008
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  

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

Posted by 曹宇伟 on 五月 24th, 2008

转自夏磊同学

Posted by 曹宇伟 on 五月 23rd, 2008

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

来自李珮铱

Posted by 曹宇伟 on 五月 21st, 2008

你在春天,正直绽放;

你在夏天,五彩斑斓;

你在秋天,惊艳四方;

你在冬天,映雪独傲。

这世界有朋友真好……

天堂树

Posted by 曹宇伟 on 五月 20th, 2008

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

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

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

郑大漫步

Posted by 曹宇伟 on 五月 17th, 2008

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

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

iptables端口转发

Posted by 曹宇伟 on 五月 13th, 2008

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

使用MySQL的计划任务

Posted by 曹宇伟 on 五月 13th, 2008

原先,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以上版本才支持该对象。
 

BASH中使用数组

Posted by 曹宇伟 on 五月 12th, 2008

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

独自黄昏

Posted by 曹宇伟 on 五月 10th, 2008

dsc04482.jpg 

find使用怪现象分析

Posted by 曹宇伟 on 五月 6th, 2008

当前结构如下:

./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


Copyright © 2007 花开的地方. All rights reserved.