校园春色亚洲色图,精品视频在线播放色网色视频,www.com.cn成人http://www.aygfsteel.com/lyjjq/category/9244.html我喜歡java新東西zh-cnThu, 30 May 2013 13:00:46 GMTThu, 30 May 2013 13:00:46 GMT60怎么樣查看/tmp空間占用http://www.aygfsteel.com/lyjjq/articles/399146.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 11 May 2013 07:13:00 GMThttp://www.aygfsteel.com/lyjjq/articles/399146.htmlhttp://www.aygfsteel.com/lyjjq/comments/399146.htmlhttp://www.aygfsteel.com/lyjjq/articles/399146.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/399146.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/399146.html  986  df -h
  987  df
  988  lsof /tmp/
  989  lsof /tmp
  990  ps aux | grep linsniffe
  991  updatedb
  992  locate linsniffer
  993  locate linsniff
  994  pstree 11790
  995  killall linsniffer
  996  ps aux | grep linsniffe
  997  df -h
  998  ll
  999  df
 1000  exit
 1001  df


強(qiáng)強(qiáng) 2013-05-11 15:13 發(fā)表評(píng)論
]]>
vsftp "上傳 553 Could not create file" http://www.aygfsteel.com/lyjjq/articles/397143.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Fri, 29 Mar 2013 04:24:00 GMThttp://www.aygfsteel.com/lyjjq/articles/397143.htmlhttp://www.aygfsteel.com/lyjjq/comments/397143.htmlhttp://www.aygfsteel.com/lyjjq/articles/397143.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/397143.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/397143.html

2007-09-03 17:46 18213人閱讀 評(píng)論(5) 收藏 舉報(bào)
fileftp服務(wù)器windowslinux
我在LINUX下VSftp建立一個(gè)FTP服務(wù)器,但從WINDOWS使用FTP時(shí),無(wú)法上傳也無(wú)法下載!出錯(cuò)如下

ftp>; ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
Desktop
dead.letter
ou
vsftp-1.txt
vsftp-2.txt
vsftpd.conf
226 Directory send OK.
ftp>; put d:/fcitx/fcitx-3.1.1.tar.tar
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp>; get vsftpd.conf
200 PORT command successful. Consider using PASV.
550 Failed to open file.
 lc0 回復(fù)于:2005-08-08 13:51:37

搞定了,最重要的是man ftpd_selinux,解決這個(gè)問(wèn)題只要:
1. setsebool -P ftpd_disable_trans 1
2. service vsftpd restart
就行了。
謝謝老大!

強(qiáng)強(qiáng) 2013-03-29 12:24 發(fā)表評(píng)論
]]>
Linux curl使用簡(jiǎn)單介紹http://www.aygfsteel.com/lyjjq/articles/394223.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Mon, 14 Jan 2013 16:35:00 GMThttp://www.aygfsteel.com/lyjjq/articles/394223.htmlhttp://www.aygfsteel.com/lyjjq/comments/394223.htmlhttp://www.aygfsteel.com/lyjjq/articles/394223.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/394223.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/394223.html
1) 二話不說(shuō),先從這里開(kāi)始吧!

$ curl http://www.linuxidc.com

回車之后,www.linuxidc.com 的html就稀里嘩啦地顯示在屏幕上了    ~

2) 嗯,要想把讀過(guò)來(lái)頁(yè)面存下來(lái),是不是要這樣呢?

$ curl http://www.linuxidc.com > page.html

當(dāng)然可以,但不用這么麻煩的!

用curl的內(nèi)置option就好,存下http的結(jié)果,用這個(gè)option: -o

$ curl -o page.html http://www.linuxidc.com

這樣,你就可以看到屏幕上出現(xiàn)一個(gè)下載頁(yè)面進(jìn)度指示。等進(jìn)展到100%,自然就 OK咯

3) 什么什么?!訪問(wèn)不到?肯定是你的proxy沒(méi)有設(shè)定了。

使用curl的時(shí)候,用這個(gè)option可以指定http訪問(wèn)所使用的proxy服務(wù)器及其端口: -x

$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com

4) 訪問(wèn)有些網(wǎng)站的時(shí)候比較討厭,他使用cookie來(lái)記錄session信息。

像IE/NN這樣的瀏覽器,當(dāng)然可以輕易處理cookie信息,但我們的curl呢?.....

我們來(lái)學(xué)習(xí)這個(gè)option: -D <— 這個(gè)是把http的response里面的cookie信息存到一個(gè)特別的文件中去

$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com

這樣,當(dāng)頁(yè)面被存到page.html的同時(shí),cookie信息也被存到了cookie0001.txt里面了

5)那么,下一次訪問(wèn)的時(shí)候,如何繼續(xù)使用上次留下的cookie信息呢?要知道,很多網(wǎng)站都是靠監(jiān)視你的cookie信息,來(lái)判斷你是不是不按規(guī)矩訪問(wèn)他們的網(wǎng)站的。

這次我們使用這個(gè)option來(lái)把上次的cookie信息追加到http request里面去: -b

$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com

這樣,我們就可以幾乎模擬所有的IE操作,去訪問(wèn)網(wǎng)頁(yè)了!

6)稍微等等    ~我好像忘記什么了    ~

對(duì)了!是瀏覽器信息

有些討厭的網(wǎng)站總要我們使用某些特定的瀏覽器去訪問(wèn)他們,有時(shí)候更過(guò)分的是,還要使用某些特定的版本     NND,哪里有時(shí)間為了它去找這些怪異的瀏覽器呢!?

好在curl給我們提供了一個(gè)有用的option,可以讓我們隨意指定自己這次訪問(wèn)所宣稱的自己的瀏覽器信息: -A

$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com

這樣,服務(wù)器端接到訪問(wèn)的要求,會(huì)認(rèn)為你是一個(gè)運(yùn)行在Windows 2000上的 IE6.0,嘿嘿嘿,其實(shí)也許你用的是蘋果機(jī)呢!

而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"則可以告訴對(duì)方你是一臺(tái) PC上跑著的Linux,用的是Netscape 4.73,呵呵呵

7)另外一個(gè)服務(wù)器端常用的限制方法,就是檢查http訪問(wèn)的referer。比如你先訪問(wèn)首頁(yè),再訪問(wèn)里面所指定的下載頁(yè),這第二次訪問(wèn)的 referer地址就是第一次訪問(wèn)成功后的頁(yè)面地址。這樣,服務(wù)器端只要發(fā)現(xiàn)對(duì)下載頁(yè)面某次訪問(wèn)的referer地址不是首頁(yè)的地址,就可以斷定那是個(gè)盜連了    ~

討厭討厭 ~我就是要盜連    ~!!

幸好curl給我們提供了設(shè)定referer的option: -e

$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.linuxidc.com" -o page.html -D cookie0001.txt http://www.linuxidc.com

這樣,就可以騙對(duì)方的服務(wù)器,你是從mail.linuxidc.com點(diǎn)擊某個(gè)鏈接過(guò)來(lái)的了,呵呵呵

8)寫著寫著發(fā)現(xiàn)漏掉什么重要的東西了!——- 利用curl 下載文件

剛才講過(guò)了,下載頁(yè)面到一個(gè)文件里,可以使用 -o ,下載文件也是一樣。比如,

$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這里教大家一個(gè)新的option: -O 大寫的O,這么用:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這樣,就可以按照服務(wù)器上的文件名,自動(dòng)存在本地了!

再來(lái)一個(gè)更好用的。

如果screen1.JPG以外還有screen2.JPG、screen3.JPG、....、screen10.JPG需要下載,難不成還要讓我們寫一個(gè)script來(lái)完成這些操作?

不干!

在curl里面,這么寫就可以了:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG

呵呵呵,厲害吧?! ~

9)再來(lái),我們繼續(xù)講解下載!

$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

這樣產(chǎn)生的下載,就是

~zzh/001.JPG

~zzh/002.JPG

...

~zzh/201.JPG

~nick/001.JPG

~nick/002.JPG

...

~nick/201.JPG

夠方便的了吧?哈哈哈

咦?高興得太早了。

由于zzh/nick下的文件名都是001,002...,201,下載下來(lái)的文件重名,后面的把前面的文件都給覆蓋掉了 ~

沒(méi)關(guān)系,我們還有更狠的!

$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

—這是.....自定義文件名的下載? —對(duì)頭,呵呵!

這樣,自定義出來(lái)下載下來(lái)的文件名,就變成了這樣:原來(lái): ~zzh/001.JPG —-> 下載后: 001-zzh.JPG 原來(lái): ~nick/001.JPG —-> 下載后: 001-nick.JPG

這樣一來(lái),就不怕文件重名啦,呵呵

9)繼續(xù)講下載

我們平時(shí)在windows平臺(tái)上,flashget這樣的工具可以幫我們分塊并行下載,還可以斷線續(xù)傳。curl在這些方面也不輸給誰(shuí),嘿嘿

比如我們下載screen1.JPG中,突然掉線了,我們就可以這樣開(kāi)始續(xù)傳

$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG

當(dāng)然,你不要拿個(gè)flashget下載了一半的文件來(lái)糊弄我    別的下載軟件的半截文件可不一定能用哦 ~

分塊下載,我們使用這個(gè)option就可以了: -r

舉例說(shuō)明

比如我們有一個(gè)http://cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 要下載(趙老師的電話朗誦 :D )我們就可以用這樣的命令:

$ curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &\

$ curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &\

$ curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &\

$ curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3

這樣就可以分塊下載啦。不過(guò)你需要自己把這些破碎的文件合并起來(lái)如果你用UNIX或蘋果,用 cat zhao.part* > zhao.MP3就可以如果用的是Windows,用copy /b 來(lái)解決吧,呵呵

上面講的都是http協(xié)議的下載,其實(shí)ftp也一樣可以用。用法嘛,

$ curl -u name:passwd ftp://ip:port/path/file

或者大家熟悉的

$ curl ftp://name:passwd@ip:port/path/file

10) 說(shuō)完了下載,接下來(lái)自然該講上傳咯上傳的option是 -T

比如我們向ftp傳一個(gè)文件:

$ curl -T localfile -u name:passwd ftp://upload_site:port/path/

當(dāng)然,向http服務(wù)器上傳文件也可以比如

$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi

注意,這時(shí)候,使用的協(xié)議是HTTP的PUT method

剛才說(shuō)到PUT,嘿嘿,自然讓老服想起來(lái)了其他幾種methos還沒(méi)講呢! GET和POST都不能忘哦。

http提交一個(gè)表單,比較常用的是POST模式和GET模式

GET模式什么option都不用,只需要把變量寫在url里面就可以了比如:

$ curl http://www.linuxidc.com/login.cgi?user=nickwolfe&password=12345

而POST模式的option則是 -d

比如,

$ curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi

就相當(dāng)于向這個(gè)站點(diǎn)發(fā)出一次登陸申請(qǐng)    ~

到底該用GET模式還是POST模式,要看對(duì)面服務(wù)器的程序設(shè)定。

一點(diǎn)需要注意的是,POST模式下的文件上的文件上傳,比如

<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">

<input type=file name=upload>

<input type=submit name=nick value="go">

</form>

這樣一個(gè)HTTP表單,我們要用curl進(jìn)行模擬,就該是這樣的語(yǔ)法:

$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi

羅羅嗦嗦講了這么多,其實(shí)curl還有很多很多技巧和用法比如 https的時(shí)候使用本地證書,就可以這樣

$ curl -E localcert.pem https://remote_server

再比如,你還可以用curl通過(guò)dict協(xié)議去查字典    ~

$ curl dict://dict.org/d:computer


強(qiáng)強(qiáng) 2013-01-15 00:35 發(fā)表評(píng)論
]]>
編寫shell腳本的技巧http://www.aygfsteel.com/lyjjq/articles/389903.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 20 Oct 2012 01:25:00 GMThttp://www.aygfsteel.com/lyjjq/articles/389903.htmlhttp://www.aygfsteel.com/lyjjq/comments/389903.htmlhttp://www.aygfsteel.com/lyjjq/articles/389903.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/389903.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/389903.htmltest命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測(cè)試,
其測(cè)試符和相應(yīng)的功能分別如下:
(1)數(shù)值測(cè)試:
-eq:等于則為真
-ne:不等于則為真
-gt:大于則為真
-ge:大于等于則為真
-lt:小于則為真
-le:小于等于則為真
(2)字符串測(cè)試:
=:等于則為真
!=:不相等則為真
-z 字符串:字符串長(zhǎng)度偽則為真
-n 字符串:字符串長(zhǎng)度不偽則為真
(3)文件測(cè)試:
-e 文件名:如果文件存在則為真
-r 文件名:如果文件存在且可讀則為真
-w 文件名:如果文件存在且可寫則為真
-x 文件名:如果文件存在且可執(zhí)行則為真
-s 文件名:如果文件存在且至少有一個(gè)字符則為真
-d 文件名:如果文件存在且為目錄則為真
-f 文件名:如果文件存在且為普通文件則為真
-c 文件名:如果文件存在且為字符型特殊文件則為真
-b 文件名:如果文件存在且為塊特殊文件則為真
另外,Linux還提供了與(“!”)、或(“-o)、非(“-a”)三個(gè)邏輯操作符用于將測(cè)試條件連接起來(lái),
其優(yōu)先級(jí)為:“!”最高,“-a”次之,“-o”最低。
同時(shí),bash也能完成簡(jiǎn)單的算術(shù)運(yùn)算,格式如下:
$[expression]
例如:var1=2
var2=$[var1*10+1]
則:var2的值為21。

2.if條件語(yǔ)句
if [ -x /sbin/quotaon ]; then
echo "Turning on Quota for root filesystem"
/sbin/quotaon /
elif [ -x /sbin/quotaon ]; then
/usr/bin/bash
else
echo "ok"
fi

3.for 循環(huán)
#!/bin/sh
WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"
for i in $WORD ; do
echo $i
done

#!/bin/sh
FILES=`ls /txt/*.txt`
for txt in $FILES ; do
doc=`echo $txt | sed "s/.txt/.doc/"`
mv $txt $doc
done

4.while和until 循環(huán)
#!/bin/sh
while [ -f /var/run/ppp0.pid ] ; do
killall pppd
done

#!/bin/sh
until [ -f /var/run/ppp0.pid ] ; do
sleep 1
done

Shell還提供了true和false兩條命令用于建立無(wú)限循環(huán)結(jié)構(gòu)的需要,
它們的返回狀態(tài)分別是總為0或總為非0

5.case 條件選擇
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac
case表達(dá)式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。

6.無(wú)條件控制語(yǔ)句break和continue
break 用于立即終止當(dāng)前循環(huán)的執(zhí)行,而contiune用于不執(zhí)行循環(huán)中后面的語(yǔ)句
而立即開(kāi)始下一個(gè)循環(huán)的執(zhí)行。這兩個(gè)語(yǔ)句只有放在do和done之間才有效。

7.函數(shù)定義
在shell中還可以定義函數(shù)。函數(shù)實(shí)際上也是由若干條shell命令組成的,
因此它與shell程序形式上是相似的,不同的是它不是一個(gè)單獨(dú)的進(jìn)程,
而是shell程序的一部分。函數(shù)定義的基本格式為:
functionname
{
若干命令行
}
調(diào)用函數(shù)的格式為:
functionname param1 param2 ……
shell函數(shù)可以完成某些例行的工作,而且還可以有自己的退出狀態(tài),
因此函數(shù)也可以作為if、while等控制結(jié)構(gòu)的條件。
在函數(shù)定義時(shí)不用帶參數(shù)說(shuō)明,但在調(diào)用函數(shù)時(shí)可以帶有參數(shù),此時(shí)
shell將把這些參數(shù)分別賦予相應(yīng)的位置參數(shù)$1、$2、...及$*。

8.命令分組
在shell中有兩種命令分組的方法:“()”和“{}”,前者當(dāng)shell執(zhí)行()
中的命令時(shí)將再創(chuàng)建一個(gè)新的子進(jìn)程,然后這個(gè)子進(jìn)程去執(zhí)行圓括弧中的命令。
當(dāng)用戶在執(zhí)行某個(gè)命令時(shí)不想讓命令運(yùn)行時(shí)對(duì)狀態(tài)集合(如位置參數(shù)、環(huán)境變量、
當(dāng)前工作目錄等)的改變影響到下面語(yǔ)句的執(zhí)行時(shí),就應(yīng)該把這些命令放在圓括
弧中,這樣就能保證所有的改變只對(duì)子進(jìn)程產(chǎn)生影響,而父進(jìn)程不受任何干擾;
{}用于將順序執(zhí)行的命令的輸出結(jié)果用于另一個(gè)命令的輸入(管道方式)。當(dāng)我們
要真正使用圓括弧和花括弧時(shí)(如計(jì)算表達(dá)式的優(yōu)先級(jí)),則需要在其前面加上轉(zhuǎn)
義符()以便讓shell知道它們不是用于命令執(zhí)行的控制所用。

9.信號(hào)
trap命令用于在shell程序中捕捉到信號(hào),之后可以有三種反應(yīng)方式:
(1)執(zhí)行一段程序來(lái)處理這一信號(hào)
(2)接受信號(hào)的默認(rèn)操作
(3)忽視這一信號(hào)
trap對(duì)上面三種方式提供了三種基本形式:
第一種形式的trap命令在shell接收到signal list清單中數(shù)值相同的信號(hào)時(shí),
將執(zhí)行雙引號(hào)中的命令串。
trap 'commands' signal-list
trap "commands" signal-list
為了恢復(fù)信號(hào)的默認(rèn)操作,使用第二種形式的trap命令:
trap signal-list
第三種形式的trap命令允許忽視信號(hào):
trap " " signal-list
注意:
(1)對(duì)信號(hào)11(段違例)不能捕捉,因?yàn)閟hell本身需要捕捉該信號(hào)去進(jìn)行內(nèi)存的轉(zhuǎn)儲(chǔ)。
(2)在trap中可以定義對(duì)信號(hào)0的處理(實(shí)際上沒(méi)有這個(gè)信號(hào)),shell程序在其終止
(如執(zhí)行exit語(yǔ)句)時(shí)發(fā)出該信號(hào)。
(3)在捕捉到signal-list中指定的信號(hào)并執(zhí)行完相應(yīng)的命令之后,如果這些命令沒(méi)有將
shell程序終止的話,shell程序?qū)⒗^續(xù)執(zhí)行收到信號(hào)時(shí)所執(zhí)行的命令后面的命令,這樣
將很容易導(dǎo)致shell程序無(wú)法終止。
另外,在trap語(yǔ)句中,單引號(hào)和雙引號(hào)是不同的,當(dāng)shell程序第一次碰到trap語(yǔ)句時(shí),
將把commands中的命令掃描一遍。此時(shí)若commands是用單引號(hào)括起來(lái)的話,那么shell
不會(huì)對(duì)commands中的變量和命令進(jìn)行替換,否則commands中的變量和命令將用當(dāng)時(shí)具體
的值來(lái)替換。

10. 運(yùn)行shell程序的方法
執(zhí)行shell程序的方法有三種:
(1)sh shell程序文件名
格式為:
bash shell 程序文件名
這實(shí)際上是調(diào)用一個(gè)新的bash命令解釋程序,而把shell程序文件名作為參數(shù)傳遞給它。
新啟動(dòng)的shell將去讀指定的文件,執(zhí)行文件中列出的命令,當(dāng)所有的命令都執(zhí)行完結(jié)束。
該方法的優(yōu)點(diǎn)是可以利用shell調(diào)試功能。
(2)sh

11. bash程序的調(diào)試
bash -選擇項(xiàng) shell程序文件名
幾個(gè)常用的選擇項(xiàng)是:
-e:如果一個(gè)命令失敗就立即退出
-n:讀入命令但是不執(zhí)行它們
-u:置換時(shí)把未設(shè)置的變量看作出錯(cuò)
-v:當(dāng)讀入shell輸入行時(shí)把它們顯示出來(lái)
-x:執(zhí)行命令時(shí)把命令和它們的參數(shù)顯示出來(lái)
上面的所有選項(xiàng)也可以在shell程序內(nèi)部用“set -選擇項(xiàng)”的形式引用,而“set +選擇項(xiàng)”則
將禁止該選擇項(xiàng)起作用。如果只想對(duì)程序的某一部分使用某些選擇項(xiàng)時(shí),則可以將該部分用
上面兩個(gè)語(yǔ)句包圍起來(lái)。
1.未置變量退出和立即退出
未置變量退出特性允許用戶對(duì)所有變量進(jìn)行檢查,如果引用了一個(gè)未賦值的變量就終止shell
程序的執(zhí)行。shell通常允許未置變量的使用,在這種情況下,變量的值為空。如果設(shè)置了未
置變量退出選擇項(xiàng),則一旦使用了未置變量就顯示錯(cuò)誤信息,并終止程序的運(yùn)行。未置變量退
出選擇項(xiàng)為“-u”。
當(dāng)shell運(yùn)行時(shí),若遇到不存在或不可執(zhí)行的命令、重定向失敗或命令非正常結(jié)束等情況時(shí),如
果未經(jīng)重新定向,該出錯(cuò)信息會(huì)打印在終端屏幕上,而shell程序仍將繼續(xù)執(zhí)行。要想在錯(cuò)誤發(fā)
生時(shí)迫使shell程序立即結(jié)束,可以使用“-e”選項(xiàng)將shell程序的執(zhí)行立即終止。
2.shell程序的跟蹤
調(diào)試shell程序的主要方法是利用shell命令解釋程序的“-v”或“-x”選項(xiàng)來(lái)跟蹤程序的執(zhí)行。“-v”
選擇項(xiàng)使shell在執(zhí)行程序的過(guò)程中,把它讀入的每一個(gè)命令行都顯示出來(lái),而“-x”選擇項(xiàng)使shell
在執(zhí)行程序的過(guò)程中把它執(zhí)行的每一個(gè)命令在行首用一個(gè)“+”加上命令名顯示出來(lái)。并把每一個(gè)變量
和該變量所取的值也顯示出來(lái),因此,它們的主要區(qū)別在于:在執(zhí)行命令行之前無(wú)“-v”則打印出命
令行的原始內(nèi)容,而有“-v”則打印出經(jīng)過(guò)替換后的命令行的內(nèi)容。
除了使用shell的“-v”和“-x”選擇項(xiàng)以外,還可以在shell程序內(nèi)部采取一些輔助調(diào)試的措施。
例如,可以在shell程序的一些關(guān)鍵地方使用echo命令把必要的信息顯示出來(lái),它的作用相當(dāng)于C語(yǔ)
言中的printf語(yǔ)句,這樣就可以知道程序運(yùn)行到什么地方及程序目前的狀態(tài)。

12. bash的內(nèi)部命令
bash命令解釋程序包含了一些內(nèi)部命令。內(nèi)部命令在目錄列表時(shí)是看不見(jiàn)的,它們由shell本身提供。
常用的內(nèi)部命令有:echo、eval、exec、export、readonly、read、shift、wait和點(diǎn)(.)。
下面簡(jiǎn)單介紹其命令格式和功能。
1.echo
命令格式:echo arg
功能:在屏幕上打印出由arg指定的字符串。
2.eval
命令格式:eval args
功能:當(dāng)shell程序執(zhí)行到eval語(yǔ)句時(shí),shell讀入?yún)?shù)args,并將它們組合成一個(gè)新的命令,然后
執(zhí)行。
3.exec
命令格式:exec 命令 命令參數(shù)
功能:當(dāng)shell執(zhí)行到exec語(yǔ)句時(shí),不會(huì)去創(chuàng)建新的子進(jìn)程,而是轉(zhuǎn)去執(zhí)行指定的命令,
當(dāng)指定的命令執(zhí)行完時(shí),該進(jìn)程,也就是最初的shell就終止了,所以shell程序中exec
后面的語(yǔ)句將不再被執(zhí)行。
4.export
命令格式:export 變量名 或:export 變量名=變量值
功能:shell可以用export把它的變量向下帶入子shell從而讓子進(jìn)程繼承父進(jìn)程中的環(huán)境變量。
但子shell不能用export把它的變量向上帶入父shell。
注意:不帶任何變量名的export語(yǔ)句將顯示出當(dāng)前所有的export變量。
5.readonly
命令格式:readonly 變量名
功能:將一個(gè)用戶定義的shell變量標(biāo)識(shí)為不可變的。不帶任何參數(shù)的readonly命令將顯示出
所有只讀的shell變量。
6.read
命令格式:
read變量名表
功能:從標(biāo)準(zhǔn)輸入設(shè)備讀入一行,分解成若干字,賦值給shell程序內(nèi)部定義的變量。
7.shift語(yǔ)句
功能:shift語(yǔ)句按如下方式重新命名所有的位置參數(shù)變量:$2成為$1,$3成為$2……在程序中
每使用一次shift語(yǔ)句,都使所有的位置參數(shù)依次向左移動(dòng)一個(gè)位置,并使位置參數(shù)“$#”減一,
直到減到0。
8.wait
功能:是shell等待在后臺(tái)啟動(dòng)的所有子進(jìn)程結(jié)束。Wait的返回值總是真。
9.exit
功能:退出shell程序。在exit之后可有選擇地指定一個(gè)數(shù)字作為返回狀態(tài)。
10.“.”(點(diǎn))
命令格式:. Shell程序文件名
功能:使shell讀入指定的shell程序文件并依次執(zhí)行文件中的所有語(yǔ)句。

13. 特殊參數(shù):
1. $*: 代表所有參數(shù),其間隔為IFS內(nèi)定參數(shù)的第一個(gè)字元
2. $@: 與*星號(hào)類同。不同之處在於不參照IFS
3. $#: 代表參數(shù)數(shù)量
4. $?: 執(zhí)行上一個(gè)指令的返回值
5. $-: 最近執(zhí)行的foreground pipeline的選項(xiàng)參數(shù)
6. $$: 本身的Process ID
7. $!: 執(zhí)行上一個(gè)背景指令的PID
8. $_: 顯示出最後一個(gè)執(zhí)行的命令

