情为此物

June 29th, 2008

她是东村的,他是西村的,中间一道沟,沟南面有东山和西山,隔一道谷。

      他一直在东山放羊,她一直在西山放羊,两人从七八岁就知道那边有个和自己一样大的孩子,十二三联单岁才想到相互喊话,你多大?你有多少只羊?你想上学不想?…….

      再大一点,不喊话了,她的羊群总在东山西边的坡上,他的羊群总在西山东边的坡上,他常爬岩上树像个小英雄,她就捂嘴偷笑。再大一点,有一天,他突然跑了过去,把一大朵野花插在刀子头上,转身就跑,滚了坡,她惊叫之后就大笑。又有一天,她突然跑了过去,把一个香囊挂在他脖子上,转身跑,说:“我给你绣的……”他就憨笑。

      终于有一天,两人会合了,在山的最高处。她和他有点羞,找不到话题,就说咱给山上这棵树取个名字吧,说了就一起使劲想,想了不少,最后她说出一个,背过身去问他:“你听说过爱情这两个字没有?”他想了想说:“好像听说过。”她转过身来就笑了:“那是啥东西?”他说:“好像是外面世界的一种东西,咱这里没有。”她说:“那咱就把这树叫爱情树吧?”他说可以,就定了。

      从那以后,爱情树就成了她和他会合的一个点。那三个树杈像三根巨指,中间是炕那么大的掌心,平平的,她和他可以坐在上面,也可以躺在上面。最多的时候,她和他是并排躺着看天。云怎么那么白?怎么又黑了?怎么想着是什么就是什么?太阳多大了,太阳有媳妇吗?是月亮吗?他们的家在哪里?星星是他们的孩子吗?…….话题有点羞时,她就钻到他怀里打他,他就亲她,她就不动了。有一天,她问:“你说咱躺在这里看天算啥?”他说:“是爱情吧?”

      又有一天,她和他正在树的掌心里抱着说话时,一群村崽出现了,围着树笑喊:“两口子!两口子!…….”她呆了,他跳下树来,崽们跑下山去了,显然是早就发现了他和她的秘密,结群来逮现场的。

       果然,他回到家就被爹捆在了树上,往死里打。山里定亲的男女也只是一年走一回亲,自由幽会也是要动家法的。晚上,他偷偷爬出了家,他站不起来了,就往东村爬,爬一阵晕一阵,爬了大半夜,天快亮时才爬过了那道沟,爬到了她家门口,跪起来,大叫:“我来了!”

      他想知道她挨打没有,被打死没有,没打死,他有话说,打死了,他也死。

      她娘出来了,一看就狠了脸:“你这娃,真是找死!”
      他问:“她呢?”

      “死了!”

      他一听就站了起来,伸头撞院中的石碾,咚的一声,倒了。

      她大哭着跑出门,扑到他的身上,哭叫,他没死,睁开眼睛就问:“打你没有?再打就打我……..”

      东村的人围上来了。

      西村的人赶过来了。

      两个娃你护我我护你很惨烈,两村人都说算了算了。西村的人抬走了他,东村的人拦住了她,她哭得死去活来。

     不久,她嫁给了一个富家崽,那富家崽大她10岁,还是个傻子,她没有抗争,她家太穷,她爹病着,等用钱。

     他出走打工了。

   她出嫁后,也像个傻子了,不说话,不笑,走路低头,从不看天。吃穿是不缺的,她家里也因此好过了起来,她对那个傻子也是尽力伺候照看着。有时她会偷偷看一眼南山,叹一声,就流眼泪了。

他打工一直不顺,挣挣扎扎地,但也能给家里寄些钱,打了十多年工,他很少回家,直到家里的房子盖起来了,妹妹也上大学了,爹妈不在了,他才决定不打工了,回家。人们看见,四十来岁的他,就像六十多岁的样子,也确实打不成工了。回家的第三年,他终于娶上了媳妇。媳妇是小寡妇,有点憨气,但身体好,五大三粗的,能吃能干,日子也归入正常了。

这时的她,那傻子死了,她爹娘也不在人世了。不久,她买了几只羊,又放起羊来,把家也搬到了山前,搭了间小茅屋。

他自从回家后一直不上山,也不看山。村人有时也会有意无意地对他提起她的事,好像她和他真有一种牵连似的,口气都有点惋惜与无奈。他觉得这山里的“爱情”也长大一点了,人情就比从以前暖和多了。

这天晚上,他问媳妇:“你知道啥是爱情不知道?”

媳妇撅着嘴说:“啥爱情,不就是你那个放羊的。”

他问:“那你呢?”

媳妇说:“我是你的媳妇,娃的妈。”

他叹了一声,媳妇说得很清楚,爱情是爱情,媳妇是媳妇,念想是念想,日子是日子,两不沾。媳妇好像比外面世界那些能人精人还通大理,千万年扯不清的事理,媳妇一句话就说清了。

媳妇撒娇问:“你是不是想她了?”

他不吭。

媳妇说:“你会不会不要我了再要她?”

他说:“那不会。”

媳妇说:“那你告诉我,你想她的啥?她的啥我这里没有?”

他说:“天上的云。”

媳妇愣了半天没愣明白,看见他流泪了。她幽幽地说:“那你去看看她吧,她怪可怜的。”

他提了神看她。她笑:“真的。”他抱了媳妇,说:“你是好人。”

第二天,他上山了。

她还是在东山的西坡上放羊,和当年一样。他就从西山的东坡往山顶走。

她看见了他,就抛下羊不管,也往山顶走。他先到了那棵树前,定住了。他很震撼,几十年过去了,这树还是那样子,一点都没变。她也到了,拉了他手,也看树。

“你看,树还是那样子。”

“是啊,还是那样子。”

“人都老了……”

“是啊,人都老了……”

“一场梦似的……”

“就是一场梦,一生也就一个梦。”

“这些年,你看过云没有?”

“没有。你呢?”

“没有。”

“咱两个的一生其实也就树杈上那一阵子,没别的。”

“就是。”

说到这里,他和她就上树了。没有当年那么灵活了,他很艰难地爬上去,然后拉她上去。还和当年一样,并排躺了,还是看天。

于是,这一生的两个点就连结在一起了。云怎么那么白?怎么又黑了?怎么想着是什么就是什么?太阳多大了?太阳有媳妇吗?是月亮吗?他们的家在哪里?星星是他们的孩子吗……..

她问:“你说咱躺在这里看天算啥?”他说:“是爱情吧?”她想了想说:“那这树呢?树看了这么多年的爱情,咋还是这个样子?”他这次说上来了:“爱情就是这样的,啥都经历过了,还活着,就是爱情了。”她笑了,偎紧他,说:“是的,爱情树。”

