亚洲av无码国产精品夜色午夜 ,久久国产亚洲精品无码,亚洲乱码一区二区三区在线观看http://www.tkk7.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.tkk7.com/lyjjq/articles/399146.html強強強強Sat, 11 May 2013 07:13:00 GMThttp://www.tkk7.com/lyjjq/articles/399146.htmlhttp://www.tkk7.com/lyjjq/comments/399146.htmlhttp://www.tkk7.com/lyjjq/articles/399146.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/399146.htmlhttp://www.tkk7.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


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

2007-09-03 17:46 18213人閱讀 評論(5) 收藏 舉報
fileftp服務器windowslinux
我在LINUX下VSftp建立一個FTP服務器,但從WINDOWS使用FTP時,無法上傳也無法下載!出錯如下

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 回復于:2005-08-08 13:51:37

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

強強 2013-03-29 12:24 發表評論
]]>
Linux curl使用簡單介紹http://www.tkk7.com/lyjjq/articles/394223.html強強強強Mon, 14 Jan 2013 16:35:00 GMThttp://www.tkk7.com/lyjjq/articles/394223.htmlhttp://www.tkk7.com/lyjjq/comments/394223.htmlhttp://www.tkk7.com/lyjjq/articles/394223.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/394223.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/394223.html
1) 二話不說,先從這里開始吧!

$ curl http://www.linuxidc.com

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

2) 嗯,要想把讀過來頁面存下來,是不是要這樣呢?

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

當然可以,但不用這么麻煩的!

用curl的內置option就好,存下http的結果,用這個option: -o

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

這樣,你就可以看到屏幕上出現一個下載頁面進度指示。等進展到100%,自然就 OK咯

3) 什么什么?!訪問不到?肯定是你的proxy沒有設定了。

使用curl的時候,用這個option可以指定http訪問所使用的proxy服務器及其端口: -x

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

4) 訪問有些網站的時候比較討厭,他使用cookie來記錄session信息。

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

我們來學習這個option: -D <— 這個是把http的response里面的cookie信息存到一個特別的文件中去

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

這樣,當頁面被存到page.html的同時,cookie信息也被存到了cookie0001.txt里面了

5)那么,下一次訪問的時候,如何繼續使用上次留下的cookie信息呢?要知道,很多網站都是靠監視你的cookie信息,來判斷你是不是不按規矩訪問他們的網站的。

這次我們使用這個option來把上次的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操作,去訪問網頁了!

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

對了!是瀏覽器信息

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

好在curl給我們提供了一個有用的option,可以讓我們隨意指定自己這次訪問所宣稱的自己的瀏覽器信息: -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

這樣,服務器端接到訪問的要求,會認為你是一個運行在Windows 2000上的 IE6.0,嘿嘿嘿,其實也許你用的是蘋果機呢!

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

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

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

幸好curl給我們提供了設定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

這樣,就可以騙對方的服務器,你是從mail.linuxidc.com點擊某個鏈接過來的了,呵呵呵

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

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

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

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

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

這樣,就可以按照服務器上的文件名,自動存在本地了!

再來一個更好用的。

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

不干!

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

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

呵呵呵,厲害吧?! ~

9)再來,我們繼續講解下載!

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

這樣產生的下載,就是

~zzh/001.JPG

~zzh/002.JPG

...

~zzh/201.JPG

~nick/001.JPG

~nick/002.JPG

...

~nick/201.JPG

夠方便的了吧?哈哈哈

咦?高興得太早了。

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

沒關系,我們還有更狠的!

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

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

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

這樣一來,就不怕文件重名啦,呵呵

9)繼續講下載

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

比如我們下載screen1.JPG中,突然掉線了,我們就可以這樣開始續傳

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

當然,你不要拿個flashget下載了一半的文件來糊弄我    別的下載軟件的半截文件可不一定能用哦 ~

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

舉例說明

比如我們有一個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

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

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

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

或者大家熟悉的

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

10) 說完了下載,接下來自然該講上傳咯上傳的option是 -T

比如我們向ftp傳一個文件:

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

當然,向http服務器上傳文件也可以比如

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

注意,這時候,使用的協議是HTTP的PUT method

剛才說到PUT,嘿嘿,自然讓老服想起來了其他幾種methos還沒講呢! GET和POST都不能忘哦。

http提交一個表單,比較常用的是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

就相當于向這個站點發出一次登陸申請    ~

到底該用GET模式還是POST模式,要看對面服務器的程序設定。

一點需要注意的是,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>

這樣一個HTTP表單,我們要用curl進行模擬,就該是這樣的語法:

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

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

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

再比如,你還可以用curl通過dict協議去查字典    ~

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


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

2.if條件語句
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 循環
#!/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 循環
#!/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兩條命令用于建立無限循環結構的需要,
它們的返回狀態分別是總為0或總為非0

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

6.無條件控制語句break和continue
break 用于立即終止當前循環的執行,而contiune用于不執行循環中后面的語句
而立即開始下一個循環的執行。這兩個語句只有放在do和done之間才有效。

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

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

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

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

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

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

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

強強 2012-10-20 09:25 發表評論
]]>
如何編寫一個shell腳本 http://www.tkk7.com/lyjjq/articles/389904.html強強強強Sat, 20 Oct 2012 01:25:00 GMThttp://www.tkk7.com/lyjjq/articles/389904.htmlhttp://www.tkk7.com/lyjjq/comments/389904.htmlhttp://www.tkk7.com/lyjjq/articles/389904.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/389904.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/389904.html
  本文結合大量實例闡述如何編寫一個shell腳本。

  為什么要進行shell編程

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

  下面,讓我們一起來看看shell是如何工作的:

  建立一個腳本

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

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

  #!/bin/sh

  符號#!用來告訴系統它后面的參數是用來執行該文件的程序。在這個例子中我們使用/bin/sh來執行程序。

  當編輯好腳本時,如果要執行該腳本,還必須使其可執行。

  要使腳本可執行:

  chmod +x filename

  然后,您可以通過輸入: ./filename 來執行您的腳本。

  注釋

  在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程序中使用注釋。如果您使用了注釋,那么即使相當長的時間內沒有使用該腳本,您也能在很短的時間內明白該腳本的作用及工作原理。

  變量

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

  變量名=值

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

  #!/bin/sh
  #對變量賦值:
  a="hello world"
  # 現在打印變量a的內容:
  echo "A is:"
  echo $a

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

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

  num=2
  echo "this is the $numnd"

  這并不會打印出"this is the 2nd",而僅僅打印"this is the ",因為shell會去搜索變量numnd的值,但是這個變量時沒有值的。可以使用花括號來告訴shell我們要打印的是num變量:

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

  這將打印: this is the 2nd

  有許多變量是系統自動設定的,這將在后面使用這些變量時進行討論。

  如果您需要處理數學表達式,那么您需要使用諸如expr等程序(見下面)。

  除了一般的僅在程序內有效的shell變量以外,還有環境變量。由export關鍵字處理過的變量叫做環境變量。我們不對環境變量進行討論,因為通常情況下僅僅在登錄腳本中使用環境變量。

  Shell命令和流程控制

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

  1)Unix 命令:

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

  常用命令語法及功能

  echo "some text": 將文字內容打印在屏幕上

  ls: 文件列表

  wc -l filewc -w filewc -c file&: 計算文件行數計算文件中的單詞數計算文件中的字符數

  cp sourcefile destfile&: 文件拷貝

  mv oldname newname : 重命名文件或移動文件

  rm file&: 刪除文件

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

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

  cat file.txt: 輸出文件內容到標準輸出設備(屏幕)上

  file somefile&: 得到文件類型

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

  sort file.txt: 對file.txt文件中的行進行排序

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

  expr: 進行數學運算Example: add 2 and 3expr 2 "+" 3

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

  tee: 將數據輸出到標準輸出設備(屏幕) 和文件比如:somecommand | tee outfile

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

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

  head file&: 打印文本文件開頭幾行

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

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

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

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

  這些不是系統命令,但是他們真的很重要。

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

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

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

  3) 流程控制

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

  執行man test可以查看所有測試表達式可以比較和判斷的類型。
  直接執行以下腳本:
  #!/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進行了比較。

  快捷操作符

  熟悉C語言的朋友可能會很喜歡下面的表達式:

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

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

#!/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" 一行。如果不可讀則或操作生效,打印錯誤信息后腳本退出。這里有個問題,那就是我們必須有兩個命令:

  -打印錯誤信息
  -退出程序

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

  case表達式可以用來匹配一個給定的字符串,而不是數字。

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

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

file lf.gz

  這將返回:

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

我們利用這一點寫了一個叫做smartzip的腳本,該腳本可以自動解壓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

  您可能注意到我們在這里使用了一個特殊的變量$1。該變量包含了傳遞給該程序的第一個參數值。也就是說,當我們運行:

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

  select 表達式是一種bash的擴展應用,尤其擅長于交互式使用。用戶可以從一組不同的值中進行選擇。

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

下面是一個例子:

#!/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"

下面是該腳本運行的結果:

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

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

while ...; do
....
done

while-loop 將運行直到表達式測試為真。will run while the expression that we test for is true. 關鍵字"break" 用來跳出循環。而關鍵字"continue"用來不執行余下的部分而直接跳到下一個循環。

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

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

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

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

下面是一個更為有用的腳本showrpm,其功能是打印一些RPM包的統計信息:

#!/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

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


引號

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

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

單引號更嚴格一些。它可以防止任何變量擴展。雙引號可以防止通配符擴展但允許變量擴展。

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

運行結果為:
/bin/bash
/bin/bash
$SHELL

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

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

當要將幾行文字傳遞給一個命令時,here document.(譯者注:目前還沒有見到過對該詞適合的翻譯)一種不錯的方法。對每個腳本寫一段幫助性的文字是很有用的,此時如果我們四有那個here document.就不必用echo函數一行行輸出。 一個 "Here document.quot; 以 << 開頭,后面接上一個字符串,這個字符串還必須出現在here document.末尾。下面是一個例子,在該例子中,我們對多個文件進行重命名,并且使用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

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

函數

如果您寫了一些稍微復雜一些的程序,您就會發現在程序中可能在幾個地方使用了相同的代碼,并且您也會發現,如果我們使用了函數,會方便很多。一個函數是這個樣子的:

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

您需要在每個程序的開始對函數進行聲明。

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

#!/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"
#

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

  命令行參數

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

  有好多方法可以實現對輸入參數的分析,但是下面的使用case表達式的例子無遺是一個不錯的方法。

#!/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"

您可以這樣運行該腳本:
cmdparser -l hello -f -- -somefile1 somefile2

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

  這個腳本是如何工作的呢?腳本首先在所有輸入命令行參數中進行循環,將輸入參數與case表達式進行比較,如果匹配則設置一個變量并且移除該參數。根據unix系統的慣例,首先輸入的應該是包含減號的參數。

  實例

  一般編程步驟

  現在我們來討論編寫一個腳本的一般步驟。任何優秀的腳本都應該具有幫助和輸入參數。并且寫一個偽腳本(framework.sh),該腳本包含了大多數腳本都需要的框架結構,是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執行一下copy命令:
cp framework.sh myscript
然后再插入自己的函數。

  讓我們再看兩個例子:

  二進制到十進制的轉換

  腳本 b2d 將二進制數 (比如 1101) 轉換為相應的十進制數。這也是一個用expr命令進行數學運算的例子:

#!/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"
#
  該腳本使用的算法是利用十進制和二進制數權值 (1,2,4,8,16,..),比如二進制"10"可以這樣轉換成十進制:
  0 * 1 + 1 * 2 = 2
  為了得到單個的二進制數我們是用了lastchar 函數。該函數使用wc -c計算字符個數,然后使用cut命令取出末尾一個字符。Chop函數的功能則是移除最后一個字符。

  文件循環程序
  或許您是想將所有發出的郵件保存到一個文件中的人們中的一員,但是在過了幾個月以后,這個文件可能會變得很大以至于使對該文件的訪問速度變慢。下面的腳本rotatefile 可以解決這個問題。這個腳本可以重命名郵件保存文件(假設為outmail)為outmail.1,而對于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

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

  調試

  最簡單的調試命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方打印任何變量值。這也是絕大多數的shell程序員要花費80%的時間來調試程序的原因。Shell程序的好處在于不需要重新編譯,插入一個echo命令也不需要多少時間。

  shell也有一個真實的調試模式。如果在腳本"strangescript" 中有錯誤,您可以這樣來進行調試:
  sh -x strangescript
  這將執行該腳本并顯示所有變量的值。
  shell還有一個不需要執行腳本只是檢查語法的模式。可以這樣使用:
  sh -n your_script
  這將返回所有語法錯誤。
  我們希望您現在可以開始寫您自己的shell腳本,希望您玩得開心。


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

  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.

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

  您好!

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

  , sorry, no mailbox here by that name

  錯誤原因

  --- 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" 原信件發件人地址

  To: 原信件收件人地址

  Subject: test 原信件主題

  Date: Thu, 23 Dec 2004 09:40:58 +0800 原信件發送時間

  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 產生的錯誤回彈信,由于各個郵件系統的錯誤回彈信表達方式不同,所以同一個原因可能因郵件系統的不同而有不同的描述。以下是一些常見的退信分析:(Winmail Server 退信分析)

  (1)收件人地址不存在

  錯誤原因: 收件人郵箱帳號不存在或收件方服務器無法找到收件人郵件地址

  可能出現的關鍵字: 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

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

  Winmail Server 退信實例:no mailbox here by that name

  其他系統退信實例:

  ***@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)收件人郵箱被禁用

  錯誤原因: 收件人用戶郵箱被禁用或者不可以使用,可能長時間未登陸使用過,或者未交費等原因導致郵箱帳號被凍結

  可能出現的關鍵字: disabled

  解決方法: 聯系收件人,請他聯系他的郵箱系統管理員確認收件人郵箱問題

  Winmail Server 退信實例:sorry, the mailbox has disabled.

  其他系統退信實例:

  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)收件人信箱空間不足

  錯誤原因: 接收方已經沒有足夠郵箱空間接受新郵件

  可能出現的關鍵字: mailbox is full、exceed、hard limit

  解決方法: 收件人郵箱已經沒有足夠的剩余空間接收您的郵件,請使用其他的方式與收件人聯系,請接收方先清除郵箱中沒用的郵件,騰出空間接收新郵件

  Winmail Server 退信實例:mail size/count over quota

  其他系統退信實例:

  ***@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)郵件被過濾

  錯誤原因: 對方對接受的郵件作了限制,您的郵件超出了對方的要求或是對方服務器的要求。

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

  解決方法: 出現 not Welcome/message blocked/content rejected 等信息的原因是收件人在郵箱中設定了一些過濾規則,而你所發的郵件中的信息如"發件人姓名"、"發件人地址"、"郵件主題"、"郵件正文"、"附件"等中的信息符合該收件人或收件人的服務商設置的過濾規則,因此導致郵件在投遞后被對方系統拒收。

  請把自己所投遞郵件做適當的修改,如發送的"郵件主題"等。如果嘗試過還是不能正常發送,最好通過其他方式聯系收件人,把退信信息提供給收件人查詢具體是符合了什么樣的過濾規則,確認后進行適當修改就可以正常發送了

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

  其他系統退信實例:

  ****@SINA.COM : Failure reply of RCPT to *****@SINA.COM from 202.106.182.168, 445 服務器拒絕 - 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)域名解析出錯

  錯誤原因: 對方服務器或者對方域名有錯誤,或者域名信息無法正確的被internet的DNS系統解析,無法找到對方的郵件服務器IP,導致投遞出錯

  可能出現的關鍵字: Host、not found、bad host、domain、unreachable、Connection refused

  解決方法: 首先請檢查輸入收件人地址時的是否存在拼寫錯誤,確認錯誤后重新發送就可以解決了。相當部分退信存在這樣的情況。

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

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

  其他系統退信實例:

  <*****@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)無法識別的命令

  錯誤原因: 無法識別錯誤命令(郵件系統指令)

  可能出現的關鍵字: error in command、syntax error、Error email address format

  解決方法: 其原因多數是由于發件人使用的軟件或者發送系統在投遞連接對方系統時候,對方系統無法識別此軟件或者發送方系統的指令導致發送錯誤。

  請使用常用的軟件如Outlook Express或者Foxmail等進行郵件編輯,或者直接使用WEB的方式發送郵件,可以減少出錯的機會。

  有時由于發送者填寫接收者地址時候輸入了非法字符如“"”“/”“”“^”等非法字符也可以導致此類無法成功發送。

  Winmail Server 退信實例:syntax error

  其他系統退信實例:

  <*****@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)發送的郵件大小超過最大限制

  錯誤原因: 由于發送人的郵件過大導致接收人的郵件系統服務商拒收此郵件

  可能出現的關鍵字: exceeds、maximum message size、Data size

  解決方法: 通常此類錯誤都是由于收件人郵件系統不支持他們系統中的用戶接收太大的郵件。因此用戶可以把過大的郵件附件使用outlook express的郵件分拆功能進行分拆發送。通常后面跟的數字就是對方系統所允許接收的單個郵件的大小。

  Winmail Server 退信實例:sorry, the message size exceeds databytes limit

  其他系統退信實例:

  <*****@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)郵件被拒收

  錯誤原因: 由于發送方的郵件被接收方的系統服務商拒收此郵件

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

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

  當遇到此情況,您可以聯系我們的技術支持,把您接收到的退信內容轉發給我們。或聯系對方系統管理員,盡快解決此類屏蔽問題。Email郵件頭揭密

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

  退信實例:

  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)連接對方服務器失敗

  錯誤原因: 在系統發送郵件時查找到了對方的郵件服務器,但由于internet網絡不正常或者對方服務器的 mta 服務不正常,而不能正常獲得對方郵件服務器的回應,即對方服務器無響應.

  可能出現的關鍵字: Connection timed out、Connect to鬃?鬃.鬃.鬃:25 failure

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

  解決方法: 通過nslookup找到對方域名的MX記錄指向的郵件服務器IP,通過 telnet 對方服務器的25端口等方式確認是網絡連接不正常還是由于對方服務器的25端口沒有響應。一般說來,無論是網絡故障還是對方系統故障,都能對方系統管理員很快被發現和恢復,所以可以選擇再次發送進行嘗試。對于部分國外的郵件服務商,出現這種情況持續的時間會比較長,如果嘗試超過1天都不能成功,建議先使用其他方式與收件人聯系。

  確定您的機器能不能正確的連接到外面的主機,最后測試能不能連接發送不成功的主機(出現 220 開頭字串提示)。

  在命令行方式下執行如下命令:

  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 退信實例:connect remote host error (xxx.xxx.xxx.xxx : 25)

  其他系統退信實例:

  <*****@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)單封郵件收件人數超過限制

  錯誤原因: 單封郵件有過多收件人

  可能出現的關鍵字: Too many、less than xx

  解決方法: 郵件系統會對每一個郵件投遞者每次連接時候的同一封郵件的多投用戶數量,因此當用戶使用群發時候就會出現對方拒收或者錯誤的信息返回如"Too many recipients"信息。因此用戶請再每一封郵件投遞時候,盡量使得每次的接收用戶數量控制在20~30人左右,如果接收量比較多的情況,可以分開多幾次發送。

  Winmail Server 退信實例:sorry, too many recipients

  其他系統退信實例:

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

  (11)反垃圾郵件列表

  錯誤原因: 發信服務器地址被加入到某些反垃圾郵件組織的黑名單中,導致拒收

  可能出現的關鍵字: Mail from ***.***.***.*** refused, see http://**************

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

  當遇到此情況,您可以聯系我們的技術支持,把您接收到的退信內容轉發給我們。我們會聯系反垃圾郵件組織,盡力去解決此類問題。RBL是什么?

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

  退信實例:

  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反向解析

  錯誤原因: 某些郵件服務器為了防垃圾郵件的需要,接收郵件時進行對發信人的email地址進行DNS反向查詢,對于公網存在正確DNS解析的發件人的郵件放行,而對于DNS反向解析不正確的地址予以攔截。

  可能出現的關鍵字: can't verify FROM domain in DNS、domain does not exist

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

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

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

  退信實例:

  ***@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



強強 2012-07-03 07:21 發表評論
]]>
postfix 郵件維護http://www.tkk7.com/lyjjq/articles/377033.html強強強強Sun, 29 Apr 2012 10:38:00 GMThttp://www.tkk7.com/lyjjq/articles/377033.htmlhttp://www.tkk7.com/lyjjq/comments/377033.htmlhttp://www.tkk7.com/lyjjq/articles/377033.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/377033.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/377033.htmlpostfix 如何刪除隊列中的郵件

# postfix 如何刪除隊列中的郵件

linux @ 06 二月 2009,

[root@mail ~]# mailq 查看隊列郵件

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

[注意:大小寫有區別,請注意大小寫!]

網上看到,Postfix 郵件隊列管理的幾個 Perl 小程序,pfdel.pl 是用來刪除隊列中指定用戶的郵件的,luserdel.pl 是用來刪除隊列中無效用戶的郵件的,moqdel.pl 是用來刪除隊列中郵箱配額已滿的用戶的郵件的,jmoqdel.pl 是刪除郵箱配額已滿的用戶的垃圾郵件箱的。我裝的是EMOS1.3,找不到這幾個小程序。

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

參考官網寫個腳本也不行,應該多研究下還可以的,腳本如下:

Q: 刪除郵件隊列

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 ‘*!’ |

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

szmaxoni@public.szptt.net.cn   刪除郵件只需要命令postsuper -d 2AB97F815E即可。應該通過管道可以簡單實現,但是我對使用管道不熟悉,只好多走兩步了……

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

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

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

for i in `cat dellist`;

do  postsuper -d $i;

done

[root@mail mywang]# sh delmail.sh

postfix有四種不同的郵件隊列,并且由隊列管理進程統一進行管理:


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

  2. incoming:放置正在到達或隊列管理進程尚未發現的郵件。

  3. active:放置隊列管理進程已經打開了并正準備投遞的郵件,該隊列有長度的限制。

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


postfix日常維護

啟動postfix        postfix start

停止postfix        postfix stop

重新讀取postfix配置文件     postfix reload



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


查看隊列郵件    postqueue -p 或 mailqpostqueue -p |tail


使用postsuper 來維護隊列。一般是先用mailq查看隊列里的郵件,找到對應的id,然后用postsuper -d來刪除。例如id是0EAF3A9B 那么postsuper -d 0EAF3A9B


Q: 刪除郵件隊列


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


詳細要看mailq和postsuper的用法


修復隊列以及任何權限錯誤

postfix check

查看郵件系統日志

tail -f /var/log/maillog



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


強強 2012-02-04 21:39 發表評論
]]>
Apache 的標準中規定了4類日志:*http://www.tkk7.com/lyjjq/articles/369100.html強強強強Tue, 31 Jan 2012 09:28:00 GMThttp://www.tkk7.com/lyjjq/articles/369100.htmlhttp://www.tkk7.com/lyjjq/comments/369100.htmlhttp://www.tkk7.com/lyjjq/articles/369100.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/369100.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/369100.html錯誤日志
*
訪問日志
*
傳輸日志
*
Cookie日志