強(qiáng)強(qiáng) 2012-10-20 09:25 發(fā)表評(píng)論
]]>
如何編寫一個(gè)shell腳本 http://www.aygfsteel.com/lyjjq/articles/389904.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 20 Oct 2012 01:25:00 GMThttp://www.aygfsteel.com/lyjjq/articles/389904.htmlhttp://www.aygfsteel.com/lyjjq/comments/389904.htmlhttp://www.aygfsteel.com/lyjjq/articles/389904.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/389904.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/389904.html
  本文結(jié)合大量實(shí)例闡述如何編寫一個(gè)shell腳本。

  為什么要進(jìn)行shell編程

  在Linux系統(tǒng)中,雖然有各種各樣的圖形化接口工具,但是sell仍然是一個(gè)非常靈活的工具。Shell不僅僅是命令的收集,而且是一門非常棒的編程語(yǔ)言。您可以通過(guò)使用shell使大量的任務(wù)自動(dòng)化,shell特別擅長(zhǎng)系統(tǒng)管理任務(wù),尤其適合那些易用性、可維護(hù)性和便攜性比效率更重要的任務(wù)。

  下面,讓我們一起來(lái)看看shell是如何工作的:

  建立一個(gè)腳本

  Linux中有好多中不同的shell,但是通常我們使用bash (bourne again shell) 進(jìn)行shell編程,因?yàn)閎ash是免費(fèi)的并且很容易使用。所以在本文中筆者所提供的腳本都是使用bash(但是在大多數(shù)情況下,這些腳本同樣可以在bash的大姐,bourne shell中運(yùn)行)。

  如同其他語(yǔ)言一樣,通過(guò)我們使用任意一種文字編輯器,比如nedit、kedit、emacs、vi等來(lái)編寫我們的shell程序。程序必須以下面的行開(kāi)始(必須方在文件的第一行):

  #!/bin/sh

  符號(hào)#!用來(lái)告訴系統(tǒng)它后面的參數(shù)是用來(lái)執(zhí)行該文件的程序。在這個(gè)例子中我們使用/bin/sh來(lái)執(zhí)行程序。

  當(dāng)編輯好腳本時(shí),如果要執(zhí)行該腳本,還必須使其可執(zhí)行。

  要使腳本可執(zhí)行:

  chmod +x filename

  然后,您可以通過(guò)輸入: ./filename 來(lái)執(zhí)行您的腳本。

  注釋

  在進(jìn)行shell編程時(shí),以#開(kāi)頭的句子表示注釋,直到這一行的結(jié)束。我們真誠(chéng)地建議您在程序中使用注釋。如果您使用了注釋,那么即使相當(dāng)長(zhǎng)的時(shí)間內(nèi)沒(méi)有使用該腳本,您也能在很短的時(shí)間內(nèi)明白該腳本的作用及工作原理。

  變量

  在其他編程語(yǔ)言中您必須使用變量。在shell編程中,所有的變量都由字符串組成,并且您不需要對(duì)變量進(jìn)行聲明。要賦值給一個(gè)變量,您可以這樣寫:

  變量名=值

  取出變量值可以加一個(gè)美元符號(hào)($)在變量前面:

  #!/bin/sh
  #對(duì)變量賦值:
  a="hello world"
  # 現(xiàn)在打印變量a的內(nèi)容:
  echo "A is:"
  echo $a

  在您的編輯器中輸入以上內(nèi)容,然后將其保存為一個(gè)文件first。之后執(zhí)行chmod +x first 使其可執(zhí)行,最后輸入./first執(zhí)行該腳本。
  這個(gè)腳本將會(huì)輸出:
  A is:
  hello world

  有時(shí)候變量名很容易與其他文字混淆,比如:

  num=2
  echo "this is the $numnd"

  這并不會(huì)打印出"this is the 2nd",而僅僅打印"this is the ",因?yàn)閟hell會(huì)去搜索變量numnd的值,但是這個(gè)變量時(shí)沒(méi)有值的。可以使用花括號(hào)來(lái)告訴shell我們要打印的是num變量:

  num=2
  echo "this is the ${num}nd"

  這將打印: this is the 2nd

  有許多變量是系統(tǒng)自動(dòng)設(shè)定的,這將在后面使用這些變量時(shí)進(jìn)行討論。

  如果您需要處理數(shù)學(xué)表達(dá)式,那么您需要使用諸如expr等程序(見(jiàn)下面)。

  除了一般的僅在程序內(nèi)有效的shell變量以外,還有環(huán)境變量。由export關(guān)鍵字處理過(guò)的變量叫做環(huán)境變量。我們不對(duì)環(huán)境變量進(jìn)行討論,因?yàn)橥ǔG闆r下僅僅在登錄腳本中使用環(huán)境變量。

  Shell命令和流程控制

  在shell腳本中可以使用三類命令:

  1)Unix 命令:

  雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對(duì)更常用的命令。這些命令通常是用來(lái)進(jìn)行文件和文字操作的。

  常用命令語(yǔ)法及功能

  echo "some text": 將文字內(nèi)容打印在屏幕上

  ls: 文件列表

  wc -l filewc -w filewc -c file&: 計(jì)算文件行數(shù)計(jì)算文件中的單詞數(shù)計(jì)算文件中的字符數(shù)

  cp sourcefile destfile&: 文件拷貝

  mv oldname newname : 重命名文件或移動(dòng)文件

  rm file&: 刪除文件

  grep 'pattern' file&: 在文件內(nèi)搜索字符串比如:grep 'searchstring' file.txt

  cut -b colnum file&: 指定欲顯示的文件內(nèi)容范圍,并將它們輸出到標(biāo)準(zhǔn)輸出設(shè)備比如:輸出每行第5個(gè)到第9個(gè)字符cut -b5-9 file.txt千萬(wàn)不要和cat命令混淆,這是兩個(gè)完全不同的命令

  cat file.txt: 輸出文件內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)上

  file somefile&: 得到文件類型

  read var: 提示用戶輸入,并將輸入賦值給變量

  sort file.txt: 對(duì)file.txt文件中的行進(jìn)行排序

  uniq: 刪除文本文件中出現(xiàn)的行列比如: sort file.txt | uniq

  expr: 進(jìn)行數(shù)學(xué)運(yùn)算Example: add 2 and 3expr 2 "+" 3

  find: 搜索文件比如:根據(jù)文件名搜索find . -name filename -print

  tee: 將數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出設(shè)備(屏幕) 和文件比如:somecommand | tee outfile

  basename file&: 返回不包含路徑的文件名比如: basename /bin/tux將返回 tux

  dirname file&: 返回文件所在路徑比如:dirname /bin/tux將返回 /bin

  head file&: 打印文本文件開(kāi)頭幾行

  tail file : 打印文本文件末尾幾行

  sed: Sed是一個(gè)基本的查找替換程序。可以從標(biāo)準(zhǔn)輸入(比如命令管道)讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出(屏幕)。該命令采用正則表達(dá)式(見(jiàn)參考)進(jìn)行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus 替換為 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file

  awk: awk 用來(lái)從文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'這里我們使用,作為字段分割符,同時(shí)打印第一個(gè)和第三個(gè)字段。如果該文件內(nèi)容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令輸出結(jié)果為:Adam Bor, IndiaKerry Miller, USA

  2) 概念: 管道, 重定向和 backtick

  這些不是系統(tǒng)命令,但是他們真的很重要。

  管道 (|) 將一個(gè)命令的輸出作為另外一個(gè)命令的輸入。
  grep "hello" file.txt | wc -l
  在file.txt中搜索包含有"hello"的行并計(jì)算其行數(shù)。
  在這里grep命令的輸出作為wc命令的輸入。當(dāng)然您可以使用多個(gè)命令。

  重定向:將命令的結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出(屏幕)。
  > 寫入文件并覆蓋舊文件
  >> 加到文件的尾部,保留舊文件內(nèi)容。

  反短斜線
  使用反短斜線可以將一個(gè)命令的輸出作為另外一個(gè)命令的一個(gè)命令行參數(shù)。
  命令:
  find . -mtime -1 -type f -print
  用來(lái)查找過(guò)去24小時(shí)(-mtime -2則表示過(guò)去48小時(shí))內(nèi)修改過(guò)的文件。如果您想將所有查找到的文件打一個(gè)包,則可以使用以下腳本:
  #!/bin/sh
  # The ticks are backticks (`) not normal quotes ('):
  tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

  3) 流程控制

  "if" 表達(dá)式 如果條件為真則執(zhí)行then后面的部分:
  if ....; then
    ....
  elif ....; then
    ....
  else
    ....
  fi
  大多數(shù)情況下,可以使用測(cè)試命令來(lái)對(duì)條件進(jìn)行測(cè)試。比如可以比較字符串、判斷文件是否存在及是否可讀等等...
  通常用" [ ] "來(lái)表示條件測(cè)試注意這里的空格很重要。要確保方括號(hào)的空
  [ -f "somefile" ] :判斷是否是一個(gè)文件
  [ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執(zhí)行權(quán)限
  [ -n "$var" ] :判斷$var變量是否有值
  [ "$a" = "$b" ] :判斷$a和$b是否相等

  執(zhí)行man test可以查看所有測(cè)試表達(dá)式可以比較和判斷的類型。
  直接執(zhí)行以下腳本:
  #!/bin/sh
  if [ "$SHELL" = "/bin/bash" ]; then
    echo "your login shell is the bash (bourne again shell)"
  else
    echo "your login shell is not bash but $SHELL"
  fi
  變量$SHELL包含了登錄shell的名稱,我們和/bin/bash進(jìn)行了比較。

  快捷操作符

  熟悉C語(yǔ)言的朋友可能會(huì)很喜歡下面的表達(dá)式:

  [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"

  這里 && 就是一個(gè)快捷操作符,如果左邊的表達(dá)式為真則執(zhí)行右邊的語(yǔ)句。您也可以認(rèn)為是邏輯運(yùn)算中的與操作。上例中表示如果/etc/shadow文件存在則打印" This computer uses shadow passwors"。同樣或操作(||)在shell編程中也是可用的。這里有個(gè)例子:

#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder"  exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder

  該腳本首先判斷mailfolder是否可讀。如果可讀則打印該文件中的"From" 一行。如果不可讀則或操作生效,打印錯(cuò)誤信息后腳本退出。這里有個(gè)問(wèn)題,那就是我們必須有兩個(gè)命令:

  -打印錯(cuò)誤信息
  -退出程序

  我們使用花括號(hào)以匿名函數(shù)的形式將兩個(gè)命令放到一起作為一個(gè)命令使用。一般函數(shù)將在下文提及。
  不用與和或操作符,我們也可以用if表達(dá)式作任何事情,但是使用與或操作符會(huì)更便利很多。

  case表達(dá)式可以用來(lái)匹配一個(gè)給定的字符串,而不是數(shù)字。

case ... in
...) do something here 
esac

  讓我們看一個(gè)例子。 file命令可以辨別出一個(gè)給定文件的文件類型,比如:

file lf.gz

  這將返回:

lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix

我們利用這一點(diǎn)寫了一個(gè)叫做smartzip的腳本,該腳本可以自動(dòng)解壓bzip2, gzip 和zip 類型的壓縮文件:

#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
  unzip "$1" 
"$1: gzip compressed"*)
  gunzip "$1" 
"$1: bzip2 compressed"*)
  bunzip2 "$1" 
*) error "File $1 can not be uncompressed with smartzip";;
esac

  您可能注意到我們?cè)谶@里使用了一個(gè)特殊的變量$1。該變量包含了傳遞給該程序的第一個(gè)參數(shù)值。也就是說(shuō),當(dāng)我們運(yùn)行:

smartzip articles.zip
$1 就是字符串 articles.zip

  select 表達(dá)式是一種bash的擴(kuò)展應(yīng)用,尤其擅長(zhǎng)于交互式使用。用戶可以從一組不同的值中進(jìn)行選擇。

select var in ...  do
 break
done
.... now $var can be used ....

下面是一個(gè)例子:

#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
    break
done
echo "You have selected $var"

下面是該腳本運(yùn)行的結(jié)果:

What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux

您也可以在shell中使用如下的loop表達(dá)式:

while ...; do
....
done

while-loop 將運(yùn)行直到表達(dá)式測(cè)試為真。will run while the expression that we test for is true. 關(guān)鍵字"break" 用來(lái)跳出循環(huán)。而關(guān)鍵字"continue"用來(lái)不執(zhí)行余下的部分而直接跳到下一個(gè)循環(huán)。

for-loop表達(dá)式查看一個(gè)字符串列表 (字符串用空格分隔) 然后將其賦給一個(gè)變量:

for var in ....; do
 ....
done

在下面的例子中,將分別打印ABC到屏幕上:

#!/bin/sh
for var in A B C  do
 echo "var is $var"
done

下面是一個(gè)更為有用的腳本showrpm,其功能是打印一些RPM包的統(tǒng)計(jì)信息:

#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
 if [ -r "$rpmpackage" ];then
  echo "=============== $rpmpackage =============="
  rpm -qi -p $rpmpackage
 else
  echo "ERROR: cannot read file $rpmpackage"
 fi
done

這里出現(xiàn)了第二個(gè)特殊的變量$*,該變量包含了所有輸入的命令行參數(shù)值。如果您運(yùn)行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時(shí) $* 包含了 3 個(gè)字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.


引號(hào)

在向程序傳遞任何參數(shù)之前,程序會(huì)擴(kuò)展通配符和變量。這里所謂擴(kuò)展的意思是程序會(huì)把通配符(比如*)替換成合適的文件名,它變量替換成變量值。為了防止程序作這種替換,您可以使用引號(hào):讓我們來(lái)看一個(gè)例子,假設(shè)在當(dāng)前目錄下有一些文件,兩個(gè)jpg文件, mail.jpg 和tux.jpg。

#!/bin/sh
echo *.jpg
這將打印出"mail.jpg tux.jpg"的結(jié)果。
引號(hào) (單引號(hào)和雙引號(hào)) 將防止這種通配符擴(kuò)展:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
這將打印"*.jpg" 兩次。

單引號(hào)更嚴(yán)格一些。它可以防止任何變量擴(kuò)展。雙引號(hào)可以防止通配符擴(kuò)展但允許變量擴(kuò)展。

#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'

運(yùn)行結(jié)果為:
/bin/bash
/bin/bash
$SHELL

最后,還有一種防止這種擴(kuò)展的方法,那就是使用轉(zhuǎn)義字符——反斜桿:

echo *.jpg
echo $SHELL
這將輸出:
*.jpg
$SHELL
Here document.

當(dāng)要將幾行文字傳遞給一個(gè)命令時(shí),here document.(譯者注:目前還沒(méi)有見(jiàn)到過(guò)對(duì)該詞適合的翻譯)一種不錯(cuò)的方法。對(duì)每個(gè)腳本寫一段幫助性的文字是很有用的,此時(shí)如果我們四有那個(gè)here document.就不必用echo函數(shù)一行行輸出。 一個(gè) "Here document.quot; 以 << 開(kāi)頭,后面接上一個(gè)字符串,這個(gè)字符串還必須出現(xiàn)在here document.末尾。下面是一個(gè)例子,在該例子中,我們對(duì)多個(gè)文件進(jìn)行重命名,并且使用here document.打印幫助:

#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ]  then
cat <<HELP
ren -- renames a number of files using sed regular expressions

USAGE: ren 'regexp' 'replacement' files...

EXAMPLE: rename all *.HTM files in *.html:
 ren 'HTM$' 'html' *.HTM

HELP
 exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
# command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
  if [ -f "$file" ]  then
   newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
   if [ -f "$newfile" ]; then
    echo "ERROR: $newfile exists already"
   else
    echo "renaming $file to $newfile ..."
    mv "$file" "$newfile"
   fi
  fi
done

這是一個(gè)復(fù)雜一些的例子。讓我們?cè)敿?xì)討論一下。第一個(gè)if表達(dá)式判斷輸入命令行參數(shù)是否小于3個(gè) (特殊變量$# 表示包含參數(shù)的個(gè)數(shù)) 。如果輸入?yún)?shù)小于3個(gè),則將幫助文字傳遞給cat命令,然后由cat命令將其打印在屏幕上。打印幫助文字后程序退出。 如果輸入?yún)?shù)等于或大于3個(gè),我們就將第一個(gè)參數(shù)賦值給變量OLD,第二個(gè)參數(shù)賦值給變量NEW。下一步,我們使用shift命令將第一個(gè)和第二個(gè)參數(shù)從參數(shù)列表中刪除,這樣原來(lái)的第三個(gè)參數(shù)就成為參數(shù)列表$*的第一個(gè)參數(shù)。然后我們開(kāi)始循環(huán),命令行參數(shù)列表被一個(gè)接一個(gè)地被賦值給變量$file。接著我們判斷該文件是否存在,如果存在則通過(guò)sed命令搜索和替換來(lái)產(chǎn)生新的文件名。然后將反短斜線內(nèi)命令結(jié)果賦值給newfile。這樣我們就達(dá)到了我們的目的:得到了舊文件名和新文件名。然后使用mv命令進(jìn)行重命名。

函數(shù)

如果您寫了一些稍微復(fù)雜一些的程序,您就會(huì)發(fā)現(xiàn)在程序中可能在幾個(gè)地方使用了相同的代碼,并且您也會(huì)發(fā)現(xiàn),如果我們使用了函數(shù),會(huì)方便很多。一個(gè)函數(shù)是這個(gè)樣子的:

functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}

您需要在每個(gè)程序的開(kāi)始對(duì)函數(shù)進(jìn)行聲明。

下面是一個(gè)叫做xtitlebar的腳本,使用這個(gè)腳本您可以改變終端窗口的名稱。這里使用了一個(gè)叫做help的函數(shù)。正如您可以看到的那樣,這個(gè)定義的函數(shù)被使用了兩次。

#!/bin/sh
# vim: set sw=4 ts=4 et:

help()
{
  cat <<HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole

USAGE: xtitlebar [-h] "string_for_titelbar"

OPTIONS: -h help text

EXAMPLE: xtitlebar "cvs"

HELP
  exit 0
}

# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help

# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#

  在腳本中提供幫助是一種很好的編程習(xí)慣,這樣方便其他用戶(和您)使用和理解腳本。

  命令行參數(shù)

  我們已經(jīng)見(jiàn)過(guò)$* 和 $1, $2 ... $9 等特殊變量,這些特殊變量包含了用戶從命令行輸入的參數(shù)。迄今為止,我們僅僅了解了一些簡(jiǎn)單的命令行語(yǔ)法(比如一些強(qiáng)制性的參數(shù)和查看幫助的-h選項(xiàng))。但是在編寫更復(fù)雜的程序時(shí),您可能會(huì)發(fā)現(xiàn)您需要更多的自定義的選項(xiàng)。通常的慣例是在所有可選的參數(shù)之前加一個(gè)減號(hào),后面再加上參數(shù)值 (比如文件名)。

  有好多方法可以實(shí)現(xiàn)對(duì)輸入?yún)?shù)的分析,但是下面的使用case表達(dá)式的例子無(wú)遺是一個(gè)不錯(cuò)的方法。

#!/bin/sh
help()
{
 cat <<HELP
This is a generic command line parser demo.
USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
 exit 0
}

while [ -n "$1" ]; do
case $1 in
  -h) help;shift 1;; # function help is called
  -f) opt_f=1;shift 1;; # variable opt_f is set
  -l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
  --) shift;break;; # end of options
  -*) echo "error: no such option $1. -h for help";exit 1;;
  *) break;;
esac
done

echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"

您可以這樣運(yùn)行該腳本:
cmdparser -l hello -f -- -somefile1 somefile2

返回的結(jié)果是:
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2

  這個(gè)腳本是如何工作的呢?腳本首先在所有輸入命令行參數(shù)中進(jìn)行循環(huán),將輸入?yún)?shù)與case表達(dá)式進(jìn)行比較,如果匹配則設(shè)置一個(gè)變量并且移除該參數(shù)。根據(jù)unix系統(tǒng)的慣例,首先輸入的應(yīng)該是包含減號(hào)的參數(shù)。

  實(shí)例

  一般編程步驟

  現(xiàn)在我們來(lái)討論編寫一個(gè)腳本的一般步驟。任何優(yōu)秀的腳本都應(yīng)該具有幫助和輸入?yún)?shù)。并且寫一個(gè)偽腳本(framework.sh),該腳本包含了大多數(shù)腳本都需要的框架結(jié)構(gòu),是一個(gè)非常不錯(cuò)的主意。這時(shí)候,在寫一個(gè)新的腳本時(shí)我們只需要執(zhí)行一下copy命令:
cp framework.sh myscript
然后再插入自己的函數(shù)。

  讓我們?cè)倏磧蓚€(gè)例子:

  二進(jìn)制到十進(jìn)制的轉(zhuǎn)換

  腳本 b2d 將二進(jìn)制數(shù) (比如 1101) 轉(zhuǎn)換為相應(yīng)的十進(jìn)制數(shù)。這也是一個(gè)用expr命令進(jìn)行數(shù)學(xué)運(yùn)算的例子:

#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
 cat <<HELP
b2h -- convert binary to decimal

USAGE: b2h [-h] binarynum

OPTIONS: -h help text

EXAMPLE: b2h 111010
will return 58
HELP
 exit 0
}

error()
{
  # print an error and exit
  echo "$1"
  exit 1
}

lastchar()
{
  # return the last character of a string in $rval
  if [ -z "$1" ]; then
    # empty string
    rval=""
    return
  fi
  # wc puts some space behind the output this is why we need sed:
  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
  # now cut out the last char
  rval=`echo -n "$1" | cut -b $numofchar`
}

chop()
{
  # remove the last character in string and return it in $rval
  if [ -z "$1" ]; then
    # empty string
    rval=""
    return
  fi
  # wc puts some space behind the output this is why we need sed:
  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
  if [ "$numofchar" = "1" ]; then
    # only one char in string
    rval=""
    return
  fi
  numofcharminus1=`expr $numofchar "-" 1`
  # now cut all but the last char:
  rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}


while [ -n "$1" ]; do
case $1 in
  -h) help;shift 1;; # function help is called
  --) shift;break;; # end of options
  -*) error "error: no such option $1. -h for help";;
  *) break;;
esac
done

# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"

while [ -n "$binnum" ]; do
  lastchar "$binnum"
  if [ "$rval" = "1" ]; then
    sum=`expr "$weight" "+" "$sum"`
  fi
  # remove the last position in $binnum
  chop "$binnum"
  binnum="$rval"
  weight=`expr "$weight" "*" 2`
done

echo "binary $binnumorig is decimal $sum"
#
  該腳本使用的算法是利用十進(jìn)制和二進(jìn)制數(shù)權(quán)值 (1,2,4,8,16,..),比如二進(jìn)制"10"可以這樣轉(zhuǎn)換成十進(jìn)制:
  0 * 1 + 1 * 2 = 2
  為了得到單個(gè)的二進(jìn)制數(shù)我們是用了lastchar 函數(shù)。該函數(shù)使用wc -c計(jì)算字符個(gè)數(shù),然后使用cut命令取出末尾一個(gè)字符。Chop函數(shù)的功能則是移除最后一個(gè)字符。

  文件循環(huán)程序
  或許您是想將所有發(fā)出的郵件保存到一個(gè)文件中的人們中的一員,但是在過(guò)了幾個(gè)月以后,這個(gè)文件可能會(huì)變得很大以至于使對(duì)該文件的訪問(wèn)速度變慢。下面的腳本rotatefile 可以解決這個(gè)問(wèn)題。這個(gè)腳本可以重命名郵件保存文件(假設(shè)為outmail)為outmail.1,而對(duì)于outmail.1就變成了outmail.2 等等等等...

#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
  cat <<HELP
rotatefile -- rotate the file name

USAGE: rotatefile [-h] filename

OPTIONS: -h help text

EXAMPLE: rotatefile out
This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
and create an empty out-file

The max number is 10

version $ver
HELP
  exit 0
}

error()
{
  echo "$1"
  exit 1
}
while [ -n "$1" ]; do
case $1 in
  -h) help;shift 1;;
  --) break;;
  -*) echo "error: no such option $1. -h for help";exit 1;;
  *) break;;
esac
done

# input check:
if [ -z "$1" ]  then
error "ERROR: you must specify a file, use -h for help"
fi
filen="$1"
# rename any .1 , .2 etc file&:
for n in 9 8 7 6 5 4 3 2 1; do
  if [ -f "$filen.$n" ]; then
    p=`expr $n + 1`
    echo "mv $filen.$n $filen.$p"
    mv $filen.$n $filen.$p
  fi
done
# rename the original file&:
if [ -f "$filen" ]; then
  echo "mv $filen $filen.1"
  mv $filen $filen.1
fi
echo touch $filen
touch $filen

  這個(gè)腳本是如何工作的呢?在檢測(cè)用戶提供了一個(gè)文件名以后,我們進(jìn)行一個(gè)9到1的循環(huán)。文件9被命名為10,文件8重命名為9等等。循環(huán)完成之后,我們將原始文件命名為文件1同時(shí)建立一個(gè)與原始文件同名的空文件。

  調(diào)試

  最簡(jiǎn)單的調(diào)試命令當(dāng)然是使用echo命令。您可以使用echo在任何懷疑出錯(cuò)的地方打印任何變量值。這也是絕大多數(shù)的shell程序員要花費(fèi)80%的時(shí)間來(lái)調(diào)試程序的原因。Shell程序的好處在于不需要重新編譯,插入一個(gè)echo命令也不需要多少時(shí)間。

  shell也有一個(gè)真實(shí)的調(diào)試模式。如果在腳本"strangescript" 中有錯(cuò)誤,您可以這樣來(lái)進(jìn)行調(diào)試:
  sh -x strangescript
  這將執(zhí)行該腳本并顯示所有變量的值。
  shell還有一個(gè)不需要執(zhí)行腳本只是檢查語(yǔ)法的模式。可以這樣使用:
  sh -n your_script
  這將返回所有語(yǔ)法錯(cuò)誤。
  我們希望您現(xiàn)在可以開(kāi)始寫您自己的shell腳本,希望您玩得開(kāi)心。