其实,还是有人知道他和她的这次幽会,在山下看着这树。他的媳妇就是一个,在门口一直看着那树。

从山下看那树,就只是一只瘦小的鸟爪,朝着苍天那么扑抓着,千万年过去了,不知抓到了什么?

想起布蓝里

June 24th, 2008

照常,昨夜睡得晚。待到上床的时候已经不思睡。目光炯炯,心事清明,仍强迫自己闭眼,然而一会儿便天亮。索性起来洗头,搬个凳子坐在落地窗前一下一下地梳。

眼圈是黑的,也昏沉。外面行人稀少,晨鸟在飞,早上的郊野空气有种特别的气味,我喜爱它一如喜爱下雨的味道。慢慢的,心里涌起喜悦。
记得初到这个地方,头天清晨也是很早就醒来,跳下床到窗子那儿看,看到建筑物后面的一小片湖水。

云光云影相互潋滟。

白天的课排得满满,照旧趴着睡了一会,梦中觉得自己的头发一直在唰唰唰拼命长,一直到脚下。

黄昏的时候出去找吃的,路过一家快餐店,听到里面大声放歌。

猴子会翻筋斗,牛儿爱吃草,再来一只小兔子,它会蹦蹦跳。

海水倒灌。想到那一段光景。

认识她的时候,真正年少。成长都是以后慢慢应验的事。

中学新生报到,要到一个很远的地方军训半个月。我费力地往一辆挤满人的军用卡车车厢里爬,周围都是陌生的面孔。突然有人伸手拉住我,用力往上扯,我就上去了。因为太大力,一下子扑在那人身上,我抬眼看,一头乱糟糟的短发,大眼浓眉。

那就是布蓝里

车厢里塞了几十个人和大包大包的行李,还有人不断地上来,我下意识躲避,便紧紧地和她贴在一起。
车子启动时,妈妈在众多送行家长中冲上车喊,哎,那个姑娘,我把她交给你了,帮我照顾她啊。
布蓝里大声回了一句“没问题”。

下午有两节课,是所有课程中唯一人文色彩深厚的,教课的是一个三十多岁的文学博士,英文流利,普通话标准,手指干净,日进千金。他提到两句诗。乡村年少生战后,见话前朝如梦中。他说他不强求理解,不苛求心钝木志昏蒙的可爱年轻人。他说你们不了解不记得也是福气。我觉得有些意思,就听下去。
那两节课说了很多,他实在渊博,是个有小智慧大思想的人。因为人心繁大,他刻意试图开启我们,但大智慧只在不经意中。

然后是口语课。这期的外教终于年轻些了,他大着舌头用中文说,我叫苏,来自美国。他说我的课上我可以说中文你们不可以。中途的时候他要牡丹和一个男生到前面去示演一段对话。牡丹一边小声骂一边磨蹭着上去,众目睽睽,我觉她真艳光四射。两个人别扭地站在前面,底下一阵哄笑。牡丹按规定说完一堆冠冕堂皇的话,那男孩却张口结舌,半天出不得声,苏一直催促,他终于面红耳赤牛头不对马嘴地冒出一句“You are beautiful”。

我在下面笑得死去活来。
后来苏玩起一些弱智的把戏。要我们准备三句话,两句是真实做过的,一句是不曾有过的。
他点到我。他说,July在不在,起来说一下。
我站起来轻言细语。
One thing:我被我妈生下下。
Second thing:我天天吃饭睡觉上厕所。
Third thing:我有两个女儿,一个叫福音一个叫莫离。
苏似科目瞪口呆,然后呵呵傻笑,也不纠正我的语法错误。我有些得意地坐下,还发出大声响。只过了一会儿,心中便渐渐懊丧,觉得自己无聊透顶。

黄昏的时候,牡丹脸上神秘兮兮口里不掩亢奋地回来说,那个做蛋烘糕的回来了,于是和殷一阵忙天慌地穿衣找鞋,三个人欢欢喜喜浩浩荡荡地往街上去。我喜欢红豆沙拉馅的。牡丹喜欢沙拉肉松的。殷喜欢奶油。

在走过那家大声放歌的快餐店门口时,突然再次想起那个叫布蓝里的人。

训练的时候我们分在一个班,我记得是八班。我们高矮相仿,排队的时候站在一起。睡觉是打地铺,她的被褥铺在我的旁边,吃饭的时候她是桌长,负责分配人收拾饭桌,我就莫名其妙少洗了很多次碗。
那是八月,训练场上没有树,只有大片大片的草,阳光炙热,有时一场暴雨,便有很多红蜻蜓在水迹低飞。班长二十来岁,对我们极其严格,但那时玩心浓烈,一切皆新奇,一天下来虽腰酸腿软,但仍满心活络,跃跃欲试。还写了一个顺口溜,大意是诽谤调侃负责训练我们的那个小兵,原文怎样不记得,都是些人不人猪不猪脖子和腰一般粗之类的低水准语言。

后来布蓝里到处宣传,不久整个军营都把那几句话熟稔了,校长放话要追查到底,揪出始作俑者以儆效尤。
当时惶惑。
那句话布蓝里是在吃完中午饭之后和我说的,嘴角还有油迹,她目光坚定,对我说,那有什么,要死一起死。不知怎的,真的不怕了。
她在夜间把我推醒,低声说陪我去上厕所。
懵懵懂懂中就起来穿衣服,蓬着头跟她走。那地方离住处有两百米的距离,我们拉着手,没有路灯,在虫唱和蛙鸣中穿越训练场地,踩着长草,蚊虫在腿上叮出一串红包。

那时千真万确,远离城市,抬头有繁星。
也许夜太深,梦黑甜,醒不过来,一路上只是拉着手,说不得话。但就算那样,我也知道在她叫我的时候二话不说起身跟她走。
后来轮到她值夜班,就是搬个凳子在大家睡觉的时候守到半夜,在小本子上记下有谁晚归或出去。
我摸黑起来,带着夹心饼干到外面找她,心中是怕的,在黑暗的走道里小心翼翼地走,突然前面出现光线,我看到布蓝里在是筒光圈中的笑容。
那晚我们趴在阳台上把饼干吃完,然后我一直坐在她的身旁。
那半个月做了很多事情,想想看,除了把蚱蜢逮住关在饭盒里,把蝌蚪放进矿泉水瓶里,除了走两个小时泥巴路到靶场打枪然后跑到草丛里去拣拾弹头,除了装头痛肚子痛不去训练偷跑到外面买零食然后晚上在被子里吃……一切年少时应该经历的过程都光鲜而理直气壮地走了之后,还留下什么?