其中:傳輸日志和Cookie日志被Apache
2.0認為已經過時。所以本節僅僅討論錯誤日志和訪問日志。同時錯誤日志和訪問日志被Apache
2.0默認設置。
能從日志中獲取哪些信息

*
訪問日志
o
訪問服務器的遠程機器的地址:可以得知瀏覽者來自何方
o
瀏覽者訪問的資源:可以得知網站中的哪些部分最受歡迎
o
瀏覽者的瀏覽時間:可以從瀏覽時間(如工作時間或休閑時間)對網站內容進行調整
o
瀏覽者使用的瀏覽器:可以根據大多數瀏覽者使用的瀏覽器對站點進行優化
*
錯誤日志
o
獲知失效鏈接
o
獲知
CGI
錯誤
o
獲知用戶認證錯誤

配置錯誤日志

錯誤日志記錄了服務器運行期間遇到的各種錯誤,以及一些普通的診斷信息,比如服務器何時啟動、何時關閉等。
錯誤日志配置指令
ErrorLog

ErrorLog
指令指定了當服務器遇到錯誤時記錄錯誤日志的文件名。其格式為:

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

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

格式2實現管道日志,它指定一個命令來處理錯誤日志。
Apache
編譯時默認的錯誤日志可以使用如下命令獲得:

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

LogLevel

LogLevel
用于調整記于錯誤日志中的信息的詳細程度。其格式為:

LogLevel 錯誤日志記錄等級

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

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

配置錯誤日志相對簡單,只要說明日志文件的存放路徑和錯誤日志記錄等級即可。

從 Ubuntu 中的
/etc/apache2/apache2.conf 中可知,默認的錯誤日志存放在
/var/log/apache2/error.log

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

您可以在
/etc/apache2/apache2.conf
中設置錯誤日志記錄等級,也可以在相應的虛擬主機的配置文件中設置。
錯誤日志文件舉例

下面是一個錯誤日志文件的截取。

$
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

從文件內容可以看出,每一行記錄了一個錯誤。格式為:

日期和時間 錯誤等級
錯誤消息

配置訪問日志
CustomLog

CustomLog
指令用來對服務器的請求進行日志記錄。格式為:

格式1:CustomLog 訪問日志文件名
記錄格式說明串|格式昵稱
格式2:CustomLog "|管道程序名 訪問日志文件名"
記錄格式說明串|格式昵稱

其中:

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


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

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

LogFormat

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

LogFormat
指令用于定義訪問日志的記錄格式。格式為:

LogFormat "記錄格式說明串" 格式昵稱


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

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

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

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

若使用3個文件分別進行記錄,配置為:

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"

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

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

下面是從一個訪問日志文件中截取的 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"

將各項信息分離于下表所示。
格式說明符 舉例1 舉例2 舉例3
%h 192.168.0.66
192.168.1.77 192.168.0.66
%l -(表示沒有取得信息) - -
%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”
由于整個格式說明字符串是放在”“之內的,所以若要輸出的日志信息內含有引號,需要將”前加轉義符\。例如:若要輸出子串”GET
/apache_pb.gif HTTP/1.0”,則格式字符串為\”%r\”。

#不記錄圖片,js,css訪問日志


<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




強強 2012-01-31 17:28 發表評論
]]>
Postfix的配置詳解 http://www.tkk7.com/lyjjq/articles/366100.html強強強強Sun, 11 Dec 2011 11:36:00 GMThttp://www.tkk7.com/lyjjq/articles/366100.htmlhttp://www.tkk7.com/lyjjq/comments/366100.htmlhttp://www.tkk7.com/lyjjq/articles/366100.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/366100.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/366100.html
4.1 postfix的配置文件結構

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

[root@mail postfix]# ls

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

這四個文件就是postfix最基本的配置文件,它們的區別在于:

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

Install.cf:包含安裝過程中安裝程序產生的postfix初始化設置。

master.cf:是postfix的master進程的配置文件,該文件中的每一行都是用來配置postfix的組件進程的運行方式。

postfix-script:包裝了一些postfix命令,以便我們在linux環境中安全地執行這些postfix命令。

4.2 postfix的基本配置

postfix大約有100個配置參數,這些參數都可以通過main.cf 指定。配置的格式是這樣的,用等號連接參數和參數的值。如:

myhostname = mail.mydomain.com

等號的左邊是參數的名稱,等號的右邊是參數的值; 當然,我們也可以在參數的前面加上$來引用該參數,如:

myorigin = $myhostname

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

1. myorigin

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

myorigin = domain.com

當然我們也可以引用其他參數,如:

myorigin = $mydomain

2. mydestination

mydestination參數指定postfix接收郵件時收件人的域名,換句話說,也就是你的postfix系統要接收什么樣的郵件。比如:你的用戶的郵件地址為user@domain.com, 也就是你的域為domain.com, 則你就需要接收所有收件人為user_name@domain.com的郵件。與myorigin一樣,缺省地,postfix使用本地主機名作為 mydestination。如:

mydestination = $mydomain

mydestination = domain.com

3. notify_classes

在postfix系統中,必須指定一個postfix系統管理員的別名指向一個用戶,

只有這樣,在用戶遇到問題時才有報告的對象,postfix也才能將系統的問題報告給管理員。notify_classes參數就是用來指定向postfix管理員報告錯誤時的信息級別。共有以下幾種級別:

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

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

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

policy:將由于UCE規則限制而被拒絕的用戶請求發送給postfix管理員,包含整個SMTP會話的內容。

protocol:將協議的錯誤信息或用戶企圖執行不支持的命令的記錄發送給postfix管理員。同樣包含整個SMTP會話的內容。

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

software:將由于軟件錯誤而導致不可投遞的錯誤信息發送給postfix管理員。

缺省值為:

notify_classes = resource, software

4.myhostname

myhostname 參數指定運行postfix郵件系統的主機的主機名。缺省地,該值被設定為本地機器名。你也可以指定該值,需要注意的是,要指定完整的主機名。如:

myhostname = mail.domain.com

5.mydomain

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

mydomain = domain.com

6.mynetworks

mynetworks 參數指定你所在的網絡的網絡地址,postfix系統根據其值來區別用戶是遠程的還是本地的,如果是本地網絡用戶則允許其訪問。你可以用標準的A、B、C類網絡地址,也可以用CIDR(無類域間路由)地址來表示,如:

192.168.1.0/24

192.168.1.0/26

7.inet_interfaces

inet_interfaces 參數指定postfix系統監聽的網絡接口。缺省地,postfix監聽所有的網絡接口。如果你的postfix運行在一個虛擬的ip地址上,則必須指定其監聽的地址。如:

inet_interfaces = all

inet_interface = 192.168.1.1

4.3 postfix的UCE(unsolicited commercial email)控制

所謂UCE控制就是指控制postfix接收或轉發來自于什么地方的郵件。

缺省地,postfix轉發符合以下條件的郵件:

* 來自客戶端ip地址符合$mynetworks的郵件。

* 來自客戶端主機名符合$relay_domains及其子域的郵件。

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

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

* 目的地為$inet_interfaces的郵件。

* 目的地為$mydestination的郵件。

* 目的地為$virtual_maps的郵件。

但是我們也可以通過下面的規則來實現更強大的控制功能。

1. 信頭過濾

通過header_checks參數限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。可以指定一個或多個查詢列表,如果新郵件的信頭符合列表中的某一項則拒絕該接收郵件。如:

header_checks = regexp:/etc/postfix/header_checks

header_checks = pcre:/etc/postfix/header_checks

缺省地,postfix不進行信頭過濾。

2.客戶端主機名/地址限制

通過smtpd_client_restrictions參數限制可以向postfix發起SMTP 連接的客戶端的主機名或ip地址。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有:

reject_unknown_client:如果客戶端的ip 地址在DNS中沒有PTR記錄則拒絕轉發該客戶端的連接請求。可以用 unknown_client_reject_code參數指定返回給客戶機的錯誤代碼(缺省為450)。如果你有用戶沒有作DNS記錄則不要啟用該選項。

permit_mynetworks:如果客戶端的ip地址符合$mynetworks參數定義的范圍則接受該客戶端的連接請求,并轉發該郵件。

check_client_access maptype:mapname:根據客戶端的主機名、父域名、ip地址或屬于的網絡搜索access數據庫。如果搜索的結果為REJECT 或者 '[45]XX text' 則拒絕該客戶端的連接請求;如果搜索的結果為OK、RELAY 或數字則接受該客戶端的連接請求,并轉發該郵件。。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省為 554)。

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

示例:

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

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client

該參數的缺省值為:

smtpd_client_restrictions =

也即接收來自任何客戶端的SMTP連接。

3. 是否請求HELO命令

可以通過smtpd_helo_required參數指定客戶端在SMTP會話的開始是否發送一個HELO命令。你可以指定該參數的值為yes或no。缺省值為:

smtpd_helo_required = no

4. HELO主機名限制

可以通過smtpd_helo_restrictions參數指定客戶端在執行HELO命令時發送給postfix的主機名。缺省地, postfix 接收客戶端發送的任意形式的主機名。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有:

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

permit_naked_ip_address:RFC要求客戶端的HELO命令包含的ip地址放在方括號內,你可以用permit_naked_ip_address參數取消該限制。因為有的mail客戶端不遵守該RFC的規定。

reject_unknown_hostname:如果客戶端執行HELO命令時的主機名在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省為450)。

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

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

示例:

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname

5. RFC 821信頭限制

RFC 821對郵件的信頭做了嚴格的規定,但是廣泛使用的sendmail并不支

持該規定,所以對于該參數我們只能說不,即:

strict_rfc821_envelopes = no

6. 通過發件人地址進行限制

可以用smtpd_sender_restrictions參數通過發件人在執行MAIL FROM命令時提供的地址進行限制。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有:

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

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

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

缺省地,postfix接受來自任何發件人的郵件。

示例:

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

7. 通過收件人地址進行過濾

可以用smtpd_recipient_restrictions參數通過發件人在執行RCPT TO命令時提供的地址進行限制。缺省值為:

smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有:

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

* 客戶端主機名符合$relay_domains及其子域

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

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

接受SMTP連接請求:

* 解析后的目標地址符合$relay_domains及其子域

* 解析后的目標地址符合$inet_interfaces、$mydestination或$virtual_maps

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

* 解析后的目標地址符合$relay_domains及其子域

* 解析后的目標地址符合$inet_interfaces、$mydestination或$virtual_maps

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

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

reject_non_fqdn_recipient:如果發件人在執行RCPT TO命令時提供的地址

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

4.4 posftfix的性能控制

之所以對postfix的性能進行控制,是為了在遇到郵件風暴時保證postfix可以正常運行。通常,我們可以通過對下列postfix 參數的配置來調節postfix的性能,這些參數都是通過mail.cf配置文件進行配置的,修改以后不要忘了運行postfix reload命令來使配置生效。

1. 進程數限制

可以通過default_process_limit 參數來控制postfix系統同時可以運行的最大進程數目。缺省值是50個。

2. 對同一目標主機的并發連接限制

當向同一目標主機發出SMTP連接時,postfix初始化發出兩個SMTP連接,如果投遞成功則增加并發的SMTP連接數目,遇到擁塞時又減少并發連接的數目。postfix中通過以下的參數對同一目標主機的并發連接進行控制:

* initial_destination_concurrency:控制對同一目標主機的初始化并發連接數目。缺省值為2。

* default_destination_concurrency_limit:控制初始化連接后對同一目標主機的最大并發連接數目。缺省值為10。

* local_destination_concurrency_limit:控制對同一本地收件人的最大同時投遞的郵件數目。缺省值為2,因為對本地同一收件人投遞郵件時投遞工作只能一個接一個的進行,所以設得在大也沒用。

3. 對同一封郵件的收件人數目限制

通過default_destination_recipient_limit參數來控制postfix的投遞代理(如

smtp進程)可以將同一封郵件發送給多少個收件人。缺省值為50。也可以用明確指出該投遞代理的參數來覆蓋該缺省值。如用smtpd_recipient_limit來指定smtp投遞代理可以將同一封郵件發送給多少個收件人,該參數的缺省值為1000。

4. 推遲投遞控制

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

有一個小型的局域網,用戶都將郵件發送給局域網內部的一臺postfix郵件服務器,然后通過在該服務器上撥號將郵件發送出去。這時我們可以這樣指定該參數的值:

defer_transports = smtp

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


強強 2011-12-11 19:36 發表評論
]]>
rsync 實例http://www.tkk7.com/lyjjq/articles/350569.html強強強強Thu, 19 May 2011 02:17:00 GMThttp://www.tkk7.com/lyjjq/articles/350569.htmlhttp://www.tkk7.com/lyjjq/comments/350569.htmlhttp://www.tkk7.com/lyjjq/articles/350569.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/350569.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/350569.html51@114.80.xx:/opt/www/tg/

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

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

以root用戶登錄。 將subversion-1.5.1.tar.gz和subversion-deps-1.5.1.tar.gz傳到服務器。 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方式運行,不加apache編譯參數。以fsfs
-
以root用戶登錄。
將subversion-1.5.1.tar.gz和subversion-deps-1.5.1.tar.gz傳到服務器。

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方式運行,不加apache編譯參數。以fsfs格式存儲版本庫,不編譯berkeley-db)
make clean
make
make install


svn測試
/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版本庫目錄
可建多個:
/opt/svn/mkdir -p /opt/svndata/repos1
/opt/svn/mkdir -p /opt/svndata/repos2

建立svn版本庫
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2

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

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

版本庫2:
vi /opt/svndata/repos2/conf/svnserve.conf

內容修改為:
[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外,其他與版本庫1配置文件完全相同。如果有更多的版本庫,依此類推。

配置允許訪問的svn用戶
vi /opt/svn/conf/pwd.conf

為了簡化配置,2個版本庫共用1個用戶配置文件。如有必要,也可以分開。

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

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

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

配置svn用戶訪問權限
vi /opt/svn/conf/authz.conf

為了簡化配置,3個版本庫共用1個權限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分開。文件中定義用戶組和版本庫目錄權限。

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

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

版本庫目錄格式:
[<版本庫>:/項目/目錄]
@<用戶組名> = <權限>
<用戶名> = <權限>

其中,方框號內部分可以有多種寫法:
/,表示根目錄及以下。根目錄是svnserve啟動時指定的,我們指定為/opt/svndata。這樣,/就是表示對全部版本庫設置權限。

repos1:/,表示對版本庫1設置權限 repos2:/abc, ,表示對版本庫2中的abc項目設置權限 repos2:/abc/aaa, ,表示對版本庫2中的abc項目的aaa目錄設置權限 權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶
-

repos1:/,表示對版本庫1設置權限
repos2:/abc, ,表示對版本庫2中的abc項目設置權限
repos2:/abc/aaa, ,表示對版本庫2中的abc項目的aaa目錄設置權限

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

示例:
[groups]
admin = alan

[/]
@admin = rw

[repos1:/abc/aaa]
king = rw

[repos2:/pass]
king =

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


啟動svn
svnserve -d -r /opt/svndata

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

檢查:
ps -ef|grep svnserve

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


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


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

SVN 說明書:
http://www.subversion.org.cn/svnbook/1.1/

 



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


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

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

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

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

大規模的版本升級,與yum update不同的是,陳舊的淘汰的包也會升級:
[root@localhost ~]#yum upgrade

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

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

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

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

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

列出已經安裝的但是不包含在資源庫中的rpm包的信息:
[root@localhost ~]#yum info extras
注:也就是通過其它網站下載安裝的rpm包的信息。

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

 

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

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

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

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

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

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

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

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

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

 

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



強強 2011-05-17 22:23 發表評論
]]>
crontab 定時任務執行http://www.tkk7.com/lyjjq/articles/346800.html強強強強Wed, 23 Mar 2011 00:56:00 GMThttp://www.tkk7.com/lyjjq/articles/346800.htmlhttp://www.tkk7.com/lyjjq/comments/346800.htmlhttp://www.tkk7.com/lyjjq/articles/346800.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/346800.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/346800.html#vi /etc/crontab
看到下面幾個


# 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
下添加一個backup.sh(內容就寫最上面的sh腳本)就會每天執行

重新啟動crond  

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


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

下面是crontab的格式:
分 時 日 月 星期 要運行的命令

這里有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
每一小時重啟apache

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

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的4號與每周一到周三的11點重啟apache

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



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

1、結束當前正在運行的mysql進程。
# /etc/init.d/mysql stop

2、用mysql安全模式運行并跳過權限驗證。
# /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、結束mysql安全模式,用正常模式運行mysql。
# /etc/init.d/mysql restart

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

mysql> flush privileges;
mysql> quit





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

二. yum特點
*可以同時配置多個資源庫(Repository)
*簡潔的配置文件(/etc/yum.conf)
*自動解決增加或刪除rpm包時遇到的倚賴性問題
*使用方便
*保持與RPM數據庫的一致性

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

四. yum配置
注:修改和增加配置文件中的資源庫,加快下載速度和擁有更多可更新的rpm包
將/etc/yum.conf的內容全部替換為
[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應用
注:當第一次使用yum或yum資源庫有更新時,yum會自動下載所有所需的headers放置于/var/cache/yum目錄下,所需時間可能較長.

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

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

安裝mplayer,同時自動安裝相關的軟件
#yum install mplayer

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

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

每天定期執行系統更新
#chkconfig yum on
#service yum start


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

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

更新所有的rpm包
#yum update

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

大規模的版本升級,與yum update不同的是,連舊的淘汰的包也升級
#yum upgrade


*rpm包的安裝和刪除

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

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


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

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

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

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


*rpm包列表

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

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

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

列出已經安裝的所有的rpm包
#yum list installed

列出已經安裝的但是不包含在資源庫中的rpm包
#yum list extras
注:通過其它網站下載安裝的rpm包


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

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

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

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

列出已經安裝的所有的rpm包的信息
#yum info installed

列出已經安裝的但是不包含在資源庫中的rpm包的信息
#yum info extras
注:通過其它網站下載安裝的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發行版都有的問題)。foo is needed by bar,bar is needed by foo。要裝卸個軟件,還得辛辛苦苦地梳理清楚所有依賴性問題,rpm的幾個搜索站點成了時常光顧的場所,如果不幸碰到循環依賴,那就只有干瞪眼的分了。有時加個--nodeps參數,倒是眼不見,心不煩,但這樣裝上的軟件,你能保證正常使用嗎,這樣卸載軟件,你能保證不影響其它軟件工作嗎,恐怕誰也不能給出肯定的答案。每到這時,帽子們只有看著debian的 apt暗自羨慕了。好在,這些都已經成為過去時了。基于rpm的發行版現在也有了像apt那樣自動解決依賴關系的包管理工具了。其中一個著名的就是apt4rpm,這基本上是debian系統apt的在rpm發行版的移植。但是使用Redhat和 Fedora的linuxer你們知道嗎,還有一個與apt功能類似的rpm包管理系統,那就是yum。Fedora系統已經自帶,Redhat也有相應的rpm下載。與apt相比,yum的功能一點也不弱,甚至還有許多勝過apt 之處。比如說,yum是Fedora系統自帶的,因此它能使用fedora官方的軟件源,完成各種官方發布的各種升級。對于第三方軟件源的支持,yum也 不差,大多數支持apt的repository注,也能支持yum,比如說freshrpms,fedora.us,livna等等。此外yum有一個比較 詳細的log,可以查看何時升級安裝了什么軟件包等。yum的代碼較apt更為精簡等。

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

YUM簡介:yum,是Yellow dog Updater, Modified的簡稱,起初是由yellow dog這一發行版的開發者Terra Soft研發,用python寫成,那時還叫做yup(yellow dog updater),后經杜克大學的Linux@Duke開發團隊進行改進,遂有此名。yum的宗旨是自動化地升級,安裝/移除rpm包,收集rpm包的相關信息,檢查依賴性并自動提示用戶解決。yum的關鍵之處是要有可靠的repository,顧名思義,這是軟件的倉庫,它可以是http或ftp站點,也可以是本地軟件池,但必須包含rpm的header,header包括了rpm包的各種信息,包括描述,功能,提供的文件,依賴性等.正是收集了這些 header并加以分析,才能自動化地完成余下的任務。
如果沒有安裝,先我們要到下面的地址下載與自己系統相對應的版本的 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的一切配置信息都儲存在一個叫yum.conf的配置文件中,通常位于/etc目 錄下,這是整個yum系統的重中之重,所以有必要詳細介紹。下面是一個從網上找來的yum.con文件,讓我們以此為例,進行說明。