強(qiáng)強(qiáng) 2012-10-20 09:25 發(fā)表評(píng)論
]]>
郵件發(fā)送退信分析大全/SMTP error, RCPT TO: 550 Relay Denyhttp://www.aygfsteel.com/lyjjq/articles/382047.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Mon, 02 Jul 2012 23:21:00 GMThttp://www.aygfsteel.com/lyjjq/articles/382047.htmlhttp://www.aygfsteel.com/lyjjq/comments/382047.htmlhttp://www.aygfsteel.com/lyjjq/articles/382047.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/382047.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/382047.html 
 一般情況下,當(dāng)您發(fā)送的郵件無(wú)法正常到達(dá)收件人時(shí),mail 郵件系統(tǒng)將會(huì)自動(dòng)給您發(fā)一封警告信,這封退信通知里面包含了無(wú)法正常發(fā)送到對(duì)方郵件地址的原因,所以絕大多數(shù)情況下可以通過(guò)退信通知來(lái)找出發(fā)信失敗的原因及解決方式。 當(dāng)您收到退信時(shí),可以選擇將您收到的退信通知的原件完整的轉(zhuǎn)發(fā)給我們,由我們協(xié)助分析退信產(chǎn)生的原因并提供對(duì)應(yīng)的解決方式。或者您可以參照以下的方式,查看退信內(nèi)容確認(rèn)退信原因以便找出解決方式。下面這是一個(gè)典型的退信的內(nèi)容,右邊對(duì)應(yīng)的是退信內(nèi)容的含義。

  Hi. This is the smtp delivery program.

  I'm afraid I wasn't able to deliver your message to the following addresses.

  This is a permanent error; I've given up. Sorry it didn't work out.

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

  您好!

  您的郵件不能成功的遞送到指定地址。這是一個(gè)永久的錯(cuò)誤,因此不得不放棄繼續(xù)遞送。

  , sorry, no mailbox here by that name

  錯(cuò)誤原因

  --- Below this line is a copy of the message.

  Received: from unknown (HELO test) ([xxx.xxx.xxx.xxx])

  (envelope-sender )

  by [xxx.xxx.xxx.xxx] with ESMTP

  for ; Thu, 23 Dec 2004 09:40:58 +0800

  Message-ID: <004201c4e890$73a42b50$33777777@test.local>

  From: "test" 原信件發(fā)件人地址

  To: 原信件收件人地址

  Subject: test 原信件主題

  Date: Thu, 23 Dec 2004 09:40:58 +0800 原信件發(fā)送時(shí)間

  MIME-Version: 1.0

  Content-Type: multipart/alternative;

  boundary="----=_NextPart_000_003F_01C4E8D3.816BDDD0"

  X-Priority: 3

  X-MSMail-Priority: Normal

  X-Mailer: Microsoft Outlook Express 6.00.2800.1437

  X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441

  以上是 Winmail Server 產(chǎn)生的錯(cuò)誤回彈信,由于各個(gè)郵件系統(tǒng)的錯(cuò)誤回彈信表達(dá)方式不同,所以同一個(gè)原因可能因郵件系統(tǒng)的不同而有不同的描述。以下是一些常見(jiàn)的退信分析:(Winmail Server 退信分析)

  (1)收件人地址不存在

  錯(cuò)誤原因: 收件人郵箱帳號(hào)不存在或收件方服務(wù)器無(wú)法找到收件人郵件地址

  可能出現(xiàn)的關(guān)鍵字: No such user、user unknown、unknown or illegal alias、account inactive、user not found、Invalid address、invalid recipient、not a valid mailbox、mailbox cannot be delivered

  解決方法: 由于在該網(wǎng)站中無(wú)法找到要投遞的用戶地址,因此該郵件無(wú)法正確投遞到該地址中讓接受者接收出現(xiàn)了此退信。可能是由于寫錯(cuò)了email地址,請(qǐng)確認(rèn)該地址的輸入是否正確,或者同收件人確認(rèn)是否其email地址。確認(rèn)無(wú)誤后重新投遞即可。

  Winmail Server 退信實(shí)例:no mailbox here by that name

  其他系統(tǒng)退信實(shí)例:

  ***@yahoo.com, 554 delivery error: dd This user doesn't have a yahoo.com account (***@yahoo.com) [-5] - mta155.mail.sc5.yahoo.com

  550 Invalid recipient: <***@index.com.jo> (RCPT TO:***@index.com.jo)

  550 ***@szonline.net unknown user account (RCPT TO:***@szonline.net)

  550 5.1.1 <***@melco.com.hk>... User unknown (RCPT TO:***@melco.com.hk)

  <*****@eyou.com>…… invalid address

  <*****@126.com>: host ……said: 550 5.7.1 Unable to relay for *****@126.com:host……said: 550 5.1.1 is not a valid mailbox

  <*****@china.com>: host smtp.china.com[61.135.144.88] said: 550 <*****>, No such user.

  <*****@hotmail.com>……user account inactive

  <*****@zjuem.zju.edu.cn>…… unknown or illegal alias:*****

  <*****@163.net>: User ***@163.net is not found in Server.

  <*****@263.net.cn>: host ……said: 550 Invalid recipient

  (2)收件人郵箱被禁用

  錯(cuò)誤原因: 收件人用戶郵箱被禁用或者不可以使用,可能長(zhǎng)時(shí)間未登陸使用過(guò),或者未交費(fèi)等原因?qū)е锣]箱帳號(hào)被凍結(jié)

  可能出現(xiàn)的關(guān)鍵字: disabled

  解決方法: 聯(lián)系收件人,請(qǐng)他聯(lián)系他的郵箱系統(tǒng)管理員確認(rèn)收件人郵箱問(wèn)題

  Winmail Server 退信實(shí)例:sorry, the mailbox has disabled.

  其他系統(tǒng)退信實(shí)例:

  User *****@163.net is disabled

  host......said: 554 delivery error: ??? Sorry your message to *****@yahoo.com.cn cannot be delivered. This account has been disabled or discontinued. - mta582.mail.yahoo.com

  (3)收件人信箱空間不足

  錯(cuò)誤原因: 接收方已經(jīng)沒(méi)有足夠郵箱空間接受新郵件

  可能出現(xiàn)的關(guān)鍵字: mailbox is full、exceed、hard limit

  解決方法: 收件人郵箱已經(jīng)沒(méi)有足夠的剩余空間接收您的郵件,請(qǐng)使用其他的方式與收件人聯(lián)系,請(qǐng)接收方先清除郵箱中沒(méi)用的郵件,騰出空間接收新郵件

  Winmail Server 退信實(shí)例:mail size/count over quota

  其他系統(tǒng)退信實(shí)例:

  ***@pa.inter.net mailbox is full (MTA-imposed quota exceeded while writing to file tmp/1084783015.15814.clever.eusc.inter.net): retry timeout exceeded

  <*****@tom.com>: the message to ***@tom.com is bounced because : Quota exceed the hard limit

  <*****@email.com>: host …… said: 552 This person's account is exceeding their quota.

  <*****@hotmail.com>……: exceeded storage allocation

  (4)郵件被過(guò)濾

  錯(cuò)誤原因: 對(duì)方對(duì)接受的郵件作了限制,您的郵件超出了對(duì)方的要求或是對(duì)方服務(wù)器的要求。

  可能出現(xiàn)的關(guān)鍵字: not welcome、content rejected、Message blocked、Recipient reject、No welcome message from****、Mail refused/Box is busy

  解決方法: 出現(xiàn) not Welcome/message blocked/content rejected 等信息的原因是收件人在郵箱中設(shè)定了一些過(guò)濾規(guī)則,而你所發(fā)的郵件中的信息如"發(fā)件人姓名"、"發(fā)件人地址"、"郵件主題"、"郵件正文"、"附件"等中的信息符合該收件人或收件人的服務(wù)商設(shè)置的過(guò)濾規(guī)則,因此導(dǎo)致郵件在投遞后被對(duì)方系統(tǒng)拒收。

  請(qǐng)把自己所投遞郵件做適當(dāng)?shù)男薷模绨l(fā)送的"郵件主題"等。如果嘗試過(guò)還是不能正常發(fā)送,最好通過(guò)其他方式聯(lián)系收件人,把退信信息提供給收件人查詢具體是符合了什么樣的過(guò)濾規(guī)則,確認(rèn)后進(jìn)行適當(dāng)修改就可以正常發(fā)送了

  Winmail Server 退信實(shí)例:delivery failure: the message matches up to the filter rule(level: system, name:xxx)

  其他系統(tǒng)退信實(shí)例:

  ****@SINA.COM : Failure reply of RCPT to *****@SINA.COM from 202.106.182.168, 445 服務(wù)器拒絕 - server rejected (#4.4.4)

  ***@kodak.com, 550 5.5.0 Mail refused

  <*****@163.net>: This Message is not welcome

  <*****@163.net>: Message content rejected

  <*****@163.com>:……Error: content rejected

  <*****@163.net>: host ……said: 450 Fail, Box is busy

  ******@163.com : No welcome message from 202.108.44.203

  <*****@sohu.com>: host ……said: 550 Recipient reject

  554 <***@long-horn.com>: Sender address rejected: c46 (RCPT TO:***@dial.pipex.com)

  (5)域名解析出錯(cuò)

  錯(cuò)誤原因: 對(duì)方服務(wù)器或者對(duì)方域名有錯(cuò)誤,或者域名信息無(wú)法正確的被internet的DNS系統(tǒng)解析,無(wú)法找到對(duì)方的郵件服務(wù)器IP,導(dǎo)致投遞出錯(cuò)

  可能出現(xiàn)的關(guān)鍵字: Host、not found、bad host、domain、unreachable、Connection refused

  解決方法: 首先請(qǐng)檢查輸入收件人地址時(shí)的是否存在拼寫錯(cuò)誤,確認(rèn)錯(cuò)誤后重新發(fā)送就可以解決了。相當(dāng)部分退信存在這樣的情況。

  確認(rèn)收件人地址沒(méi)有問(wèn)題的時(shí)候,還可能由于收件人服務(wù)器的域名信息由于DNS失效、更新失敗等等原因造成域名解析不正確。具體可以通過(guò)nslookup命令等方式查詢收件人郵箱域名的mail exchanger進(jìn)行確認(rèn)。對(duì)于這種情形的話,需要通過(guò)其他途徑聯(lián)系收件人,收件人通知自己的服務(wù)商管理維護(hù)人員修訂DNS錯(cuò)誤后就可以正常發(fā)送了。

  Winmail Server 退信實(shí)例:don't find mail exchanger and domain's ip address

  其他系統(tǒng)退信實(shí)例:

  <*****@sian.com>: Name service error for domain sian.com: Host not found

  <*****@hot.163.net>: Name service error for domain hot.163.net: Host not found

  <***@.powerise.com.cn>: bad host/domain syntax: ".powerise.com.cn"

  ****@shou.com>: connect to shou.com: Connection refused

  <*****@263.com>: domain unreachable

  (6)無(wú)法識(shí)別的命令

  錯(cuò)誤原因: 無(wú)法識(shí)別錯(cuò)誤命令(郵件系統(tǒng)指令)

  可能出現(xiàn)的關(guān)鍵字: error in command、syntax error、Error email address format

  解決方法: 其原因多數(shù)是由于發(fā)件人使用的軟件或者發(fā)送系統(tǒng)在投遞連接對(duì)方系統(tǒng)時(shí)候,對(duì)方系統(tǒng)無(wú)法識(shí)別此軟件或者發(fā)送方系統(tǒng)的指令導(dǎo)致發(fā)送錯(cuò)誤。

  請(qǐng)使用常用的軟件如Outlook Express或者Foxmail等進(jìn)行郵件編輯,或者直接使用WEB的方式發(fā)送郵件,可以減少出錯(cuò)的機(jī)會(huì)。

  有時(shí)由于發(fā)送者填寫接收者地址時(shí)候輸入了非法字符如“"”“/”“”“^”等非法字符也可以導(dǎo)致此類無(wú)法成功發(fā)送。

  Winmail Server 退信實(shí)例:syntax error

  其他系統(tǒng)退信實(shí)例:

  <*****@ap.dragoco.com>: host ……said: 500 error in command

  <""***@yahoo.com.cn??***""@sina.com>: host ……said: 555 *****??? -syntax error (#5.5.4)

  ***@codiac.co.il, Error email address format

  (7)發(fā)送的郵件大小超過(guò)最大限制

  錯(cuò)誤原因: 由于發(fā)送人的郵件過(guò)大導(dǎo)致接收人的郵件系統(tǒng)服務(wù)商拒收此郵件

  可能出現(xiàn)的關(guān)鍵字: exceeds、maximum message size、Data size

  解決方法: 通常此類錯(cuò)誤都是由于收件人郵件系統(tǒng)不支持他們系統(tǒng)中的用戶接收太大的郵件。因此用戶可以把過(guò)大的郵件附件使用outlook express的郵件分拆功能進(jìn)行分拆發(fā)送。通常后面跟的數(shù)字就是對(duì)方系統(tǒng)所允許接收的單個(gè)郵件的大小。

  Winmail Server 退信實(shí)例:sorry, the message size exceeds databytes limit

  其他系統(tǒng)退信實(shí)例:

  <*****@brilliantprint.com.hk>: host …… said:552 Message size exceeds fixed maximum message size: 7372800 bytes<*****@brilliantprint.com.hk>:……said: 552 5.2.3 Message size exceeds fixed maximum message size (7200000)

  <*****@pub.xaonline.com>: host smtp.xaonline.com[61.134.1.143] said: 552 Data size must not exceed 4096K bytes

  (8)郵件被拒收

  錯(cuò)誤原因: 由于發(fā)送方的郵件被接收方的系統(tǒng)服務(wù)商拒收此郵件

  可能出現(xiàn)的關(guān)鍵字: banned 、isn't in my list of allowed rcpthosts、domain is not welcome、Connection refused、Relaying denied、spam、spammers

  解決方法: 由于對(duì)方系統(tǒng)把發(fā)送的地址、域或者IP地址列入拒收列表中,使得從此地方寄出的郵件被拒絕接收的情況。

  當(dāng)遇到此情況,您可以聯(lián)系我們的技術(shù)支持,把您接收到的退信內(nèi)容轉(zhuǎn)發(fā)給我們。或聯(lián)系對(duì)方系統(tǒng)管理員,盡快解決此類屏蔽問(wèn)題。Email郵件頭揭密

  Winmail Server 退信實(shí)例:553 sorry, you don't authenticate or the domain isn't in the list of allowed rcpthosts

  退信實(shí)例:

  50 5.7.1 <******@kalmarlighting.com>... Relaying denied. Please check your mail first or restart your mail session. (RCPT TO: ******@kalmarlighting.com)

  <*****@weefth.com>: host……said: 571 ****@21cn.com... from mail01j.rapidsite.net You are banned, contact yourlocal admin.

  <*****@tom.COM>: host ……said: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

  <*****@cbnweb.com>: host …… said: 550<*****@cbnweb.com>... Relaying denied

  550 5.7.1 <***@mail1.rayson.com>... Relaying denied (RCPT TO:***@mail1.rayson.com)<*****@163.com>: connect to mf2.***.com: Connection refused

  <*****@morgan.ucs.mun.ca>……<*****@163.net>... We don't accept mail from spammers

  (9)連接對(duì)方服務(wù)器失敗

  錯(cuò)誤原因: 在系統(tǒng)發(fā)送郵件時(shí)查找到了對(duì)方的郵件服務(wù)器,但由于internet網(wǎng)絡(luò)不正常或者對(duì)方服務(wù)器的 mta 服務(wù)不正常,而不能正常獲得對(duì)方郵件服務(wù)器的回應(yīng),即對(duì)方服務(wù)器無(wú)響應(yīng).

  可能出現(xiàn)的關(guān)鍵字: Connection timed out、Connect to鬃?鬃.鬃.鬃:25 failure

  Error sending mail body to ******、Failure welcome message from

  解決方法: 通過(guò)nslookup找到對(duì)方域名的MX記錄指向的郵件服務(wù)器IP,通過(guò) telnet 對(duì)方服務(wù)器的25端口等方式確認(rèn)是網(wǎng)絡(luò)連接不正常還是由于對(duì)方服務(wù)器的25端口沒(méi)有響應(yīng)。一般說(shuō)來(lái),無(wú)論是網(wǎng)絡(luò)故障還是對(duì)方系統(tǒng)故障,都能對(duì)方系統(tǒng)管理員很快被發(fā)現(xiàn)和恢復(fù),所以可以選擇再次發(fā)送進(jìn)行嘗試。對(duì)于部分國(guó)外的郵件服務(wù)商,出現(xiàn)這種情況持續(xù)的時(shí)間會(huì)比較長(zhǎng),如果嘗試超過(guò)1天都不能成功,建議先使用其他方式與收件人聯(lián)系。

  確定您的機(jī)器能不能正確的連接到外面的主機(jī),最后測(cè)試能不能連接發(fā)送不成功的主機(jī)(出現(xiàn) 220 開(kāi)頭字串提示)。

  在命令行方式下執(zhí)行如下命令:

  C:> telnet m209.163.com 25

  220 Welcome to coremail System(With Anti-Spam) 2.1 for 163.com

  C:> telnet sinamx.sina.com.cn 25

  220 sina.com ESMTP

  C:> telnet xxx.xxx.xxx.xxx 25

  220 *******

  Winmail Server 退信實(shí)例:connect remote host error (xxx.xxx.xxx.xxx : 25)

  其他系統(tǒng)退信實(shí)例:

  <*****@iris.sipp.ac.cn>: connect to iris.sipp.ac.cn: Connection timed out

  *****@hkbn.com ; Connect to 212.227.34.3:25 failure

  *******@163.com ; Error sending mail body to 202.108.44.215

  ***@t-online.de; Failure welcome message from 194.25.134.10

  (10)單封郵件收件人數(shù)超過(guò)限制

  錯(cuò)誤原因: 單封郵件有過(guò)多收件人

  可能出現(xiàn)的關(guān)鍵字: Too many、less than xx

  解決方法: 郵件系統(tǒng)會(huì)對(duì)每一個(gè)郵件投遞者每次連接時(shí)候的同一封郵件的多投用戶數(shù)量,因此當(dāng)用戶使用群發(fā)時(shí)候就會(huì)出現(xiàn)對(duì)方拒收或者錯(cuò)誤的信息返回如"Too many recipients"信息。因此用戶請(qǐng)?jiān)倜恳环忄]件投遞時(shí)候,盡量使得每次的接收用戶數(shù)量控制在20~30人左右,如果接收量比較多的情況,可以分開(kāi)多幾次發(fā)送。

  Winmail Server 退信實(shí)例:sorry, too many recipients

  其他系統(tǒng)退信實(shí)例:

  <*****@email.com>: host …… said: 553 Too many recipients in the mail, should less than xx

  (11)反垃圾郵件列表

  錯(cuò)誤原因: 發(fā)信服務(wù)器地址被加入到某些反垃圾郵件組織的黑名單中,導(dǎo)致拒收

  可能出現(xiàn)的關(guān)鍵字: Mail from ***.***.***.*** refused, see http://**************

  解決方法: 國(guó)外很多反垃圾郵件組織也把中國(guó)的很多地區(qū)的IP地址直接列入到黑名單,他們封閉中國(guó)的IP地址未必合理,很多反垃圾郵件組織把中國(guó)整個(gè)IP地址都列入了黑名單。

  當(dāng)遇到此情況,您可以聯(lián)系我們的技術(shù)支持,把您接收到的退信內(nèi)容轉(zhuǎn)發(fā)給我們。我們會(huì)聯(lián)系反垃圾郵件組織,盡力去解決此類問(wèn)題。RBL是什么?

  Winmail Server 退信實(shí)例:553 sorry, your mailserver is listed in bl.spamcop.net(Please see: *********), mail from is not accepted here

  退信實(shí)例:

  550 5.7.1 blacklisted [*.*.*.*] refer : ***@tm.net.my (RCPT TO:***@tm.net.my)

  554 Service unavailable; Client host [202.105.45.53] blocked using cblplus.anti-spam.org.cn; Mail from 202.105.45.53 refused, see http://anti-spam.org.cn/services/rblquery.php?IP=202.105.45.53 (RCPT TO:chenlis@sunrising.com.mo)

  554 5.7.1 Rejected xxx.xxx.xxx.xxx found in dnsbl.sorbs.net

  ******@roedl.cn ; Failure reply of RCPT to *****@roedl.cn from *.*.*.*, 451 Mail from *.*.*.* refused, see http://anti-spam.org.cn/

  (12)DNS反向解析

  錯(cuò)誤原因: 某些郵件服務(wù)器為了防垃圾郵件的需要,接收郵件時(shí)進(jìn)行對(duì)發(fā)信人的email地址進(jìn)行DNS反向查詢,對(duì)于公網(wǎng)存在正確DNS解析的發(fā)件人的郵件放行,而對(duì)于DNS反向解析不正確的地址予以攔截。

  可能出現(xiàn)的關(guān)鍵字: can't verify FROM domain in DNS、domain does not exist

  解決方法: 存在此類問(wèn)題的多數(shù)是具有自己域名的企業(yè)郵箱用戶,這類的服務(wù)器要求用戶所用的域名解析設(shè)置中有關(guān)的SOA記錄、MX記錄都正確可查詢。所以DNS解析記錄不完整或者對(duì)方反向解析時(shí)剛好域名所在的郵件服務(wù)器出現(xiàn)故障不能正常返回查詢,而收件人的郵件系統(tǒng)具有這樣的驗(yàn)證機(jī)制是,就會(huì)出現(xiàn)這樣的退信了。

  確認(rèn)退信是以上原因的時(shí)候,通知你的域名服務(wù)器的管理員檢查確認(rèn)你的域名解析記錄信息或者稍后等域名服務(wù)器正常了即可正常發(fā)送。 檢查MX記錄是否存在的方法 域名信息查詢

  Winmail Server 退信實(shí)例:554 refused 'mail from' because return MX does not exist

  退信實(shí)例:

  ***@solvay.com, 553 can't verify FROM domain in DNS

  ***@hkstar.com, 553 zeng.pionmi.com does not exist

  <***@se.abb.com> , remote server said: 550-Verification failed for

  550-It appears that the DNS operator for bpeg.cn

  550-has installed an invalid MX record with an IP address

  550-instead of a domain name on the right hand side.

  550 Sender verify failed



強(qiáng)強(qiáng) 2012-07-03 07:21 發(fā)表評(píng)論
]]>
postfix 郵件維護(hù)http://www.aygfsteel.com/lyjjq/articles/377033.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sun, 29 Apr 2012 10:38:00 GMThttp://www.aygfsteel.com/lyjjq/articles/377033.htmlhttp://www.aygfsteel.com/lyjjq/comments/377033.htmlhttp://www.aygfsteel.com/lyjjq/articles/377033.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/377033.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/377033.htmlpostfix 如何刪除隊(duì)列中的郵件

# postfix 如何刪除隊(duì)列中的郵件

linux @ 06 二月 2009,

[root@mail ~]# mailq 查看隊(duì)列郵件

postsuper -d ALL 這樣就刪除所有郵件啦

[注意:大小寫有區(qū)別,請(qǐng)注意大小寫!]

網(wǎng)上看到,Postfix 郵件隊(duì)列管理的幾個(gè) Perl 小程序,pfdel.pl 是用來(lái)刪除隊(duì)列中指定用戶的郵件的,luserdel.pl 是用來(lái)刪除隊(duì)列中無(wú)效用戶的郵件的,moqdel.pl 是用來(lái)刪除隊(duì)列中郵箱配額已滿的用戶的郵件的,jmoqdel.pl 是刪除郵箱配額已滿的用戶的垃圾郵件箱的。我裝的是EMOS1.3,找不到這幾個(gè)小程序。

用外面的郵件服務(wù)器發(fā)點(diǎn)EDM,一直有問(wèn)題,成功太少,干脆用自己的郵件服務(wù)器發(fā)送,誰(shuí)知道3W多封郵件是發(fā)出去了,全部堵在我們自己的服務(wù)器上,郵件服務(wù)器給堵死了spool只好刪除隊(duì)列中的垃圾郵件了,網(wǎng)上說(shuō)是 mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ | postsuper -d

參考官網(wǎng)寫個(gè)腳本也不行,應(yīng)該多研究下還可以的,腳本如下:

Q: 刪除郵件隊(duì)列

A: mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’

| postsuper -d -

[root@linuxas3 root]# vi mailqueue
#!/bin/bash
#
netkiller@9812.net
queue=$1
# echo ${queue}
DELETE=”mailq | tail +2 | awk  ’BEGIN { RS = \”\” } /${queue}$/ { print \$1 }’ | tr -d ‘*!’

| postsuper -d -”
echo ${DELETE} > queue
chmod 755 queue
./queue
[root@linuxas3 root]# chmod 755 mailqueue
[root@linuxas3 root]# ./mailqueue chen@example\\.org
mailq | tail +2 | awk ‘BEGIN { RS = “” } /chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ |

由于郵件中有一些正常郵件,所以只能刪除特定字符的垃圾郵件,通過(guò)mailq顯示出來(lái)郵件隊(duì)列:2AB97F815E* 2749 Thu Feb 5 15:48:38 web1@shequsz.com

szmaxoni@public.szptt.net.cn   刪除郵件只需要命令postsuper -d 2AB97F815E即可。應(yīng)該通過(guò)管道可以簡(jiǎn)單實(shí)現(xiàn),但是我對(duì)使用管道不熟悉,只好多走兩步了……

[root@mail ~]# mailq |grep shequsz\.com >>/home/maillist 到出包含shequsz.com的垃圾郵件到maillist

[root@mail home]# awk ‘{print $1}’ maillist >>/home/mywang/dellist 把郵件ID導(dǎo)出來(lái),查看下如果帶*,需要編輯替換下

[root@mail mywang]# cat delmail.sh  編輯一個(gè)腳本,把文件里面ID逐個(gè)匹配然后刪除郵件

for i in `cat dellist`;

do  postsuper -d $i;

done

[root@mail mywang]# sh delmail.sh

postfix有四種不同的郵件隊(duì)列,并且由隊(duì)列管理進(jìn)程統(tǒng)一進(jìn)行管理:


  1. maildrop:本地郵件放置在maildrop中,同時(shí)也被拷貝到incoming中。

  2. incoming:放置正在到達(dá)或隊(duì)列管理進(jìn)程尚未發(fā)現(xiàn)的郵件。

  3. active:放置隊(duì)列管理進(jìn)程已經(jīng)打開(kāi)了并正準(zhǔn)備投遞的郵件,該隊(duì)列有長(zhǎng)度的限制。

  4. deferred:放置不能被投遞的郵件。


postfix日常維護(hù)

啟動(dòng)postfix        postfix start

停止postfix        postfix stop

重新讀取postfix配置文件     postfix reload



立即投遞隊(duì)列中所有郵件(慎用)           postfix flush


查看隊(duì)列郵件    postqueue -p 或 mailqpostqueue -p |tail


使用postsuper 來(lái)維護(hù)隊(duì)列。一般是先用mailq查看隊(duì)列里的郵件,找到對(duì)應(yīng)的id,然后用postsuper -d來(lái)刪除。例如id是0EAF3A9B 那么postsuper -d 0EAF3A9B


Q: 刪除郵件隊(duì)列


A: mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ | postsuper -d


詳細(xì)要看mailq和postsuper的用法


修復(fù)隊(duì)列以及任何權(quán)限錯(cuò)誤

postfix check

查看郵件系統(tǒng)日志

tail -f /var/log/maillog



強(qiáng)強(qiáng) 2012-04-29 18:38 發(fā)表評(píng)論
]]>
svn 文件名的大小寫轉(zhuǎn)換步驟http://www.aygfsteel.com/lyjjq/articles/369385.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 04 Feb 2012 13:39:00 GMThttp://www.aygfsteel.com/lyjjq/articles/369385.htmlhttp://www.aygfsteel.com/lyjjq/comments/369385.htmlhttp://www.aygfsteel.com/lyjjq/articles/369385.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/369385.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/369385.html2.將Repo-Browser中 中的要改名的問(wèn)卷刪除
3.svn update 改名文件所在目錄
4.關(guān)閉netbeans,重啟啟動(dòng)(很重要,netbeans會(huì)記錄svn的原來(lái)的文件名,導(dǎo)致提交反復(fù)失敗)
5.修改文件內(nèi)容提交,測(cè)試新文件名是否正確


強(qiáng)強(qiáng) 2012-02-04 21:39 發(fā)表評(píng)論
]]>
Apache 的標(biāo)準(zhǔn)中規(guī)定了4類日志:*http://www.aygfsteel.com/lyjjq/articles/369100.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Tue, 31 Jan 2012 09:28:00 GMThttp://www.aygfsteel.com/lyjjq/articles/369100.htmlhttp://www.aygfsteel.com/lyjjq/comments/369100.htmlhttp://www.aygfsteel.com/lyjjq/articles/369100.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/369100.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/369100.html錯(cuò)誤日志
*
訪問(wèn)日志
*
傳輸日志
*
Cookie日志