最重要的,仍就是认识布蓝里。
回到学校以后,布蓝里和我做了一年的同学。我们拼死拼活要坐在一起,于是得逞。坐在第一排正中的位置上。
老师问那个著名的问题。
雪化了变成什么?
我心中有数,春天。
布蓝里拍着桌子说,明明就是水蒸汽。

布蓝里到家里来吃饭,不吃青菜,嬉皮笑脸地夹到我碗里。妈妈喜欢她,爸爸把她当男孩,拍拍她的肩,有时还把啤酒拿出来,说布布,陪我喝一杯。吃好了就下楼到我房间关上门,有时我趴在床上读喜欢的小说给她听。她会大叫听不懂,但最后都会很安静地听完。有时读着读着就睡着,相对而眠,记得她近处的呼吸,暖烘烘地吹在脸上。有时她一翻身便卷走我的被子,或者手肘压着我的头发,我也不动。
总是她先睡着。口水流出来,浸湿我的枕头,然后自己醒来,皱着眉头把枕头翻一面再睡。

到现在也不习惯和人同床睡,但那时的感觉地却妥帖安稳,没有任何不适,她醒了就用被子蒙着脸,只露出眼睛,看着我笑不可抑。

用心消磨的时光暖煦且短暂,然而我是一直记得的人,我攀附在布蓝里瘦削而坚韧的身体上,在十来岁的年纪中四处打望,校园里有桐花树,围墙上有长藤,布蓝里可以轻而易举翻过去,然后在另一边使劲拖我。校园外面有电影院,穿过一条街是天主教堂,圣诞节的时候我们便混在人流里去拿分食的糖果。

阳光普照,轻狂之中,自有宠爱我们的人。
于是勾肩搭背,争强好胜,手心总是汗涔涔,并且不失时机地相视而笑。
她有男孩一般的性格,卷着袖口四处纵横。头发极短,长了便剪掉,再长了又剪掉。
布蓝里和我逃学,用单车载我到西南交大,她说她知道附近某处有一个神奇的算命人,算得很准。附近,其实是遥远的一段距离,路上恰逢一场雨。我们到路边的地下书店躲雨,坐在公用的塑料椅子上,我说那我们还去不去。
她说去的,我们已经走了这么远。

身上湿了,就到她小姑姑家,那里有一个房间是她的。她把她的袜子拿出来给我换,是白的,纯棉,没有任何花纹和缀边。
后来在西南交大老旧的校园里,她带我到湖边坐,光线从头顶的树荫中影影绰绰地漏下来,在肩膀上脖颈上印出一小块一小块的光斑。她说她要到清华。那时侧脸去看她,深信不疑。
我呢。我问时候心中泰然自若,似乎一切都在顺其自然之中。
你,当然和我在一起。
我得到想要的回应。再不追究到底如何。
我们没有找到那个神秘的人,但回程的时候已全然忘却。

一切都很好,晚自习之后我们仍不离开学校,到操场去跑步,然后坐在跑道上看星。衣服书包扔了一地。伸手伸脚摆出大字,她不停地说她的梦想。

成都的天空难得见到几个星,我们仍津津有味。

人间的尘埃多多少少侵惹过来,恼人的季节带来那些花月和人事。我们不懵懂,心中有知觉,布蓝里挥挥手,让它们走开,于是我也就心甘情愿的只放在心里,我想布蓝里是知道的,她不说。
她喜欢坐在我旁边唱,翻来覆去一遍一遍。以至我记得如此清楚。

猴子会翻筋斗,牛儿爱吃草,再来一只小兔子,它会蹦蹦跳。

后来认识秦恤,科大教授,副的。三十来岁,那时没有结婚,在城南独自住一套大屋,不知道是否有若干女人。我们都喜欢他,争先恐后叫他爸爸,他总是大笑,容忍我们在他的冰箱里翻找吃食。他给自己的居处取了一个名字,叫做亦然。我们横行霸道的时候总是不烟不酒无脂无粉,那间大屋,里面的人无疑是疼爱我们的。我们从来不按门铃,噼里啪啦一阵敲,他知道是谁,光着脚来开门,我们便踢掉鞋子冲进去,抢他的大拖鞋来穿。秦恤饶有兴趣地看我们表演。他抱手歪头,嘴角上扬,高高在上。布蓝里热衷和他抬械,我就跑到他书架上去翻书,那么我,我可以暗无天日心安理得地将它们堆在身边。在地上坐一个下午,累了就到阳台上去大力吸气,回过头,秦恤正用一个陶瓷缸子盛水过来,就埋头咕嘟咕嘟地喝。

他喜欢粤菜,口味清淡,是节制的人。因而肠胃干净,口腔里清洁舒适的味道。
他说布蓝里十分聪明,说我有时容易跳脱。
他说我是老头子了,禁不得你们折腾。哈哈。

是十六七岁时认识的人,不太上心,但不知不觉中足够依恋,仰仗自己年幼,便自然而然卖乖撒痴,总要遇见个对的人照单全收。
我想那就是他布施的恩慈。对我们有包容娇宠的恩泽,对自己亦仁慈。

后来分班,布蓝里学理,我学文。一上课她就跑到我的教室门口,伸个脑袋。
嗨,非,出来一下。
我就屁颠屁颠跑出去。满面笑容。
再后来布蓝里转校。除了连篇累牍飞惯性的错别字外,她的成绩实在优秀,而我只是一味固执。老师轻轻摇头,说,你是个奇怪的小孩,但你也要为你的将来负责和承担。
我不喜欢读书,真的不喜欢。
布蓝里说,没关系,你有你的办法,还有我。我们仍然在一起。

她们学校一帮人野游,我也跟了去,同他们一起挤车。那是身体无声舒展的季节。有风吹起的长头发短头发和永不知倦的球鞋。在树林里的空地上生火烤玉米,有人捉了鱼来,不知道怎么杀,就用石头砸。

那个地方叫斯山。我们拍了照,紧紧靠在一起,我穿白她穿蓝,身后有浓荫。地上铺着塑料布,塑料布上有很多吃食,还有啤酒和红酒,那些人都扑上去,我在外面挤不动,布蓝里把沙拉抢出来给我,我就高兴地笑了。

秦恤说,我只希望我有个女儿,像布蓝里又像非。
布蓝里说那就生两个,一个叫小布,一个叫小非,你要教小布爬树翻墙,教小非念诗。