[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

轉自:http://blog.chinaunix.net/u/32645/showart.php?id=258653

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

  系統: Linux

  數據庫: Sql Server 2005

  1.下載FreeTDS

  官方網站: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

  其他可選 根據自己情況

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

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

  對應數據庫版本--我的是Microsoft SQL Server 2005 所以我帶的是 --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

  #解決中文亂碼問題

  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

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

  [Server2005]

  host = 192.168.3.100 #我的SQL Server2005 IP,根據自己改

  port = 1433

  tds version = 7.2

  4.測試連接:

  [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>

  出現這個表示連接成功! 退出:quit 和 exit 都行.

  參數說明

  -S 配置的服務名

  -H 主機名

  -p 端口

  -U username

  -P password

  -D database

  5.測試查詢:

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

  1> select USER_ID,TRUE_NAME from USER_INFO

  2> go

  可以顯示中文沒問題!

  6.讓PHP支持mssql(freeTDS)

  重新編譯PHP 這些參數根據自己情況來定,下面是我們需要的

  但是必須帶--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

  如果編譯報錯請執行:

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

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

  7.PHP測試程序

  

  /**

  * MOIT

  *

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

  * @copyright Copyright (c) 2009

  * @desc 測試

  */

  $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.安裝完畢,祝您成功!



強強 2011-02-28 22:03 發表評論
]]>
LINUX網絡基本配置:http://www.tkk7.com/lyjjq/articles/345119.html強強強強Fri, 25 Feb 2011 06:43:00 GMThttp://www.tkk7.com/lyjjq/articles/345119.htmlhttp://www.tkk7.com/lyjjq/comments/345119.htmlhttp://www.tkk7.com/lyjjq/articles/345119.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/345119.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/345119.html 2.ifconfig eth1 up 啟用網卡

 

  兩個部分:

     網絡基礎:全局參數  局部參數

         *開機之后,新添加的網卡可以通過在開機過程中配置

          來使用。

         配置完成之后,使用ifconfig來進行查看:

                IP地址、子網掩碼、廣播地址、統計信息等

       通過配置文件:

           /etc/services 

                定義常用的服務端口號,一般無需修改

                可以參照netstat -nl 查詢本機開放的服務

           /etc/sysconfig/network

                通常情況下可用于更改計算機名稱

           /etc/hosts

                            在沒有DNS域名解析系統的情況下優先通過該

                文件實現名稱到地址的對應(域名解析)

           /etc/resolv.conf

                定義本機使用的DNS服務器地址

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

                局部參數:

                定義指定網卡IP、MASK、GW、HW Address

                如果本機使用的是以太網卡,

                設備名:eth0 eth1 eth2   eth--->ethernet

                其中內容信息可以通過vi修改

                完成之后需要使用service network restart                        重啟------>該網絡信息的配置永久生效

       通過命令使用:

           netconfig       

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

                 配置網卡基本參數,完成之后重啟服務

           service network restart 

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

                 重新啟動網絡服務

           redhat-config-network/system-config-network

                           該命令影響的配置文件:

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

                 該命令執行的優先級更高

           ifconfig

                ifconfig ethx -dynamic

                   臨時通過DHCP服務器來獲取地址

                ifconfig ethx IPADDRESS netmask MASK

                   臨時指定IP地址以及子網掩碼

           ifup/ifdown

                臨時啟動或者關閉網絡連接

           dhclient

                動態獲得IP地址

               

         網絡高級:路由、ADSL、多網卡、多IP

         路由添加刪除:

         route         查詢當前路由表

         route add -net 網絡ID netmask 子網掩碼 gw 網關

                       增加一條路由

         route del -net 網絡ID netmask 子網掩碼

                                 刪除一條路由

        

         接入廣域網ADSL設置:

               adsl-setup命令        ---->按照提示進行操作

         adsl-start    連接客戶端

         adsl-stop     關閉客戶端

         adsl-status   查看

         adsl-connect  連接客戶端

 

         多網卡配置:

               多個網卡啟動的時候會被識別為eth0 eth1 eth2...

         添加多個網卡,開機自動識別

         通常通過配置文件拷貝的方式建立其他網卡配置

         假如:原網卡配置

         /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        

                       ---->將路由轉發功能由0改為1

         執行sysctl -p刷新

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

         顯示內容為1,則證明本機IP路由轉發功能成功!

 

         多IP綁定配置:

         cd /etc/sysconfig/network-scripts/

         cp ifcfg-eth0 ifcfg-eth0:1

         vi ifcfg-eth0:1

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

         保存退出,重啟網絡

        

     對網絡信息的檢測:

         ifconfig      查看網絡配置信息

         ping               選項方面的差別:

                -c     發包數量

                -s   發包大小

                -f   泛洪

         tcpdump     檢測網卡流經的數據     

         traceroute    

        

 



強強 2011-02-25 14:43 發表評論
]]>
如何在Linux下查找文件內容包含某個特定字符串的文件http://www.tkk7.com/lyjjq/articles/344852.html強強強強Tue, 22 Feb 2011 07:04:00 GMThttp://www.tkk7.com/lyjjq/articles/344852.htmlhttp://www.tkk7.com/lyjjq/comments/344852.htmlhttp://www.tkk7.com/lyjjq/articles/344852.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/344852.htmlhttp://www.tkk7.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

強強 2011-02-22 15:04 發表評論
]]>
Apache 目錄列表 http://www.tkk7.com/lyjjq/articles/330569.html強強強強Wed, 01 Sep 2010 06:08:00 GMThttp://www.tkk7.com/lyjjq/articles/330569.htmlhttp://www.tkk7.com/lyjjq/comments/330569.htmlhttp://www.tkk7.com/lyjjq/articles/330569.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/330569.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/330569.html

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

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

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

這里,首先尋找 index.php, 沒有找到再去尋找 index.html
若一個也沒有找到或沒有設置DirectoryIndex,這就涉及到目錄列表的問題了。
如果那個目錄設置了Indexes選項,服務器將會自動產生一個那個目錄中的資源列表。

Options 指令
說明: 配置在特定目錄使用哪些特性
語法: Options [+|-]可選項 [[+|-]可選項] ...
默認值: Options All
上下文: 服務器配置, 虛擬主機, 目錄, .htaccess
覆蓋項: Options
狀態: 核心
模塊: core

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

All
除MultiViews之外的所有特性。這是默認設置。

ExecCGI
允許使用mod_cgi執行CGI腳本。

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

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

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

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

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

SymLinksIfOwnerMatch
服務器僅在符號連接與其目的目錄或文件的擁有者具有相同的uid時才使用它。

舉個例子,允許目錄列表:

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

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

<Directory /web/docs>
Options None
</Directory>

 



強強 2010-09-01 14:08 發表評論
]]>
RPM 大全http://www.tkk7.com/lyjjq/articles/330529.html強強強強Wed, 01 Sep 2010 03:11:00 GMThttp://www.tkk7.com/lyjjq/articles/330529.htmlhttp://www.tkk7.com/lyjjq/comments/330529.htmlhttp://www.tkk7.com/lyjjq/articles/330529.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/330529.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/330529.html  RPM 有五種基本的操作方式(不包括創建 軟件 包): 安裝, 卸載, 升級, 查詢,和驗證。

   下面我們就來逐一的講解吧。

一、 安裝RPM包

  RPM 軟件 包通常具有類似foo-1.0-1.i386.rpm 的文件名。

  其中包括 軟件 包的名稱(foo),版本號(1.0),發行號(1), 和 硬件平臺(i386)。

  安裝一個 軟件 包只需簡單的鍵入以下命令: $ rpm -ivh foo-1.0-1.i386.rpm foo #################################### RPM安裝完畢后會打印出 軟件 包的名字(并不一定與文件名相同), 而后打印一連串的#號以表示安裝進度。

   雖然 軟件 包的安裝被設計的盡量簡單易行, 但還是可能會發生如下的錯誤:

  1、 軟件 包已被安裝 如果您的 軟件 包已被安裝, 將會出現以下信息: $ 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 選項,RPM將忽略該錯誤信息強行安裝。

  2、文件沖突 如果您要安裝的 軟件 包中有一個文件已在安裝其它 軟件 包時安裝,會出現以下錯誤信息: # 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 忽略該錯誤信息, 請使用--replacefiles 命令行選項。

  3、未解決依賴關系 RPM 軟件 包可能依賴于其它 軟件 包,也就是說要求在安裝了特定的 軟件 包之后才能安裝該 軟件 包。如果在您安裝某個 軟件 包時存在這種未解決的依賴關系。會產生以下信息: $ rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 您必須安裝完所依賴的 軟件 包,才能解決這個問題。如果您想強制安裝(這是個壞主意, 因為安裝后的 軟件 包未必能正常運行), 請使用--nodeps 命令行選項。  

  二、卸載RPM包

   卸載 軟件 包就象安裝 軟件 包時一樣簡單: $ rpm -e foo 注意這里使用 軟件 包的名字name ``foo, 而不是 軟件 包文件的名字file ``foo-1.0-1.i386.rpm。如果其它 軟件 包依賴于您要卸載的 軟件 包,卸載時則會產生錯誤信息。

  如: $ rpm -e foo removing these packages would break dependencies:foo is needed by bar-1.0-1 若讓RPM忽略這個錯誤繼續卸載(這可不是一個好主意,因為依賴于該 軟件 包的程序可能無法運行),請使用--nodeps 命令行選項。  

  三、升級RPM包

  升級 軟件 包和安裝 軟件 包十分類似:. $ rpm -Uvh foo-2.0-1.i386.rpm foo #################################### RPM將自動卸載已安裝的老板本的foo 軟件 包,您不會看到有關信息。事實上您可能總是使用 -U 來安裝 軟件 包,因為即便以往未安裝過該 軟件 包,也能正常運行。

  因為RPM 執行智能化的 軟件 包升級, 自動處理配置文件,您將會看到如下信息: saving /etc/foo.conf as /etc/foo.conf.rpmsave 這表示您對配置文件的修改不一定能向上兼容。

  因此,RPM 會先備份老文件再安裝新文件。您應當盡快解決這兩個配置文件的不同之處,以使系統能持續正常運行。

  因為升級實際包括 軟件 包的卸載與安裝兩個過程,所以您可能會碰到由這兩個操作引起的錯誤。

  另一個你可能碰到的問題是:當您使用舊版本的 軟件 包來升級新版本的 軟件 時,RPM會產生以下錯誤信息: $ 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 如果你確有需要將該 軟件 包”降級,加入 --oldpackage 命令選項就可以了。

   四、 查詢已安裝的軟件包

   使用命令rpm -q來查詢已安裝 軟件 包的 數據庫 。

   簡單的使用命令 rpm -q foo 會打印出foo 軟件 包 的包名 , 版本號,和發行號: $ rpm -q foo foo-2.0-1 除了指定 軟件 包名以外,您還可以使用以下選項來指明要查詢哪些 軟件 包的信 息。

這些選項被稱之為“ 軟件 包指定選項“。

· -a 查詢所有已安裝的 軟件 包
· -f 將查詢包含有文件. 的 軟件 包
· -p 查詢 軟件 包文件名為的 軟件 包 還可以指定查詢 軟件 包時所顯示的信息。它們被稱作信息選擇選項:
· -i 顯示 軟件 包信息,如描述, 發行號, 尺寸, 構建日期, 安裝日期, 平臺, 以及其它一些各類信息。
· -l 顯示 軟件 包中的文件列表。
· -s 顯示 軟件 包中所有文件的狀態。
· -d 顯示被標注為文檔的文件列表(man 手冊, info 手冊, READMEs, etc)。
· -c 顯示被標注為配置文件的文件列表。這些是您要在安裝完畢以后加以定制的文件(sendmail.cf, passwd, inittab, etc)。

對于那些要顯示文件列表的文件, 您可以增加-v 命令行選項以獲得如同 ls -l 格式的輸出。  

  五、 驗證軟件包

  驗證軟件包是通過比較已安裝的文件和 軟件 包中的原始文件信息來進行的。驗證主要是比較文件的尺寸,MD5 校驗碼, 文件權限, 類型, 屬主和用戶組等。

  rpm-V命令用來驗證一個 軟件 包。您可以使用任何包選擇選項來查詢您要驗證的軟件包。

  命令rpm -V foo 將用來驗證foo 軟件包。

又如:

· 驗證包含特定文件的 軟件 包: rpm -Vf /bin/vi
· 驗證所有已安裝的 軟件 包: rpm -Va
· 根據一個RPM包來驗證: rpm -Vp foo-1.0-1.i386.rpm

   如果您擔心你的RPM 數據庫 已被破壞,就可以使用這種方式。 如果一切均校驗正常將不會產生任何輸出。如果有不一致的地方,就會顯示出來。 輸出格式是8位長字符 串, ``c 用以指配置文件, 接著是文件名. 8位字符的每一個 用以表示文件與RPM 數據庫 中一種屬性的比較 結果 。``. (點) 表示測試通過。.

  下面的字符表示對RPM 軟件 包進行的某種測試失敗:

  顯示字符 錯誤源 5 MD5

  校驗碼
S 文件尺寸
L 符號連接
T 文件修改日期
D 設備
U 用戶
G 用戶組
M 模式e (包括權限和文件類型) 如果有錯誤信息輸出, 您應當認真加以考慮,是通過刪除還是重新安裝來解決出現的問題。  

   六、教你一招

  RPM不僅是安裝/卸載程序的工具,它還是系統維護和診斷的一把好手。

  看過下面幾個例子你就會領教它的 厲害了。