其中:傳輸日志和Cookie日志被Apache
2.0認(rèn)為已經(jīng)過(guò)時(shí)。所以本節(jié)僅僅討論錯(cuò)誤日志和訪問(wèn)日志。同時(shí)錯(cuò)誤日志和訪問(wèn)日志被Apache
2.0默認(rèn)設(shè)置。
能從日志中獲取哪些信息

*
訪問(wèn)日志
o
訪問(wèn)服務(wù)器的遠(yuǎn)程機(jī)器的地址:可以得知瀏覽者來(lái)自何方
o
瀏覽者訪問(wèn)的資源:可以得知網(wǎng)站中的哪些部分最受歡迎
o
瀏覽者的瀏覽時(shí)間:可以從瀏覽時(shí)間(如工作時(shí)間或休閑時(shí)間)對(duì)網(wǎng)站內(nèi)容進(jìn)行調(diào)整
o
瀏覽者使用的瀏覽器:可以根據(jù)大多數(shù)瀏覽者使用的瀏覽器對(duì)站點(diǎn)進(jìn)行優(yōu)化
*
錯(cuò)誤日志
o
獲知失效鏈接
o
獲知
CGI
錯(cuò)誤
o
獲知用戶認(rèn)證錯(cuò)誤

配置錯(cuò)誤日志

錯(cuò)誤日志記錄了服務(wù)器運(yùn)行期間遇到的各種錯(cuò)誤,以及一些普通的診斷信息,比如服務(wù)器何時(shí)啟動(dòng)、何時(shí)關(guān)閉等。
錯(cuò)誤日志配置指令
ErrorLog

ErrorLog
指令指定了當(dāng)服務(wù)器遇到錯(cuò)誤時(shí)記錄錯(cuò)誤日志的文件名。其格式為:

格式1:ErrorLog 錯(cuò)誤日志文件名
格式2:ErrorLog
"|管道程序名"

格式1直接指定錯(cuò)誤日志文件名,除非文件位置用”/“開(kāi)頭,否則 ErrorLog 所制定的文件位置是相對(duì)于 ServerRoot
目錄的相對(duì)路徑。

格式2實(shí)現(xiàn)管道日志,它指定一個(gè)命令來(lái)處理錯(cuò)誤日志。
Apache
編譯時(shí)默認(rèn)的錯(cuò)誤日志可以使用如下命令獲得:

$ apache2 -V| grep DEFAULT_ERRORLOG
-D
DEFAULT_ERRORLOG="logs/error_log"

LogLevel

LogLevel
用于調(diào)整記于錯(cuò)誤日志中的信息的詳細(xì)程度。其格式為:

LogLevel 錯(cuò)誤日志記錄等級(jí)

下面著重說(shuō)說(shuō)日志記錄等級(jí):
緊急程度
等級(jí) 說(shuō)明
1 emerg 出現(xiàn)緊急情況使得該系統(tǒng)不可用,如系統(tǒng)宕機(jī)等
2 alert 需要立即引起注意的情況
3 crit
危險(xiǎn)情況的警告
4 error 除了emerg、alert、crit的其他錯(cuò)誤
5 warn 警告信息
6 notice
需要引起注意的情況,但不如error、warn重要
7 info 值得報(bào)告的一般消息
8 debug
由運(yùn)行于debug模式的程序所產(chǎn)生的消息

如果指定了等級(jí) warn,那么就記錄緊急程度為1至5的所有錯(cuò)誤信息。
Ubuntu 中
Apache 的錯(cuò)誤日志配置

配置錯(cuò)誤日志相對(duì)簡(jiǎn)單,只要說(shuō)明日志文件的存放路徑和錯(cuò)誤日志記錄等級(jí)即可。

從 Ubuntu 中的
/etc/apache2/apache2.conf 中可知,默認(rèn)的錯(cuò)誤日志存放在
/var/log/apache2/error.log

ErrorLog
/var/log/apache2/error.log
LogLevel warn

您可以在
/etc/apache2/apache2.conf
中設(shè)置錯(cuò)誤日志記錄等級(jí),也可以在相應(yīng)的虛擬主機(jī)的配置文件中設(shè)置。
錯(cuò)誤日志文件舉例

下面是一個(gè)錯(cuò)誤日志文件的截取。

$
sudo tac /var/log/apache2/error.log
[Wed Jun 20 14:53:15 2007] [error]
[client 192.168.0.66] File does not exist:
/usr/share/phpmyadmin/favicon.ico
[Wed Jun 20 11:12:50 2007] [notice]
Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.1 mod_python/3.1.4 Python/2.4.3 PHP/5.1.2
configured -- resuming normal operations
[Wed Jun 20 11:12:49 2007] [notice]
Digest: done
[Wed Jun 20 11:12:49 2007] [notice] Digest: generating secret
for digest authentication ...
[Wed Jun 20 09:22:22 2007] [notice] caught
SIGTERM, shutting down

從文件內(nèi)容可以看出,每一行記錄了一個(gè)錯(cuò)誤。格式為:

日期和時(shí)間 錯(cuò)誤等級(jí)
錯(cuò)誤消息

配置訪問(wèn)日志
CustomLog

CustomLog
指令用來(lái)對(duì)服務(wù)器的請(qǐng)求進(jìn)行日志記錄。格式為:

格式1:CustomLog 訪問(wèn)日志文件名
記錄格式說(shuō)明串|格式昵稱
格式2:CustomLog "|管道程序名 訪問(wèn)日志文件名"
記錄格式說(shuō)明串|格式昵稱

其中:

1.
訪問(wèn)日志文件名:除非文件位置用”/“開(kāi)頭,否則所制定的文件位置是相對(duì)于
ServerRoot 目錄的相對(duì)路徑
2.
格式昵稱:使用 LogFormat
指令將一個(gè)記錄格式說(shuō)明串賦以一個(gè)名稱
3.
記錄格式說(shuō)明串:用字符串和格式說(shuō)明符(以%開(kāi)頭)指定日志記錄的內(nèi)容
4.
管道程序名:管道符”|”后面緊跟著一個(gè)程序的路徑,這個(gè)程序把日志從標(biāo)準(zhǔn)輸入設(shè)備中讀入并處理。


Ubuntu 的 Apache 默認(rèn)配置中并沒(méi)有使用 CustomLog 設(shè)置訪問(wèn)日志,若您希望記錄訪問(wèn)日志,您需要在虛擬主機(jī)的配置文件中分別設(shè)置,例如:在
/etc/apache2/sites-available/default 中有如下的設(shè)置:

CustomLog
/var/log/apache2/access.log combined

LogFormat

為了便于分析 Apache
的訪問(wèn)日志,Apache 的默認(rèn)配置文件中,按記錄的信息不同(用不同格式昵稱說(shuō)明不同的信息)將訪問(wèn)日志分為4類,并由 LogFormat
指令定義了昵稱,如表所示。
格式分類 格式昵稱 說(shuō)明
普通日志格式(common log format,CLF) common
大多數(shù)日志分析軟件都支持這種格式
參考日志格式(referer log format) referer
記錄客戶訪問(wèn)站點(diǎn)的用戶身份
代理日志格式(agent log format) agent 記錄請(qǐng)求的用戶代理
綜合日志格式(combined log
format) combined 結(jié)合以上三種日志信息

LogFormat
指令用于定義訪問(wèn)日志的記錄格式。格式為:

LogFormat "記錄格式說(shuō)明串" 格式昵稱


/etc/apache2/apache2.conf 中可知,在 Ubuntu 的 Apache 中定義了下面的 4
種類型的訪問(wèn)日志:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b"
common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i"
agent

由于綜合日志格式簡(jiǎn)單地結(jié)合了3種日志信息,所以在配置訪問(wèn)日志時(shí),要么使用一個(gè)綜合文件進(jìn)行記錄,要么使用分離的多個(gè)(1-3)文件記錄。通常使用一個(gè)綜合日志格式文件進(jìn)行記錄,配置為:

CustomLog
/var/log/apache2/access.log combined

若使用3個(gè)文件分別進(jìn)行記錄,配置為:

CustomLog
/var/log/apache2/access.log common
CustomLog /var/log/apache2/referer.log
referer
CustomLog /var/log/apache2/agent.log
agent

下面的指令組:

LogFormat "%h %l %u %t \"%r\" %>s %b"
common
CustomLog logs/access_log common

與下面的指令等效:

CustomLog
logs/access_log "%h %l %u %t \"%r\" %>s %b"

通常我們配置訪問(wèn)日志時(shí),使用先使用
LogFormat 指令定義格式昵稱,然后再在 CustomLog 指令中引用昵稱的方法。
格式說(shuō)明符

在使用 LogFormat 和
CustomLog 指令中為了說(shuō)明要記錄的日志內(nèi)容,可以使用的常用格式說(shuō)明符如下表。
格式說(shuō)明符 說(shuō)明
%v 進(jìn)行服務(wù)的服務(wù)器的標(biāo)準(zhǔn)名字
ServerName,通常用于虛擬主機(jī)的日志記錄中。
%h 客戶機(jī)的 IP 地址。
%l
從identd服務(wù)器中獲取遠(yuǎn)程登錄名稱,基本已廢棄。
%u 來(lái)自于認(rèn)證的遠(yuǎn)程用戶。
%t 連接的日期和時(shí)間。
%r
HTTP請(qǐng)求的首行信息,典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 資源 協(xié)議”。經(jīng)常可能出現(xiàn)的 METHOD 是
GET、POST 和 HEAD;RESOURCE 是指瀏覽者向服務(wù)器請(qǐng)求的文檔或 URL;PROTOCOL 通常是HTTP,后面再加上版本號(hào),通常是
HTTP/1.1。
%>s 響應(yīng)請(qǐng)求的狀態(tài)代碼,一般這項(xiàng)的值是 200,表示服務(wù)器已經(jīng)成功地響應(yīng)瀏覽器的請(qǐng)求,一切正常;以 3
開(kāi)頭的狀態(tài)代碼表示由于各種不同的原因用戶請(qǐng)求被重定向到了其他位置;以 4 開(kāi)頭的狀態(tài)代碼表示客戶端存在某種錯(cuò)誤;以 5
開(kāi)頭的狀態(tài)代碼表示服務(wù)器遇到了某個(gè)錯(cuò)誤。
%b
傳送的字節(jié)數(shù)(不包含HTTP頭信息),將日志記錄中的這些值加起來(lái)就可以得知服務(wù)器在一天、一周或者一月內(nèi)發(fā)送了多少數(shù)據(jù)。
%{Referer}i
記錄引用此資源的網(wǎng)頁(yè)。
%U 請(qǐng)求的URL路徑,不包含查詢串。
%{User-Agent}i
使用的瀏覽器信息。
訪問(wèn)日志文件舉例

下面是從一個(gè)訪問(wèn)日志文件中截取的 3 條記錄。

$ sudo tac
/var/log/apache2/access.log
192.168.0.66 - - [21/Jun/2007:22:07:58 +0800]
"GET /index.html HTTP/1.1" 200 1185 "-" "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)"
192.168.0.77 - -
[19/Jun/2007:21:03:33 +0800] "GET /manual/style/manual.css HTTP/1.1" 404 1203
"http://192.168.0.100/manual/logs.html" "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.0)"
192.168.0.66 - - [19/Jun/2007:19:21:55 +0800] "GET
/dokuwiki/lib/exe/css.php?s=print HTTP/1.1" 304 -
"http://192.168.0.191/dokuwiki/doku.php" "Mozilla/5.0 (Windows; U; Windows NT
5.1; en-US; rv:1.8.0.12) Gecko/20070508
Firefox/1.5.0.12"

將各項(xiàng)信息分離于下表所示。
格式說(shuō)明符 舉例1 舉例2 舉例3
%h 192.168.0.66
192.168.1.77 192.168.0.66
%l -(表示沒(méi)有取得信息) - -
%u - - -
%t
[21/Jun/2007:22:07:58 +0800] [19/Jun/2007:21:03:33 +0800] [19/Jun/2007:19:21:55
+0800]
%r “GET /index.html HTTP/1.1” “GET /manual/style/manual.css HTTP/1.1”
“GET /dokuwiki/lib/exe/css.php?s=print HTTP/1.1”
%>s 200 404 304
%b
1185 1203 -
%{Referer}i ”-” “http://192.168.0.100/manual/logs.html”
“http://192.168.0.191/dokuwiki/doku.php”
%{User-Agent}i “Mozilla/4.0
(compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)”
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” “Mozilla/5.0 (Windows; U;
Windows NT 5.1; en-US; rv:1.8.0.12) Gecko/20070508
Firefox/1.5.0.12”
由于整個(gè)格式說(shuō)明字符串是放在”“之內(nèi)的,所以若要輸出的日志信息內(nèi)含有引號(hào),需要將”前加轉(zhuǎn)義符\。例如:若要輸出子串”GET
/apache_pb.gif HTTP/1.0”,則格式字符串為\”%r\”。

#不記錄圖片,js,css訪問(wèn)日志


<FilesMatch "\.(ico|gif|jpg|png|swf|js|mp3|css)">
    SetEnv NOFILES
1
</FilesMatch>


#去掉日志中的Apache internal dummy connection



SetEnvIf Remote_Addr "::1" NOFILES
CustomLog logs/access_log combined
env=!NOFILES




強(qiáng)強(qiáng) 2012-01-31 17:28 發(fā)表評(píng)論
]]>
Postfix的配置詳解 http://www.aygfsteel.com/lyjjq/articles/366100.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sun, 11 Dec 2011 11:36:00 GMThttp://www.aygfsteel.com/lyjjq/articles/366100.htmlhttp://www.aygfsteel.com/lyjjq/comments/366100.htmlhttp://www.aygfsteel.com/lyjjq/articles/366100.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/366100.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/366100.html
4.1 postfix的配置文件結(jié)構(gòu)

postfix的配置文件位于/etc/postfix下,安裝完postfix以后,我們可以通過(guò)ls命令查看postfix的配置文件:

[root@mail postfix]# ls

install.cf main.cf master.cf postfix-script

這四個(gè)文件就是postfix最基本的配置文件,它們的區(qū)別在于:

mail.cf:是postfix主要的配置文件。

Install.cf:包含安裝過(guò)程中安裝程序產(chǎn)生的postfix初始化設(shè)置。

master.cf:是postfix的master進(jìn)程的配置文件,該文件中的每一行都是用來(lái)配置postfix的組件進(jìn)程的運(yùn)行方式。

postfix-script:包裝了一些postfix命令,以便我們?cè)趌inux環(huán)境中安全地執(zhí)行這些postfix命令。

4.2 postfix的基本配置

postfix大約有100個(gè)配置參數(shù),這些參數(shù)都可以通過(guò)main.cf 指定。配置的格式是這樣的,用等號(hào)連接參數(shù)和參數(shù)的值。如:

myhostname = mail.mydomain.com

等號(hào)的左邊是參數(shù)的名稱,等號(hào)的右邊是參數(shù)的值; 當(dāng)然,我們也可以在參數(shù)的前面加上$來(lái)引用該參數(shù),如:

myorigin = $myhostname

雖然postfix有100個(gè)左右的參數(shù),但是 postfix為大多數(shù)的參數(shù)都設(shè)置了缺省值,所以在讓postfix正常為你服務(wù)之前,你只需要配置為數(shù)不多的幾個(gè)參數(shù)。下面我們一起來(lái)看一看這些基本的postfix參數(shù)。需要注意的是,一旦你更改了main.cf文件的內(nèi)容,則必須運(yùn)行 postfix reload命令使其生效。

1. myorigin

myorigin參數(shù)指明發(fā)件人所在的域名。如果你的用戶的郵件地址為user@domain.com,則該參數(shù)指定@后面的域名。缺省地, postfix使用本地主機(jī)名作為myorigin,但是建議你最好使用你的域名,因?yàn)檫@樣更具有可讀性。比如:安裝postfix的主機(jī)為 mail.domain.com則我們可以這樣指定myorigin:

myorigin = domain.com

當(dāng)然我們也可以引用其他參數(shù),如:

myorigin = $mydomain

2. mydestination

mydestination參數(shù)指定postfix接收郵件時(shí)收件人的域名,換句話說(shuō),也就是你的postfix系統(tǒng)要接收什么樣的郵件。比如:你的用戶的郵件地址為user@domain.com, 也就是你的域?yàn)閐omain.com, 則你就需要接收所有收件人為user_name@domain.com的郵件。與myorigin一樣,缺省地,postfix使用本地主機(jī)名作為 mydestination。如:

mydestination = $mydomain

mydestination = domain.com

3. notify_classes

在postfix系統(tǒng)中,必須指定一個(gè)postfix系統(tǒng)管理員的別名指向一個(gè)用戶,

只有這樣,在用戶遇到問(wèn)題時(shí)才有報(bào)告的對(duì)象,postfix也才能將系統(tǒng)的問(wèn)題報(bào)告給管理員。notify_classes參數(shù)就是用來(lái)指定向postfix管理員報(bào)告錯(cuò)誤時(shí)的信息級(jí)別。共有以下幾種級(jí)別:

bounce:將不可以投遞的郵件的拷貝發(fā)送給postfix管理員。出于個(gè)人隱私的緣故,該郵件的拷貝不包含信頭。

2bounce:將兩次不可投遞的郵件拷貝發(fā)送給postfix管理員。

delay:將郵件的投遞延遲信息發(fā)送給管理員,僅僅包含信頭。

policy:將由于UCE規(guī)則限制而被拒絕的用戶請(qǐng)求發(fā)送給postfix管理員,包含整個(gè)SMTP會(huì)話的內(nèi)容。

protocol:將協(xié)議的錯(cuò)誤信息或用戶企圖執(zhí)行不支持的命令的記錄發(fā)送給postfix管理員。同樣包含整個(gè)SMTP會(huì)話的內(nèi)容。

resource:將由于資源錯(cuò)誤而不可投遞的錯(cuò)誤信息發(fā)送給postfix管理員,比如:隊(duì)列文件寫錯(cuò)誤等等。

software:將由于軟件錯(cuò)誤而導(dǎo)致不可投遞的錯(cuò)誤信息發(fā)送給postfix管理員。

缺省值為:

notify_classes = resource, software

4.myhostname

myhostname 參數(shù)指定運(yùn)行postfix郵件系統(tǒng)的主機(jī)的主機(jī)名。缺省地,該值被設(shè)定為本地機(jī)器名。你也可以指定該值,需要注意的是,要指定完整的主機(jī)名。如:

myhostname = mail.domain.com

5.mydomain

mydomain參數(shù)指定你的域名,缺省地,postfix將myhostname的第一部分刪除而作為mydomain的值。你也可以自己指定該值,如:

mydomain = domain.com

6.mynetworks

mynetworks 參數(shù)指定你所在的網(wǎng)絡(luò)的網(wǎng)絡(luò)地址,postfix系統(tǒng)根據(jù)其值來(lái)區(qū)別用戶是遠(yuǎn)程的還是本地的,如果是本地網(wǎng)絡(luò)用戶則允許其訪問(wèn)。你可以用標(biāo)準(zhǔn)的A、B、C類網(wǎng)絡(luò)地址,也可以用CIDR(無(wú)類域間路由)地址來(lái)表示,如:

192.168.1.0/24

192.168.1.0/26

7.inet_interfaces

inet_interfaces 參數(shù)指定postfix系統(tǒng)監(jiān)聽(tīng)的網(wǎng)絡(luò)接口。缺省地,postfix監(jiān)聽(tīng)所有的網(wǎng)絡(luò)接口。如果你的postfix運(yùn)行在一個(gè)虛擬的ip地址上,則必須指定其監(jiān)聽(tīng)的地址。如:

inet_interfaces = all

inet_interface = 192.168.1.1

4.3 postfix的UCE(unsolicited commercial email)控制

所謂UCE控制就是指控制postfix接收或轉(zhuǎn)發(fā)來(lái)自于什么地方的郵件。

缺省地,postfix轉(zhuǎn)發(fā)符合以下條件的郵件:

* 來(lái)自客戶端ip地址符合$mynetworks的郵件。

* 來(lái)自客戶端主機(jī)名符合$relay_domains及其子域的郵件。

* 目的地為$relay_domains及其子域的郵件。

缺省地,postfix接受符合以下條件的郵件:

* 目的地為$inet_interfaces的郵件。

* 目的地為$mydestination的郵件。

* 目的地為$virtual_maps的郵件。

但是我們也可以通過(guò)下面的規(guī)則來(lái)實(shí)現(xiàn)更強(qiáng)大的控制功能。

1. 信頭過(guò)濾

通過(guò)header_checks參數(shù)限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。可以指定一個(gè)或多個(gè)查詢列表,如果新郵件的信頭符合列表中的某一項(xiàng)則拒絕該接收郵件。如:

header_checks = regexp:/etc/postfix/header_checks

header_checks = pcre:/etc/postfix/header_checks

缺省地,postfix不進(jìn)行信頭過(guò)濾。

2.客戶端主機(jī)名/地址限制

通過(guò)smtpd_client_restrictions參數(shù)限制可以向postfix發(fā)起SMTP 連接的客戶端的主機(jī)名或ip地址。可以指定一個(gè)或多個(gè)參數(shù)值,中間用逗號(hào)隔開(kāi)。限制規(guī)則是按照查詢的順序進(jìn)行的,第一條符合條件的規(guī)則被執(zhí)行。可用的規(guī)則有:

reject_unknown_client:如果客戶端的ip 地址在DNS中沒(méi)有PTR記錄則拒絕轉(zhuǎn)發(fā)該客戶端的連接請(qǐng)求。可以用 unknown_client_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為450)。如果你有用戶沒(méi)有作DNS記錄則不要啟用該選項(xiàng)。

permit_mynetworks:如果客戶端的ip地址符合$mynetworks參數(shù)定義的范圍則接受該客戶端的連接請(qǐng)求,并轉(zhuǎn)發(fā)該郵件。

check_client_access maptype:mapname:根據(jù)客戶端的主機(jī)名、父域名、ip地址或?qū)儆诘木W(wǎng)絡(luò)搜索access數(shù)據(jù)庫(kù)。如果搜索的結(jié)果為REJECT 或者 '[45]XX text' 則拒絕該客戶端的連接請(qǐng)求;如果搜索的結(jié)果為OK、RELAY 或數(shù)字則接受該客戶端的連接請(qǐng)求,并轉(zhuǎn)發(fā)該郵件。。可以用access_map_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為 554)。

reject_maps_rbl:如果客戶端的網(wǎng)絡(luò)地址符合$maps_rbl_domains參數(shù)的值則拒絕該客戶端的連接請(qǐng)求。可以用maps_rbl_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為554)。

示例:

smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client

該參數(shù)的缺省值為:

smtpd_client_restrictions =

也即接收來(lái)自任何客戶端的SMTP連接。

3. 是否請(qǐng)求HELO命令

可以通過(guò)smtpd_helo_required參數(shù)指定客戶端在SMTP會(huì)話的開(kāi)始是否發(fā)送一個(gè)HELO命令。你可以指定該參數(shù)的值為yes或no。缺省值為:

smtpd_helo_required = no

4. HELO主機(jī)名限制

可以通過(guò)smtpd_helo_restrictions參數(shù)指定客戶端在執(zhí)行HELO命令時(shí)發(fā)送給postfix的主機(jī)名。缺省地, postfix 接收客戶端發(fā)送的任意形式的主機(jī)名。可以指定一個(gè)或多個(gè)參數(shù)值,中間用逗號(hào)隔開(kāi)。限制規(guī)則是按照查詢的順序進(jìn)行的,第一條符合條件的規(guī)則被執(zhí)行。可用的規(guī)則有:

reject_invalid_hostname:如果HELO命令所帶的主機(jī)名參數(shù)不符合語(yǔ)法規(guī)范則拒絕客戶機(jī)的連接請(qǐng)求。可以用invalid_hostname_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為501)。

permit_naked_ip_address:RFC要求客戶端的HELO命令包含的ip地址放在方括號(hào)內(nèi),你可以用permit_naked_ip_address參數(shù)取消該限制。因?yàn)橛械膍ail客戶端不遵守該RFC的規(guī)定。

reject_unknown_hostname:如果客戶端執(zhí)行HELO命令時(shí)的主機(jī)名在DNS中沒(méi)有相應(yīng)的A 或 MX 記錄則拒絕該客戶端的連接請(qǐng)求。可以用invalid_hostname_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為450)。

reject_non_fqdn_hostname:如果客戶端執(zhí)行HELO命令時(shí)的主機(jī)名不是RFC規(guī)定的完整的域名則拒絕客戶端的連接請(qǐng)求。可以用invalid_hostname_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為504)。

check_helo_access maptype:mapname:根據(jù)客戶端HELO的主機(jī)名、父域名搜索access數(shù)據(jù)庫(kù)。如果搜索的結(jié)果為REJECT 或者 '[45]XX text' 則拒絕該客戶端的連接請(qǐng)求;如果搜索的結(jié)果為OK、RELAY 或數(shù)字則接受該客戶端的連接請(qǐng)求。可以用access_map_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為554)。

示例:

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname

5. RFC 821信頭限制

RFC 821對(duì)郵件的信頭做了嚴(yán)格的規(guī)定,但是廣泛使用的sendmail并不支

持該規(guī)定,所以對(duì)于該參數(shù)我們只能說(shuō)不,即:

strict_rfc821_envelopes = no

6. 通過(guò)發(fā)件人地址進(jìn)行限制

可以用smtpd_sender_restrictions參數(shù)通過(guò)發(fā)件人在執(zhí)行MAIL FROM命令時(shí)提供的地址進(jìn)行限制。可以指定一個(gè)或多個(gè)參數(shù)值,中間用逗號(hào)隔開(kāi)。限制規(guī)則是按照查詢的順序進(jìn)行的,第一條符合條件的規(guī)則被執(zhí)行。可用的規(guī)則有:

reject_unknown_sender_domain:如果MAIL FROM命令提供的主機(jī)名在DNS中沒(méi)有相應(yīng)的A 或 MX 記錄則拒絕該客戶端的連接請(qǐng)求。可以用unknown_address_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為450)。

check_sender_access maptype:mapname:根據(jù)MAIL FROM命令提供的主機(jī)名、父域搜索access數(shù)據(jù)庫(kù)。如果搜索的結(jié)果為REJECT 或者 '[45]XX text' 則拒絕該客戶端的連接請(qǐng)求;如果搜索的結(jié)果為OK、RELAY 或數(shù)字則接受該客戶端的連接請(qǐng)求。可以用access_map_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為554)。可以通過(guò)該參數(shù)過(guò)濾來(lái)自某些不受歡迎的發(fā)件人的郵件。

reject_non_fqdn_sender:如果MAIL FROM命令提供的主機(jī)名不是RFC規(guī)定的完整的域名則拒絕客戶端的連接請(qǐng)求。可以用non_fqdn_reject_code 參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為504)。