后来又发生了一些事情。因为时间在走,一些东西非要远离,这是规律。絮絮叨叨之后便开始淡。于是只要自己狠狠记得,然后慢慢忘却。
布蓝里不在的时候,便独自到秦家去,坐很久的公车,抱着从他书架上带走的书,爬上七楼,呼哧呼哧等他来开门。他盘腿在沙发里看电视,便过去一起看,那儿刻有深居简出的洁净感觉,心中冉起愉悦。也不说什么,仅是安心嵌在沙发里,而身旁的人给你吃给你喝,容你嬉笑怒骂,热了有凉风寒了有暖气,只要你在这里,他就很好地待你。
电视上有异处的风景,风车田园,吉普飞驰,如风过眼自有良人。美不胜收。

秦恤轻轻咳嗽,就乖巧地倒水给他。水杯倾覆,便被紧紧抱住。整个人沦陷。手无寸铁,心中亦没有防备。夺门而逃的时候身体里面寂静一片,甚至记得下楼后回头看一眼。秦恤倚在阳台上望,不徐不疾,胸有成竹。只是没有笑。
秦恤没有解释。那刻他的衣衫柔软,嘴唇从容。是心中有数的人,再怎样痴念,生活之中注定没有大跌宕。

只是个意外。以后大家都会拿捏得好。
后来我们仍高高兴兴地叫他爸爸叫他老头子。

那夜不风不雨,再寻常不过。半夜不能睡,跑到街上的磁卡电话亭打电话给布蓝里。
我一直说,停不下来。布蓝里先沉默,后来说他是混蛋臭男人等等。最后说,星期天我们去找他,让他请我们吃东西。
在德克士,布蓝里吃光了自己的汉堡,又把我的拖过去,扯出里面的炸鸡块。秦恤把他的换给我,自己吃剩下的面包和里面的生菜。

大家什么都不说,反而坦然

高二那年,布蓝里突然决定北上,她不说为什么,在一个春光明媚的日子连夜离开。或许是私奔。
我到现在都不敢完全确定因由。只是后来的遭遇在控制之外。

那一年,布蓝里招呼也不打就走得干干净净。她的妈妈和小姑姑到学校找我,求求我告诉她们布蓝里的下落,于是尽人皆知, 百口莫辩。
只是心里,一直极想念她,愈来愈沉,如同心病。
身边少了人,很寂寞。

离开之前,我们曾一起去过文殊院,还是逃学去的。那是个香火很旺的寺院,布蓝里把一枚硬币扔进祈愿池,问她许了什么,她笑说,说出来就不灵了。
在后院求到两串原色的木头珠子。一模一样,各挽一串,满心欢喜,不时扯起袖子来看。
秦恤看到,笑我们买到次货,他还说,好好用功,考上大学我带你们出去玩。
布蓝里说,要去很远的地方。
秦恤说,好,很远。

就是这样。

有时逗留久了,他就开口,玩得差不多了,回吧。

大半个年头摇摇晃晃地过,身边的人杳无音讯。秦恤把我的文章推荐出去,合了一些人的口味,拿来了一个小奖,被邀请参加一个教育机构组织的青少年联谊研讨会。
于是南下。家里人都很高兴。还发给我一个手机。
会址在S大,校园宾馆里,和一个女孩同屋住。她叫嘉黎,是戴着耳机索然走在人群里的人,不多话,然而一开口便言辞锋利,喜欢抬头在天空中找飞机。 
我们很快熟识,脾气相投。
活动安排很丰富,听著名学者的人文讲座,电影观摩,写作交流,参观博物馆,聚餐出游,等等等等。
我们是祖国的花朵。被不相干的人善待,优越感自然昭著。我们微微兴奋并且不安着。
在S大的林荫道上,看一栋栋古朴厚重的建筑和酝酿了上百年的苍翠清碧,和嘉黎日出而作日落而息,单纯充实。几天的光景,心中慢慢有变化。

开始对大学生活有憧憬。

有一天打电话回家问安,妈妈拉了一阵家常,挂电话时突然记起一般地说,布蓝里打电话找你。我把你的手机号告诉她了。
三天后我亡命般回到成都。和嘉黎互留联系方式,她说我们还会再相见。

接到布蓝里的消息是在一个中午,我兵荒马乱的跑到医院。 
实在等得太久。 
于是我们就这样的再次遇到。 

布蓝里躺在床上,身边空无一人。她看到我高兴的裂开嘴,怎么这么快,坐火箭来的是不是。 
我又哭又笑,那你要先好起来在我家楼下修个发射中心。医生说,她做手术的时候出了意外,孩子虽然已经流了,但人受了不少的苦。她问我布蓝里究竟有多大,意味深长。 
布蓝里比我小,小四个月。 
我说布蓝里,你有没有什么要对我说的。 
什么。她问。 
我也不问了。 
有男人来看她,出院的时候带她走,我死死的拽住她,我说你又要到哪里去。 
布蓝里拍我的脸,说我不走了,就在这里,你要常常来看我。男人把地址写在一张纸上,我狠命的握在手心。 

一间租屋,在红草巷,周遭环境恶劣,楼下有卖菜的和麻将馆。 
后来我问她,珠子呢。 
她愣了一下,然后翻箱倒柜的找出来托在手心。 
我跑到秦恤家去痛哭。他摸我的头,说你们长大了。 
他坚持不去看布蓝里。我试图对布蓝里提起时她也飞快的带过。 
布蓝里和他的男人生活在昏暗的斗室中,他们贫穷的笑。 
布蓝里还是穿着离开以前的衣裳,其中有一件是以前在伊藤洋华堂买的深蓝色套头衫,上面撒满白色和淡黄的星火,已经穿得褪色,星星不亮了。 
布蓝里在受苦,头发还是短,身子还是瘦。 

便跑到外面做兼职,在十一月露着肩背走来走去。一个小时一百块,还要分给职介所。剩下的全部用在请布蓝里吃东西。 
我知道无济于事,但不能旁观。 
三天两头往红草巷跑,见到她一个人蒙头大睡。我难过,布蓝里说,没关系,他在这边做些事,处理好了我们就一起走,那时就好了。 
咬牙不语。她什么时候成为如此甘愿的人。究竟是几时的事情。 
我怎么不知道。怎么什么也不知道。

学业一天紧过一天,仍然得空就出去打工,回到家腰酸腿痛,便往床上躺。接到布蓝里的电话,她说我饿了,便拿着衣服冲出去找到她。 
三番五次,心中的怜惜和热爱仍在,但也不可抑制的厌烦。看不得她和她的男人,生活的逼仄叫人烦躁。我相信我是情有可原。 

也许只是彼时的布蓝里太过明亮,于是不愿承受其他。 

有一天同她在小饭馆吃饭,她一边吃一边抱怨饭菜不合口又粗制滥造。 
突然有怨气,忍不住轻声说,布蓝里,我很累。 
她正在扒饭,低着的头动了一下。很久之后跟我说对不起。 
我突然又悔又痛。只扯着手腕上的那串珠子,绳子断了,我们眼睁睁的看它们四散跳开,也不去捡拾,只剩下手中的一颗。 