· 如果您誤刪了一些文件, 但您不能肯定到底都刪除了那些文件,怎么辦?
您可以鍵入: rpm -Va rpm會在屏幕上顯示出文件刪除的情況。若你發現一些文件丟失了或已被損壞, 您就可以重新安裝或先卸載 再安裝該 軟件 包。
· 如果您碰到了一個自己不認識的文件,要想查處它屬于哪個 軟件 包,您可以輸入以下命令 rpm -qf /usr/X11R6/bin/xjewel 輸出的結果會是: xjewel-1.6-1
· 如果發生綜合以上兩個例子的情況,如文件/usr/bin/paste出了問題。您想知道哪個 軟件 包中包含該文 件,您這時可以簡單的鍵入: rpm -Vf /usr/bin/paste
· 如果您想了解正在使用的程序的詳細信息, 您可以鍵入如下命令來獲得 軟件 包中關于該程序的文檔信息: rpm -qdf /usr/bin/ispell 輸出結果為: /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
· 您發現了一個新的koules RPM,但您不知道它是做什么的,您可以鍵入如下命令: rpm -qip koules-1.2-2.i386.rpm
· 現在您想了解koules的 RPM包在系統里安裝了哪些文件, 您可以鍵入: rpm -qlp koules-1.2-2.i386.rpm輸出結果為: /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 以上只是幾個常見例子。隨著您進一步的使用RPM,您會發現它的各種功能選項組合可以實現更為強大的RPM包管理功能。



強強 2010-09-01 11:11 發表評論
]]>
讓xp系統自動選擇用戶登錄http://www.tkk7.com/lyjjq/articles/325193.html強強強強Sun, 04 Jul 2010 06:00:00 GMThttp://www.tkk7.com/lyjjq/articles/325193.htmlhttp://www.tkk7.com/lyjjq/comments/325193.htmlhttp://www.tkk7.com/lyjjq/articles/325193.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/325193.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/325193.html第一種是修改注冊表

    這種方法比較麻煩,而且要求對注冊表有一定的了解。

    第1步:運行注冊表編輯器,依次展開 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] 分支,然后在右側窗口雙擊 "DefaultUserName",接著輸入你的登錄用戶名。如果沒有 "DefaultUserName" 這一項,可以按鼠標右鍵選“編輯→新建→字符串值(s)→DefaultUserName”來添加這個項目,注意要區分大小寫字母。

    第2步:同樣在該分支下,在右側窗口中雙擊 "DefaultPassword",然后在空白欄內輸入你的密碼。假如未發現 "DefaultPassword" 這一項,可按上面的步驟來新建該字符串值。

    第3步:接下來在右側窗口中雙擊 "AutoAdminLogon",將數值設置為 "1"。假如未發現 "AutoAdminLogon" 這一項,可按上面的步驟來新建。

    現在關閉注冊表編輯器并重新啟動電腦,就可以實現XP的自動登錄了。

    第二種方法比較簡單

    在 Windows XP 中單擊“開始→運行”,輸入 “rundll32 netplwiz.dll,UsersRunDll”(注意大小寫及空格),按回車就會出現一個“用戶賬戶”的操作窗口,如果你對 Windows 2000 比較熟悉的話,相信你應該知道怎么做了,取消對“要使用本機,用戶必須輸入用戶名和密碼”項的選擇,點擊“應用”。在接下來彈出的對話框中輸入你想讓電腦每次自動登錄的用戶名及其密碼,下次啟動時就可以實現XP的自動登錄了