缺省地,postfix接受來(lái)自任何發(fā)件人的郵件。

示例:

smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain

7. 通過(guò)收件人地址進(jìn)行過(guò)濾

可以用smtpd_recipient_restrictions參數(shù)通過(guò)發(fā)件人在執(zhí)行RCPT TO命令時(shí)提供的地址進(jìn)行限制。缺省值為:

smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

可以指定一個(gè)或多個(gè)參數(shù)值,中間用逗號(hào)隔開(kāi)。限制規(guī)則是按照查詢的順序進(jìn)行的,第一條符合條件的規(guī)則被執(zhí)行。可用的規(guī)則有:

check_relay_domains:如果符合以下的條件,則接受SMTP連接請(qǐng)求,否則拒絕該連接,可以用relay_domains_reject_code 參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為504)。

* 客戶端主機(jī)名符合$relay_domains及其子域

* 目的地為$inet_interfaces、$mydestination或$virtual_maps

permit_auth_destination:不管客戶端的主機(jī)名,只要符合以下的條件,就

接受SMTP連接請(qǐng)求:

* 解析后的目標(biāo)地址符合$relay_domains及其子域

* 解析后的目標(biāo)地址符合$inet_interfaces、$mydestination或$virtual_maps

reject_unauth_destination:不管客戶端的主機(jī)名,只要符合以下的條件,就拒絕該客戶端SMTP連接請(qǐng)求:

* 解析后的目標(biāo)地址符合$relay_domains及其子域

* 解析后的目標(biāo)地址符合$inet_interfaces、$mydestination或$virtual_maps

check_recipient_access:根據(jù)解析后的目標(biāo)地址、父域搜索access數(shù)據(jù)庫(kù)。如果搜索的結(jié)果為REJECT 或者 '[45]XX text' 則拒絕該客戶端的連接請(qǐng)求;如果搜索的結(jié)果為OK、RELAY 或數(shù)字則接受該客戶端的連接請(qǐng)求。可以用access_map_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為554)。

reject_unknown_recipient_domain:如果收件人的郵件地址在DNS中沒(méi)有相應(yīng)的A 或 MX 記錄則拒絕該客戶端的連接請(qǐng)求。可以用unknown_address_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為450)。

reject_non_fqdn_recipient:如果發(fā)件人在執(zhí)行RCPT TO命令時(shí)提供的地址

不是完整的域名則拒絕其SMTP連接請(qǐng)求。可以用The non_fqdn_reject_code參數(shù)指定返回給客戶機(jī)的錯(cuò)誤代碼(缺省為504)。

4.4 posftfix的性能控制

之所以對(duì)postfix的性能進(jìn)行控制,是為了在遇到郵件風(fēng)暴時(shí)保證postfix可以正常運(yùn)行。通常,我們可以通過(guò)對(duì)下列postfix 參數(shù)的配置來(lái)調(diào)節(jié)postfix的性能,這些參數(shù)都是通過(guò)mail.cf配置文件進(jìn)行配置的,修改以后不要忘了運(yùn)行postfix reload命令來(lái)使配置生效。

1. 進(jìn)程數(shù)限制

可以通過(guò)default_process_limit 參數(shù)來(lái)控制postfix系統(tǒng)同時(shí)可以運(yùn)行的最大進(jìn)程數(shù)目。缺省值是50個(gè)。

2. 對(duì)同一目標(biāo)主機(jī)的并發(fā)連接限制

當(dāng)向同一目標(biāo)主機(jī)發(fā)出SMTP連接時(shí),postfix初始化發(fā)出兩個(gè)SMTP連接,如果投遞成功則增加并發(fā)的SMTP連接數(shù)目,遇到擁塞時(shí)又減少并發(fā)連接的數(shù)目。postfix中通過(guò)以下的參數(shù)對(duì)同一目標(biāo)主機(jī)的并發(fā)連接進(jìn)行控制:

* initial_destination_concurrency:控制對(duì)同一目標(biāo)主機(jī)的初始化并發(fā)連接數(shù)目。缺省值為2。

* default_destination_concurrency_limit:控制初始化連接后對(duì)同一目標(biāo)主機(jī)的最大并發(fā)連接數(shù)目。缺省值為10。

* local_destination_concurrency_limit:控制對(duì)同一本地收件人的最大同時(shí)投遞的郵件數(shù)目。缺省值為2,因?yàn)閷?duì)本地同一收件人投遞郵件時(shí)投遞工作只能一個(gè)接一個(gè)的進(jìn)行,所以設(shè)得在大也沒(méi)用。

3. 對(duì)同一封郵件的收件人數(shù)目限制

通過(guò)default_destination_recipient_limit參數(shù)來(lái)控制postfix的投遞代理(如

smtp進(jìn)程)可以將同一封郵件發(fā)送給多少個(gè)收件人。缺省值為50。也可以用明確指出該投遞代理的參數(shù)來(lái)覆蓋該缺省值。如用smtpd_recipient_limit來(lái)指定smtp投遞代理可以將同一封郵件發(fā)送給多少個(gè)收件人,該參數(shù)的缺省值為1000。

4. 推遲投遞控制

通過(guò)defer_transports參數(shù),我們可以推遲投遞該參數(shù)指定的郵件直到postfix明確的提出投遞要求。下面我們看一個(gè)例子:

有一個(gè)小型的局域網(wǎng),用戶都將郵件發(fā)送給局域網(wǎng)內(nèi)部的一臺(tái)postfix郵件服務(wù)器,然后通過(guò)在該服務(wù)器上撥號(hào)將郵件發(fā)送出去。這時(shí)我們可以這樣指定該參數(shù)的值:

defer_transports = smtp

該語(yǔ)句表示postfix推遲投遞所有的郵件直到執(zhí)行sendmail -q命令,這樣我們就可以在ppp的腳本中加上sendmail -q,以便在撥號(hào)成功后讓postfix開(kāi)始投遞郵件。


強(qiáng)強(qiáng) 2011-12-11 19:36 發(fā)表評(píng)論
]]>
rsync 實(shí)例http://www.aygfsteel.com/lyjjq/articles/350569.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Thu, 19 May 2011 02:17:00 GMThttp://www.aygfsteel.com/lyjjq/articles/350569.htmlhttp://www.aygfsteel.com/lyjjq/comments/350569.htmlhttp://www.aygfsteel.com/lyjjq/articles/350569.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/350569.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/350569.html51@114.80.xx:/opt/www/tg/

**/Runtime
**/config.php
**/.svn

強(qiáng)強(qiáng) 2011-05-19 10:17 發(fā)表評(píng)論
]]>
svn配置http://www.aygfsteel.com/lyjjq/articles/350439.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Tue, 17 May 2011 15:39:00 GMThttp://www.aygfsteel.com/lyjjq/articles/350439.htmlhttp://www.aygfsteel.com/lyjjq/comments/350439.htmlhttp://www.aygfsteel.com/lyjjq/articles/350439.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/350439.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/350439.htmlLINUX svn獨(dú)立配置(不依附APACHE)

以root用戶登錄。 將subversion-1.5.1.tar.gz和subversion-deps-1.5.1.tar.gz傳到服務(wù)器。 tar xfvz subversion-1.5.1.tar.gz tar xfvz subversion-deps-1.5.1.tar.gz cd subversion-1.5.1 ./configure --prefix=/opt/svn --without-berkeley-db(注:以svnserve方式運(yùn)行,不加apache編譯參數(shù)。以fsfs
-
以root用戶登錄。
將subversion-1.5.1.tar.gz和subversion-deps-1.5.1.tar.gz傳到服務(wù)器。

tar xfvz subversion-1.5.1.tar.gz
tar xfvz subversion-deps-1.5.1.tar.gz
cd subversion-1.5.1
./configure –prefix=/opt/svn –without-berkeley-db –with-zlib
(注:以svnserve方式運(yùn)行,不加apache編譯參數(shù)。以fsfs格式存儲(chǔ)版本庫(kù),不編譯berkeley-db)
make clean
make
make install


svn測(cè)試
/opt/svn/svnserve –version

如果顯示如下,svn安裝成功:

svnserve, version 1.5.1 (r21228)
compiled Oct 12 2006, 10:18:56Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

2. svn配置
建立svn版本庫(kù)目錄
可建多個(gè):
/opt/svn/mkdir -p /opt/svndata/repos1
/opt/svn/mkdir -p /opt/svndata/repos2

建立svn版本庫(kù)
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2

修改svn版本庫(kù)配置文件
版本庫(kù)1:
vi /opt/svndata/repos1/conf/svnserve.conf

內(nèi)容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1

版本庫(kù)2:
vi /opt/svndata/repos2/conf/svnserve.conf

內(nèi)容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2

即除realm = repos2外,其他與版本庫(kù)1配置文件完全相同。如果有更多的版本庫(kù),依此類推。

配置允許訪問(wèn)的svn用戶
vi /opt/svn/conf/pwd.conf

為了簡(jiǎn)化配置,2個(gè)版本庫(kù)共用1個(gè)用戶配置文件。如有必要,也可以分開(kāi)。

注意:對(duì)用戶配置文件的修改立即生效,不必重啟svn。

文件格式如下:
[users]
<用戶1> = <密碼1>
<用戶2> = <密碼2>

其中,[users]是必須的。下面列出要訪問(wèn)svn的用戶,每個(gè)用戶一行。示例:
[users]
alan = password
king = hello

配置svn用戶訪問(wèn)權(quán)限
vi /opt/svn/conf/authz.conf

為了簡(jiǎn)化配置,3個(gè)版本庫(kù)共用1個(gè)權(quán)限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分開(kāi)。文件中定義用戶組和版本庫(kù)目錄權(quán)限。

注意:
* 權(quán)限配置文件中出現(xiàn)的用戶名必須已在用戶配置文件中定義。
* 對(duì)權(quán)限配置文件的修改立即生效,不必重啟svn。

用戶組格式:
[groups]
<用戶組名> = <用戶1>,<用戶2>
其中,1個(gè)用戶組可以包含1個(gè)或多個(gè)用戶,用戶間以逗號(hào)分隔。

版本庫(kù)目錄格式:
[<版本庫(kù)>:/項(xiàng)目/目錄](méi)
@<用戶組名> = <權(quán)限>
<用戶名> = <權(quán)限>

其中,方框號(hào)內(nèi)部分可以有多種寫法:
/,表示根目錄及以下。根目錄是svnserve啟動(dòng)時(shí)指定的,我們指定為/opt/svndata。這樣,/就是表示對(duì)全部版本庫(kù)設(shè)置權(quán)限。

repos1:/,表示對(duì)版本庫(kù)1設(shè)置權(quán)限 repos2:/abc, ,表示對(duì)版本庫(kù)2中的abc項(xiàng)目設(shè)置權(quán)限 repos2:/abc/aaa, ,表示對(duì)版本庫(kù)2中的abc項(xiàng)目的aaa目錄設(shè)置權(quán)限 權(quán)限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶
-

repos1:/,表示對(duì)版本庫(kù)1設(shè)置權(quán)限
repos2:/abc, ,表示對(duì)版本庫(kù)2中的abc項(xiàng)目設(shè)置權(quán)限
repos2:/abc/aaa, ,表示對(duì)版本庫(kù)2中的abc項(xiàng)目的aaa目錄設(shè)置權(quán)限

權(quán)限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權(quán)限可以是w、r、wr和空,空表示沒(méi)有任何權(quán)限。

示例:
[groups]
admin = alan

[/]
@admin = rw

[repos1:/abc/aaa]
king = rw

[repos2:/pass]
king =

svn配置完畢,刪除無(wú)用文件
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd


啟動(dòng)svn
svnserve -d -r /opt/svndata

其中:
-d表示以daemon方式(后臺(tái)運(yùn)行)運(yùn)行
-r /opt/svndata指定根目錄是/opt/svndata

檢查:
ps -ef|grep svnserve

如果顯示如下,即為啟動(dòng)成功:
svn    6941   1 0 15:07 ?    00:00:00 svnserve -d –listen-port 9999 -r /opt/svndata


SVN 向版本中導(dǎo)入文件操作:
/opt/svn/bin/svn import -m "project" /var/www/dotproject svn://192.168.6.109/repos1
其中 -m "project"為創(chuàng)建說(shuō)明
/var/www/dotproject 為需要導(dǎo)入文件的目錄
svn://192.168.6.109/repos1 為SVN路徑。


SVN 導(dǎo)出版本中的文件操作:
svn checkout svn://192.168.6.109/repos1 dotproject
其中 dotproject為需要導(dǎo)入的目錄名.

SVN 說(shuō)明書:
http://www.subversion.org.cn/svnbook/1.1/

 



強(qiáng)強(qiáng) 2011-05-17 23:39 發(fā)表評(píng)論
]]>
yum 安裝和使用http://www.aygfsteel.com/lyjjq/articles/350437.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Tue, 17 May 2011 14:23:00 GMThttp://www.aygfsteel.com/lyjjq/articles/350437.htmlhttp://www.aygfsteel.com/lyjjq/comments/350437.htmlhttp://www.aygfsteel.com/lyjjq/articles/350437.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/350437.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/350437.htmlyum的日常用法
(1)通過(guò)yum安裝和刪除RPM包
安裝rpm包,如dhcp
[root@localhost ~]#yum install dhcp


刪除rpm包,包括與該包有依賴性的包
[root@localhost ~]#yum remove licq
注意:同時(shí)會(huì)提示刪除licq-gnome,licq-qt,licq-text

(2)通過(guò)yum工具更新軟件包
檢查可更新的rpm包:
[root@localhost ~]#yum check-update

更新所有的rpm包:
[root@localhost ~]#yum update

更新指定的rpm包,如更新kernel和kernel source:
[root@localhost ~]#yum update kernel kernel-source

大規(guī)模的版本升級(jí),與yum update不同的是,陳舊的淘汰的包也會(huì)升級(jí):
[root@localhost ~]#yum upgrade

(3)通過(guò)yum查詢RPM包信息
列出資源庫(kù)中所有可以安裝或更新的rpm包的信息:
[root@localhost ~]#yum info

 列出資源庫(kù)中特定的可以安裝或更新以及已經(jīng)安裝的rpm包的信息:
[root@localhost ~]#yum info vsftpd

[root@localhost ~]#yum info perl*
注意:可以在rpm包名中使用匹配符,如上面例子是列出所有以perl開(kāi)頭的rpm包的信息。

列出資源庫(kù)中所有可以更新的rpm包的信息:
[root@localhost ~]#yum info updates

列出已經(jīng)安裝的所有的rpm包的信息:
[root@localhost ~]#yum info installed

列出已經(jīng)安裝的但是不包含在資源庫(kù)中的rpm包的信息:
[root@localhost ~]#yum info extras
注:也就是通過(guò)其它網(wǎng)站下載安裝的rpm包的信息。

列出資源庫(kù)中所有可以更新的rpm包:
[root@localhost ~]#yum list updates

 

列出已經(jīng)安裝的所有rpm包:
[root@localhost ~]#yum list installed
列出已經(jīng)安裝的但不包含在資源庫(kù)中的rpm包:

[root@localhost ~]#yum list extras
注:也就是通過(guò)其它網(wǎng)站下載安裝的rpm包。

列出資源庫(kù)中所有可以安裝或更新的rpm包:
[root@localhost ~]#yum list

列出資源庫(kù)中特定的可以安裝或更新以及已經(jīng)安裝的rpm包:
[root@localhost ~]#yum list sendmail

[root@localhost ~]#yum list gcc*
注意:可以在rpm包名中使用匹配符, 如上面例子是列出所有以gcc開(kāi)頭的rpm包。

搜索匹配特定字符的rpm包的詳細(xì)信息:
[root@localhost ~]#yum search wget
注意:可以通過(guò)“search”在rpm包名,包描述中進(jìn)行搜索。

搜索包含特定文件名的rpm包:
[root@localhost ~]#yum provides realplay

(4)通過(guò)yum操作暫存信息(/var/cache/yum)
清除暫存的rpm包文件:
[root@localhost ~]#yum clean packages

清除暫存的rpm頭文件:
[root@localhost ~]#yum clean  headers

 

清除暫存中舊的rpm頭文件和包文件:
[root@localhost ~]#yum clean  all



強(qiáng)強(qiáng) 2011-05-17 22:23 發(fā)表評(píng)論
]]>
crontab 定時(shí)任務(wù)執(zhí)行http://www.aygfsteel.com/lyjjq/articles/346800.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Wed, 23 Mar 2011 00:56:00 GMThttp://www.aygfsteel.com/lyjjq/articles/346800.htmlhttp://www.aygfsteel.com/lyjjq/comments/346800.htmlhttp://www.aygfsteel.com/lyjjq/articles/346800.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/346800.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/346800.html#vi /etc/crontab
看到下面幾個(gè)


# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 5 * * 0 root run-parts /etc/cron.weekly
42 5 1 * * root run-parts /etc/cron.monthly


在/etc/cron.daily
下添加一個(gè)backup.sh(內(nèi)容就寫最上面的sh腳本)就會(huì)每天執(zhí)行

重新啟動(dòng)crond  

# /etc/rc.d/init.d/crond restart  


--------------------------
看一下crontab 的格式
第1列分鐘1~59
第2列小時(shí)1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要運(yùn)行的命令

下面是crontab的格式:
分 時(shí) 日 月 星期 要運(yùn)行的命令

這里有crontab文件條目的一些例子:

30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的21:30重啟apache。

45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
上面的例子表示每月1、10、22日的4 : 45重啟apache。

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
上面的例子表示每周六、周日的1 : 10重啟apache。

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟apache。

0 23 * * 6 /usr/local/apache/bin/apachectl restart
上面的例子表示每星期六的11 : 00 pm重啟apache。

) */1 * * * /usr/local/apache/bin/apachectl restart
每一小時(shí)重啟apache

0 23-7/1 * * * /usr/local/apache/bin/apachectl restart
晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟apache

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的4號(hào)與每周一到周三的11點(diǎn)重啟apache

0 4 1 jan * /usr/local/apache/bin/apachectl restart



強(qiáng)強(qiáng) 2011-03-23 08:56 發(fā)表評(píng)論
]]>
mysql忘記root密碼拯救方法(flush privileges)http://www.aygfsteel.com/lyjjq/articles/346797.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Wed, 23 Mar 2011 00:34:00 GMThttp://www.aygfsteel.com/lyjjq/articles/346797.htmlhttp://www.aygfsteel.com/lyjjq/comments/346797.htmlhttp://www.aygfsteel.com/lyjjq/articles/346797.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/346797.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/346797.html

1、結(jié)束當(dāng)前正在運(yùn)行的mysql進(jìn)程。
# /etc/init.d/mysql stop

2、用mysql安全模式運(yùn)行并跳過(guò)權(quán)限驗(yàn)證。
# /usr/bin/mysqld_safe --skip-grant-tables

3、以root身份登錄mysql。
# mysql -u root

4、修改root用戶口令。
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set Password = PASSWORD('root') where User ='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> exit

5、結(jié)束mysql安全模式,用正常模式運(yùn)行mysql。
# /etc/init.d/mysql restart

6、試試你新修改的口令,嘿嘿……屢試屢爽!
 
mysql> update mysql.user set password=PASSWORD('新密碼') where User='root'; 

mysql> flush privileges;
mysql> quit





強(qiáng)強(qiáng) 2011-03-23 08:34 發(fā)表評(píng)論
]]>
yum命令詳解http://www.aygfsteel.com/lyjjq/articles/345528.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Wed, 02 Mar 2011 14:17:00 GMThttp://www.aygfsteel.com/lyjjq/articles/345528.htmlhttp://www.aygfsteel.com/lyjjq/comments/345528.htmlhttp://www.aygfsteel.com/lyjjq/articles/345528.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/345528.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/345528.html一. yum是什么
yum = Yellow dog Updater, Modified
主要功能是更方便的添加/刪除/更新RPM包.
它能自動(dòng)解決包的倚賴性問(wèn)題.
它能便于管理大量系統(tǒng)的更新問(wèn)題
注:為什么要使用yum而不用apt,最簡(jiǎn)單的原因,Fedora自帶

二. yum特點(diǎn)
*可以同時(shí)配置多個(gè)資源庫(kù)(Repository)
*簡(jiǎn)潔的配置文件(/etc/yum.conf)
*自動(dòng)解決增加或刪除rpm包時(shí)遇到的倚賴性問(wèn)題
*使用方便
*保持與RPM數(shù)據(jù)庫(kù)的一致性

三. yum安裝
Fedora自帶
#rpm -ivh yum-2.0.4-2.noarch.rpm

四. yum配置
注:修改和增加配置文件中的資源庫(kù),加快下載速度和擁有更多可更新的rpm包
將/etc/yum.conf的內(nèi)容全部替換為
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1

[fedora-us-1]
name=Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os

[fedora-us-1-updates]
name=Fedora Core 1 updates -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates

[fedora-us-1-stable]
name=Fedora Linux (stable) for Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable

[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms


五. yum應(yīng)用
注:當(dāng)?shù)谝淮问褂脃um或yum資源庫(kù)有更新時(shí),yum會(huì)自動(dòng)下載所有所需的headers放置于/var/cache/yum目錄下,所需時(shí)間可能較長(zhǎng).

檢查有哪些可更新的rpm包
#yum check-update

安裝rpm包,使xmms可以播放mp3
#yum install xmms-mp3

安裝mplayer,同時(shí)自動(dòng)安裝相關(guān)的軟件
#yum install mplayer

刪除licq包,同時(shí)刪除與該包有倚賴性的包
#yum remove licq
注:同時(shí)會(huì)提示刪除licq-gnome,licq-qt,licq-text,非常方便

系統(tǒng)更新(更新所有可以升級(jí)的rpm包,包括kernel)
#yum -y update

每天定期執(zhí)行系統(tǒng)更新
#chkconfig yum on
#service yum start


六. yum指令詳解
*rpm包的更新

檢查可更新的rpm包
#yum check-update

更新所有的rpm包
#yum update

更新指定的rpm包,如更新kernel和kernel source
#yum update kernel kernel-source

大規(guī)模的版本升級(jí),與yum update不同的是,連舊的淘汰的包也升級(jí)
#yum upgrade


*rpm包的安裝和刪除

安裝rpm包,如xmms-mp3
#yum install xmms-mp3

刪除rpm包,包括與該包有倚賴性的包
#yum remove licq
注:同時(shí)會(huì)提示刪除licq-gnome,licq-qt,licq-text


*yum暫存(/var/cache/yum/)的相關(guān)參數(shù)
清除暫存中rpm包文件
#yum clean packages

清除暫存中rpm頭文件
#yum clean headers

清除暫存中舊的rpm頭文件
#yum clean oldheaders

清除暫存中舊的rpm頭文件和包文件
#yum clean 或#yum clean all
注:相當(dāng)于yum clean packages + yum clean oldheaders


*rpm包列表

列出資源庫(kù)中所有可以安裝或更新的rpm包
#yum list

列出資源庫(kù)中特定的可以安裝或更新以及已經(jīng)安裝的rpm包
#yum list mozilla
#yum list mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla開(kāi)頭的rpm包

列出資源庫(kù)中所有可以更新的rpm包
#yum list updates

列出已經(jīng)安裝的所有的rpm包
#yum list installed

列出已經(jīng)安裝的但是不包含在資源庫(kù)中的rpm包
#yum list extras
注:通過(guò)其它網(wǎng)站下載安裝的rpm包


*rpm包信息顯示(info參數(shù)同list)

列出資源庫(kù)中所有可以安裝或更新的rpm包的信息
#yum info

列出資源庫(kù)中特定的可以安裝或更新以及已經(jīng)安裝的rpm包的信息
#yum info mozilla
#yum info mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla開(kāi)頭的rpm包的信息

列出資源庫(kù)中所有可以更新的rpm包的信息
#yum info updates

列出已經(jīng)安裝的所有的rpm包的信息
#yum info installed

列出已經(jīng)安裝的但是不包含在資源庫(kù)中的rpm包的信息
#yum info extras
注:通過(guò)其它網(wǎng)站下載安裝的rpm包的信息


*搜索rpm包
搜索匹配特定字符的rpm包
#yum search mozilla
注:在rpm包名,包描述等中搜索

搜索有包含特定文件名的rpm包
#yum provides realplay

七. 安全的更新freshrpms.net的rpm包
安裝freshrpms.net的GPG key
#rpm --import http://freshrpms.net/packages/RPM-GPG-KEY.txt