布蓝里说,你一定要上大学。你上大学我就会很高兴。 
她后来又走了,给了我一个电话号码,她说,要好好的,我们还会再见面。 
我很快辞了工,坐在教室里仰头向上,黑板上的白色字迹密密麻麻。妈妈说。奇怪,越到临考你的脸色怎么好起来。 
对于布蓝里,我一直很想问她那次在文殊院许了个什么样的愿望,那里香火那么旺盛,一定会实现。但每一次见到她都忘。 

于是关于那一段就像那些断线的木头珠子一样跳脱。 
所以我有过一串心爱的珠子。 
所以后来只剩下一颗。 

有一天布蓝里到学校找过我,探个头在教室门口叫,非,出来一下。 
一瞬间,竟觉得那是隔世的事情。 
她说男人弄到了两张展览的票,要我一起去看。 
那是一个摄影展,炒作得很厉害,那年的成都商报上有我和布蓝里的一张照片。我背着身子,史无前例下不为例的穿了一件粉衫,布蓝里正对镜头,笑的很开心,指着一张人体摄影对我说好好好。 

我上了大学。不是布蓝里曾经口里心里都在念叨的著名学府。是个青山绿水,白墙红瓦的浮浅之地。一切都轻轻软软,不给人任何重压。 
没有任何陈旧的物什,没有历史没有典故没有由来也没有从头说起,连一棵老树都没有。但房间里有木头地板,有落地窗和蓝色的窗帘,有几个沉浸在好时光中的女孩儿进进出出,光着脚放音乐接电话倒水喝水,还有有很多书本和夹在某一本中已经陈旧的相片。那些光影的遗迹。 

日日沐浴更衣,结绳记事,终究忘了是哪一本。 

那个暑假到高地去。海拔在四千米以上,藏族老婆婆拿着纺锤坐在地上,小孙女在羊群中跑来跑去,我抱着她拍照,然后她摊开脏的小手掌问我要钱。 
临走那天司机来对我们说可能要推迟回程,雪积得太厚,车子不敢下山。那日又是一夜大雪,我们住在半山宾馆,氧气稀薄,淋浴的时候不敢把门关严,怕突然缺氧晕倒。 
清晨早起,披上衣服轻手轻脚的走到外面的空地上,四面都是山,雪光刺痛了眼睛。彻骨的寒冷。我站在悬崖边上,掏出手机给布蓝里打电话。刚停不久的雪又开始飘,漫山遍野,电话始终盲音。 
秦恤走出来拿他的羽绒服裹住我。他履行了诺言,我们来到一个很远的地方。 
突然想起布蓝里说的那句话。她说要去的,我们已经走了这么远。 

果然是回不去了。 

我开始我的大学生活。与此同时,秦恤卖了他的亦然居。移民出去。 

再好不过。

我希望他会有两个女儿,也许一个像我,一个像布蓝里。不同的是她们会有像现在网上那对超人气双胞胎姐妹Mandy和Sandy一样清澈得让人掉进去的瞳仁。 

我白天上课或逃课,有时横行在网络上,认识有趣的人和阅读各种希奇古怪的文字,良心发现时便到图书馆去消磨,那里有很大的桌子,带一大瓶水,趴在上面很安心。 

有一天接到嘉黎的电话。竟有有与世隔绝的感觉。收拾齐楚跑回城里,在三叶草见到她,惊为天人。我们亲密拥抱,她问还是一个人。 
我说还是。她说也不奇怪,你总是理想化一点,精神洁癖。当初看你写的字就是这样。 
后来又来了两个男子,一个是狱长一个是时尚杂志的编辑。大家坐在一起喝水玩牌看英俊的洋人玩桌球。 
她向我窃笑。那时太年轻了,以为自己是尖锐的,口诛笔伐一通,那小小的一块精神地盘便是自己的天下。其实现实总要让你流血流汗,让你疼的嗷嗷叫,怎能不觉悟。 
其实现在挺好。她斜睨的端详那两个男人。耳语渐渐弥散。眼中妖娆。 

我也对自己放心了。身边的人都在迅速长大,我怎么会不。 

有一天回家,看到一个月没有见的家人,很高兴,妈妈不停的摸我,摸了头发摸手臂,她说,我那时侯头发一直到腰,又粗又黑,你的怎么就又红又褐,像个野孩子。 
爸爸忙,那天也回家,我们出去吃饭,弟在前面跑,又折回来问我要零钱买蛋筒冰淇淋,妈妈喝止他,说只知道吃零食,他扮鬼脸,鬼精鬼精的。 
饭桌上爸爸酒过三旬,突然问,好像很久没听你提过布蓝里了,她怎么样了,在哪个大学。 

我悴不及防,甚至来不及背过脸去。 
     
布蓝里喜欢的东西有罗莎蛋糕店里的寿司卷,外面裹紫菜的那一款,炒栗子,香辣虾尾。 
布蓝里永远不穿裙子,袜子总是纯棉洁白没有花色。 
布蓝里喜欢骑飞车,我在后面说说慢点慢点。 
布蓝里的头发永远没有长长过,这样我就会一直认得她。  

昨晚我躺在床上看夜访吸血鬼,殷凑过来问是什么,我告诉她,她说哎呀好吓人。 
我笑,那是我曾经读给布蓝里的一本。 

青天白日,或者夜色如水。 
某年某月,布蓝里确有其人。 

猴子会翻筋斗,牛儿爱吃草,再来一只小兔子,它会蹦蹦跳。

MRTG + lm_sensors + CPU溫度 on linux

June 23rd, 2008

用 lm_sensors套件取得 cpu溫度

[1] apt-get install lm_sensors

[2] 執行 sensors-detect指令
     此用來偵測設定值,全Enter即可,
     之後它自已會將該要的module放於/etc/sysconfig/lm_sensors裡

[3] 載入/etc/sysconfig/lm_sensors裡的模組
      指令如下
         modprobe module1
         modprobe module2

     如果是 RPM安裝
        service lm_sensors start

     執行 sensors指令可看到溫度資訊 Read the rest of this entry »

在Linux系统下多线路ADSL的配置

June 6th, 2008

双ADSL及多ADSL增加线路的配置过程。

Linux配置多线路ADSL的方法

powered by KindGeorge http://kindgeorge.at.3322.org\经过一段时间的观察,证明运行良好,现把设置过程及方法总结一下,欢迎指正.

此文档可以说明双adsl及多adsl增加线路的配置过程.

实验环境:

操作系统: RedHat7.3

两条adsl,长期观察线路稳定,动态ip,带宽2M,

三块网卡: eth0 tulip,接内网