強強 2010-07-04 14:00 發表評論
]]>
linux下IPTABLES配置詳解http://www.tkk7.com/lyjjq/articles/303964.html強強強強Fri, 27 Nov 2009 11:11:00 GMThttp://www.tkk7.com/lyjjq/articles/303964.htmlhttp://www.tkk7.com/lyjjq/comments/303964.htmlhttp://www.tkk7.com/lyjjq/articles/303964.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/303964.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/303964.html
如果你的IPTABLES基礎知識還不了解,建議先去看看.
開始配置
我們來配置一個filter表的防火墻.
(1)查看本機關于IPTABLES的設置情況
[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時,選擇了有防火墻,并且開放了22,80,25端口.
如果你在安裝linux時沒有選擇啟動防火墻,是這樣的
[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  
什么規則都沒有.
(2)清除原有規則.
不管你在安裝linux時是否啟動了防火墻,如果你想配置屬于自己的防火墻,那就清除現在filter的所有規則.
[root@tp ~]# iptables -F      清除預設表filter中的所有規則鏈的規則
[root@tp ~]# iptables -X      清除預設表filter中使用者自定鏈中的規則
我們在來看一下
[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     
什么都沒有了吧,和我們在安裝linux時沒有啟動防火墻是一樣的.(提前說一句,這些配置就像用命令配置IP一樣,重起就會失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
 
這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用.
[root@tp ~]# service iptables restart
 
現在IPTABLES配置表里什么配置都沒有了,那我們開始我們的配置吧
(3)設定預設規則
[root@tp ~]# iptables -P INPUT DROP
[root@tp ~]# iptables -P OUTPUT ACCEPT
[root@tp ~]# iptables -P FORWARD DROP
上面的意思是,當超出了IPTABLES里filter表里的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則里的數據包怎么處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.我們要控制流入數據包
而對于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT,也就是說,不在著個規則里的包怎么辦呢,那就是通過.
可以看出INPUT,FORWARD兩個鏈采用的是允許什么包通過,而OUTPUT鏈采用的是不允許什么包通過.
這樣設置還是挺合理的,當然你也可以三個鏈都DROP,但這樣做我認為是沒有必要的,而且要寫的規則就會增加.但如果你只想要有限的幾個規則是,如只做WEB服務器.還是推薦三個鏈都是DROP.
注:如果你是遠程SSH登陸的話,當你輸入第一個命令回車的時候就應該掉了.因為你沒有設置任何規則.
怎么辦,去本機操作唄!
(4)添加規則.
首先添加INPUT鏈,INPUT鏈的默認規則是DROP,所以我們就寫需要ACCETP(通過)的鏈
為了能采用遠程SSH登陸,我們要開啟22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:這個規則,如果你把OUTPUT 設置成DROP的就要寫上這一部,好多人都是望了寫這一部規則導致,始終無法SSH.在遠程一下,是不是好了.
其他的端口也一樣,如果開啟了web服務器,OUTPUT設置成DROP的話,同樣也要添加一條鏈:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
如果做了WEB服務器,開啟80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了郵件服務器,開啟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服務器,開啟21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服務器,開啟53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你還做了其他的服務器,需要開啟哪個端口,照寫就行了.
上面主要寫的都是INPUT鏈,凡是不在上面的規則里的,都DROP
允許icmp包通過,也就是允許ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT  (INPUT設置成DROP的話)
允許loopback!(不然會導致DNS無法正常關閉等問題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面寫OUTPUT鏈,OUTPUT鏈默認規則是ACCEPT,所以我們就寫需要DROP(放棄)的鏈.
減少不安全的端口連接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通信,阻塞這些端口能夠有效地減少你的網絡上可能被感染的機器和它們的遠程主服務器進行獨立通信的機會
還有其他端口也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應被禁止,我在這寫的也不全,有興趣的朋友應該去查一下相關資料.
 
當然出入更安全的考慮你也可以包OUTPUT鏈設置成DROP,那你添加的規則就多一些,就像上邊添加
允許SSH登陸一樣.照著寫就行了.
 
下面寫一下更加細致的規則,就是限制到某臺機器
如:我們只允許192.168.0.3的機器進行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表示子網掩碼數.但要記得把 /etc/sysconfig/iptables 里的這一行刪了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因為它表示所有地址都可以登陸.
或采用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再說一邊,反是采用命令的方式,只在當時生效,如果想要重起后也起作用,那就要保存.寫入到/etc/sysconfig/iptables文件里.
[root@tp ~]# /etc/rc.d/init.d/iptables save
這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的規則連接也一樣這么設置.
 
在下面就是FORWARD鏈,FORWARD鏈的默認規則是DROP,所以我們就寫需要ACCETP(通過)的鏈,對正在轉發鏈的監控.
開啟轉發功能,(在做NAT時,FORWARD默認規則是DROP時,必須做)
[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碎片數量,防止攻擊,允許每秒100個
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
設置ICMP包過濾,允許每秒1個包,限制觸發條件是10個包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允許ICMP包通過,就是因為我在這里有限制.
二,配置一個NAT表放火墻
1,查看本機關于NAT的設置情況
[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已經配置好了的(只是提供最簡單的代理上網功能,還沒有添加防火墻規則).關于怎么配置NAT,參考我的另一篇文章
當然你如果還沒有配置NAT的話,你也不用清除規則,因為NAT在默認情況下是什么都沒有的
如果你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
 
2,添加規則
添加基本的NAT地址轉換,(關于如何配置NAT可以看我的另一篇文章),
添加規則,我們只添加DROP鏈.因為默認鏈全是ACCEPT.
防止外網用內網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,(個人認為沒有太大必要)
例:
禁止與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地址,和端口,以及基于什么協議,只要照著寫就行了.
 
最后:
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

允許所有已經建立的和相關的連接
[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


別忘了保存,不行就寫一部保存一次.你可以一邊保存,一邊做實驗,看看是否達到你的要求,
上面的所有規則我都試過,沒有問題.
寫這篇文章,用了我將近1個月的時間.查找資料,自己做實驗,希望對大家有所幫助.如有不全及不完善的地方還請提出.
因為本篇文章以配置為主.關于IPTABLES的基礎知識及指令命令說明等我會盡快傳上,當然你可以去網上搜索一下,還是很多的.


強強 2009-11-27 19:11 發表評論
]]>
IPTables 控制腳本配置文件?http://www.tkk7.com/lyjjq/articles/303963.html強強強強Fri, 27 Nov 2009 10:54:00 GMThttp://www.tkk7.com/lyjjq/articles/303963.htmlhttp://www.tkk7.com/lyjjq/comments/303963.htmlhttp://www.tkk7.com/lyjjq/articles/303963.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/303963.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/303963.htmlIPTables 控制腳本配置文件?

iptables 初始腳本是由 /etc/sysconfig/iptables-config 配置文件所控制的?。?以?下是包括在這個文件中的項的列表?:

  • IPTABLES_MODULES — 在防火墻被激活時,指定一組空間獨立的額外 iptables 模塊來加載。這可以包括 connection tracking 和 NAT helper。

  • IPTABLES_MODULES_UNLOAD — 在重新啟動和停止時卸載的模塊。這個項接受以下值:

    • yes — 默認的值。這個選項必須被設置來在啟動和停止一個防火墻時達到一個正確的?狀態。

    • no — 這個選項只有在卸載 netfilter 模塊出現問題時才應該設置。

  • IPTABLES_SAVE_ON_STOP — 當防火墻停止時把當前的防火墻規則保存到 /etc/sysconfig/iptables。這個項接受以下值?:

    • yes — 當防火墻停止時把現存的規則保存到 /etc/sysconfig/iptables,而以?前的版本被保存為 /etc/sysconfig/iptables.save

    • no — 默認值。?當防火墻停止時不保存當前的規則。

  • IPTABLES_SAVE_ON_RESTART — 當防火墻重新啟動時,保存當前的防火墻規則。這個項接受以下值:

    • yes — 當防火墻重新啟動時,保存現存的規則到 /etc/sysconfig/iptables,而以前的版本被存為 /etc/sysconfig/iptables.save

    • no — 默認值。防火墻重新啟動時,不保存現存的規則。

  • IPTABLES_SAVE_COUNTER — 保存并恢復所有chain 和規則中的數據包和字節計數器。這個項接受以下值:

    • yes — 保存計數器的值。

    • no — 默認值。不保存計數器值。

  • IPTABLES_STATUS_NUMERIC — 輸出的IP地址是數字的格式,而不是域名和主機名的形式。?這個項接受以下值:

    • yes — 默認的值。在狀態輸出中只包括IP地址。

    • no — 在狀態輸出中返回域名或主機名。



強強 2009-11-27 18:54 發表評論
]]>
釋放linux cachehttp://www.tkk7.com/lyjjq/articles/293125.html強強強強Sat, 29 Aug 2009 13:41:00 GMThttp://www.tkk7.com/lyjjq/articles/293125.htmlhttp://www.tkk7.com/lyjjq/comments/293125.htmlhttp://www.tkk7.com/lyjjq/articles/293125.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/293125.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/293125.html 

因為LINUX的內核機制,一般情況下不需要特意去釋放已經使用的cache。這些cache起來的內容可以增加文件以及的讀寫速度。
先說下free命令怎么看內存

[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

其中第一行用全局角度描述系統使用的內存狀況:
total——總物理內存
used——已使用內存,一般情況這個值會比較大,因為這個值包括了cache+應用程序使用的內存
free——完全未被使用的內存
shared——應用程序共享內存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加)
cached——緩存,用于已打開的文件
note:
total=used+free
used=buffers+cached (maybe add shared also)

第二行描述應用程序的內存使用:
前個值表示-buffers/cache——應用程序使用的內存大小,used減去緩存值
后個值表示+buffers/cache——所有可供應用程序使用的內存大小,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

說明,釋放前最好sync一下,防止丟數據。



強強 2009-08-29 21:41 發表評論
]]>
怎么樣徹底殺死某用戶的所有進程 http://www.tkk7.com/lyjjq/articles/292912.html強強強強Thu, 27 Aug 2009 14:59:00 GMThttp://www.tkk7.com/lyjjq/articles/292912.htmlhttp://www.tkk7.com/lyjjq/comments/292912.htmlhttp://www.tkk7.com/lyjjq/articles/292912.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/292912.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/292912.html  su - username -c 'kill -9 -1'

強強 2009-08-27 22:59 發表評論
]]>
apache httpd.conf 配置典型http://www.tkk7.com/lyjjq/articles/244772.html強強強強Sat, 06 Dec 2008 07:14:00 GMThttp://www.tkk7.com/lyjjq/articles/244772.htmlhttp://www.tkk7.com/lyjjq/comments/244772.htmlhttp://www.tkk7.com/lyjjq/articles/244772.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/244772.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/244772.html#設置虛擬主機
<VirtualHost *:80>
ServerAdmin www.adddd.com
DocumentRoot E:/Tomcat/webapps/ROOT
#您的站點項目所在路徑,應與tomcat中的目錄設置相同
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支持對servlet傳送,用以Tomcat解析
JkMount /*.jsp ajp13
#讓Apache支持對jsp傳送,用以Tomcat解析
JkMount /*.do ajp13
#讓Apache支持對.do傳送,用以Tomcat解析
</VirtualHost>
本文來自: 腳本之家(www.jb51.net) 詳細出處參考:http://www.jb51.net/article/15269.htm



強強 2008-12-06 15:14 發表評論
]]>
ssh訪問限制http://www.tkk7.com/lyjjq/articles/234251.html強強強強Tue, 14 Oct 2008 07:55:00 GMThttp://www.tkk7.com/lyjjq/articles/234251.htmlhttp://www.tkk7.com/lyjjq/comments/234251.htmlhttp://www.tkk7.com/lyjjq/articles/234251.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/234251.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/234251.html sshd:192.168.168.225:allow
sshd:192.168.168.224:allow


強強 2008-10-14 15:55 發表評論
]]>
portmaphttp://www.tkk7.com/lyjjq/articles/200694.html強強強強Thu, 15 May 2008 10:05:00 GMThttp://www.tkk7.com/lyjjq/articles/200694.htmlhttp://www.tkk7.com/lyjjq/comments/200694.htmlhttp://www.tkk7.com/lyjjq/articles/200694.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/200694.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/200694.html --在222和227上分別執行
service portmap start
service nfs start
--在227上執行
mount 192.168.168.222:/opt/51point /opt/51point
umount /opt/51point

1.NFS訪問

如果你使用NFS網絡文件系統服務,應該確保你的/etc/exports具有最嚴格的訪問權限設置,也就是意味著不要使用任何通配符、不允許root寫權限并且只能安裝為只讀文件系統。編輯文件/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是登錄這個目錄的機器名,ro意味著mount成只讀系統,root_squash禁止root寫入該目錄。為了使改動生效,運行如下命令。

# /usr/sbin/exportfs -a



強強 2008-05-15 18:05 發表評論
]]>
Linux服務器網卡驅動安裝及故障排除http://www.tkk7.com/lyjjq/articles/151199.html強強強強Mon, 08 Oct 2007 23:08:00 GMThttp://www.tkk7.com/lyjjq/articles/151199.htmlhttp://www.tkk7.com/lyjjq/comments/151199.htmlhttp://www.tkk7.com/lyjjq/articles/151199.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/151199.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/151199.html

Linux服務器網卡驅動安裝及故障排除

作者: 出處:計算機世界  ( 21 ) 磚  ( 35 ) 好  評論 ( 0 ) 條  進入論壇
更新時間:2006-05-08 15:11
關 鍵 詞:Linux
閱讀提示:各種設備驅動程序構成了Linux操作系統代碼的主要部分,而網卡的驅動又是Linux操作系統中極其重要的一塊,本文作一介紹。

網卡是Linux服務器中最重要網絡設備。據統計,Linux網絡故障有35%在物理層、 25%在數據鏈路層、10%在網絡層、10%在傳輸層、10%在對話、7%在表示層、3%在應用層。由此可以看出,網絡故障通常發生在網絡七層模型的下三層,即物理層、鏈路層和網絡層。對應于實際網絡也就是使用的網絡線纜、網卡、交換機、路由器等設備故障。Linux的網絡實現是模仿FreeBSD的,它支持FreeBSD的帶有擴展的Sockets(套接字)和TCP/IP協議。它支持兩個主機間的網絡連接和Sockets通訊模型,實現了兩種類型的 Sockets:BSD Sockets和INET Sockets。它為不同的通信模型和服務質量提供了兩種傳輸協議,即不可靠的、基于消息的UDP傳輸協議和可靠的、基于流的傳輸協議TCP,并且都是在 IP網絡協議上實現的。INET sockets是在以上兩個協議及IP協議之上實現的。

由于交換機、路由器通常獨立于Linux或者其他操作系統。網卡設置故障是造成Linux 服務器故障最主要原因。可能因為硬件的質量或性能、磨損老化、人為誤操作、不正確的網絡設置、管理問題、Linux軟件的BUG、系統受到黑客攻擊和Linux病毒等原因造成。

Linux 服務器網卡故障排除的思路是:應當遵循先硬件后軟件的方法。因為硬件如果出現物理損壞那么如何設定網卡都不能解決故障。解決問題的方法可以從自身Linux計算機的網卡查起,如果確定硬件沒有問題了,再來考慮軟件的設定。

1. 網卡的選擇

一般來說,2.4版本以后的 Linux可以支持的網卡芯片組數量已經很完備了,包括著名廠商如:Intel 以及使用廣泛的 RealTek, Via 等網卡芯片都已經被支持,所以使用者可以很輕易的設定好他們的網絡卡。但是由于Linux發行版本眾多(目前超過188個),使用前最好查看Linux發行版本的文檔。以Redhat Linux 9.0為例,這個設備列表在Ethernet- HOWTO文檔中。另外最直接的方法是查看一個目錄:/lib/modules/release/kernel/drivers/net,其中 release是內核版本,可以使用命令:“uname -r”獲得。對于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

可以看到這個目錄列出所有Linux內核支持的網絡設備驅動程序。其中大部分是以太網卡(8139、3COM、Intel)。也有一些是其他類型設備。對于初學者應當盡量選擇目錄中已經列出的網卡。注意以.o 后綴結束的文件就是驅動程序。而沒有后綴的是驅動程序目錄(紅色)。

3.為新網卡設定IP地址

 

在Linux 網絡設備在配置時被賦予別名,該別名由一個描述性的縮略詞和一個編號組成。某種類型的第一個設備的編號為 0,其他設備依次被編號為 1、2、3,等。但是網卡并不是最為裸設備出現在/dev目錄下,而是存在內存中。eth0, eth1是以太網卡接口。它們用于大多數的以太網卡,包括許多并行端口以太網卡。本文主要討論這類網卡。為Linux以太網卡設定IP地址的方式非常靈活,你可以選擇適合你工作情況的方法:

(1) 使用ip或ifconfig命令

ifconfig命令是最重要的Linux網絡命令,最主要的用途是設定、修改網卡的IP地址,修改網卡ip地址:
#ifconfig eth0 192.168.0.2 netmask 255.255.255.0

默認情況下, ifconfig 顯示活動的網絡設備。給這個命令添加一個 -a 開關就能看到所有設備。但是ifconfig命令設置網絡設備的ip地址系統重新啟動后設置會自動失效。所以它主要用于網卡狀態調試。假設您要建立一個臨時的網絡配置以供測試。您可以使用發行版本中的工具來編輯配置,但是需要注意在完成測試之后,將所有設置恢復回去。通過使用 ifconfig ,我們無需影響已保存的設置,就能夠快速地配置網卡。

Ip命令是iproute2軟件包里面的一個強大的網絡配置工具,它能夠替代一些傳統的網絡管理工具。例如:ifconfig、route等。 現在,絕大多數 Linux 發行版和絕大多數 UNIX都使用古老的arp, ifconfig和route命令。雖然這些工具能夠工作,但它們在Linux2.2和更高版本的內核上顯得有一些落伍。使用iproute2前你應該確認已經安裝了這個工具。這個包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下載源代碼安裝。

如果希望在以太網接口eth0上增加一個地址10.0.0.1,掩碼長度為24位,標準廣播地址,標簽為eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias 

netconfig命令可以設置網絡設備的ip地址,netconfig命令可以永久保存設置。

使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后會在命令行下彈出一個對話框,這時即可進行設定。

設定結束后用“tab”鍵選擇“OK”即可保存設置并且退出。然后使用命令:“service network restart “激活即可生效。

使用neat命令需要配置好X window系統,在命令行下運行“neat”命令后添加IP地址和其他相關參數后保存設置,從新啟動網絡和網絡服務或計算機。

另外neat命令還有一個同價命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存設置。

除非另行指定,Red Hat Linux 系統中大多數配置文件都在 /etc 目錄中。網卡相關的TCP/IP網絡配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x從0開始,第一個以太網配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi編輯器修改這個文件,也可以修改網卡IP地址。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE=eth0#設定網卡的名稱,要跟文件名稱對應 #

ONBOOT=yes#是否在開機的的時候啟動網卡#

BOOTPROTO=static #啟動的時候的 IP 取得的協議,這里是固定的,

如果是動態主機的話,要改成 dhcp 才行#

IPADDR=192.168.1.2 #IP 地址#

NETMASK=255.255.255.0#子網掩嗎#

NETWORK=192.168.1.0#該網段的第一個 IP#

BROADCAST=192.168.1.255#最后一個同網段的廣播地址#

GATEWAY=192.168.1.2#網關地址#

#GATEWAYDEV=eth0

存盤后使用命令:“service network restart “激活即可生效。這個方法同樣可以永久保存設置。

(5) 為網卡添加IPV6地址

和Windows系統相比Linux對Ipv6的支持更好,最早的支持Ipv6的Linux 內核是 2.2.xxx。一般Linux基于2.4內核的Linux發行版本都可以直接使用Ipv6,使用前要看系統IPv6模塊是否被加載,如果沒有的話可以使用命令手工加載,這需要超級用戶的權限。然后使用命令檢測,如果顯示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64)證明IPv6已經加載。
# modprobe IPv6;#ifconfig -a

如果希望Linux系統啟動時自動加載Ipv6模塊,可以在配置文件:/etc/modules.conf中加入一行:
alias net?pf?10 ipv6 # automatically load IPv6 module on demand

4.調整網卡工作模式

現在的網卡大多是自適應工作模式,在配置網卡參數時我們很少考慮它的工作模式,有時發現一些網卡模塊已經加載,但是在某些模式工作不穩定。如筆者使用的一塊XXX品牌的雜牌RTL-8139C芯片10/100自適應網卡在100兆全雙工狀態下極其不穩定(在Qcheck的TCP和UDP的測試過程中,數據包遺失率9.12%。)。在Linux環境下,我們可以使用系統自帶的工具mii-tool 命令來配置網卡工作模式。顯示Linux服務器網卡支持的所有以太網卡類型,使用命令:
            

# 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

從以上信息中可以看出,這塊網卡工作在100全雙工自適應模式下,“100aseTx-FD”意為100M Full Duplex。這里可以強制網卡工作在100M半工模式下,輸入命令:
#mii-tool –F 100baseTx-HD eth0 

以后恢復網卡的自適應工作模式,輸入命令:
#mii-tool –r eth0 

另外路由器、交換機、代理服務器等通信量比較大的關鍵設備上,應該為它指定正確的工作模式,這樣可以提高通信效率。

5.DHCP客戶端網卡設定

如果希望使用DHCP是動態主機配置協議,這個協議用于向計算機自動提供IP地址,子網掩碼和路由信息。當設備接入這個局域網時,它們會向 DHCP 服務器請求一個 IP 地址。然后 DHCP 服務器為每個請求的設備分配一個地址,直到分配完該范圍內的所有 IP 地址為止。已經分配的 IP 地址必須定時地延長借用期。這個延期的過程稱作 leasing,確保了當客戶機設備在正常地釋放 IP 地址之前突然從網絡斷開時被分配的地址可以歸還給服務器。Linux下配置DHCP客戶端有兩種方法:圖形界面和手工配置。使用圖形界面可以使用neat 命令界面。選中“自動獲得IP地址設置使用DHCP”即可。

通常筆者更喜歡使用選擇手工配置 DHCP 客戶,需要修改 /etc/sysconfig/network 文件來啟用聯網;并修改 /etc/sysconfig/network-scripts 目錄中每個網絡設備的配置文件。在該目錄中,每個設備都有一個叫做 ifcfg-ethX 的配置文件,ethX是網絡設備的名稱。如eth0等。如果你想在引導時啟動聯網,NETWORKING 變量必須 被設為 yes。除了此處之外/etc/sysconfig/network 文件應該包含以下行:
            

NETWORKING=yes

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

6.VPN服務器網卡設置

 

VPN是由經過相互授權的通信雙方在公網上建立的安全通信隧道,數據在隧道中進行加密傳輸,用于總部與分支機構的安全通信。虛擬專用網絡是一種新的網絡技術,用于跨過 Internet 或局域網而安全地訪問企業網。Redhat Linux下的VPN技術主要有CIPE (Crypto IP Encapsulation:加密 IP 封裝)是主要為 Linux 而開發的 VPN 實現。CIPE 使用加密的 IP 分組,這些分組被封裝或“包圍”在數據報(UDP)分組中。CIPE 分組被給以目標頭信息,并使用默認的 CIPE 加密機制來加密。CIPE 使用標準的 Blowfish 或 IDEA 加密算法來支持加密。根據你所在國家的加密出口法規而定,你可以使用默認方法(Blowfish)來加密你的專用網上的所有 CIPE 交通。CIPE 配置可以通過文本文件、圖形化的網絡管理工具來完成。這里以通過文本文件為例介紹。首先在服務器和客戶端安裝CIPE軟件。官方網站:http: //sites.inka.de/~ 運行CIPE VPN服務主要需要建立兩個文件:/etc/sysconfig/network-scripts/ifcfg-cipcbX和 /etc/cipe/options.cipcbX。X 是從0開始的遞增數字。

(1)VPN服務器端網卡設置

首先手工建立/etc/sysconfig/network-scripts/ifcfg-cipcb0文件,它是VPN服務器的虛擬網絡接口,主要內容:

USERCTL=yes #是否允許所有用戶修改配置#

TYPE=CIPE #接口類型#

DEVICE=cipcb0 #給 CIPE 設備命名#

ONBOOT=yes #系統啟動時激活設備#

IPADDR=10.0.0.1 #本地虛擬地址#

MYPORT=7777 #通訊端口#

PTPADDR=10.0.0.2 #遠程虛擬地址#

PEER=0.0.0.0 #本地地址,0.0.0.0 表示接受連續監聽#

ME=192.168.1.9 #對端的 CIPE UDP 地址#

TUNNELDEV=eth0 #隧道穿越設備#

然后建立/etc/cipe/options.cipcb0文件,這個文件存放密匙,主要內容:

cttl 64 #設置載體生存時間值(TTL);推薦的值是64#

maxerr –1 #服務器錯誤掛起時間#

key 54240266869983357939377846801171299051 #128位密匙#

(2)客戶端網卡的配置

由于CIPE要求服務器和客戶機的密匙完全相同所以,首先將密匙文件:options.cipcb從服務器復制到客戶機主機的/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編輯器建立客戶端網卡配置文件:/etc/sysconfig/network-scripts/ifcfg-cipcb0包含以下內容:

USERCTL=no #不允許客戶端修改配置#

BOOTPROTO=none

TYPE=CIPE #接口類型#

DEVICE=cipcb0 #給 CIPE 設備命名#

ONBOOT=yes #系統啟動時激活設備#

IPADDR=10.0.0.2 #本地虛擬地址#

MYPORT=7777 #通訊端口#

PTPADDR=10.0.0.1 #遠程虛擬地址#

PEER=192.168.1.29:7777 #VPN服務器真實IP地址和端口號#

ME=192.168.1.9 #對端的 CIPE UDP 地址#

TUNNELDEV=eth0 #隧道穿越設備#

MTU=“” #使用缺省設置#

NETMASK=“” #使用缺省設置#

NETWORK=“” #使用缺省設置#

BROADCAST=“” #使用缺省設置#

(3)使用ifup命令激活VPN網卡
# ifup cipcb0 

這時VPN通道已經開啟,可以使用tcpdump等工具檢查。

7.無線網卡在Linux下安裝

 

隨著Linux網絡技術的快速增長,硬件廠商大大加速對硬件產品對Linux的技術支持。使得Linux 支持的無線網卡的數量在過去的一兩年里增長顯著。一旦在計算機中安裝好了無線局域網卡,首先要做的就是安裝驅動來讓網卡工作。無線網卡實現了IEEE 802.11系列協議中的一種或多種的物理層(PHY)和媒質訪問控制子層(MAC)的功能,而驅動是用來控制無線網卡,向上提供與以太網一致的接口并提供其他一些無線局域網特定的管理接口的。對于不同廠商的不同網卡,還沒有一種統一的方法可以驅動所有的網卡。首先必須確保內核配置中啟動了無線局域網。如果沒有無線局域網支持,你應該重新配置、編譯內核來啟動"Wireless LAN (non-hamradio) Drivers and Wireless Extensions"。

目前,常見的無線網卡大多為PCMCIA、PCI和USB三種類型,筆者使用最多的是 PCMCIA(Personal Computer Memory Card International Association)接口的無線網卡。對于有些設備,配置無線連接非常簡單:只要在您使用的 Linux 發行版本,插入無線網卡,在設置過程中單擊鼠標,并輸入正確的聯網參數就可以了。通常基于朗訊(Lucent)芯片組的無線網卡的安裝比較簡單,筆者使用的Cisco Aironet Wireless 802.11b 在Mandrake 8.2 Linu安裝程序可以順利地找到設備驅動, 使用基于intersil PRISM2-based cards 芯片組的PCMCIA的無線網卡安裝就比較復雜了。需要一個第三方工具安裝。

目前經過www.Linux.org 認證的PCMCIA網卡有兩大類。使用基于朗訊(Lucent)芯片組的PCIMCIA無線網卡和使用基于intersil PRISM2-based cards 芯片組的PCMCIA的無線網卡見表-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

總的來說Linux下無線網卡的安裝順序一般是:

采取全部安裝方式安裝Linux發行版本,重新編譯內核,并除去任何對內核提供的 PCMCIA 驅動程序的部分。

了解網卡的規格并且下載并編譯相應的 PCMCIA-CS 庫和驅動程序

下載、編譯并安裝無線網卡必需的所有驅動程序。這一步驟對于有些網卡是可選的,而對于有些網卡是必須執行的。做與不做很大程度上取決于您所選的無線網卡。

修改和無線網卡的相關設定。從新啟動Linux系統和網絡。

設置無線網絡相關步驟如下:

(1)用“iwconfig”命令來顯示無線網卡(eth0、eth1)的信息。在以下的步驟中,用ethX表示無線網卡的名稱。

(2)設置無線網卡的操作模式為Managed:
#iwconfig ethX mode Managed

(3)如果采用了WEP加密,需要設置WEP密碼:
#iwconfig ethX key password XXXXXX

對應40位和128位加密,password分別為6位和10位的十六進制數字。

(4)設置SSID,其中ESSID為無線接入(Access Point)的SSID。
# iwconfig ethX essid ESSID

(5)創建/etc/sysconfig/network/ifcfg-ethX配置文件,使得機器每次啟動時,無線網卡都會自動獲得IP地址。該文件內容如下:
            

BOOTPROTO=‘dhcp’

MTU=‘’

REMOTE_IPADDR=‘’

STARTMODE=‘onboot’

UNIQUE=‘’

(6)啟動無線網卡:
#ifconfig ethX up



強強 2007-10-09 07:08 發表評論
]]>
主站蜘蛛池模板: 一级中文字幕乱码免费| 亚洲午夜免费视频| 国产美女无遮挡免费视频网站| 黄色片在线免费观看| 国产成人精品免费视频网页大全 | 免费99热在线观看| 国产成人高清精品免费软件| 四虎影视www四虎免费| 成熟女人特级毛片www免费| www.999精品视频观看免费| 美女裸身网站免费看免费网站 | 亚洲午夜无码毛片av久久京东热| 亚洲一区二区三区免费视频| 亚洲18在线天美| 亚洲综合无码一区二区痴汉| 亚洲无人区码一二三码区别图片| 亚洲最大无码中文字幕| 中文字幕无码亚洲欧洲日韩| 亚洲人成网站在线播放2019| 妇女自拍偷自拍亚洲精品| 免费看黄福利app导航看一下黄色录像 | 久久青草国产免费观看| 国产精品区免费视频| 在线观看免费中文视频| 国产91色综合久久免费| 午夜dj在线观看免费视频| 亚洲国产精品视频| 亚洲精品无码永久中文字幕| 久久国产亚洲电影天堂| 久久综合亚洲色一区二区三区| 亚洲成AV人片久久| 亚洲精品天堂无码中文字幕| 男女作爱免费网站| 国产精品网站在线观看免费传媒 | 亚洲乱码在线卡一卡二卡新区| 国产精品久久久久久亚洲影视| 日韩a毛片免费观看| a国产成人免费视频| 免费观看激色视频网站(性色)| 免费黄网在线观看| 国产亚洲精品拍拍拍拍拍|