編輯/etc/yum.conf,增加以下信息到尾部
[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
gpgcheck=1

注:
檢查GPG Key
# rpm -qa gpg-pubkey*

顯示Key信息
#rpm -qi gpg-pubkey-e42d547b-3960bdf1

刪除Key
#rpm -e gpg-pubkey-e42d547b-3960bdf1

八、yum是干什么的
使用redhat,fedora的linuxer肯定都為rpm著名的dependency hell而頭疼(這也是所有基于rpm發(fā)行版都有的問(wèn)題)。foo is needed by bar,bar is needed by foo。要裝卸個(gè)軟件,還得辛辛苦苦地梳理清楚所有依賴性問(wèn)題,rpm的幾個(gè)搜索站點(diǎn)成了時(shí)常光顧的場(chǎng)所,如果不幸碰到循環(huán)依賴,那就只有干瞪眼的分了。有時(shí)加個(gè)--nodeps參數(shù),倒是眼不見(jiàn),心不煩,但這樣裝上的軟件,你能保證正常使用嗎,這樣卸載軟件,你能保證不影響其它軟件工作嗎,恐怕誰(shuí)也不能給出肯定的答案。每到這時(shí),帽子們只有看著debian的 apt暗自羨慕了。好在,這些都已經(jīng)成為過(guò)去時(shí)了。基于rpm的發(fā)行版現(xiàn)在也有了像apt那樣自動(dòng)解決依賴關(guān)系的包管理工具了。其中一個(gè)著名的就是apt4rpm,這基本上是debian系統(tǒng)apt的在rpm發(fā)行版的移植。但是使用Redhat和 Fedora的linuxer你們知道嗎,還有一個(gè)與apt功能類似的rpm包管理系統(tǒng),那就是yum。Fedora系統(tǒng)已經(jīng)自帶,Redhat也有相應(yīng)的rpm下載。與apt相比,yum的功能一點(diǎn)也不弱,甚至還有許多勝過(guò)apt 之處。比如說(shuō),yum是Fedora系統(tǒng)自帶的,因此它能使用fedora官方的軟件源,完成各種官方發(fā)布的各種升級(jí)。對(duì)于第三方軟件源的支持,yum也 不差,大多數(shù)支持apt的repository注,也能支持yum,比如說(shuō)freshrpms,fedora.us,livna等等。此外yum有一個(gè)比較 詳細(xì)的log,可以查看何時(shí)升級(jí)安裝了什么軟件包等。yum的代碼較apt更為精簡(jiǎn)等。

————————————————以下是deemstone添加———————————————
注:這個(gè)單詞我也不太認(rèn)識(shí),后來(lái)到網(wǎng)上查了一下:http://man.chinaunix.net/develop/cvsdoc_zh/Repository.html
deemstone的理解:rpm文件是安裝包,而yum和其他的一些軟件,如:Debian下的apt,是管理這些安裝包(自動(dòng)安裝,自動(dòng)解決包之間的依賴關(guān)系……)的軟件。
—————————————————————————————————————————

YUM簡(jiǎn)介:yum,是Yellow dog Updater, Modified的簡(jiǎn)稱,起初是由yellow dog這一發(fā)行版的開(kāi)發(fā)者Terra Soft研發(fā),用python寫成,那時(shí)還叫做yup(yellow dog updater),后經(jīng)杜克大學(xué)的Linux@Duke開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行改進(jìn),遂有此名。yum的宗旨是自動(dòng)化地升級(jí),安裝/移除rpm包,收集rpm包的相關(guān)信息,檢查依賴性并自動(dòng)提示用戶解決。yum的關(guān)鍵之處是要有可靠的repository,顧名思義,這是軟件的倉(cāng)庫(kù),它可以是http或ftp站點(diǎn),也可以是本地軟件池,但必須包含rpm的header,header包括了rpm包的各種信息,包括描述,功能,提供的文件,依賴性等.正是收集了這些 header并加以分析,才能自動(dòng)化地完成余下的任務(wù)。
如果沒(méi)有安裝,先我們要到下面的地址下載與自己系統(tǒng)相對(duì)應(yīng)的版本的 yum:
http://ayo.freshrpms.net/
比如我用的是Fedora core 4.0 就下載如下的包安裝:
[root@localhost beinan]# rpm -ivh freshrpms-release-1.1-1.fc.noarch.rpm
warning: freshrpms-release-1.1-1.fc.noarch.rpm: Header V3 DSA signature: NOKEY, key ID e42d547b
Preparing... ########################################### [100%]
1:freshrpms-release ########################################### [100%]

YUM的配置文件
yum的一切配置信息都儲(chǔ)存在一個(gè)叫yum.conf的配置文件中,通常位于/etc目 錄下,這是整個(gè)yum系統(tǒng)的重中之重,所以有必要詳細(xì)介紹。下面是一個(gè)從網(wǎng)上找來(lái)的yum.con文件,讓我們以此為例,進(jìn)行說(shuō)明。

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1
retries=1

[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://download.atrpms.net/mirrors/fedoracore/$releasever/$basearch/os
http://rpmfind.net/linux/fedora/cor...er/$basearch/os
http://mirror.clarkson.edu/pub/dist...er/$basearch/os


[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates

轉(zhuǎn)自:http://blog.chinaunix.net/u/32645/showart.php?id=258653

強(qiáng)強(qiáng) 2011-03-02 22:17 發(fā)表評(píng)論
]]>
Linux Php連接SQLServer數(shù)據(jù)庫(kù)(freetds)http://www.aygfsteel.com/lyjjq/articles/345374.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Mon, 28 Feb 2011 14:03:00 GMThttp://www.aygfsteel.com/lyjjq/articles/345374.htmlhttp://www.aygfsteel.com/lyjjq/comments/345374.htmlhttp://www.aygfsteel.com/lyjjq/articles/345374.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/345374.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/345374.htmlPHP訪問(wèn)我們以前的Sql Server 2005數(shù)據(jù),所以就有了這篇文章的誕生.廢話就少說(shuō)了,做程序設(shè)計(jì)的最不喜歡兜圈子了.用簡(jiǎn)介步驟說(shuō)明問(wèn)題,往下看.

  系統(tǒng): Linux

  數(shù)據(jù)庫(kù): Sql Server 2005

  1.下載FreeTDS

  官方網(wǎng)站:http://www.freetds.org

  2.安裝FreeTDS

  # tar zxvf freetds-current.tgz(解壓)

  # ./configure --prefix=/usr/local/freetds --with-tdsver=7.2 --enable-msdblib

  # make

  # make install

  其他可選 根據(jù)自己情況

  --enable-dbmfix --with-gnu-ld --enable-shared --enable-static

  安裝freetds到目錄/usr/local/freetds:--prefix=/usr/local/freetds 如果不帶這個(gè)默認(rèn)好像也是這目錄

  對(duì)應(yīng)數(shù)據(jù)庫(kù)版本--我的是Microsoft SQL Server 2005 所以我?guī)У氖?--with-tdsver=7.2

  4.2 Sybase SQL Server < 10 and Microsoft SQL Server 6.5

  5.0 Sybase SQL Server >= 10

  7.0 Microsoft SQL Server 7.0

  7.1 Microsoft SQL Server 2000

  7.2 Microsoft SQL Server 2005

  3.編輯/usr/local/freetds/etc/freetds.conf

  # $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $

  #

  # This file is installed by FreeTDS if no file by the same

  # name is found in the installation directory.

  #

  # For information about the layout of this file and its settings,

  # see the freetds.conf manpage "man freetds.conf".

  # Global settings are overridden by those in a database

  # server specific section

  [global]

  # TDS protocol version

  ; tds version = 4.2

  # Whether to write a TDSDUMP file for diagnostic purposes

  # (setting this to /tmp is insecure on a multi-user system)

  ; dump file = /tmp/freetds.log

  ; debug flags = 0xffff

  # Command and connection timeouts

  ; timeout = 10

  ; connect timeout = 10

  # If you get out-of-memory errors, it may mean that your client

  # is trying to allocate a huge buffer for a TEXT field.

  # Try setting "text size" to a more reasonable limit

  text size = 64512

  #解決中文亂碼問(wèn)題

  client charset=utf8

  # A typical Sybase server

  #[egServer50]

  # host = symachine.domain.com

  # port = 5000

  # tds version = 5.0

  # A typical Microsoft server

  #[egServer70]

  # host = ntmachine.domain.com

  # port = 1433

  # tds version = 7.0

  #這個(gè)名字程序和命令行用得上,叫什么自己定

  [Server2005]

  host = 192.168.3.100 #我的SQL Server2005 IP,根據(jù)自己改

  port = 1433

  tds version = 7.2

  4.測(cè)試連接:

  [root@test bin]# ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB

  locale is "zh_CN"

  locale charset is "GB2312"

  Default database being set to PublicDB

  1>

  出現(xiàn)這個(gè)表示連接成功! 退出:quit 和 exit 都行.

  參數(shù)說(shuō)明

  -S 配置的服務(wù)名

  -H 主機(jī)名

  -p 端口

  -U username

  -P password

  -D database

  5.測(cè)試查詢:

  # ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB

  1> select USER_ID,TRUE_NAME from USER_INFO

  2> go

  可以顯示中文沒(méi)問(wèn)題!

  6.讓PHP支持mssql(freeTDS)

  重新編譯PHP 這些參數(shù)根據(jù)自己情況來(lái)定,下面是我們需要的

  但是必須帶--with-mssql=/usr/local/freetds

  ./configure --prefix=/usr/local/PHP --with-MySQL=/usr/local/MySQL --with-apxs2=/usr/local/apache/bin/apxs --with-gd=/usr/local/gd --with-jpeg-dir=/usr/local/libjpeg --with-png-dir=/usr/local/libpng --with-zlib-dir=/usr/local/zlib --with-libxml-dir=/usr/local/libxml2 --with-iconv=/usr/local/libiconv --with-freetype-dir=/usr/local/freetype --with-pdo-MySQL=/usr/local/PHPbak/lib/PHP/extensions/no-debug-non-zts-20060613/pdo_MySQL.so --enable-sockets --with-curl --with-pear --with-mssql=/usr/local/freetds

  如果編譯報(bào)錯(cuò)請(qǐng)執(zhí)行:

  # touch /usr/local/freetds/include/tds.h

  # touch /usr/local/freetds/lib/libtds.a

  7.PHP測(cè)試程序

  

  /**

  * MOIT

  *

  * @author 明白(admin126com@126.com) 日 期: Wed Nov 18 05:00:07 GMT 2009

  * @copyright Copyright (c) 2009

  * @desc 測(cè)試

  */

  $msconnect=mssql_connect("Server2005","java","java");

  $msdb=mssql_select_db("PublicDB",$msconnect);

  $msquery = "select TRUE_NAME,USER_ID,USER_NAME,PASSWORD from USER_INFO";

  $msresults= mssql_query($msquery);

  while ($row = mssql_fetch_array($msresults)) {

  echo $row["USER_ID"] . " ".$row["TRUE_NAME"]. " " . $row["USER_NAME"] . " " . $row["PASSWORD"] . "
";

  }

  ?>

  8.安裝完畢,祝您成功!



強(qiáng)強(qiáng) 2011-02-28 22:03 發(fā)表評(píng)論
]]>
LINUX網(wǎng)絡(luò)基本配置:http://www.aygfsteel.com/lyjjq/articles/345119.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Fri, 25 Feb 2011 06:43:00 GMThttp://www.aygfsteel.com/lyjjq/articles/345119.htmlhttp://www.aygfsteel.com/lyjjq/comments/345119.htmlhttp://www.aygfsteel.com/lyjjq/articles/345119.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/345119.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/345119.html 2.ifconfig eth1 up 啟用網(wǎng)卡

 

  兩個(gè)部分:

     網(wǎng)絡(luò)基礎(chǔ):全局參數(shù)  局部參數(shù)

         *開(kāi)機(jī)之后,新添加的網(wǎng)卡可以通過(guò)在開(kāi)機(jī)過(guò)程中配置

          來(lái)使用。

         配置完成之后,使用ifconfig來(lái)進(jìn)行查看:

                IP地址、子網(wǎng)掩碼、廣播地址、統(tǒng)計(jì)信息等

       通過(guò)配置文件:

           /etc/services 

                定義常用的服務(wù)端口號(hào),一般無(wú)需修改

                可以參照netstat -nl 查詢本機(jī)開(kāi)放的服務(wù)

           /etc/sysconfig/network

                通常情況下可用于更改計(jì)算機(jī)名稱

           /etc/hosts

                            在沒(méi)有DNS域名解析系統(tǒng)的情況下優(yōu)先通過(guò)該

                文件實(shí)現(xiàn)名稱到地址的對(duì)應(yīng)(域名解析)

           /etc/resolv.conf

                定義本機(jī)使用的DNS服務(wù)器地址

           /etc/sysconfig/network-scripts/ifcfg-ethx

                局部參數(shù):

                定義指定網(wǎng)卡IP、MASK、GW、HW Address

                如果本機(jī)使用的是以太網(wǎng)卡,

                設(shè)備名:eth0 eth1 eth2   eth--->ethernet

                其中內(nèi)容信息可以通過(guò)vi修改

                完成之后需要使用service network restart                        重啟------>該網(wǎng)絡(luò)信息的配置永久生效

       通過(guò)命令使用:

           netconfig       

                 --->/etc/sysconfig/network-scripts/ifcfg-ethx

                 配置網(wǎng)卡基本參數(shù),完成之后重啟服務(wù)

           service network restart 

           /etc/rc.d/init.d/network restart

                 重新啟動(dòng)網(wǎng)絡(luò)服務(wù)

           redhat-config-network/system-config-network

                           該命令影響的配置文件:

          /etc/sysconfig/networking/devices/ifcfg-ethx

                 該命令執(zhí)行的優(yōu)先級(jí)更高

           ifconfig

                ifconfig ethx -dynamic

                   臨時(shí)通過(guò)DHCP服務(wù)器來(lái)獲取地址

                ifconfig ethx IPADDRESS netmask MASK

                   臨時(shí)指定IP地址以及子網(wǎng)掩碼

           ifup/ifdown

                臨時(shí)啟動(dòng)或者關(guān)閉網(wǎng)絡(luò)連接

           dhclient

                動(dòng)態(tài)獲得IP地址

               

         網(wǎng)絡(luò)高級(jí):路由、ADSL、多網(wǎng)卡、多IP

         路由添加刪除:

         route         查詢當(dāng)前路由表

         route add -net 網(wǎng)絡(luò)ID netmask 子網(wǎng)掩碼 gw 網(wǎng)關(guān)

                       增加一條路由

         route del -net 網(wǎng)絡(luò)ID netmask 子網(wǎng)掩碼

                                 刪除一條路由

        

         接入廣域網(wǎng)ADSL設(shè)置:

               adsl-setup命令        ---->按照提示進(jìn)行操作

         adsl-start    連接客戶端

         adsl-stop     關(guān)閉客戶端

         adsl-status   查看

         adsl-connect  連接客戶端

 

         多網(wǎng)卡配置:

               多個(gè)網(wǎng)卡啟動(dòng)的時(shí)候會(huì)被識(shí)別為eth0 eth1 eth2...

         添加多個(gè)網(wǎng)卡,開(kāi)機(jī)自動(dòng)識(shí)別

         通常通過(guò)配置文件拷貝的方式建立其他網(wǎng)卡配置

         假如:原網(wǎng)卡配置

         /etc/sysconfig/network-scripts/ifcfg-eth0

         那么拷貝

         cd /etc/sysconfig/network-scripts/

         cp ifcfg-eth0 ifcfg-eth1

         vi ifcfg-eth1

         在更改完成配置之后,

         service network restart   重啟生效

         vi /etc/sysctl.conf        

                       ---->將路由轉(zhuǎn)發(fā)功能由0改為1

         執(zhí)行sysctl -p刷新

         直到查看cat /proc/sys/net/ipv4/ip_forward

         顯示內(nèi)容為1,則證明本機(jī)IP路由轉(zhuǎn)發(fā)功能成功!

 

         多IP綁定配置:

         cd /etc/sysconfig/network-scripts/

         cp ifcfg-eth0 ifcfg-eth0:1

         vi ifcfg-eth0:1

         修改IP地址以及設(shè)備名稱   device=eth0:1

         保存退出,重啟網(wǎng)絡(luò)

        

     對(duì)網(wǎng)絡(luò)信息的檢測(cè):

         ifconfig      查看網(wǎng)絡(luò)配置信息

         ping               選項(xiàng)方面的差別:

                -c     發(fā)包數(shù)量

                -s   發(fā)包大小

                -f   泛洪

         tcpdump     檢測(cè)網(wǎng)卡流經(jīng)的數(shù)據(jù)     

         traceroute    

        

 



強(qiáng)強(qiáng) 2011-02-25 14:43 發(fā)表評(píng)論
]]>
如何在Linux下查找文件內(nèi)容包含某個(gè)特定字符串的文件http://www.aygfsteel.com/lyjjq/articles/344852.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Tue, 22 Feb 2011 07:04:00 GMThttp://www.aygfsteel.com/lyjjq/articles/344852.htmlhttp://www.aygfsteel.com/lyjjq/comments/344852.htmlhttp://www.aygfsteel.com/lyjjq/articles/344852.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/344852.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/344852.html find /path -name *log*
2.查找/usr/local/jira/下的所有子目錄中的包含MAXIMUM_MEMORY的文件
(1)find /usr/local/jira/ -type f -print | xargs grep MAXIMUM_MEMORY
(2)grep -F MAX -R /usr/local/jira/bin/
(3)find /usr/local/jira/bin |xargs grep PERM_SIZE

強(qiáng)強(qiáng) 2011-02-22 15:04 發(fā)表評(píng)論
]]>
Apache 目錄列表 http://www.aygfsteel.com/lyjjq/articles/330569.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Wed, 01 Sep 2010 06:08:00 GMThttp://www.aygfsteel.com/lyjjq/articles/330569.htmlhttp://www.aygfsteel.com/lyjjq/comments/330569.htmlhttp://www.aygfsteel.com/lyjjq/articles/330569.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/330569.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/330569.html

之前都看到很多人在問(wèn)apache目錄列表的問(wèn)題,如何讓apache把目錄中的文件列表出來(lái),然后禁止apache目錄列表,又如何在訪問(wèn)某個(gè)目錄時(shí)默認(rèn)指向 index.php .這些在apache配置文檔稍作配置就可以做到了。

DirectoryIndex 指令
DirectoryIndex指令設(shè)置了當(dāng)客戶端在請(qǐng)求的目錄名的末尾刻意添加一個(gè)"/"以表示請(qǐng)求該目錄的索引時(shí),服務(wù)器需要尋找的資源列表。Local-url(%已解碼的)是一個(gè)相對(duì)于被請(qǐng)求目錄的文檔的URL(通常是那個(gè)目錄中的一個(gè)文件)。可以指定多個(gè)URL,服務(wù)器將返回最先找到的那一個(gè)。用到apache的mod_dir模塊。舉例:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

這里,首先尋找 index.php, 沒(méi)有找到再去尋找 index.html
若一個(gè)也沒(méi)有找到或沒(méi)有設(shè)置DirectoryIndex,這就涉及到目錄列表的問(wèn)題了。
如果那個(gè)目錄設(shè)置了Indexes選項(xiàng),服務(wù)器將會(huì)自動(dòng)產(chǎn)生一個(gè)那個(gè)目錄中的資源列表。

Options 指令
說(shuō)明: 配置在特定目錄使用哪些特性
語(yǔ)法: Options [+|-]可選項(xiàng) [[+|-]可選項(xiàng)] ...
默認(rèn)值: Options All
上下文: 服務(wù)器配置, 虛擬主機(jī), 目錄, .htaccess
覆蓋項(xiàng): Options
狀態(tài): 核心
模塊: core

option可以為None ,在這種情況下,將不啟用任何額外特性。或設(shè)置為以下選項(xiàng)中的一個(gè)或多個(gè):

All
除MultiViews之外的所有特性。這是默認(rèn)設(shè)置。

ExecCGI
允許使用mod_cgi執(zhí)行CGI腳本。

FollowSymLinks
服務(wù)器允許在此目錄中使用符號(hào)連接。
注意:即使服務(wù)器會(huì)使用符號(hào)連接,但它不會(huì)改變用于匹配<Directory>段的路徑名。
注意:如果此配置位于<Location>配置段中,則此設(shè)置會(huì)被忽略。

Includes
允許使用mod_include提供的服務(wù)器端包含。

IncludesNOEXEC
允許服務(wù)器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以從ScriptAlias目錄使用"#include virtual"虛擬CGI腳本。

Indexes
如果一個(gè)映射到目錄的URL被請(qǐng)求,而此目錄中又沒(méi)有DirectoryIndex(例如:index.html),那么服務(wù)器會(huì)返回由mod_autoindex生成的一個(gè)格式化后的目錄列表。

MultiViews
允許使用mod_negotiation提供內(nèi)容協(xié)商的"多重視圖"(MultiViews)。

SymLinksIfOwnerMatch
服務(wù)器僅在符號(hào)連接與其目的目錄或文件的擁有者具有相同的uid時(shí)才使用它。

舉個(gè)例子,允許目錄列表:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>

這里設(shè)置允許 /web/docs 的目錄列表。
禁止列表則可以這么設(shè)置

<Directory /web/docs>
Options None
</Directory>

 



強(qiáng)強(qiáng) 2010-09-01 14:08 發(fā)表評(píng)論
]]>
RPM 大全http://www.aygfsteel.com/lyjjq/articles/330529.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Wed, 01 Sep 2010 03:11:00 GMThttp://www.aygfsteel.com/lyjjq/articles/330529.htmlhttp://www.aygfsteel.com/lyjjq/comments/330529.htmlhttp://www.aygfsteel.com/lyjjq/articles/330529.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/330529.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/330529.html  RPM 有五種基本的操作方式(不包括創(chuàng)建 軟件 包): 安裝, 卸載, 升級(jí), 查詢,和驗(yàn)證。

   下面我們就來(lái)逐一的講解吧。

一、 安裝RPM包

  RPM 軟件 包通常具有類似foo-1.0-1.i386.rpm 的文件名。

  其中包括 軟件 包的名稱(foo),版本號(hào)(1.0),發(fā)行號(hào)(1), 和 硬件平臺(tái)(i386)。

  安裝一個(gè) 軟件 包只需簡(jiǎn)單的鍵入以下命令: $ rpm -ivh foo-1.0-1.i386.rpm foo #################################### RPM安裝完畢后會(huì)打印出 軟件 包的名字(并不一定與文件名相同), 而后打印一連串的#號(hào)以表示安裝進(jìn)度。

   雖然 軟件 包的安裝被設(shè)計(jì)的盡量簡(jiǎn)單易行, 但還是可能會(huì)發(fā)生如下的錯(cuò)誤:

  1、 軟件 包已被安裝 如果您的 軟件 包已被安裝, 將會(huì)出現(xiàn)以下信息: $ rpm -ivh foo-1.0-1.i386.rpm foo package foo-1.0-1 is already installed error: foo-1.0-1.i386.rpm cannot be installed 如果您仍舊要安裝該 軟件 包,可以在命令行上使用--replacepkgs 選項(xiàng),RPM將忽略該錯(cuò)誤信息強(qiáng)行安裝。

  2、文件沖突 如果您要安裝的 軟件 包中有一個(gè)文件已在安裝其它 軟件 包時(shí)安裝,會(huì)出現(xiàn)以下錯(cuò)誤信息: # rpm -ivh foo-1.0-1.i386.rpm foo /usr/bin/foo conflicts with file from bar-1.0-1 error: foo-1.0-1.i386.rpm cannot be installed 要想讓RPM 忽略該錯(cuò)誤信息, 請(qǐng)使用--replacefiles 命令行選項(xiàng)。

  3、未解決依賴關(guān)系 RPM 軟件 包可能依賴于其它 軟件 包,也就是說(shuō)要求在安裝了特定的 軟件 包之后才能安裝該 軟件 包。如果在您安裝某個(gè) 軟件 包時(shí)存在這種未解決的依賴關(guān)系。會(huì)產(chǎn)生以下信息: $ rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 您必須安裝完所依賴的 軟件 包,才能解決這個(gè)問(wèn)題。如果您想強(qiáng)制安裝(這是個(gè)壞主意, 因?yàn)榘惭b后的 軟件 包未必能正常運(yùn)行), 請(qǐng)使用--nodeps 命令行選項(xiàng)。  

  二、卸載RPM包

   卸載 軟件 包就象安裝 軟件 包時(shí)一樣簡(jiǎn)單: $ rpm -e foo 注意這里使用 軟件 包的名字name ``foo, 而不是 軟件 包文件的名字file ``foo-1.0-1.i386.rpm。如果其它 軟件 包依賴于您要卸載的 軟件 包,卸載時(shí)則會(huì)產(chǎn)生錯(cuò)誤信息。

  如: $ rpm -e foo removing these packages would break dependencies:foo is needed by bar-1.0-1 若讓RPM忽略這個(gè)錯(cuò)誤繼續(xù)卸載(這可不是一個(gè)好主意,因?yàn)橐蕾囉谠?軟件 包的程序可能無(wú)法運(yùn)行),請(qǐng)使用--nodeps 命令行選項(xiàng)。  

  三、升級(jí)RPM包

  升級(jí) 軟件 包和安裝 軟件 包十分類似:. $ rpm -Uvh foo-2.0-1.i386.rpm foo #################################### RPM將自動(dòng)卸載已安裝的老板本的foo 軟件 包,您不會(huì)看到有關(guān)信息。事實(shí)上您可能總是使用 -U 來(lái)安裝 軟件 包,因?yàn)榧幢阋酝窗惭b過(guò)該 軟件 包,也能正常運(yùn)行。

  因?yàn)镽PM 執(zhí)行智能化的 軟件 包升級(jí), 自動(dòng)處理配置文件,您將會(huì)看到如下信息: saving /etc/foo.conf as /etc/foo.conf.rpmsave 這表示您對(duì)配置文件的修改不一定能向上兼容。

  因此,RPM 會(huì)先備份老文件再安裝新文件。您應(yīng)當(dāng)盡快解決這兩個(gè)配置文件的不同之處,以使系統(tǒng)能持續(xù)正常運(yùn)行。

  因?yàn)樯?jí)實(shí)際包括 軟件 包的卸載與安裝兩個(gè)過(guò)程,所以您可能會(huì)碰到由這兩個(gè)操作引起的錯(cuò)誤。

  另一個(gè)你可能碰到的問(wèn)題是:當(dāng)您使用舊版本的 軟件 包來(lái)升級(jí)新版本的 軟件 時(shí),RPM會(huì)產(chǎn)生以下錯(cuò)誤信息: $ rpm -Uvh foo-1.0-1.i386.rpm foo package foo-2.0-1 (which is newer) is already installed error: foo-1.0-1.i386.rpm cannot be installed 如果你確有需要將該 軟件 包”降級(jí),加入 --oldpackage 命令選項(xiàng)就可以了。

   四、 查詢已安裝的軟件包

   使用命令rpm -q來(lái)查詢已安裝 軟件 包的 數(shù)據(jù)庫(kù) 。

   簡(jiǎn)單的使用命令 rpm -q foo 會(huì)打印出foo 軟件 包 的包名 , 版本號(hào),和發(fā)行號(hào): $ rpm -q foo foo-2.0-1 除了指定 軟件 包名以外,您還可以使用以下選項(xiàng)來(lái)指明要查詢哪些 軟件 包的信 息。

這些選項(xiàng)被稱之為“ 軟件 包指定選項(xiàng)“。

· -a 查詢所有已安裝的 軟件 包
· -f 將查詢包含有文件. 的 軟件 包
· -p 查詢 軟件 包文件名為的 軟件 包 還可以指定查詢 軟件 包時(shí)所顯示的信息。它們被稱作信息選擇選項(xiàng):
· -i 顯示 軟件 包信息,如描述, 發(fā)行號(hào), 尺寸, 構(gòu)建日期, 安裝日期, 平臺(tái), 以及其它一些各類信息。
· -l 顯示 軟件 包中的文件列表。
· -s 顯示 軟件 包中所有文件的狀態(tài)。
· -d 顯示被標(biāo)注為文檔的文件列表(man 手冊(cè), info 手冊(cè), READMEs, etc)。
· -c 顯示被標(biāo)注為配置文件的文件列表。這些是您要在安裝完畢以后加以定制的文件(sendmail.cf, passwd, inittab, etc)。

對(duì)于那些要顯示文件列表的文件, 您可以增加-v 命令行選項(xiàng)以獲得如同 ls -l 格式的輸出。  

  五、 驗(yàn)證軟件包

  驗(yàn)證軟件包是通過(guò)比較已安裝的文件和 軟件 包中的原始文件信息來(lái)進(jìn)行的。驗(yàn)證主要是比較文件的尺寸,MD5 校驗(yàn)碼, 文件權(quán)限, 類型, 屬主和用戶組等。

  rpm-V命令用來(lái)驗(yàn)證一個(gè) 軟件 包。您可以使用任何包選擇選項(xiàng)來(lái)查詢您要驗(yàn)證的軟件包。

  命令rpm -V foo 將用來(lái)驗(yàn)證foo 軟件包。

又如:

· 驗(yàn)證包含特定文件的 軟件 包: rpm -Vf /bin/vi
· 驗(yàn)證所有已安裝的 軟件 包: rpm -Va
· 根據(jù)一個(gè)RPM包來(lái)驗(yàn)證: rpm -Vp foo-1.0-1.i386.rpm

   如果您擔(dān)心你的RPM 數(shù)據(jù)庫(kù) 已被破壞,就可以使用這種方式。 如果一切均校驗(yàn)正常將不會(huì)產(chǎn)生任何輸出。如果有不一致的地方,就會(huì)顯示出來(lái)。 輸出格式是8位長(zhǎng)字符 串, ``c 用以指配置文件, 接著是文件名. 8位字符的每一個(gè) 用以表示文件與RPM 數(shù)據(jù)庫(kù) 中一種屬性的比較 結(jié)果 。``. (點(diǎn)) 表示測(cè)試通過(guò)。.

  下面的字符表示對(duì)RPM 軟件 包進(jìn)行的某種測(cè)試失敗:

  顯示字符 錯(cuò)誤源 5 MD5

  校驗(yàn)碼
S 文件尺寸
L 符號(hào)連接
T 文件修改日期
D 設(shè)備
U 用戶
G 用戶組
M 模式e (包括權(quán)限和文件類型) 如果有錯(cuò)誤信息輸出, 您應(yīng)當(dāng)認(rèn)真加以考慮,是通過(guò)刪除還是重新安裝來(lái)解決出現(xiàn)的問(wèn)題。  

   六、教你一招

  RPM不僅是安裝/卸載程序的工具,它還是系統(tǒng)維護(hù)和診斷的一把好手。

  看過(guò)下面幾個(gè)例子你就會(huì)領(lǐng)教它的 厲害了。

· 如果您誤刪了一些文件, 但您不能肯定到底都刪除了那些文件,怎么辦?
您可以鍵入: rpm -Va rpm會(huì)在屏幕上顯示出文件刪除的情況。若你發(fā)現(xiàn)一些文件丟失了或已被損壞, 您就可以重新安裝或先卸載 再安裝該 軟件 包。
· 如果您碰到了一個(gè)自己不認(rèn)識(shí)的文件,要想查處它屬于哪個(gè) 軟件 包,您可以輸入以下命令 rpm -qf /usr/X11R6/bin/xjewel 輸出的結(jié)果會(huì)是: xjewel-1.6-1
· 如果發(fā)生綜合以上兩個(gè)例子的情況,如文件/usr/bin/paste出了問(wèn)題。您想知道哪個(gè) 軟件 包中包含該文 件,您這時(shí)可以簡(jiǎn)單的鍵入: rpm -Vf /usr/bin/paste
· 如果您想了解正在使用的程序的詳細(xì)信息, 您可以鍵入如下命令來(lái)獲得 軟件 包中關(guān)于該程序的文檔信息: rpm -qdf /usr/bin/ispell 輸出結(jié)果為: /usr/man/man4/ispell.4 /usr/man/man4/english.4 /usr/man/man1/unsq.1 /usr/man/man1/tryaffix.1 /usr/man/man1/sq.1 /usr/man/man1/munchlist.1 /usr/man/man1/ispell.1 /usr/man/man1/findaffix.1 /usr/man/man1/buildhash.1 /usr/info/ispell.info.gz /usr/doc/ispell-3.1.18-1/README
· 您發(fā)現(xiàn)了一個(gè)新的koules RPM,但您不知道它是做什么的,您可以鍵入如下命令: rpm -qip koules-1.2-2.i386.rpm
· 現(xiàn)在您想了解koules的 RPM包在系統(tǒng)里安裝了哪些文件, 您可以鍵入: rpm -qlp koules-1.2-2.i386.rpm輸出結(jié)果為: /usr/man/man6/koules.6 /usr/lib/games/kouleslib/start.raw /usr/lib/games/kouleslib/end.raw /usr/lib/games/kouleslib/destroy2.raw /usr/lib/games/kouleslib/destroy1.raw /usr/lib/games/kouleslib/creator2.raw /usr/lib/games/kouleslib/creator1.raw /usr/lib/games/kouleslib/colize.raw /usr/lib/games/kouleslib /usr/games/koules 以上只是幾個(gè)常見(jiàn)例子。隨著您進(jìn)一步的使用RPM,您會(huì)發(fā)現(xiàn)它的各種功能選項(xiàng)組合可以實(shí)現(xiàn)更為強(qiáng)大的RPM包管理功能。



強(qiáng)強(qiáng) 2010-09-01 11:11 發(fā)表評(píng)論
]]>
讓xp系統(tǒng)自動(dòng)選擇用戶登錄http://www.aygfsteel.com/lyjjq/articles/325193.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sun, 04 Jul 2010 06:00:00 GMThttp://www.aygfsteel.com/lyjjq/articles/325193.htmlhttp://www.aygfsteel.com/lyjjq/comments/325193.htmlhttp://www.aygfsteel.com/lyjjq/articles/325193.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/325193.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/325193.html第一種是修改注冊(cè)表

    這種方法比較麻煩,而且要求對(duì)注冊(cè)表有一定的了解。

    第1步:運(yùn)行注冊(cè)表編輯器,依次展開(kāi) [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] 分支,然后在右側(cè)窗口雙擊 "DefaultUserName",接著輸入你的登錄用戶名。如果沒(méi)有 "DefaultUserName" 這一項(xiàng),可以按鼠標(biāo)右鍵選“編輯→新建→字符串值(s)→DefaultUserName”來(lái)添加這個(gè)項(xiàng)目,注意要區(qū)分大小寫字母。

    第2步:同樣在該分支下,在右側(cè)窗口中雙擊 "DefaultPassword",然后在空白欄內(nèi)輸入你的密碼。假如未發(fā)現(xiàn) "DefaultPassword" 這一項(xiàng),可按上面的步驟來(lái)新建該字符串值。

    第3步:接下來(lái)在右側(cè)窗口中雙擊 "AutoAdminLogon",將數(shù)值設(shè)置為 "1"。假如未發(fā)現(xiàn) "AutoAdminLogon" 這一項(xiàng),可按上面的步驟來(lái)新建。

    現(xiàn)在關(guān)閉注冊(cè)表編輯器并重新啟動(dòng)電腦,就可以實(shí)現(xiàn)XP的自動(dòng)登錄了。

    第二種方法比較簡(jiǎn)單

    在 Windows XP 中單擊“開(kāi)始→運(yùn)行”,輸入 “rundll32 netplwiz.dll,UsersRunDll”(注意大小寫及空格),按回車就會(huì)出現(xiàn)一個(gè)“用戶賬戶”的操作窗口,如果你對(duì) Windows 2000 比較熟悉的話,相信你應(yīng)該知道怎么做了,取消對(duì)“要使用本機(jī),用戶必須輸入用戶名和密碼”項(xiàng)的選擇,點(diǎn)擊“應(yīng)用”。在接下來(lái)彈出的對(duì)話框中輸入你想讓電腦每次自動(dòng)登錄的用戶名及其密碼,下次啟動(dòng)時(shí)就可以實(shí)現(xiàn)XP的自動(dòng)登錄了



強(qiáng)強(qiáng) 2010-07-04 14:00 發(fā)表評(píng)論
]]>
linux下IPTABLES配置詳解http://www.aygfsteel.com/lyjjq/articles/303964.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Fri, 27 Nov 2009 11:11:00 GMThttp://www.aygfsteel.com/lyjjq/articles/303964.htmlhttp://www.aygfsteel.com/lyjjq/comments/303964.htmlhttp://www.aygfsteel.com/lyjjq/articles/303964.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/303964.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/303964.html
如果你的IPTABLES基礎(chǔ)知識(shí)還不了解,建議先去看看.
開(kāi)始配置
我們來(lái)配置一個(gè)filter表的防火墻.
(1)查看本機(jī)關(guān)于IPTABLES的設(shè)置情況
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
Chain RH-Firewall-1-INPUT (0 references)
target     prot opt source               destination        
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0          
ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0          
ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:25
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
可以看出我在安裝linux時(shí),選擇了有防火墻,并且開(kāi)放了22,80,25端口.
如果你在安裝linux時(shí)沒(méi)有選擇啟動(dòng)防火墻,是這樣的
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
什么規(guī)則都沒(méi)有.
(2)清除原有規(guī)則.
不管你在安裝linux時(shí)是否啟動(dòng)了防火墻,如果你想配置屬于自己的防火墻,那就清除現(xiàn)在filter的所有規(guī)則.
[root@tp ~]# iptables -F      清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則
[root@tp ~]# iptables -X      清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則
我們?cè)趤?lái)看一下
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     
什么都沒(méi)有了吧,和我們?cè)诎惭blinux時(shí)沒(méi)有啟動(dòng)防火墻是一樣的.(提前說(shuō)一句,這些配置就像用命令配置IP一樣,重起就會(huì)失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
 
這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用.
[root@tp ~]# service iptables restart
 
現(xiàn)在IPTABLES配置表里什么配置都沒(méi)有了,那我們開(kāi)始我們的配置吧
(3)設(shè)定預(yù)設(shè)規(guī)則
[root@tp ~]# iptables -P INPUT DROP
[root@tp ~]# iptables -P OUTPUT ACCEPT
[root@tp ~]# iptables -P FORWARD DROP
上面的意思是,當(dāng)超出了IPTABLES里filter表里的兩個(gè)鏈規(guī)則(INPUT,FORWARD)時(shí),不在這兩個(gè)規(guī)則里的數(shù)據(jù)包怎么處理呢,那就是DROP(放棄).應(yīng)該說(shuō)這樣配置是很安全的.我們要控制流入數(shù)據(jù)包
而對(duì)于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT,也就是說(shuō),不在著個(gè)規(guī)則里的包怎么辦呢,那就是通過(guò).
可以看出INPUT,FORWARD兩個(gè)鏈采用的是允許什么包通過(guò),而OUTPUT鏈采用的是不允許什么包通過(guò).
這樣設(shè)置還是挺合理的,當(dāng)然你也可以三個(gè)鏈都DROP,但這樣做我認(rèn)為是沒(méi)有必要的,而且要寫的規(guī)則就會(huì)增加.但如果你只想要有限的幾個(gè)規(guī)則是,如只做WEB服務(wù)器.還是推薦三個(gè)鏈都是DROP.
注:如果你是遠(yuǎn)程SSH登陸的話,當(dāng)你輸入第一個(gè)命令回車的時(shí)候就應(yīng)該掉了.因?yàn)槟銢](méi)有設(shè)置任何規(guī)則.
怎么辦,去本機(jī)操作唄!
(4)添加規(guī)則.
首先添加INPUT鏈,INPUT鏈的默認(rèn)規(guī)則是DROP,所以我們就寫需要ACCETP(通過(guò))的鏈
為了能采用遠(yuǎn)程SSH登陸,我們要開(kāi)啟22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:這個(gè)規(guī)則,如果你把OUTPUT 設(shè)置成DROP的就要寫上這一部,好多人都是望了寫這一部規(guī)則導(dǎo)致,始終無(wú)法SSH.在遠(yuǎn)程一下,是不是好了.
其他的端口也一樣,如果開(kāi)啟了web服務(wù)器,OUTPUT設(shè)置成DROP的話,同樣也要添加一條鏈:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
如果做了WEB服務(wù)器,開(kāi)啟80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了郵件服務(wù)器,開(kāi)啟25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP服務(wù)器,開(kāi)啟21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服務(wù)器,開(kāi)啟53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你還做了其他的服務(wù)器,需要開(kāi)啟哪個(gè)端口,照寫就行了.
上面主要寫的都是INPUT鏈,凡是不在上面的規(guī)則里的,都DROP
允許icmp包通過(guò),也就是允許ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設(shè)置成DROP的話)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT  (INPUT設(shè)置成DROP的話)
允許loopback!(不然會(huì)導(dǎo)致DNS無(wú)法正常關(guān)閉等問(wèn)題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面寫OUTPUT鏈,OUTPUT鏈默認(rèn)規(guī)則是ACCEPT,所以我們就寫需要DROP(放棄)的鏈.
減少不安全的端口連接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木馬會(huì)掃描端口31337到31340(即黑客語(yǔ)言中的 elite 端口)上的服務(wù)。既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來(lái)通信,阻塞這些端口能夠有效地減少你的網(wǎng)絡(luò)上可能被感染的機(jī)器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨(dú)立通信的機(jī)會(huì)
還有其他端口也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應(yīng)被禁止,我在這寫的也不全,有興趣的朋友應(yīng)該去查一下相關(guān)資料.
 
當(dāng)然出入更安全的考慮你也可以包OUTPUT鏈設(shè)置成DROP,那你添加的規(guī)則就多一些,就像上邊添加
允許SSH登陸一樣.照著寫就行了.
 
下面寫一下更加細(xì)致的規(guī)則,就是限制到某臺(tái)機(jī)器
如:我們只允許192.168.0.3的機(jī)器進(jìn)行SSH連接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子網(wǎng)掩碼數(shù).但要記得把 /etc/sysconfig/iptables 里的這一行刪了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因?yàn)樗硎舅械刂范伎梢缘顷?
或采用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再說(shuō)一邊,反是采用命令的方式,只在當(dāng)時(shí)生效,如果想要重起后也起作用,那就要保存.寫入到/etc/sysconfig/iptables文件里.
[root@tp ~]# /etc/rc.d/init.d/iptables save
這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的規(guī)則連接也一樣這么設(shè)置.
 
在下面就是FORWARD鏈,FORWARD鏈的默認(rèn)規(guī)則是DROP,所以我們就寫需要ACCETP(通過(guò))的鏈,對(duì)正在轉(zhuǎn)發(fā)鏈的監(jiān)控.
開(kāi)啟轉(zhuǎn)發(fā)功能,(在做NAT時(shí),FORWARD默認(rèn)規(guī)則是DROP時(shí),必須做)
[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丟棄壞的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
處理IP碎片數(shù)量,防止攻擊,允許每秒100個(gè)
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
設(shè)置ICMP包過(guò)濾,允許每秒1個(gè)包,限制觸發(fā)條件是10個(gè)包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允許ICMP包通過(guò),就是因?yàn)槲以谶@里有限制.
二,配置一個(gè)NAT表放火墻
1,查看本機(jī)關(guān)于NAT的設(shè)置情況
[root@tp rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
SNAT       all  --  192.168.0.0/24       anywhere            to:211.101.46.235
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   
我的NAT已經(jīng)配置好了的(只是提供最簡(jiǎn)單的代理上網(wǎng)功能,還沒(méi)有添加防火墻規(guī)則).關(guān)于怎么配置NAT,參考我的另一篇文章
當(dāng)然你如果還沒(méi)有配置NAT的話,你也不用清除規(guī)則,因?yàn)镹AT在默認(rèn)情況下是什么都沒(méi)有的
如果你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
 
2,添加規(guī)則
添加基本的NAT地址轉(zhuǎn)換,(關(guān)于如何配置NAT可以看我的另一篇文章),
添加規(guī)則,我們只添加DROP鏈.因?yàn)槟J(rèn)鏈全是ACCEPT.
防止外網(wǎng)用內(nèi)網(wǎng)IP欺騙
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

 如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的端口或者IP,(個(gè)人認(rèn)為沒(méi)有太大必要)
例:
禁止與211.101.46.253的所有連接
 [root@tp ~]# iptables -t nat -A PREROUTING  -d 211.101.46.253 -j DROP
禁用FTP(21)端口 
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
這樣寫范圍太大了,我們可以更精確的定義.
[root@tp ~]# iptables -t nat -A PREROUTING  -p tcp --dport 21 -d 211.101.46.253 -j DROP
這樣只禁用211.101.46.253地址的FTP連接,其他連接還可以.如web(80端口)連接.
按照我寫的,你只要找到QQ,MSN等其他軟件的IP地址,和端口,以及基于什么協(xié)議,只要照著寫就行了.
 
最后:
drop非法連接
[root@tp ~]# iptables -A INPUT   -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT  -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP

允許所有已經(jīng)建立的和相關(guān)的連接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@tp ~]# /etc/rc.d/init.d/iptables save

這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用.

[root@tp ~]# service iptables restart


別忘了保存,不行就寫一部保存一次.你可以一邊保存,一邊做實(shí)驗(yàn),看看是否達(dá)到你的要求,
上面的所有規(guī)則我都試過(guò),沒(méi)有問(wèn)題.
寫這篇文章,用了我將近1個(gè)月的時(shí)間.查找資料,自己做實(shí)驗(yàn),希望對(duì)大家有所幫助.如有不全及不完善的地方還請(qǐng)?zhí)岢?
因?yàn)楸酒恼乱耘渲脼橹?關(guān)于IPTABLES的基礎(chǔ)知識(shí)及指令命令說(shuō)明等我會(huì)盡快傳上,當(dāng)然你可以去網(wǎng)上搜索一下,還是很多的.


強(qiáng)強(qiáng) 2009-11-27 19:11 發(fā)表評(píng)論
]]>
IPTables 控制腳本配置文件?http://www.aygfsteel.com/lyjjq/articles/303963.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Fri, 27 Nov 2009 10:54:00 GMThttp://www.aygfsteel.com/lyjjq/articles/303963.htmlhttp://www.aygfsteel.com/lyjjq/comments/303963.htmlhttp://www.aygfsteel.com/lyjjq/articles/303963.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/303963.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/303963.htmlIPTables 控制腳本配置文件?

iptables 初始腳本是由 /etc/sysconfig/iptables-config 配置文件所控制的?。?以?下是包括在這個(gè)文件中的項(xiàng)的列表?:

  • IPTABLES_MODULES — 在防火墻被激活時(shí),指定一組空間獨(dú)立的額外 iptables 模塊來(lái)加載。這可以包括 connection tracking 和 NAT helper。

  • IPTABLES_MODULES_UNLOAD — 在重新啟動(dòng)和停止時(shí)卸載的模塊。這個(gè)項(xiàng)接受以下值:

    • yes — 默認(rèn)的值。這個(gè)選項(xiàng)必須被設(shè)置來(lái)在啟動(dòng)和停止一個(gè)防火墻時(shí)達(dá)到一個(gè)正確的?狀態(tài)。

    • no — 這個(gè)選項(xiàng)只有在卸載 netfilter 模塊出現(xiàn)問(wèn)題時(shí)才應(yīng)該設(shè)置。

  • IPTABLES_SAVE_ON_STOP — 當(dāng)防火墻停止時(shí)把當(dāng)前的防火墻規(guī)則保存到 /etc/sysconfig/iptables。這個(gè)項(xiàng)接受以下值?:

    • yes — 當(dāng)防火墻停止時(shí)把現(xiàn)存的規(guī)則保存到 /etc/sysconfig/iptables,而以?前的版本被保存為 /etc/sysconfig/iptables.save

    • no — 默認(rèn)值。?當(dāng)防火墻停止時(shí)不保存當(dāng)前的規(guī)則。

  • IPTABLES_SAVE_ON_RESTART — 當(dāng)防火墻重新啟動(dòng)時(shí),保存當(dāng)前的防火墻規(guī)則。這個(gè)項(xiàng)接受以下值:

    • yes — 當(dāng)防火墻重新啟動(dòng)時(shí),保存現(xiàn)存的規(guī)則到 /etc/sysconfig/iptables,而以前的版本被存為 /etc/sysconfig/iptables.save

    • no — 默認(rèn)值。防火墻重新啟動(dòng)時(shí),不保存現(xiàn)存的規(guī)則。

  • IPTABLES_SAVE_COUNTER — 保存并恢復(fù)所有chain 和規(guī)則中的數(shù)據(jù)包和字節(jié)計(jì)數(shù)器。這個(gè)項(xiàng)接受以下值:

    • yes — 保存計(jì)數(shù)器的值。

    • no — 默認(rèn)值。不保存計(jì)數(shù)器值。

  • IPTABLES_STATUS_NUMERIC — 輸出的IP地址是數(shù)字的格式,而不是域名和主機(jī)名的形式。?這個(gè)項(xiàng)接受以下值:

    • yes — 默認(rèn)的值。在狀態(tài)輸出中只包括IP地址。

    • no — 在狀態(tài)輸出中返回域名或主機(jī)名。



強(qiáng)強(qiáng) 2009-11-27 18:54 發(fā)表評(píng)論
]]>
釋放linux cachehttp://www.aygfsteel.com/lyjjq/articles/293125.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 29 Aug 2009 13:41:00 GMThttp://www.aygfsteel.com/lyjjq/articles/293125.htmlhttp://www.aygfsteel.com/lyjjq/comments/293125.htmlhttp://www.aygfsteel.com/lyjjq/articles/293125.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/293125.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/293125.html 

因?yàn)長(zhǎng)INUX的內(nèi)核機(jī)制,一般情況下不需要特意去釋放已經(jīng)使用的cache。這些cache起來(lái)的內(nèi)容可以增加文件以及的讀寫速度。
先說(shuō)下free命令怎么看內(nèi)存

[root@yuyii proc]# free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全局角度描述系統(tǒng)使用的內(nèi)存狀況:
total——總物理內(nèi)存
used——已使用內(nèi)存,一般情況這個(gè)值會(huì)比較大,因?yàn)檫@個(gè)值包括了cache+應(yīng)用程序使用的內(nèi)存
free——完全未被使用的內(nèi)存
shared——應(yīng)用程序共享內(nèi)存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個(gè)值增加)
cached——緩存,用于已打開(kāi)的文件
note:
total=used+free
used=buffers+cached (maybe add shared also)

第二行描述應(yīng)用程序的內(nèi)存使用:
前個(gè)值表示-buffers/cache——應(yīng)用程序使用的內(nèi)存大小,used減去緩存值
后個(gè)值表示+buffers/cache——所有可供應(yīng)用程序使用的內(nèi)存大小,free加上緩存值
note:
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

cache釋放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

說(shuō)明,釋放前最好sync一下,防止丟數(shù)據(jù)。



強(qiáng)強(qiáng) 2009-08-29 21:41 發(fā)表評(píng)論
]]>
怎么樣徹底殺死某用戶的所有進(jìn)程 http://www.aygfsteel.com/lyjjq/articles/292912.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Thu, 27 Aug 2009 14:59:00 GMThttp://www.aygfsteel.com/lyjjq/articles/292912.htmlhttp://www.aygfsteel.com/lyjjq/comments/292912.htmlhttp://www.aygfsteel.com/lyjjq/articles/292912.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/292912.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/292912.html  su - username -c 'kill -9 -1'