eth1 3c59x,接第一条adsl

eth2 8139too,接第二条adsl

ethn xxxx,(如果还有的话….)

目的:用两条adsl共同上网,分担负载,实现一般的简单负载平衡,带动内网上网.

1.添加网卡

插入网卡,启动机器,如果需要双线路上网,就要三块网卡了,配置网卡也可以参考其他资料.

配置为找到相应的型号模块,例如:eth2是8139的网卡

[root@kindgeorge root]# vi /etc/modules.conf
alias parport_lowlevel parport_pc
alias eth0 tulip
alias eth1 3c59x
alias eth2 8139too

把新的线路插在eth2上

2.配置adsl

方法一:

(1)运行adsl-setup程序,会一步一步的提示你完成配置过程.

创建ppp0和ppp1的拨号配置文件,并保存配置,一般保存在/etc/sysconfig/network-scripts/ifcfg-ppp1

(2)确定/etc/sysconfig/network-scripts/ifcfg-ppp0文件,其中的PIDFILE参数设为:

PIDFILE=/var/run/ppp-adsl.pid

修改/etc/sysconfig/network-scripts/ifcfg-ppp1文件,将其中的PIDFILE参数设为:

PIDFILE=/var/run/ppp-adsl1.pid

如果你有更多的线路,可以继续增加0,1,2,3….等

这是为了使不同的拨好用不同的pid,如果不修改此参数将无法启动第二条线路接口。

(3)配置文件一般是:

USERCTL=no
     BOOTPROTO=dialup
     NAME=DSLppp1
     DEVICE=ppp1
     TYPE=xDSL
     ONBOOT=yes
     PIDFILE=/var/run/pppoe-adsl1.pid
     FIREWALL=NONE
     PING=.
     PPPOE_TIMEOUT=20
     LCP_FAILURE=3
     LCP_INTERVAL=20
     CLAMPMSS=1412
     CONNECT_POLL=6
     CONNECT_TIMEOUT=60
     DEFROUTE=yes
     SYNCHRONOUS=no
     ETH=eth2 (对应新线路的网卡)
     PROVIDER=DSLppp1
     USER=isp提供的新用户名字2
     PEERDNS=no

方法二:

(1)直接拷贝

cp /etc/sysconfig/network-scripts/ifcfg-ppp0 /etc/sysconfig/network-scripts/ifcfg-ppp1

(2)修改其中的ppp0为ppp1,

修改PIDFILE=/var/run/pppoe-adsl.pid 为PIDFILE=/var/run/pppoe-adsl1.pid

修改采用的新接线路的网卡,例如:改ETH=eth1 为ETH=eth2

(3)增加新线路的帐号和密码. 帐号密码一般是保存在/etc/ppp/chap-secrets 和pap-secrets

我们只需要在最后增加新的用户名2和密码2即可.

/etc/ppp/chap-secrets文件一般是这样的:

# Secrets for authentication using CHAP

# client server secret IP addresses

“用户名1″ * “密码1″

“用户名2″ * “密码2″

“用户名n” * “密码n”

3.启动ppp接口

因为adsl-start 命令缺省只能启动第一的ppp接口。所以要启动两个接口,必须指定配置文件。

可以用:方法一:

ifup ppp0

ifup ppp1

(ifup pppn…)

或方法二:

adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp0

adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp1

(adsl-start /etc/sysconfig/network-scripts/ifcfg-pppn)

4.查看新设置是否启动:

方法一:执行: ifconfig

出现ppp0 和ppp1 ,并且均得到ip了.说明成功了,结果象这样:

ppp0   Link encap:Point-to-Point Protocol 
          inet addr:218.114.37.137  P-t-P:61.142.110.30  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:165721 errors:0 dropped:0 overruns:0 frame:0
          TX packets:123673 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:157324193 (150.0 Mb)  TX bytes:14068892 (13.4 Mb)

   ppp1   Link encap:Point-to-Point Protocol 
          inet addr:218.114.35.62  P-t-P:61.142.110.30  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:560055 errors:0 dropped:0 overruns:0 frame:0
          TX packets:439711 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:530025378 (505.4 Mb)  TX bytes:80895162 (77.1 Mb)

方法二: 执行ip高级命令: ip link ls

也可以检验ppp0和ppp1,结果象这样:

1: lo: mtu 16436 qdisc noqueue
            link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
         2: eth0: mtu 1500 qdisc pfifo_fast qlen 100
            link/ether 00:50:bf:07:4e:32 brd ff:ff:ff:ff:ff:ff
         3: eth1: mtu 1500 qdisc pfifo_fast qlen 100
            link/ether 00:01:02:9a:31:b9 brd ff:ff:ff:ff:ff:ff
         4: eth2: mtu 1500 qdisc pfifo_fast qlen 100
            link/ether 00:e0:4c:79:44:71 brd ff:ff:ff:ff:ff:ff
       268: ppp1: mtu 1492 qdisc pfifo_fast qlen 3
            link/ppp
       273: ppp0: mtu 1492 qdisc cbq qlen 3
            link/ppp

方法三: 用命令测试反应

ping -I ppp0 202.96.134.133 (测试ppp0的线路状况)

ping -I ppp1 202.96.134.133 (测试ppp1的线路状况)

ping -I ppp2 ……n (如果还有多条的话)

5.如果单单是要实现链路负载平衡,让ppp0和ppp1分担负载,那么我们象以下设置一下配置:

(1)启动路由,允许转发echo 1 > /proc/sys/net/ipv4/ip_forward

(2)进行伪装:

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp1 -j MASQUERADE

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o pppn -j MASQUERADE (如果还有多条的话)

(3)修改网关

ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1

说明: 用replace的原因是当原来没有网关时会增加这个网关,当已经存在网关时,会修改原来的网关.

用add 也可以,但是当已经存在默认网关时就要先delete再add.

两个weight 1的意思是这两条链路的权值是相等的,两条链路承担的网络流量是相等的。

有一点是需要说明的,因为路由表是基于缓存的,所以在实际中两条链路并不能100%的平分流量

nexthop NEXTHOP 设置多路径路由的下一跳地址。NEXTHOP比较复杂,它的语法和以下高层参数类似:

via ADDRESS–表示下一跳路由器;

dev NAME–表示输出设备;

weight NUMBER–在多路由路径中,这个元素的权重。表示相对带宽或者服务质量。

如果你有多条线路,那么继续在其中增加 nexthop dev ppp2(ppp3……)即可

(4) 刷新路由

ip route flush cache

6.即时检查数据的方向

用tcpdump 分别监察两条线路,用下面命令:

tcpdump -i ppp0
  tcpdump -i ppp1
  tcpdump -i ppp2……n (有多条的话)

