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
 
 我一般在程序中加入自动更新系统时间 的命令,防止用户更改系统时间。

$(( )) 與 $( ) 還有${ } 差在哪?

April 26th, 2008

我們上一章介紹了 ( ) 與 { } 的不同,這次讓我們擴展一下,看看更多的變化:$( ) 與 ${ } 又是啥玩意兒呢?

在 bash shell 中,$( ) 與 ` ` (反引號) 都是用來做命令替換用(command substitution)的。
所謂的命令替換與我們第五章學過的變量替換差不多,都是用來重組命令行:
* 完成引號裡的命令行,然後將其結果替換出來,再重組命令行。
例如:
[code]$ echo the last sunday is $(date -d “last sunday” +%Y-%m-%d)[/code]
如此便可方便得到上一星期天的日期了… ^_^

在操作上,用 $( ) 或 ` ` 都無所謂,只是我”個人”比較喜歡用 $( ) ,理由是:

1,  ` ` 很容易與 ‘ ‘ ( 單引號)搞混亂,尤其對初學者來說。
有時在一些奇怪的字形顯示中,兩種符號是一模一樣的(直豎兩點)。
當然了,有經驗的朋友還是一眼就能分辯兩者。只是,若能更好的避免混亂,又何樂不為呢? ^_^

2, 在多層次的復合替換中,` ` 須要額外的跳脫( \` )處理,而 $( ) 則比較直觀。例如:
這是錯的:
[code]command1 `command2 `command3` `[/code]
原本的意圖是要在 command2 `command3` 先將 command3 提換出來給 command 2 處理,
然後再將結果傳給 command1 `command2 …` 來處理。
然而,真正的結果在命令行中卻是分成了 `command2 ` 與 “ 兩段。
正確的輸入應該如下:
[code]command1 `command2 \`command3\` `[/code]

要不然,換成 $( ) 就沒問題了:
[code]command1 $(command2 $(command3))[/code]
只要你喜歡,做多少層的替換都沒問題啦~~~  ^_^

不過,$( ) 並不是沒有斃端的…
首先,` ` 基本上可用在全部的 unix shell 中使用,若寫成 shell script ,其移植性比較高。
而 $( ) 並不見的每一種 shell 都能使用,我只能跟你說,若你用 bash2 的話,肯定沒問題…  ^_^

接下來,再讓我們看 ${ } 吧… 它其實就是用來作變量替換用的啦。
一般情況下,$var 與 ${var} 並沒有啥不一樣。
但是用 ${ } 會比較精確的界定變量名稱的範圍,比方說:
[code]$ A=B
$ echo $AB

[/code]
原本是打算先將 $A 的結果替換出來,然後再補一個 B 字母於其後,
但在命令行上,真正的結果卻是只會提換變量名稱為 AB 的值出來…
若使用 ${ } 就沒問題了:
[code]$ echo ${A}B
BB[/code]

不過,假如你只看到 ${ } 只能用來界定變量名稱的話,那你就實在太小看 bash 了﹗
有興趣的話,你可先參考一下 cu 本版的精華文章:
http://www.chinaunix.net/forum/viewtopic.php?t=201843

為了完整起見,我這裡再用一些例子加以說明 ${ } 的一些特異功能:
假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 .  及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 .  及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 .  及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 .  及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
[list]# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。[/list]
${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2

我們也可以對變量值裡的字串作替換:
${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt

利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)

tips:
以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態.
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.

還有哦,${#var} 可計算出變量值的長度:
${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節…

接下來,再為大家介稍一下 bash 的組數(array)處理方法。
一般而言,A=”a b c def” 這樣的變量只是將 $A 替換為一個單一的字串,
但是改為 A=(a b c def) ,則是將 $A 定義為組數…
bash 的組數替換方法可參考如下方法:
${A[@]} 或 ${A[*]} 可得到 a b c def (全部組數)
${A[0]} 可得到 a (第一個組數),${A[1]} 則為第二個組數…
${#A[@]} 或 ${#A[*]} 可得到 4 (全部組數數量)
${#A[0]} 可得到 1 (即第一個組數(a)的長度),${#A[3]} 可得到 3 (第四個組數(def)的長度)
A[3]=xyz 則是將第四個組數重新定義為 xyz …

諸如此類的….
能夠善用 bash 的 $( ) 與 ${ } 可大大提高及簡化 shell 在變量上的處理能力哦~~~  ^_^

好了,最後為大家介紹 $(( )) 的用途吧:它是用來作整數運算的。
在 bash 中,$(( )) 的整數運算符號大致有這些:
+ - * / :分別為 “加、減、乘、除”。
% :餘數運算
& | ^ !:分別為 “AND、OR、XOR、NOT” 運算。

例:
[code]$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1[/code]

在 $(( )) 中的變量名稱,可於其前面加 $ 符號來替換,也可以不用,如:
$(( $a + $b * $c)) 也可得到 19 的結果

此外,$(( )) 還可作不同進位(如二進位、八進位、十六進位)作運算呢,只是,輸出結果皆為十進位而已:
echo $((16#2a)) 結果為 42 (16進位轉十進位)
以一個實用的例子來看看吧:
假如當前的  umask 是 022 ,那麼新建文件的權限即為:
[code]$ umask 022
$ echo “obase=8;$(( 8#666 & (8#777 ^ 8#$(umask)) ))” | bc
644[/code]

事實上,單純用 (( )) 也可重定義變量值,或作 testing:
a=5; ((a++)) 可將 $a 重定義為 6
a=5; ((a–)) 則為 a=4
a=5; b=7; ((a < b)) 會得到  0 (true) 的返回值。
常見的用於 (( )) 的測試符號有如下這些:
[list]<:小於
>:大於
<=:小於或等於
>=:大於或等於
==:等於
!=:不等於[/list]
不過,使用 (( )) 作整數測試時,請不要跟 [ ] 的整數測試搞混亂了。(更多的測試我將於第十章為大家介紹)

怎樣?好玩吧..  ^_^  okay,這次暫時說這麼多…
上面的介紹,並沒有詳列每一種可用的狀態,更多的,就請讀者參考手冊文件囉…

一张很有趣的图片,请按着CTRL+A

April 26th, 2008

老公,我比妓女便宜,回家好吗?(一个女人的告白)

April 22nd, 2008

亲爱的,我比妓 女便宜多了 老公,自从和你在一起,我才知道原来自己是那么的“便宜”。

每天总要比你早起一个小时为你做饭,照顾你的一切,你连一个“谢”字也从未对我说过,仿佛这一切都是理所当然的。
每天,你早上起床穿上我为你准备的衣服,拿起报纸,一边吃早点一边看报纸,而我却在做家务,你匆忙地上班走了,而我也有自己的工作,但却又不能不去照顾你。

  这些。。。妓 女会为你做吗?

  老公,你象个小孩子,不得不让我去照顾。记得咱刚结婚那会吗?你每天晚上总是喜欢躺在我的胸前看电视,看着看着就慢慢睡着了,为了不打扰你休息,我从未舍得叫醒你,直到自己胳膊麻木,到慢慢睡着。。。

  得我们以前在床上吗?我们总是不穿衣服偎依到天亮,而现在,你已经好久没碰过我了。

  你每天回家越来越晚,甚至彻夜不归,我总是习惯等你到天亮,没有你我睡不着。没有你的夜,好漫长。

  但是你还总是能记得我的生日,总是在回家晚的时候送上精美的小礼物哄我,我就这样,一夜一夜地等着你,等来的全是你的道歉和礼物。

  老公,那天我真不该出去,不出去的话就不会看到那一幕:你抱着一个小姐在马路上。

  老公,她真比我漂亮吗?我们结婚的时候你曾经告诉我过,我是全世界最漂亮的,难道那些话是骗人的吗?

  真想当时冲上前去问个究竟,但是,我忍住了,因为还有你的朋友在,我不想你没有面子。

  我慢慢地跟着你,前面的你们不时地传来欢声笑语,一转眼间,你们走进了一间宾馆。。。

  而保安拦着了我,他不让我进去,我只有在门口等。。。

  老公,天好黑,好冷,我好怕。。。

  老公,我好想你啊。。。

  眼泪划过脸庞。。。

  漆黑的夜,一个女人独自坐在宾馆前,等待自己彻夜不归的老公。。。

  老公妓 女一夜要多少钱?

  你为了讨妓 女欢心买给她们的礼物又要多少钱?

  你和妓 女出入的高档场所又要多少钱?

  你花了这些钱不就是为了换来一夜的刺激?

  而我,一分钱不用花,可你却不肯回家。。。

  老公,我比妓 女便宜多了,为什么你不肯要我?

搞笑避孕套广告

April 19th, 2008

超自信的笑容,会让你忘记一切烦恼

中间

April 18th, 2008

多远能够走完这世界 
感觉放到极限
某天无声的雨正下在某处
我被淋湿了
湿透我想才能更勇敢
等着雨过天晴
忽然想要看彩虹
可以拥抱我
我飞越一阵痛楚的转变
懂的想的就那些
原来那就叫作生命的中间
飞越一滴苦涩的眼泪
雨点下的好直接
发现彩虹在天边
渺小的我跑在最前面
那一边是明天
看见那看不见的时间
当我有了从前
往前发出声音告诉这世界
我想要什么
听见我已经开始冒险
泪水流下安慰
哭过的脸最坚决
放晴的瞬间
我飞越一阵痛楚的转变
懂的想的就那些
原来那就叫作生命的中间
飞越一滴苦涩的眼泪
雨点下的好直接
发现彩虹在天边
渺小的我跑在最前面
那一边是明天
我飞越一阵痛楚的转变
懂的想的就那些
原来那就叫作生命的中间
飞越一滴苦涩的眼泪
雨点下的好直接
发现彩虹在天边
渺小的我跑在最前面
那一边是明天
不远来到一切的中间
转变
会变灰色阴天到晴天
那天
了解像勇气的无意间
出现
生命有许多中间

外篇 数年后,周芷若与赵敏的对话(转贴)

April 16th, 2008

多年以后,赵敏和周芷若在湖边偶遇。

周芷若正在船中拂琴,看到岸上散步的赵敏,便要家仆把船摇靠岸,上了岸站在赵敏身前。

“赵姑娘,好久不见了。”周之若微微一欠身,向赵敏问了声好。

“哦,周姑娘,你,还是老样子。一点没变。”赵敏本早就认出了周芷若的,只因见周芷若经历风霜丝毫未见老去,而自己却已经和无忌隐居山野,一副村妇的模样,相形之下本要逃走的。赵敏想着刚刚周芷若看出了自己转身想走感到有些窘,但转念一想自己是从不曾向别人低过头的,尤其是眼前的周芷若,于是挺直了腰,直视向周芷若的眼睛,问道:“你还好吧。”

“赵姑娘费心了,我一直还好,你和无忌哥哥如何啊?”

赵敏突然觉得有些可怜周芷若了,尽管她现在看起来是绫罗绸缎,衣食无忧,可是一生之中最爱的人始终不在她身边,再好的物质又有什么用呢?此时赵敏觉得自己即便已经不如当年那样春风得意,但是也始终是强过了周芷若的。转念一想怕周芷若还在惦记着无忌,而无忌又是心肠软的人,禁不住周芷若的柔情,于是说道:“我和无忌很好,我们的孩子已经3岁了。周姑娘,你现在可有成家?”

“我,就要成家了。”周芷若羞怯地向船中一看,赵敏顺着她的眼光看去,船中原来还坐着一个男人,这男人见两个女人看向她,便起身走了出来。

“赵姑娘。”男子微一欠身算是行礼,收起手中的扇子,站到了周之若的旁边。

赵敏打量这个男人,他身形修长,一派儒雅之气,站在芷若身边,也确是人见人赞的一对壁人。不由得也赞叹起来。

“赵姑娘,这就是我未来的夫婿,白员外。”周芷若靠向白员外,向赵敏介绍到。

那男子体贴地看像周芷若,温婉地一笑。

赵敏看了有些不是滋味,当初无忌也没有这般柔情,于是酸酸地说了一句:“那么青书呢?”

“青书的事情我都知道,不烦赵姑娘费心了,他以前来时也祝福过我们,希望赵姑娘也能尽释前嫌,”白员外不客气地盯着赵敏,转向芷若说,“我们该回去了。”

“你先回去,我和赵姑娘还有话说。”周芷若看白员外面露难色,又说:“放心吧,我没事。”白员外又看了一眼赵敏,仿佛在警告她不要打什么主意,然后拍了拍芷若的手,这才回到船上,转身又对芷若说:“一会我叫家仆回来接你。”便让家仆摇著船去了。

“我家就在湖那边。”周芷若向赵敏补充道。

“好了,周芷若,别这样装腔作势了,你以前不是这样的。”赵敏发现了周芷若的不对劲,周芷若那里是这样随便自己欺负的人啊,“反正你那个员外已经走了。”

“芷若以前是有很多不对,希望赵姑娘不要忌恨。”

“你难道真的会这样安于现状吗?你不再惦记着张无忌了?”赵敏终于说出了憋了很久的话。

“无忌哥哥,他,还是和你比较合适的。”周芷若面向湖水走了几步,“我曾经也想不通,我和你到底谁更好呢?为什么无忌哥哥会喜欢你?后来我才知道,他不是喜欢谁不喜欢谁,他是个没有主见的人,男人都是他的兄弟,他讲义气,但是对女人,无忌哥哥丝毫没有头绪。他的情节是小昭不是吗?但是他自己不会判断,只要每天对着他说谁是他喜欢的人,他就会相信,他不是由心去作决定的。他优柔寡断,所以才会由我们这些人,你,我,小昭,殷离,我们之间不停的较量,而你最聪明,你懂得要抓住他。你知道怎么控制他,所以他也就注定要和你在一起。”

“周姑娘……”赵敏没想到周芷若会说出这些话。

“也许,世人会对我们各自评述,但是这又能怎么样呢?世人也都是希望你们能够走到一起的。赵姑娘,我钦佩你,你是为你自己活着的,你毫无顾忌,而我,我是始终活在挣扎之中的。”

“我曾经活得没有自己,我为了师傅活着,活在她的阴影里,因为那句毒誓,我和无忌哥哥在一起时总是有负担,因为光耀峨嵋的使命,我害了殷离,害了你,害了无忌哥哥,害了金毛狮王,也害了自己。这都是宿命。我曾经总是和你比,我想你残害过六大门,你压迫着汉人,你为了和无忌哥哥双宿双飞,你搅了我们的婚礼,你做了那么多我接受不了的事情,你甚至欺骗了无忌哥哥,让他离开了明教。我只不过是陷害了一个妖女,我没有你做的坏事多,为什么无忌哥哥甘愿和你在一起?后来我才知道,人和人是不一样的,你做的那些,你不会去后悔,不会觉得错,而我,我日日夜夜为了这件事情不能安寝,这件事情成了我心中的魔,你毫无负担,而我,却走得那么辛苦。”

“你是说我不知廉耻,做了坏事也不愧疚了?”赵敏有些不悦。

“不是,赵姑娘,”芷若忙辩解:“我是说你活的潇洒,活的自我,为了自己活着,我是羡慕你。你和无忌哥哥成婚是我知道,我也想象你当初那样用无忌哥哥答应我的那个条件逼你们不能成婚,但是我做不到,我知道,如果我做了,我会日日夜夜觉得对不起无忌哥哥,对不起你。我们三个都会痛苦,实在是没有必要那样做。”

“当初我还真怕你来搅我们呢,不瞒你说,我想了好多说辞来对付你,你没来,我还有一些失落呢。”赵敏看周芷若是真的放下了过去的事情,也放开了说起话来。

“赵姑娘,你总是争强好胜的,所以你能成一番大事,即便只是为人妻子,也是个有自我的妻子,而我,我的性格注定了我要这样平淡安详得过一辈子了。赵姑娘,我好羡慕你。”

“芷若,你把我说得太好了,其实,我们也许是可以做好姐妹的,我以前的确有对不起你的地方,你不会怪我吧?”

“怎么会呢,你看我现在,像是还会计较纠缠的人吗?只是咱们各在大江南北,像这样的偶遇,恐怕也是最后的缘分了。”

“芷若……”赵敏心中突有一丝不舍。

这时,船又摇了回来,芷若拉着赵敏的手,说:“后会有期吧,”转身,上了船。

赵敏看着越摇越远的船,心情难以平静。

“芷若,”白员外还是在船上,静静地看着芷若。

“义兄,刚刚谢谢你了。”

“唉,当初为了让青书死心,你不也是拉我做冒牌的丈夫。只是,我没有做你真丈夫的福气。芷若,我们……”

“义兄,芷若今生不想再论及感情了。”

“你还是放不下张无忌?”

“这也许是我这辈子唯一的执著了……”

50条超级变态的网名 我看的快笑死了

April 15th, 2008

1.牛拦织女 (拦路抢劫??劫色??)

2.龟头赛跑 (资源紧张啊!)

3.盘古开苞 (遥远的梦想,我也想)

4.女娲补锅 (原来女娲也喜欢湘剧啊)

5.罗密欧煮你爷 (快打110,叫你爷快跑啊)

6.梁山伯揍英台 (家庭暴力的典型案例)

7.猪八戒背黑锅 (习惯了)

8.包工头林冲 (林冲也下海??)

9.牛郎侄女 (侄女也行啊?)

10.天国的内衣 (什么牌子的啊??)

11.新白娘子玩传奇 (什么职业?多少级了?哪个区??)

12.后羿爱猫扑.爱生活 (看你能射多少)

13.九屎一身 (恶心)

14.王刚罚款 (谁叫你乱砍乱伐)

15.七仙女坐台 (多少钱一个啊?)

16.贵妃出狱 (无罪释放)

17.倩女幽会 (和谁啊??怕怕)

18.做一天和尚撞一天车(阿弥佗佛,悲惨悲惨)

19.脱了鞋子抽别人嘴巴(做错了事还怪别人啊)

20.蒂大吾勃 (牛X)

21.降龙十巴掌 (痛)

22.天生我崽必有病 (不知道怎么说,无语)

23.船到桥头自然沉 (潜艇???) 撞到桥头当然沉 (废话!!)

24.临死抱佛脚 (死还要拉个垫背的)

25.福尔牌摩丝 (哪里产的?福尔摩斯用的吗?)

26.名侦探可烂 (叼)

27.嫦娥奔丧 (王刚还是后羿挂了??)

28.黑B 00544 (我的车牌) 牛B 74110 (我朋友的车牌)

29.索尼爱寄信 (sonyericsson??)

30.久旱逢沐浴露 (不会又是雕牌吧?)

如何实现在RHEL下将多个网卡bonding为一个单一通道?

April 9th, 2008

Linux Channel Bonding可以支持把多个网络适配器集合在一起, 当作一个网络适配器来使用。在 Linux 下,网卡的高可用性是通过 MII 或者 ETHTOOL 的状态监测来实现的,所以,需要检查系统中的网络适配器是否支持 MII 或者ETHTOOL 的连状态监测。可以用命令 “ethtool eth0″ 来检查,如果显示的 “Link detected:” 信息与实现的连接状态一致,就没有问题。如果系统中的网络适配器不支持 MII 或者 ETHTOOL 状态监测,当连接失效时,系统就不能检测到,同时,在 bonding 驱动加载时,会记录一条不支持 MII 和 ETHTOOL 的警告信息。

环境: Red Hat Enterprise Linux 4 Update1  

 

解决方法:

RHEL支持在内核级实现将多个物理网卡帮定为一个逻辑bonding设备,通过把多个物理网卡帮定为一个逻辑设备,可以实现增加带宽吞吐量,提供冗余。

为了创建一个bonding设备,在/etc/sysconfig/network-scripts/下创建文件ifcfg-bond<N>,N是一个数字,例如0。

该文件内容对不同类型网卡的帮定都是一样的,例如以太设备。唯一的区别是DEVICE=应该是bond<N>,下面是一个示例文件:

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.0.1.0
NETMASK=255.255.255.0
IPADDR=10.0.1.27
USERCTL=no

一旦创建了bonding接口,bonding设备包含的网卡设备必须进行配置,在配置文件中添加到MASTER=和SLAVE=,所有网卡的配置文件都是类似的,例如一个bonding设备帮定了两个网卡,eth0和eth1的配置文件可能如下:

DEVICE=eth<N>
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

在本例中,把<N>替换为网卡编号。

为了激活bonding设备,必须加载内核模块,在RHEL4和RHEL3下加载模块的过程稍有不同。

RHEL4

为了确保在bonding设备在启动时模块被加载,在/etc/modprobe.conf中添加如下内容:

install bond<N> /sbin/modprobe bonding -o bond<N> miimon=100 mode=0

替换<N>为设备编号,例如0。

miimon 是指多久时间检查网络一次,单位是ms(毫秒),其意义是假设其中有一条网络断线,会在0.1秒内自动备援

 mode 共有七种模式(0~6)
 mode=0:负载均衡模式,有自动备援,但需要”Switch”支持和设定。
 mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
 mode=6:负载均衡模式,有自动备援,不需要”Switch”支持和设定。

如果还要使用互备模式,需要加上参数primary=ethx

对于每个虚拟bonding设备,在/etc/modprobe.conf中都要有对应行。需要注意的是在RHEL4U2之前的版本,不支持多个bonding设备。如果需要配置多个bonding设备,则需要升级内核到 RHEL4U2。

一旦/etc/modprobe.conf被配置,bonding虚拟设备配置文件以及网卡配置文件配置完毕,ifup命令将用来启动bonding虚拟设备,或者通过重新起动网络。