強(qiáng)強(qiáng) 2009-08-27 22:59 發(fā)表評(píng)論
]]>
apache httpd.conf 配置典型http://www.aygfsteel.com/lyjjq/articles/244772.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Sat, 06 Dec 2008 07:14:00 GMThttp://www.aygfsteel.com/lyjjq/articles/244772.htmlhttp://www.aygfsteel.com/lyjjq/comments/244772.htmlhttp://www.aygfsteel.com/lyjjq/articles/244772.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/244772.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/244772.html#設(shè)置虛擬主機(jī)
<VirtualHost *:80>
ServerAdmin www.adddd.com
DocumentRoot E:/Tomcat/webapps/ROOT
#您的站點(diǎn)項(xiàng)目所在路徑,應(yīng)與tomcat中的目錄設(shè)置相同
ServerName www.adddd.com
Alias /p "F:\\uploadFiles"
<Directory "F:\\uploadFiles">
Options -Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Alias /aaaaaa "F:\\aaaaaa"
<Directory "F:\\aaaaaa\abcc">
Options -Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
JkMount /servlet/* ajp13
#讓Apache支持對(duì)servlet傳送,用以Tomcat解析
JkMount /*.jsp ajp13
#讓Apache支持對(duì)jsp傳送,用以Tomcat解析
JkMount /*.do ajp13
#讓Apache支持對(duì).do傳送,用以Tomcat解析
</VirtualHost>
本文來(lái)自: 腳本之家(www.jb51.net) 詳細(xì)出處參考:http://www.jb51.net/article/15269.htm



強(qiáng)強(qiáng) 2008-12-06 15:14 發(fā)表評(píng)論
]]>
ssh訪問(wèn)限制http://www.aygfsteel.com/lyjjq/articles/234251.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Tue, 14 Oct 2008 07:55:00 GMThttp://www.aygfsteel.com/lyjjq/articles/234251.htmlhttp://www.aygfsteel.com/lyjjq/comments/234251.htmlhttp://www.aygfsteel.com/lyjjq/articles/234251.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/234251.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/234251.html sshd:192.168.168.225:allow
sshd:192.168.168.224:allow


強(qiáng)強(qiáng) 2008-10-14 15:55 發(fā)表評(píng)論
]]>
portmaphttp://www.aygfsteel.com/lyjjq/articles/200694.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Thu, 15 May 2008 10:05:00 GMThttp://www.aygfsteel.com/lyjjq/articles/200694.htmlhttp://www.aygfsteel.com/lyjjq/comments/200694.htmlhttp://www.aygfsteel.com/lyjjq/articles/200694.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/200694.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/200694.html --在222和227上分別執(zhí)行
service portmap start
service nfs start
--在227上執(zhí)行
mount 192.168.168.222:/opt/51point /opt/51point
umount /opt/51point

1.NFS訪問(wèn)

如果你使用NFS網(wǎng)絡(luò)文件系統(tǒng)服務(wù),應(yīng)該確保你的/etc/exports具有最嚴(yán)格的訪問(wèn)權(quán)限設(shè)置,也就是意味著不要使用任何通配符、不允許root寫權(quán)限并且只能安裝為只讀文件系統(tǒng)。編輯文件/etc/exports并加入如下兩行。

/dir/to/export host1.mydomain.com(ro,root_squash)

/dir/to/export host2.mydomain.com(ro,root_squash)

/dir/to/export是你想輸出的目錄,host.mydomain.com是登錄這個(gè)目錄的機(jī)器名,ro意味著mount成只讀系統(tǒng),root_squash禁止root寫入該目錄。為了使改動(dòng)生效,運(yùn)行如下命令。

# /usr/sbin/exportfs -a



強(qiáng)強(qiáng) 2008-05-15 18:05 發(fā)表評(píng)論
]]>
Linux服務(wù)器網(wǎng)卡驅(qū)動(dòng)安裝及故障排除http://www.aygfsteel.com/lyjjq/articles/151199.html強(qiáng)強(qiáng)強(qiáng)強(qiáng)Mon, 08 Oct 2007 23:08:00 GMThttp://www.aygfsteel.com/lyjjq/articles/151199.htmlhttp://www.aygfsteel.com/lyjjq/comments/151199.htmlhttp://www.aygfsteel.com/lyjjq/articles/151199.html#Feedback0http://www.aygfsteel.com/lyjjq/comments/commentRss/151199.htmlhttp://www.aygfsteel.com/lyjjq/services/trackbacks/151199.html

Linux服務(wù)器網(wǎng)卡驅(qū)動(dòng)安裝及故障排除

作者: 出處:計(jì)算機(jī)世界  ( 21 ) 磚  ( 35 ) 好  評(píng)論 ( 0 ) 條  進(jìn)入論壇
更新時(shí)間:2006-05-08 15:11
關(guān) 鍵 詞:Linux
閱讀提示:各種設(shè)備驅(qū)動(dòng)程序構(gòu)成了Linux操作系統(tǒng)代碼的主要部分,而網(wǎng)卡的驅(qū)動(dòng)又是Linux操作系統(tǒng)中極其重要的一塊,本文作一介紹。

網(wǎng)卡是Linux服務(wù)器中最重要網(wǎng)絡(luò)設(shè)備。據(jù)統(tǒng)計(jì),Linux網(wǎng)絡(luò)故障有35%在物理層、 25%在數(shù)據(jù)鏈路層、10%在網(wǎng)絡(luò)層、10%在傳輸層、10%在對(duì)話、7%在表示層、3%在應(yīng)用層。由此可以看出,網(wǎng)絡(luò)故障通常發(fā)生在網(wǎng)絡(luò)七層模型的下三層,即物理層、鏈路層和網(wǎng)絡(luò)層。對(duì)應(yīng)于實(shí)際網(wǎng)絡(luò)也就是使用的網(wǎng)絡(luò)線纜、網(wǎng)卡、交換機(jī)、路由器等設(shè)備故障。Linux的網(wǎng)絡(luò)實(shí)現(xiàn)是模仿FreeBSD的,它支持FreeBSD的帶有擴(kuò)展的Sockets(套接字)和TCP/IP協(xié)議。它支持兩個(gè)主機(jī)間的網(wǎng)絡(luò)連接和Sockets通訊模型,實(shí)現(xiàn)了兩種類型的 Sockets:BSD Sockets和INET Sockets。它為不同的通信模型和服務(wù)質(zhì)量提供了兩種傳輸協(xié)議,即不可靠的、基于消息的UDP傳輸協(xié)議和可靠的、基于流的傳輸協(xié)議TCP,并且都是在 IP網(wǎng)絡(luò)協(xié)議上實(shí)現(xiàn)的。INET sockets是在以上兩個(gè)協(xié)議及IP協(xié)議之上實(shí)現(xiàn)的。

由于交換機(jī)、路由器通常獨(dú)立于Linux或者其他操作系統(tǒng)。網(wǎng)卡設(shè)置故障是造成Linux 服務(wù)器故障最主要原因。可能因?yàn)橛布馁|(zhì)量或性能、磨損老化、人為誤操作、不正確的網(wǎng)絡(luò)設(shè)置、管理問(wèn)題、Linux軟件的BUG、系統(tǒng)受到黑客攻擊和Linux病毒等原因造成。

Linux 服務(wù)器網(wǎng)卡故障排除的思路是:應(yīng)當(dāng)遵循先硬件后軟件的方法。因?yàn)橛布绻霈F(xiàn)物理?yè)p壞那么如何設(shè)定網(wǎng)卡都不能解決故障。解決問(wèn)題的方法可以從自身Linux計(jì)算機(jī)的網(wǎng)卡查起,如果確定硬件沒(méi)有問(wèn)題了,再來(lái)考慮軟件的設(shè)定。

1. 網(wǎng)卡的選擇

一般來(lái)說(shuō),2.4版本以后的 Linux可以支持的網(wǎng)卡芯片組數(shù)量已經(jīng)很完備了,包括著名廠商如:Intel 以及使用廣泛的 RealTek, Via 等網(wǎng)卡芯片都已經(jīng)被支持,所以使用者可以很輕易的設(shè)定好他們的網(wǎng)絡(luò)卡。但是由于Linux發(fā)行版本眾多(目前超過(guò)188個(gè)),使用前最好查看Linux發(fā)行版本的文檔。以Redhat Linux 9.0為例,這個(gè)設(shè)備列表在Ethernet- HOWTO文檔中。另外最直接的方法是查看一個(gè)目錄:/lib/modules/release/kernel/drivers/net,其中 release是內(nèi)核版本,可以使用命令:“uname -r”獲得。對(duì)于Redhat Linux 9.0是2.4.20-8。
            

#ls /lib/modules/2.4.20-8/kernel/drivers/net/

3c501.o atp.o eth16i.o ni52.o smc-ultra.o

3c503.o bonding.o ethertap.o ni65.o starfire.o

3c505.o cs89x0.o ewrk3.o ns83820.o strip.o

3c507.o de4x5.o fc pcmcia sundance.o

3c509.o de600.o fealnx.o pcnet32.o sungem.o

3c515.o de620.o hamachi.o plip.o sunhme.o

3c59x.o defxx.o hamradio ppp_async.o tc35815.o

8139cp.o depca.o hp100.o ppp_deflate.o tg3.o

8139too.o dgrs.o hp.o ppp_generic.o tlan.o

82596.o dl2k.o hp-plus.o ppp_synctty.o tokenring

8390.o dmfe.o irda r8169.o tulip

ac3200.o dummy.o lance.o rcpci.o tulip_old

acenic.o e100 lne390.o sb1000.o tun.o

aironet4500_card.o e1000 lp486e.o shaper.o via-rhine.o

aironet4500_core.o e2100.o mii.o sis900.o wan

aironet4500_proc.o eepro100.o natsemi.o sk98lin wavelan.o

amd8111e.o eepro.o ne2k-pci.o skfp wd.o

appletalk eexpress.o ne3210.o slhc.o winbond-840.o

arlan.o epic100.o ne.o slip.o wireless

arlan-proc.o eql.o netconsole.o smc9194.o wireless_old

at1700.o es3210.o ni5010.o smc-ultra32.o yellowfin.o

可以看到這個(gè)目錄列出所有Linux內(nèi)核支持的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。其中大部分是以太網(wǎng)卡(8139、3COM、Intel)。也有一些是其他類型設(shè)備。對(duì)于初學(xué)者應(yīng)當(dāng)盡量選擇目錄中已經(jīng)列出的網(wǎng)卡。注意以.o 后綴結(jié)束的文件就是驅(qū)動(dòng)程序。而沒(méi)有后綴的是驅(qū)動(dòng)程序目錄(紅色)。

3.為新網(wǎng)卡設(shè)定IP地址

 

在Linux 網(wǎng)絡(luò)設(shè)備在配置時(shí)被賦予別名,該別名由一個(gè)描述性的縮略詞和一個(gè)編號(hào)組成。某種類型的第一個(gè)設(shè)備的編號(hào)為 0,其他設(shè)備依次被編號(hào)為 1、2、3,等。但是網(wǎng)卡并不是最為裸設(shè)備出現(xiàn)在/dev目錄下,而是存在內(nèi)存中。eth0, eth1是以太網(wǎng)卡接口。它們用于大多數(shù)的以太網(wǎng)卡,包括許多并行端口以太網(wǎng)卡。本文主要討論這類網(wǎng)卡。為L(zhǎng)inux以太網(wǎng)卡設(shè)定IP地址的方式非常靈活,你可以選擇適合你工作情況的方法:

(1) 使用ip或ifconfig命令

ifconfig命令是最重要的Linux網(wǎng)絡(luò)命令,最主要的用途是設(shè)定、修改網(wǎng)卡的IP地址,修改網(wǎng)卡ip地址:
#ifconfig eth0 192.168.0.2 netmask 255.255.255.0

默認(rèn)情況下, ifconfig 顯示活動(dòng)的網(wǎng)絡(luò)設(shè)備。給這個(gè)命令添加一個(gè) -a 開(kāi)關(guān)就能看到所有設(shè)備。但是ifconfig命令設(shè)置網(wǎng)絡(luò)設(shè)備的ip地址系統(tǒng)重新啟動(dòng)后設(shè)置會(huì)自動(dòng)失效。所以它主要用于網(wǎng)卡狀態(tài)調(diào)試。假設(shè)您要建立一個(gè)臨時(shí)的網(wǎng)絡(luò)配置以供測(cè)試。您可以使用發(fā)行版本中的工具來(lái)編輯配置,但是需要注意在完成測(cè)試之后,將所有設(shè)置恢復(fù)回去。通過(guò)使用 ifconfig ,我們無(wú)需影響已保存的設(shè)置,就能夠快速地配置網(wǎng)卡。

Ip命令是iproute2軟件包里面的一個(gè)強(qiáng)大的網(wǎng)絡(luò)配置工具,它能夠替代一些傳統(tǒng)的網(wǎng)絡(luò)管理工具。例如:ifconfig、route等。 現(xiàn)在,絕大多數(shù) Linux 發(fā)行版和絕大多數(shù) UNIX都使用古老的arp, ifconfig和route命令。雖然這些工具能夠工作,但它們?cè)贚inux2.2和更高版本的內(nèi)核上顯得有一些落伍。使用iproute2前你應(yīng)該確認(rèn)已經(jīng)安裝了這個(gè)工具。這個(gè)包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下載源代碼安裝。

如果希望在以太網(wǎng)接口eth0上增加一個(gè)地址10.0.0.1,掩碼長(zhǎng)度為24位,標(biāo)準(zhǔn)廣播地址,標(biāo)簽為eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias 

netconfig命令可以設(shè)置網(wǎng)絡(luò)設(shè)備的ip地址,netconfig命令可以永久保存設(shè)置。

使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后會(huì)在命令行下彈出一個(gè)對(duì)話框,這時(shí)即可進(jìn)行設(shè)定。

設(shè)定結(jié)束后用“tab”鍵選擇“OK”即可保存設(shè)置并且退出。然后使用命令:“service network restart “激活即可生效。

使用neat命令需要配置好X window系統(tǒng),在命令行下運(yùn)行“neat”命令后添加IP地址和其他相關(guān)參數(shù)后保存設(shè)置,從新啟動(dòng)網(wǎng)絡(luò)和網(wǎng)絡(luò)服務(wù)或計(jì)算機(jī)。

另外neat命令還有一個(gè)同價(jià)命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存設(shè)置。

除非另行指定,Red Hat Linux 系統(tǒng)中大多數(shù)配置文件都在 /etc 目錄中。網(wǎng)卡相關(guān)的TCP/IP網(wǎng)絡(luò)配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x從0開(kāi)始,第一個(gè)以太網(wǎng)配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi編輯器修改這個(gè)文件,也可以修改網(wǎng)卡IP地址。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE=eth0#設(shè)定網(wǎng)卡的名稱,要跟文件名稱對(duì)應(yīng) #

ONBOOT=yes#是否在開(kāi)機(jī)的的時(shí)候啟動(dòng)網(wǎng)卡#

BOOTPROTO=static #啟動(dòng)的時(shí)候的 IP 取得的協(xié)議,這里是固定的,

如果是動(dòng)態(tài)主機(jī)的話,要改成 dhcp 才行#

IPADDR=192.168.1.2 #IP 地址#

NETMASK=255.255.255.0#子網(wǎng)掩嗎#

NETWORK=192.168.1.0#該網(wǎng)段的第一個(gè) IP#

BROADCAST=192.168.1.255#最后一個(gè)同網(wǎng)段的廣播地址#

GATEWAY=192.168.1.2#網(wǎng)關(guān)地址#

#GATEWAYDEV=eth0

存盤后使用命令:“service network restart “激活即可生效。這個(gè)方法同樣可以永久保存設(shè)置。

(5) 為網(wǎng)卡添加IPV6地址

和Windows系統(tǒng)相比Linux對(duì)Ipv6的支持更好,最早的支持Ipv6的Linux 內(nèi)核是 2.2.xxx。一般Linux基于2.4內(nèi)核的Linux發(fā)行版本都可以直接使用Ipv6,使用前要看系統(tǒng)IPv6模塊是否被加載,如果沒(méi)有的話可以使用命令手工加載,這需要超級(jí)用戶的權(quán)限。然后使用命令檢測(cè),如果顯示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64)證明IPv6已經(jīng)加載。
# modprobe IPv6;#ifconfig -a

如果希望Linux系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載Ipv6模塊,可以在配置文件:/etc/modules.conf中加入一行:
alias net?pf?10 ipv6 # automatically load IPv6 module on demand

4.調(diào)整網(wǎng)卡工作模式

現(xiàn)在的網(wǎng)卡大多是自適應(yīng)工作模式,在配置網(wǎng)卡參數(shù)時(shí)我們很少考慮它的工作模式,有時(shí)發(fā)現(xiàn)一些網(wǎng)卡模塊已經(jīng)加載,但是在某些模式工作不穩(wěn)定。如筆者使用的一塊XXX品牌的雜牌RTL-8139C芯片10/100自適應(yīng)網(wǎng)卡在100兆全雙工狀態(tài)下極其不穩(wěn)定(在Qcheck的TCP和UDP的測(cè)試過(guò)程中,數(shù)據(jù)包遺失率9.12%。)。在Linux環(huán)境下,我們可以使用系統(tǒng)自帶的工具mii-tool 命令來(lái)配置網(wǎng)卡工作模式。顯示Linux服務(wù)器網(wǎng)卡支持的所有以太網(wǎng)卡類型,使用命令:
            

# mii-tool -v

eth0: negotiated 100baseTx-FD, link ok

product info: vendor 00:00:00, model 0 rev 0

basic mode: autonegotiation enabled

basic status: autonegotiation complete, link ok

capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

從以上信息中可以看出,這塊網(wǎng)卡工作在100全雙工自適應(yīng)模式下,“100aseTx-FD”意為100M Full Duplex。這里可以強(qiáng)制網(wǎng)卡工作在100M半工模式下,輸入命令:
#mii-tool –F 100baseTx-HD eth0 

以后恢復(fù)網(wǎng)卡的自適應(yīng)工作模式,輸入命令:
#mii-tool –r eth0 

另外路由器、交換機(jī)、代理服務(wù)器等通信量比較大的關(guān)鍵設(shè)備上,應(yīng)該為它指定正確的工作模式,這樣可以提高通信效率。

5.DHCP客戶端網(wǎng)卡設(shè)定

如果希望使用DHCP是動(dòng)態(tài)主機(jī)配置協(xié)議,這個(gè)協(xié)議用于向計(jì)算機(jī)自動(dòng)提供IP地址,子網(wǎng)掩碼和路由信息。當(dāng)設(shè)備接入這個(gè)局域網(wǎng)時(shí),它們會(huì)向 DHCP 服務(wù)器請(qǐng)求一個(gè) IP 地址。然后 DHCP 服務(wù)器為每個(gè)請(qǐng)求的設(shè)備分配一個(gè)地址,直到分配完該范圍內(nèi)的所有 IP 地址為止。已經(jīng)分配的 IP 地址必須定時(shí)地延長(zhǎng)借用期。這個(gè)延期的過(guò)程稱作 leasing,確保了當(dāng)客戶機(jī)設(shè)備在正常地釋放 IP 地址之前突然從網(wǎng)絡(luò)斷開(kāi)時(shí)被分配的地址可以歸還給服務(wù)器。Linux下配置DHCP客戶端有兩種方法:圖形界面和手工配置。使用圖形界面可以使用neat 命令界面。選中“自動(dòng)獲得IP地址設(shè)置使用DHCP”即可。

通常筆者更喜歡使用選擇手工配置 DHCP 客戶,需要修改 /etc/sysconfig/network 文件來(lái)啟用聯(lián)網(wǎng);并修改 /etc/sysconfig/network-scripts 目錄中每個(gè)網(wǎng)絡(luò)設(shè)備的配置文件。在該目錄中,每個(gè)設(shè)備都有一個(gè)叫做 ifcfg-ethX 的配置文件,ethX是網(wǎng)絡(luò)設(shè)備的名稱。如eth0等。如果你想在引導(dǎo)時(shí)啟動(dòng)聯(lián)網(wǎng),NETWORKING 變量必須 被設(shè)為 yes。除了此處之外/etc/sysconfig/network 文件應(yīng)該包含以下行:
            

NETWORKING=yes

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

6.VPN服務(wù)器網(wǎng)卡設(shè)置

 

VPN是由經(jīng)過(guò)相互授權(quán)的通信雙方在公網(wǎng)上建立的安全通信隧道,數(shù)據(jù)在隧道中進(jìn)行加密傳輸,用于總部與分支機(jī)構(gòu)的安全通信。虛擬專用網(wǎng)絡(luò)是一種新的網(wǎng)絡(luò)技術(shù),用于跨過(guò) Internet 或局域網(wǎng)而安全地訪問(wèn)企業(yè)網(wǎng)。Redhat Linux下的VPN技術(shù)主要有CIPE (Crypto IP Encapsulation:加密 IP 封裝)是主要為 Linux 而開(kāi)發(fā)的 VPN 實(shí)現(xiàn)。CIPE 使用加密的 IP 分組,這些分組被封裝或“包圍”在數(shù)據(jù)報(bào)(UDP)分組中。CIPE 分組被給以目標(biāo)頭信息,并使用默認(rèn)的 CIPE 加密機(jī)制來(lái)加密。CIPE 使用標(biāo)準(zhǔn)的 Blowfish 或 IDEA 加密算法來(lái)支持加密。根據(jù)你所在國(guó)家的加密出口法規(guī)而定,你可以使用默認(rèn)方法(Blowfish)來(lái)加密你的專用網(wǎng)上的所有 CIPE 交通。CIPE 配置可以通過(guò)文本文件、圖形化的網(wǎng)絡(luò)管理工具來(lái)完成。這里以通過(guò)文本文件為例介紹。首先在服務(wù)器和客戶端安裝CIPE軟件。官方網(wǎng)站:http: //sites.inka.de/~ 運(yùn)行CIPE VPN服務(wù)主要需要建立兩個(gè)文件:/etc/sysconfig/network-scripts/ifcfg-cipcbX和 /etc/cipe/options.cipcbX。X 是從0開(kāi)始的遞增數(shù)字。

(1)VPN服務(wù)器端網(wǎng)卡設(shè)置

首先手工建立/etc/sysconfig/network-scripts/ifcfg-cipcb0文件,它是VPN服務(wù)器的虛擬網(wǎng)絡(luò)接口,主要內(nèi)容:

USERCTL=yes #是否允許所有用戶修改配置#

TYPE=CIPE #接口類型#

DEVICE=cipcb0 #給 CIPE 設(shè)備命名#

ONBOOT=yes #系統(tǒng)啟動(dòng)時(shí)激活設(shè)備#

IPADDR=10.0.0.1 #本地虛擬地址#

MYPORT=7777 #通訊端口#

PTPADDR=10.0.0.2 #遠(yuǎn)程虛擬地址#

PEER=0.0.0.0 #本地地址,0.0.0.0 表示接受連續(xù)監(jiān)聽(tīng)#

ME=192.168.1.9 #對(duì)端的 CIPE UDP 地址#

TUNNELDEV=eth0 #隧道穿越設(shè)備#

然后建立/etc/cipe/options.cipcb0文件,這個(gè)文件存放密匙,主要內(nèi)容:

cttl 64 #設(shè)置載體生存時(shí)間值(TTL);推薦的值是64#

maxerr –1 #服務(wù)器錯(cuò)誤掛起時(shí)間#

key 54240266869983357939377846801171299051 #128位密匙#

(2)客戶端網(wǎng)卡的配置

由于CIPE要求服務(wù)器和客戶機(jī)的密匙完全相同所以,首先將密匙文件:options.cipcb從服務(wù)器復(fù)制到客戶機(jī)主機(jī)的/etc/cipe/ 目錄中。

# scp root@192.168.1.9:/etc/cipe/options.cipcb0 /etc/cipe/options.cipcb0

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.1.9' (RSA) to the list of known hosts.

root@192.168.1.9's password:

options.cipcb0 100% |***************************************| 61 00:00

然后使用vi編輯器建立客戶端網(wǎng)卡配置文件:/etc/sysconfig/network-scripts/ifcfg-cipcb0包含以下內(nèi)容:

USERCTL=no #不允許客戶端修改配置#

BOOTPROTO=none

TYPE=CIPE #接口類型#

DEVICE=cipcb0 #給 CIPE 設(shè)備命名#

ONBOOT=yes #系統(tǒng)啟動(dòng)時(shí)激活設(shè)備#

IPADDR=10.0.0.2 #本地虛擬地址#

MYPORT=7777 #通訊端口#

PTPADDR=10.0.0.1 #遠(yuǎn)程虛擬地址#

PEER=192.168.1.29:7777 #VPN服務(wù)器真實(shí)IP地址和端口號(hào)#

ME=192.168.1.9 #對(duì)端的 CIPE UDP 地址#

TUNNELDEV=eth0 #隧道穿越設(shè)備#

MTU=“” #使用缺省設(shè)置#

NETMASK=“” #使用缺省設(shè)置#

NETWORK=“” #使用缺省設(shè)置#

BROADCAST=“” #使用缺省設(shè)置#

(3)使用ifup命令激活VPN網(wǎng)卡
# ifup cipcb0 

這時(shí)VPN通道已經(jīng)開(kāi)啟,可以使用tcpdump等工具檢查。

7.無(wú)線網(wǎng)卡在Linux下安裝

 

隨著Linux網(wǎng)絡(luò)技術(shù)的快速增長(zhǎng),硬件廠商大大加速對(duì)硬件產(chǎn)品對(duì)Linux的技術(shù)支持。使得Linux 支持的無(wú)線網(wǎng)卡的數(shù)量在過(guò)去的一兩年里增長(zhǎng)顯著。一旦在計(jì)算機(jī)中安裝好了無(wú)線局域網(wǎng)卡,首先要做的就是安裝驅(qū)動(dòng)來(lái)讓網(wǎng)卡工作。無(wú)線網(wǎng)卡實(shí)現(xiàn)了IEEE 802.11系列協(xié)議中的一種或多種的物理層(PHY)和媒質(zhì)訪問(wèn)控制子層(MAC)的功能,而驅(qū)動(dòng)是用來(lái)控制無(wú)線網(wǎng)卡,向上提供與以太網(wǎng)一致的接口并提供其他一些無(wú)線局域網(wǎng)特定的管理接口的。對(duì)于不同廠商的不同網(wǎng)卡,還沒(méi)有一種統(tǒng)一的方法可以驅(qū)動(dòng)所有的網(wǎng)卡。首先必須確保內(nèi)核配置中啟動(dòng)了無(wú)線局域網(wǎng)。如果沒(méi)有無(wú)線局域網(wǎng)支持,你應(yīng)該重新配置、編譯內(nèi)核來(lái)啟動(dòng)"Wireless LAN (non-hamradio) Drivers and Wireless Extensions"。

目前,常見(jiàn)的無(wú)線網(wǎng)卡大多為PCMCIA、PCI和USB三種類型,筆者使用最多的是 PCMCIA(Personal Computer Memory Card International Association)接口的無(wú)線網(wǎng)卡。對(duì)于有些設(shè)備,配置無(wú)線連接非常簡(jiǎn)單:只要在您使用的 Linux 發(fā)行版本,插入無(wú)線網(wǎng)卡,在設(shè)置過(guò)程中單擊鼠標(biāo),并輸入正確的聯(lián)網(wǎng)參數(shù)就可以了。通常基于朗訊(Lucent)芯片組的無(wú)線網(wǎng)卡的安裝比較簡(jiǎn)單,筆者使用的Cisco Aironet Wireless 802.11b 在Mandrake 8.2 Linu安裝程序可以順利地找到設(shè)備驅(qū)動(dòng), 使用基于intersil PRISM2-based cards 芯片組的PCMCIA的無(wú)線網(wǎng)卡安裝就比較復(fù)雜了。需要一個(gè)第三方工具安裝。

目前經(jīng)過(guò)www.Linux.org 認(rèn)證的PCMCIA網(wǎng)卡有兩大類。使用基于朗訊(Lucent)芯片組的PCIMCIA無(wú)線網(wǎng)卡和使用基于intersil PRISM2-based cards 芯片組的PCMCIA的無(wú)線網(wǎng)卡見(jiàn)表-1。

Lucent chipset-based cards intersil PRISM2-based cards

Lucent Wavelan/IEEE and Orimoco Linksys(WPC11 v2.5)

Cabletron/Enterays RoarmAbout SMS(2632W)

Compaq(WL110、WL210、 WL215) Compaq(WL100、WL200)

Apple Airport Cisco Aironet Wireless 802.11b(340、350)

IBM High Rate Wireless LAN Dlink DWL-650

HP 802.11bWiewless LAN Nokia

DELL TrueMobile Intel PRO/Wireless 2100

3Com AirConnect SAMSUNG 11Mbps WLAN Card

LA4111 Spectrum24 Wireless LAN PC Card PROXIM LAN PC CARD HARMONY 80211B

NCR WaveLAN/IEEE Adapter

總的來(lái)說(shuō)Linux下無(wú)線網(wǎng)卡的安裝順序一般是:

采取全部安裝方式安裝Linux發(fā)行版本,重新編譯內(nèi)核,并除去任何對(duì)內(nèi)核提供的 PCMCIA 驅(qū)動(dòng)程序的部分。

了解網(wǎng)卡的規(guī)格并且下載并編譯相應(yīng)的 PCMCIA-CS 庫(kù)和驅(qū)動(dòng)程序

下載、編譯并安裝無(wú)線網(wǎng)卡必需的所有驅(qū)動(dòng)程序。這一步驟對(duì)于有些網(wǎng)卡是可選的,而對(duì)于有些網(wǎng)卡是必須執(zhí)行的。做與不做很大程度上取決于您所選的無(wú)線網(wǎng)卡。

修改和無(wú)線網(wǎng)卡的相關(guān)設(shè)定。從新啟動(dòng)Linux系統(tǒng)和網(wǎng)絡(luò)。

設(shè)置無(wú)線網(wǎng)絡(luò)相關(guān)步驟如下:

(1)用“iwconfig”命令來(lái)顯示無(wú)線網(wǎng)卡(eth0、eth1)的信息。在以下的步驟中,用ethX表示無(wú)線網(wǎng)卡的名稱。

(2)設(shè)置無(wú)線網(wǎng)卡的操作模式為Managed:
#iwconfig ethX mode Managed

(3)如果采用了WEP加密,需要設(shè)置WEP密碼:
#iwconfig ethX key password XXXXXX

對(duì)應(yīng)40位和128位加密,password分別為6位和10位的十六進(jìn)制數(shù)字。

(4)設(shè)置SSID,其中ESSID為無(wú)線接入(Access Point)的SSID。
# iwconfig ethX essid ESSID

(5)創(chuàng)建/etc/sysconfig/network/ifcfg-ethX配置文件,使得機(jī)器每次啟動(dòng)時(shí),無(wú)線網(wǎng)卡都會(huì)自動(dòng)獲得IP地址。該文件內(nèi)容如下:
            

BOOTPROTO=‘dhcp’

MTU=‘’

REMOTE_IPADDR=‘’

STARTMODE=‘onboot’

UNIQUE=‘’

(6)啟動(dòng)無(wú)線網(wǎng)卡:
#ifconfig ethX up



強(qiáng)強(qiáng) 2007-10-09 07:08 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 西乌珠穆沁旗| 平山县| 布拖县| 县级市| 金塔县| 吉水县| 栾川县| 沁阳市| 九江县| 密云县| 沁源县| 长白| 姚安县| 湘阴县| 闸北区| 麻栗坡县| 安远县| 明星| 邓州市| 孝义市| 赞皇县| 厦门市| 共和县| 永泰县| 秭归县| 青铜峡市| 福州市| 芦溪县| 象州县| 宜宾市| 承德市| 固阳县| 东丰县| 北宁市| 襄垣县| 白山市| 阜南县| 浦城县| 辽宁省| 平昌县| 濮阳市|