7.为了每次启动时自动启动,把命令写在启动脚本里面,在 /etc/rc.local 后面增加:

ifup ppp0
  ifup ppp1
  echo 1 > /proc/sys/net/ipv4/ip_forward
  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp1 -j MASQUERADE
  ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1
  ip route flush cache

结果:运行数月,效果稳定良好。

上网会明显加快,为何呢,因为两条线路分摊了负载.例如,内网80人同时上网, 如果网络是一条2M的adsl,那么整条线路都拥挤,挤得死死的,每人分得的带宽可能只有30k.大家都会明显感觉上网很慢。

如果增加多一条线路,那么两条2M共同分摊拥挤程度,这样,可能每人分得的带宽就会变成60K,是原来的加倍,以这种形式来加快上网速度,增加了并发连接的个数。

Cherry 3484

May 23rd, 2008












让Apache支持中文目录

May 18th, 2008

Apache自身并不支持中文目录,但是目前日本的webdev提供了mod_encoding插件来支持多字节目录。
在AS5和Everest0.5pre2版本上测试通过,记录如下:
1)首先确定安装了httpd-devel包。如果没有安装之
2)从官方分别下载基本包和补丁包

#wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
#wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616

或者可以下载文末提供的已经打好补丁的压缩包
3)解压基本包,并用mod_encoding.c.apache2.20040616替代基本包里的mod_encoding.c

#tar -xzf mod_encoding-20021209.tar.gz
#cd mod_encoding-20021209
#cp -f ../mod_encoding.c.apache2.20040616  mod_encoding.c
4)编译安装iconv_look库

# cd mod_encoding-20021209/lib/
# ./configure && make && make install
#echo “/usr/local/lib” >>/etc/ld.so.conf.d/local.conf
#ldconfig
5)编译安装mod_encoding模块

#cd mod_encoding-20021209
#./configure –with-apxs=/usr/sbin/apxs –with-iconv-hook=/usr/local/include
#make

注:如果5)步骤出现下面的报错

mod_encoding.c:235: error: ‘regex_t’ undeclared (first use in this function)

请在mod_encoding.c文件中加上regex.h头,也就是加入
#include <regex.h>
一行。然后再编译。
6)安装动态库
如果前面步骤都没有错误,则应该在当前目录能看到mod_encoding.o文件,接下来该目标文件做成共享的动态库

# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook

将生成的mod_encoding.so文件拷贝到Apache的动态模块库目录中去

cp mod_encoding.so /usr/local/httpd/modules/

我们采用创建新的conf文件来加载该so文件

#cat >/etc/httpd/conf.d/cndir.conf
LoadModule encoding_module modules/mod_encoding.so
<IfModule mod_headers.c>
Header add MS-Author-Via “DAV”
</IfModule>
<IfModule mod_encoding.c>
 EncodingEngine    on
 NormalizeUsername on
 SetServerEncoding GBK
 DefaultClientEncoding UTF-8 GBK GB2312
 AddClientEncoding “(Microsoft .* DAV $)” UTF-8 GBK GB2312
 AddClientEncoding “Microsoft .* DAV” UTF-8 GBK GB2312
 AddClientEncoding “Microsoft-WebDAV*” UTF-8 GBK GB2312
</IfModule>
<CTRL+D>
当然SetServerEncoding UTF-8这样可以设置成你希望的默认编码,比如GBK,比如GB2312.
重启Apache。现在测试中文目录,看看效果。

Amfphp简介

May 14th, 2008

Amfphp 是PHP的RPC工具,它可以使PHP与下述技术无缝通信:

  • Flash 和 Flex Remoting
  • JavaScript JSON 和 Ajax JSON
  • XML 和XML-RPC

一、什么是RPC?

远端程序调用(RPC, Remote Procedure Call) 是一种客户端与服务器端交换数据方式。我们可以调用本地对象带对各种参数方法 ,设置回调并接受调用结果。我们不用关心发送和接收数据的实现细节。实现细节通常是抽象的, 就像我们在调用本地方法一样.

二、工作原理

客户端(Flash)与服务器端(php), 使用相同的方式描述方法调用和复杂数据。客户端序列化请求并将它发送到网关Amfphp。Amfphp再执行:

  • 反序列化请求
  • 找到相应的远程服务类
  • 实例化类
  • 执行安全检查
  • (使用指定参数)调用服务器端方法
  • 序列化返回的数据

Amfphp 可以正确地序列化、反序列化复杂类型数据。除了对象和数组,它还支持resources 数据连接资源,这就意味着我们可以通过调用远程方法简单返回mysql_query,amfphp 会处理这一切。 如果平台支持 (目前来说,Flash Remoting 和Flex Remoting), phpamf还可以处理循环引用和自定义数据。 它也支持简单的远程调试。还有amfphp 附带一个服务浏览器,它可以在创建客户端代码前测试远程服务。amfphp 1.0.1还添加了模板,可以自动生成客户端代码。Amfphp 1.9 beta更是新增了对AMF3的支持。详见http://www.riafan.com/article.asp?id=31

三、教学资源

1. 英文

2. 中文

centos 5.1 xen实例

May 14th, 2008

建立一个文件,使其成为guest所使用的磁盘:
mkdir /xen
dd if=/dev/zero of=/xen/hdcentos.img bs=1M count=6000

这样就在/xen中建立了一个6G左右的文件。

newfs下这个文件:

mke2fs -F -j /xen/hdcentos.img

将对应的文件挂到系统中来:

mount -o loop /xen/hdcentos.img /mnt/vm

为vm建立对应的设置

# mkdir /mnt/vm/dev
# /sbin/MAKEDEV -d /mnt/vm/dev -x console
# /sbin/MAKEDEV -d /mnt/vm/dev -x null
# /sbin/MAKEDEV -d /mnt/vm/dev -x zero

为vm准备对应的fstab文件

/dev/sda1 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0

加臷proc

# mkdir /mnt/vm/proc
# mount -t proc none /mnt/vm/proc

安装操作系统:

yum –installroot=/mnt/vm -y groupinstall Base

配置网卡(/etc/sysconfig/network-scripts/ifcfg-eth0):

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no

配置网络在启动时开始工作(/etc/sysconfig/network):

NETWORKING=yes

做一个在dom0上引导domU的initrd:

mkinitrd -v -f –fstab /mnt/vm/etc/fstab –with xenblk –with xennet –preload xenblk –preload xennet initrd-2.6.18-53.el5xen.vbird.img `uname -r`

最后,写上xen的配置文件(/etc/xen/hdcentos):
name = “hdcentos”
maxmem = 2048
memory = 2048
vcpus = 1
kernel = “/boot/vmlinuz-2.6.18-53.el5xen”
ramdisk = “/boot/initrd-2.6.18-53.el5xen.vbird.img”
on_poweroff = “destroy”
on_reboot = “restart”
on_crash = “restart”
vfb = [ “type=vnc,vncunused=1,keymap=en-us” ]
disk = [ “tap:aio:/xen/hdcentos.img,sda1,w” ]
vif = [ “bridge=xenbr0″ ]
root = “/dev/sda1 ro ”

下面你就可以启动你自己的虚拟domU了。

linux indent 命令详解

May 8th, 2008

功能说明:调整C原始代码文件的格式。

语  法:indent [参数][源文件] 或 indent [参数][源文件][-o 目标文件]

补充说明:indent可辨识C的原始代码文件,并加以格式化,以方便程序设计师阅读。

参  数:
 -bad或–blank-lines-after-declarations  在声明区段或加上空白行。
 -bap或–blank-lines-after-procedures  在程序或加上空白行。
 -bbb或–blank-lines-after-block-comments  在注释区段后加上空白行。
 -bc或–blank-lines-after-commas  在声明区段中,若出现逗号即换行。
 -bl或–braces-after-if-line  if(或是else,for等等)与后面执行区段的”{”不同行,且”}”自成一行。
 -bli<缩排格数>或–brace-indent<缩排格数>  设置{ }缩排的格数。
 -br或–braces-on-if-line  if(或是else,for等等)与后面执行跛段的”{”不同行,且”}”自成一行。
 -bs或–blank-before-sizeof  在sizeof之后空一格。
 -c<栏数>或–comment-indentation<栏数>  将注释置于程序码右侧指定的栏位。
 -cd<栏数>或–declaration-comment-column<栏数>  将注释置于声明右侧指定的栏位。
 -cdb或–comment-delimiters-on-blank-lines  注释符号自成一行。
 -ce或–cuddle-else  将else置于”}”(if执行区段的结尾)之后。
 -ci<缩排格数>或–continuation-indentation<缩排格数>  叙述过长而换行时,指定换行后缩排的格数。
 -cli<缩排格数>或–case-indentation-<缩排格数>  使用case时,switch缩排的格数。
 -cp<栏数>或-else-endif-column<栏数>  将注释置于else与elseif叙述右侧定的栏位。
 -cs或–space-after-cast  在cast之后空一格。
 -d<缩排格数>或-line-comments-indentation<缩排格数>  针对不是放在程序码右侧的注释,设置其缩排格数。
 -di<栏数>或–declaration-indentation<栏数>  将声明区段的变量置于指定的栏位。
 -fc1或–format-first-column-comments  针对放在每行最前端的注释,设置其格式。
 -fca或–format-all-comments  设置所有注释的格式。
 -gnu或–gnu-style  指定使用GNU的格式,此为预设值。
 -i<格数>或–indent-level<格数>  设置缩排的格数。
 -ip<格数>或–parameter-indentation<格数>  设置参数的缩排格数。
 -kr或–k-and-r-style  指定使用Kernighan&Ritchie的格式。
 -lp或–continue-at-parentheses  叙述过长而换行,且叙述中包含了括弧时,将括弧中的每行起始栏位内容垂直对其排列。
 -nbad或–no-blank-lines-after-declarations  在声明区段后不要加上空白行。
 -nbap或–no-blank-lines-after-procedures  在程序后不要加上空白行。
 -nbbb或–no-blank-lines-after-block-comments  在注释区段后不要加上空白行。
 -nbc或–no-blank-lines-after-commas  在声明区段中,即使出现逗号,仍旧不要换行。
 -ncdb或–no-comment-delimiters-on-blank-lines  注释符号不要自成一行。
 -nce或–dont-cuddle-else  不要将else置于”}”之后。
 -ncs或–no-space-after-casts  不要在cast之后空一格。
 -nfc1或–dont-format-first-column-comments  不要格式化放在每行最前端的注释。
 -nfca或–dont-format-comments  不要格式化任何的注释。
 -nip或–no-parameter-indentation  参数不要缩排。
 -nlp或–dont-line-up-parentheses  叙述过长而换行,且叙述中包含了括弧时,不用将括弧中的每行起始栏位垂直对其排列。
 -npcs或–no-space-after-function-call-names  在调用的函数名称之后,不要加上空格。
 -npro或–ignore-profile  不要读取indent的配置文件.indent.pro。
 -npsl或–dont-break-procedure-type  程序类型与程序名称放在同一行。
 -nsc或–dont-star-comments  注解左侧不要加上星号(*)。
 -nsob或–leave-optional-semicolon  不用处理多余的空白行。
 -nss或–dont-space-special-semicolon  若for或while区段仅有一行时,在分号前不加上空格。
 -nv或–no-verbosity  不显示详细的信息。
 -orig或–original  使用Berkeley的格式。
 -pcs或–space-after-procedure-calls  在调用的函数名称与”{”之间加上空格。
 -psl或–procnames-start-lines  程序类型置于程序名称的前一行。
 -sc或–start-left-side-of-comments  在每行注释左侧加上星号(*)。
 -sob或–swallow-optional-blank-lines  删除多余的空白行。
 -ss或–space-special-semicolon  若for或swile区段今有一行时,在分号前加上空格。
 -st或–standard-output  将结果显示在标准输出设备。
 -T  数据类型名称缩排。
 -ts<格数>或–tab-size<格数>  设置tab的长度。
 -v或–verbose  执行时显示详细的信息。
 -version  显示版本信息。

我的风格

-bad -bap -bbb -nbc -br -lp -ncs -ce -npsl -i8

如何保护自己编写的shell程序

April 28th, 2008

要保护自己编写的shell脚本程序,方法有很多,最简单的方法有两种:1、加密 2、设定过期时间,下面以shc工具为例说明:
一、安装shc工具
shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.
 
shc的下载地址:             
http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.6.tgz

安装:
tar zxvf shc-3.8.tgz
cd shc-3.8
make test
make
make test
make strings
make install  这一步需要root权限
 
二、加密方法:
shc -r -f scrīpt-name  注意:要有-r选项, -f 后跟要加密的脚本名.
运行后会生成两个文件,scrīpt-name.x 和 scrīpt-name.x.c
scrīpt-name.x是加密后的可执行的二进制文件.
./scrīpt-name    即可运行.
scrīpt-name.x.c是生成scrīpt-name.x的原文件(c语言)

三、设定期限:
首先使用shc转化为二进制,并加上过期时间,如
./shc -e 12/06/2006 -m “please contact yazjiyao@yahoo.com.cn” -r -f flushvpn.sh
 
 我一般在程序中加入自动更新系统时间 的命令,防止用户更改系统时间。