﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-分享ｊａｖａ带来的快乐-文章分类-linux 操作系统配置</title><link>http://www.blogjava.net/lyjjq/category/9244.html</link><description>我喜欢ｊａｖａ新东西</description><language>zh-cn</language><lastBuildDate>Thu, 30 May 2013 13:00:46 GMT</lastBuildDate><pubDate>Thu, 30 May 2013 13:00:46 GMT</pubDate><ttl>60</ttl><item><title>怎么样查看/tmp空间占用</title><link>http://www.blogjava.net/lyjjq/articles/399146.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 11 May 2013 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/399146.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/399146.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/399146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/399146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/399146.html</trackback:ping><description><![CDATA[<div>&nbsp; 986&nbsp; df -h<br />&nbsp; 987&nbsp; df<br />&nbsp; 988&nbsp; lsof /tmp/<br />&nbsp; 989&nbsp; lsof /tmp<br />&nbsp; 990&nbsp; ps aux | grep linsniffe<br />&nbsp; 991&nbsp; updatedb<br />&nbsp; 992&nbsp; locate linsniffer<br />&nbsp; 993&nbsp; locate linsniff<br />&nbsp; 994&nbsp; pstree 11790<br />&nbsp; 995&nbsp; killall linsniffer<br />&nbsp; 996&nbsp; ps aux | grep linsniffe<br />&nbsp; 997&nbsp; df -h<br />&nbsp; 998&nbsp; ll<br />&nbsp; 999&nbsp; df<br />&nbsp;1000&nbsp; exit<br />&nbsp;1001&nbsp; df<br /></div><img src ="http://www.blogjava.net/lyjjq/aggbug/399146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2013-05-11 15:13 <a href="http://www.blogjava.net/lyjjq/articles/399146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vsftp "上传 553 Could not create file" </title><link>http://www.blogjava.net/lyjjq/articles/397143.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Fri, 29 Mar 2013 04:24:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/397143.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/397143.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/397143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/397143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/397143.html</trackback:ping><description><![CDATA[<div><div>          <h3>         <span><a href="http://blog.csdn.net/csucxcc/article/details/1770598">         </a></span>     </h3> </div>               <div>     2007-09-03 17:46     <span title="阅读次数">18213人阅读</span>     <span title="评论次数"><a href="http://blog.csdn.net/csucxcc/article/details/1770598#comments">评论</a>(5)</span>     <a title="收藏">收藏</a>     <a href="http://blog.csdn.net/csucxcc/article/details/1770598#report" title="举报">举报</a>      </div> <div><a href="http://blog.csdn.net/tag/details.html?tag=file" target="_blank">file</a><a href="http://blog.csdn.net/tag/details.html?tag=ftp%e6%9c%8d%e5%8a%a1%e5%99%a8" target="_blank">ftp服务器</a><a href="http://blog.csdn.net/tag/details.html?tag=windows" target="_blank">windows</a><a href="http://blog.csdn.net/tag/details.html?tag=linux" target="_blank">linux</a></div>         <div altbg2=""  t_msg"="" style="width: auto; height: auto">我在LINUX下VSftp建立一个FTP服务器，但从WINDOWS使用FTP时，无法上传也无法下载!出错如下 <br /><br />ftp&gt;;&nbsp;ls <br />200&nbsp;PORT&nbsp;command&nbsp;successful.&nbsp;Consider&nbsp;using&nbsp;PASV. <br />150&nbsp;Here&nbsp;comes&nbsp;the&nbsp;directory&nbsp;listing. <br />Desktop <br />dead.letter <br />ou <br />vsftp-1.txt <br />vsftp-2.txt <br />vsftpd.conf <br />226&nbsp;Directory&nbsp;send&nbsp;OK. <br />ftp&gt;;&nbsp;put&nbsp;d:/fcitx/fcitx-3.1.1.tar.tar <br />200&nbsp;PORT&nbsp;command&nbsp;successful.&nbsp;Consider&nbsp;using&nbsp;PASV. <br />553&nbsp;Could&nbsp;not&nbsp;create&nbsp;file. <br />ftp&gt;;&nbsp;get&nbsp;vsftpd.conf <br />200&nbsp;PORT&nbsp;command&nbsp;successful.&nbsp;Consider&nbsp;using&nbsp;PASV. <br />550&nbsp;Failed&nbsp;to&nbsp;open&nbsp;file. <br /></div>   &nbsp;<a target="_blank" href="http://bbs.chinaunix.net/viewpro.php?uid=280497"><strong>lc0</strong></a><strong> 回复于：2005-08-08 13:51:37<br /><br /></strong>搞定了，最重要的是man&nbsp;ftpd_selinux，解决这个问题只要： <br />1.&nbsp;setsebool&nbsp;-P&nbsp;ftpd_disable_trans&nbsp;1 <br />2.&nbsp;service&nbsp;vsftpd&nbsp;restart <br />就行了。 <br />谢谢老大！</div><img src ="http://www.blogjava.net/lyjjq/aggbug/397143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2013-03-29 12:24 <a href="http://www.blogjava.net/lyjjq/articles/397143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux curl使用简单介绍</title><link>http://www.blogjava.net/lyjjq/articles/394223.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Mon, 14 Jan 2013 16:35:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/394223.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/394223.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/394223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/394223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/394223.html</trackback:ping><description><![CDATA[Curl是Linux下一个很强大的http命令行工具，其功能十分强大。<br /><br />1) 二话不说，先从这里开始吧！<br /><br />$ curl http://www.linuxidc.com<br /><br />回车之后，www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了&nbsp;&nbsp;&nbsp; ~<br /><br />2) 嗯，要想把读过来页面存下来，是不是要这样呢？<br /><br />$ curl http://www.linuxidc.com &gt; page.html<br /><br />当然可以，但不用这么麻烦的！<br /><br />用curl的内置option就好，存下http的结果，用这个option: -o<br /><br />$ curl -o page.html http://www.linuxidc.com<br /><br />这样，你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%，自然就 OK咯<br /><br />3) 什么什么？！访问不到？肯定是你的proxy没有设定了。<br /><br />使用curl的时候，用这个option可以指定http访问所使用的proxy服务器及其端口： -x<br /><br />$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com<br /><br />4) 访问有些网站的时候比较讨厌，他使用cookie来记录session信息。<br /><br />像IE/NN这样的浏览器，当然可以轻易处理cookie信息，但我们的curl呢？.....<br /><br />我们来学习这个option: -D &lt;&#8212; 这个是把http的response里面的cookie信息存到一个特别的文件中去<br /><br />$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com<br /><br />这样，当页面被存到page.html的同时，cookie信息也被存到了cookie0001.txt里面了<br /><br />5）那么，下一次访问的时候，如何继续使用上次留下的cookie信息呢？要知道，很多网站都是靠监视你的cookie信息，来判断你是不是不按规矩访问他们的网站的。<br /><br />这次我们使用这个option来把上次的cookie信息追加到http request里面去： -b<br /><br />$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com<br /><br />这样，我们就可以几乎模拟所有的IE操作，去访问网页了！<br /><br />6）稍微等等&nbsp;&nbsp;&nbsp; ~我好像忘记什么了&nbsp;&nbsp;&nbsp; ~<br /><br />对了！是浏览器信息<br /><br />有些讨厌的网站总要我们使用某些特定的浏览器去访问他们，有时候更过分的是，还要使用某些特定的版本&nbsp;&nbsp;&nbsp;&nbsp; NND，哪里有时间为了它去找这些怪异的浏览器呢！？<br /><br />好在curl给我们提供了一个有用的option，可以让我们随意指定自己这次访问所宣称的自己的浏览器信息： -A<br /><br />$ 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<br /><br />这样，服务器端接到访问的要求，会认为你是一个运行在Windows 2000上的 IE6.0，嘿嘿嘿，其实也许你用的是苹果机呢！<br /><br />而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台 PC上跑着的Linux，用的是Netscape 4.73，呵呵呵<br /><br />7）另外一个服务器端常用的限制方法，就是检查http访问的referer。比如你先访问首页，再访问里面所指定的下载页，这第二次访问的 referer地址就是第一次访问成功后的页面地址。这样，服务器端只要发现对下载页面某次访问的referer地址不是首页的地址，就可以断定那是个盗连了&nbsp;&nbsp;&nbsp; ~<br /><br />讨厌讨厌 ~我就是要盗连&nbsp;&nbsp;&nbsp; ~！！<br /><br />幸好curl给我们提供了设定referer的option： -e<br /><br />$ 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<br /><br />这样，就可以骗对方的服务器，你是从mail.linuxidc.com点击某个链接过来的了，呵呵呵<br /><br />8）写着写着发现漏掉什么重要的东西了！&#8212;&#8212;- 利用curl 下载文件<br /><br />刚才讲过了，下载页面到一个文件里，可以使用 -o ，下载文件也是一样。比如，<br /><br />$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG<br /><br />这里教大家一个新的option： -O 大写的O，这么用：<br /><br />$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG<br /><br />这样，就可以按照服务器上的文件名，自动存在本地了！<br /><br />再来一个更好用的。<br /><br />如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载，难不成还要让我们写一个script来完成这些操作？<br /><br />不干！<br /><br />在curl里面，这么写就可以了：<br /><br />$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG<br /><br />呵呵呵，厉害吧？！ ~<br /><br />9）再来，我们继续讲解下载！<br /><br />$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG<br /><br />这样产生的下载，就是<br /><br />~zzh/001.JPG<br /><br />~zzh/002.JPG<br /><br />...<br /><br />~zzh/201.JPG<br /><br />~nick/001.JPG<br /><br />~nick/002.JPG<br /><br />...<br /><br />~nick/201.JPG<br /><br />够方便的了吧？哈哈哈<br /><br />咦？高兴得太早了。<br /><br />由于zzh/nick下的文件名都是001，002...，201，下载下来的文件重名，后面的把前面的文件都给覆盖掉了 ~<br /><br />没关系，我们还有更狠的！<br /><br />$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG<br /><br />&#8212;这是.....自定义文件名的下载？ &#8212;对头，呵呵！<br /><br />这样，自定义出来下载下来的文件名，就变成了这样：原来： ~zzh/001.JPG &#8212;-&gt; 下载后： 001-zzh.JPG 原来： ~nick/001.JPG &#8212;-&gt; 下载后： 001-nick.JPG<br /><br />这样一来，就不怕文件重名啦，呵呵<br /><br />9）继续讲下载<br /><br />我们平时在windows平台上，flashget这样的工具可以帮我们分块并行下载，还可以断线续传。curl在这些方面也不输给谁，嘿嘿<br /><br />比如我们下载screen1.JPG中，突然掉线了，我们就可以这样开始续传<br /><br />$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG<br /><br />当然，你不要拿个flashget下载了一半的文件来糊弄我&nbsp;&nbsp;&nbsp; 别的下载软件的半截文件可不一定能用哦 ~<br /><br />分块下载，我们使用这个option就可以了： -r<br /><br />举例说明<br /><br />比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 要下载（赵老师的电话朗诵 :D ）我们就可以用这样的命令：<br /><br />$ curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\<br /><br />$ curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\<br /><br />$ curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\<br /><br />$ curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3<br /><br />这样就可以分块下载啦。不过你需要自己把这些破碎的文件合并起来如果你用UNIX或苹果，用 cat zhao.part* &gt; zhao.MP3就可以如果用的是Windows，用copy /b 来解决吧，呵呵<br /><br />上面讲的都是http协议的下载，其实ftp也一样可以用。用法嘛，<br /><br />$ curl -u name:passwd ftp://ip:port/path/file<br /><br />或者大家熟悉的<br /><br />$ curl ftp://name:passwd@ip:port/path/file<br /><br />10) 说完了下载，接下来自然该讲上传咯上传的option是 -T<br /><br />比如我们向ftp传一个文件：<br /><br />$ curl -T localfile -u name:passwd ftp://upload_site:port/path/<br /><br />当然，向http服务器上传文件也可以比如<br /><br />$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi<br /><br />注意，这时候，使用的协议是HTTP的PUT method<br /><br />刚才说到PUT，嘿嘿，自然让老服想起来了其他几种methos还没讲呢！ GET和POST都不能忘哦。<br /><br />http提交一个表单，比较常用的是POST模式和GET模式<br /><br />GET模式什么option都不用，只需要把变量写在url里面就可以了比如：<br /><br />$ curl http://www.linuxidc.com/login.cgi?user=nickwolfe&amp;password=12345<br /><br />而POST模式的option则是 -d<br /><br />比如，<br /><br />$ curl -d "user=nickwolfe&amp;password=12345" http://www.linuxidc.com/login.cgi<br /><br />就相当于向这个站点发出一次登陆申请&nbsp;&nbsp;&nbsp; ~<br /><br />到底该用GET模式还是POST模式，要看对面服务器的程序设定。<br /><br />一点需要注意的是，POST模式下的文件上的文件上传，比如<br /><br />&lt;form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi"&gt;<br /><br />&lt;input type=file name=upload&gt;<br /><br />&lt;input type=submit name=nick value="go"&gt;<br /><br />&lt;/form&gt;<br /><br />这样一个HTTP表单，我们要用curl进行模拟，就该是这样的语法：<br /><br />$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi<br /><br />罗罗嗦嗦讲了这么多，其实curl还有很多很多技巧和用法比如 https的时候使用本地证书，就可以这样<br /><br />$ curl -E localcert.pem https://remote_server<br /><br />再比如，你还可以用curl通过dict协议去查字典&nbsp;&nbsp;&nbsp; ~<br /><br />$ curl dict://dict.org/d:computer<br /><img src ="http://www.blogjava.net/lyjjq/aggbug/394223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2013-01-15 00:35 <a href="http://www.blogjava.net/lyjjq/articles/394223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写shell脚本的技巧</title><link>http://www.blogjava.net/lyjjq/articles/389903.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 20 Oct 2012 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/389903.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/389903.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/389903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/389903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/389903.html</trackback:ping><description><![CDATA[1.test测试命令<br />test命令用于检查某个条件是否成立，它可以进行数值、字符和文件三个方面的测试，<br />其测试符和相应的功能分别如下：<br />(1)数值测试：<br />-eq：等于则为真<br />-ne：不等于则为真<br />-gt：大于则为真<br />-ge：大于等于则为真<br />-lt：小于则为真<br />-le：小于等于则为真<br />(2)字符串测试：<br />=：等于则为真<br />!=：不相等则为真<br />-z 字符串：字符串长度伪则为真<br />-n 字符串：字符串长度不伪则为真<br />(3)文件测试：<br />-e 文件名：如果文件存在则为真<br />-r 文件名：如果文件存在且可读则为真<br />-w 文件名：如果文件存在且可写则为真<br />-x 文件名：如果文件存在且可执行则为真<br />-s 文件名：如果文件存在且至少有一个字符则为真<br />-d 文件名：如果文件存在且为目录则为真<br />-f 文件名：如果文件存在且为普通文件则为真<br />-c 文件名：如果文件存在且为字符型特殊文件则为真<br />-b 文件名：如果文件存在且为块特殊文件则为真<br />另外，Linux还提供了与(&#8220;！&#8221;)、或(&#8220;-o)、非(&#8220;-a&#8221;)三个逻辑操作符用于将测试条件连接起来，<br />其优先级为：&#8220;！&#8221;最高，&#8220;-a&#8221;次之，&#8220;-o&#8221;最低。<br />同时，bash也能完成简单的算术运算，格式如下：<br />$[expression]<br />例如：var1=2<br />var2=$[var1*10+1]<br />则：var2的值为21。<br /><br />2.if条件语句<br />if [ -x /sbin/quotaon ]; then <br />echo "Turning on Quota for root filesystem" <br />/sbin/quotaon / <br />elif [ -x /sbin/quotaon ]; then<br />/usr/bin/bash<br />else<br />echo "ok"<br />fi <br /><br />3.for 循环<br />#!/bin/sh<br />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"<br />for i in $WORD ; do <br />echo $i <br />done <br /><br />#!/bin/sh <br />FILES=`ls /txt/*.txt`<br />for txt in $FILES ; do <br />doc=`echo $txt | sed "s/.txt/.doc/"` <br />mv $txt $doc <br />done <br /><br />4.while和until 循环<br />#!/bin/sh <br />while [ -f /var/run/ppp0.pid ] ; do <br />killall pppd<br />done<br /><br />#!/bin/sh <br />until [ -f /var/run/ppp0.pid ] ; do <br />sleep 1 <br />done<br /><br />Shell还提供了true和false两条命令用于建立无限循环结构的需要，<br />它们的返回状态分别是总为0或总为非0<br /><br />5.case 条件选择<br />#!/bin/sh <br />case $1 in <br />start | begin) <br />echo "start something" <br />;; <br />stop | end) <br />echo "stop something" <br />;; <br />*) <br />echo "Ignorant" <br />;; <br />esac<br />case表达式中也可以使用shell的通配符(&#8220;*&#8221;、&#8220;？&#8221;、&#8220;[ ]&#8221;)。<br /><br />6.无条件控制语句break和continue<br />break 用于立即终止当前循环的执行，而contiune用于不执行循环中后面的语句<br />而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。<br /><br />7.函数定义<br />在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的，<br />因此它与shell程序形式上是相似的，不同的是它不是一个单独的进程，<br />而是shell程序的一部分。函数定义的基本格式为：<br />functionname<br />{<br />若干命令行<br />}<br />调用函数的格式为：<br />functionname param1 param2 &#8230;&#8230;<br />shell函数可以完成某些例行的工作，而且还可以有自己的退出状态，<br />因此函数也可以作为if、while等控制结构的条件。<br />在函数定义时不用带参数说明，但在调用函数时可以带有参数，此时<br />shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。<br /><br />8.命令分组<br />在shell中有两种命令分组的方法：&#8220;()&#8221;和&#8220;{}&#8221;，前者当shell执行()<br />中的命令时将再创建一个新的子进程，然后这个子进程去执行圆括弧中的命令。<br />当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、<br />当前工作目录等)的改变影响到下面语句的执行时，就应该把这些命令放在圆括<br />弧中，这样就能保证所有的改变只对子进程产生影响，而父进程不受任何干扰；<br />{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们<br />要真正使用圆括弧和花括弧时(如计算表达式的优先级)，则需要在其前面加上转<br />义符()以便让shell知道它们不是用于命令执行的控制所用。<br /><br />9.信号<br />trap命令用于在shell程序中捕捉到信号，之后可以有三种反应方式：<br />(1)执行一段程序来处理这一信号<br />(2)接受信号的默认操作<br />(3)忽视这一信号<br />trap对上面三种方式提供了三种基本形式：<br />第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时，<br />将执行双引号中的命令串。<br />trap 'commands' signal-list<br />trap "commands" signal-list<br />为了恢复信号的默认操作，使用第二种形式的trap命令：<br />trap signal-list<br />第三种形式的trap命令允许忽视信号：<br />trap " " signal-list<br />注意：<br />(1)对信号11(段违例)不能捕捉，因为shell本身需要捕捉该信号去进行内存的转储。<br />(2)在trap中可以定义对信号0的处理(实际上没有这个信号)，shell程序在其终止<br />(如执行exit语句)时发出该信号。<br />(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后，如果这些命令没有将<br />shell程序终止的话，shell程序将继续执行收到信号时所执行的命令后面的命令，这样<br />将很容易导致shell程序无法终止。<br />另外，在trap语句中，单引号和双引号是不同的，当shell程序第一次碰到trap语句时，<br />将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话，那么shell<br />不会对commands中的变量和命令进行替换，否则commands中的变量和命令将用当时具体<br />的值来替换。<br /><br />10. 运行shell程序的方法<br />执行shell程序的方法有三种：<br />(1)sh shell程序文件名<br />格式为：<br />bash shell 程序文件名<br />这实际上是调用一个新的bash命令解释程序，而把shell程序文件名作为参数传递给它。<br />新启动的shell将去读指定的文件，执行文件中列出的命令，当所有的命令都执行完结束。<br />该方法的优点是可以利用shell调试功能。<br />(2)sh<br /><br />11. bash程序的调试<br />bash -选择项 shell程序文件名<br />几个常用的选择项是：<br />-e：如果一个命令失败就立即退出<br />-n：读入命令但是不执行它们<br />-u：置换时把未设置的变量看作出错<br />-v：当读入shell输入行时把它们显示出来<br />-x：执行命令时把命令和它们的参数显示出来<br />上面的所有选项也可以在shell程序内部用&#8220;set -选择项&#8221;的形式引用，而&#8220;set +选择项&#8221;则<br />将禁止该选择项起作用。如果只想对程序的某一部分使用某些选择项时，则可以将该部分用<br />上面两个语句包围起来。<br />1.未置变量退出和立即退出<br />未置变量退出特性允许用户对所有变量进行检查，如果引用了一个未赋值的变量就终止shell<br />程序的执行。shell通常允许未置变量的使用，在这种情况下，变量的值为空。如果设置了未<br />置变量退出选择项，则一旦使用了未置变量就显示错误信息，并终止程序的运行。未置变量退<br />出选择项为&#8220;-u&#8221;。<br />当shell运行时，若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时，如<br />果未经重新定向，该出错信息会打印在终端屏幕上，而shell程序仍将继续执行。要想在错误发<br />生时迫使shell程序立即结束，可以使用&#8220;-e&#8221;选项将shell程序的执行立即终止。<br />2.shell程序的跟踪<br />调试shell程序的主要方法是利用shell命令解释程序的&#8220;-v&#8221;或&#8220;-x&#8221;选项来跟踪程序的执行。&#8220;-v&#8221;<br />选择项使shell在执行程序的过程中，把它读入的每一个命令行都显示出来，而&#8220;-x&#8221;选择项使shell<br />在执行程序的过程中把它执行的每一个命令在行首用一个&#8220;+&#8221;加上命令名显示出来。并把每一个变量<br />和该变量所取的值也显示出来，因此，它们的主要区别在于：在执行命令行之前无&#8220;-v&#8221;则打印出命<br />令行的原始内容，而有&#8220;-v&#8221;则打印出经过替换后的命令行的内容。<br />除了使用shell的&#8220;-v&#8221;和&#8220;-x&#8221;选择项以外，还可以在shell程序内部采取一些辅助调试的措施。<br />例如，可以在shell程序的一些关键地方使用echo命令把必要的信息显示出来，它的作用相当于C语<br />言中的printf语句，这样就可以知道程序运行到什么地方及程序目前的状态。<br /><br />12. bash的内部命令<br />bash命令解释程序包含了一些内部命令。内部命令在目录列表时是看不见的，它们由shell本身提供。<br />常用的内部命令有：echo、eval、exec、export、readonly、read、shift、wait和点(.)。<br />下面简单介绍其命令格式和功能。<br />1.echo<br />命令格式：echo arg<br />功能：在屏幕上打印出由arg指定的字符串。<br />2.eval<br />命令格式：eval args<br />功能：当shell程序执行到eval语句时，shell读入参数args，并将它们组合成一个新的命令，然后<br />执行。<br />3.exec<br />命令格式：exec 命令 命令参数<br />功能：当shell执行到exec语句时，不会去创建新的子进程，而是转去执行指定的命令，<br />当指定的命令执行完时，该进程，也就是最初的shell就终止了，所以shell程序中exec<br />后面的语句将不再被执行。<br />4.export<br />命令格式：export 变量名 或：export 变量名=变量值<br />功能：shell可以用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。<br />但子shell不能用export把它的变量向上带入父shell。<br />注意：不带任何变量名的export语句将显示出当前所有的export变量。<br />5.readonly<br />命令格式：readonly 变量名<br />功能：将一个用户定义的shell变量标识为不可变的。不带任何参数的readonly命令将显示出<br />所有只读的shell变量。<br />6.read<br />命令格式：<br />read变量名表<br />功能：从标准输入设备读入一行，分解成若干字，赋值给shell程序内部定义的变量。<br />7.shift语句<br />功能：shift语句按如下方式重新命名所有的位置参数变量：$2成为$1，$3成为$2&#8230;&#8230;在程序中<br />每使用一次shift语句，都使所有的位置参数依次向左移动一个位置，并使位置参数&#8220;$#&#8221;减一，<br />直到减到0。<br />8.wait<br />功能：是shell等待在后台启动的所有子进程结束。Wait的返回值总是真。<br />9.exit<br />功能：退出shell程序。在exit之后可有选择地指定一个数字作为返回状态。<br />10.&#8220;.&#8221;(点)<br />命令格式：. Shell程序文件名<br />功能：使shell读入指定的shell程序文件并依次执行文件中的所有语句。<br /><br />13. 特殊参数：<br />1. $*: 代表所有参数，其间隔为IFS内定参数的第一个字元 <br />2. $@: 与*星号类同。不同之处在於不参照IFS<br />3. $#: 代表参数数量<br />4. $?: 执行上一个指令的返回值<br />5. $-: 最近执行的foreground pipeline的选项参数<br />6. $$: 本身的Process ID<br />7. $!: 执行上一个背景指令的PID<br />8. $_: 显示出最後一个执行的命令	<img src ="http://www.blogjava.net/lyjjq/aggbug/389903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-10-20 09:25 <a href="http://www.blogjava.net/lyjjq/articles/389903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何编写一个shell脚本 </title><link>http://www.blogjava.net/lyjjq/articles/389904.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 20 Oct 2012 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/389904.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/389904.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/389904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/389904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/389904.html</trackback:ping><description><![CDATA[
<br /><br />　　本文结合大量实例阐述如何编写一个shell脚本。 <br /><br />　　为什么要进行shell编程 <br /><br />　　在Linux系统中，虽然有各种各样的图形化接口工具，但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集，而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化，shell特别擅长系统管理任务，尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 <br /><br />　　下面，让我们一起来看看shell是如何工作的： <br /><br />　　建立一个脚本 <br /><br />　　Linux中有好多中不同的shell，但是通常我们使用bash (bourne again shell) 进行shell编程，因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash（但是在大多数情况下，这些脚本同样可以在bash的大姐，bourne shell中运行）。 <br /><br />　　如同其他语言一样，通过我们使用任意一种文字编辑器，比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始（必须方在文件的第一行）： <br /><br />　　#!/bin/sh <br /><br />　　符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 <br /><br />　　当编辑好脚本时，如果要执行该脚本，还必须使其可执行。 <br /><br />　　要使脚本可执行： <br /><br />　　chmod +x filename <br /><br />　　然后，您可以通过输入： ./filename 来执行您的脚本。 <br /><br />　　注释 <br /><br />　　在进行shell编程时，以#开头的句子表示注释，直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释，那么即使相当长的时间内没有使用该脚本，您也能在很短的时间内明白该脚本的作用及工作原理。 <br /><br />　　变量 <br /><br />　　在其他编程语言中您必须使用变量。在shell编程中，所有的变量都由字符串组成，并且您不需要对变量进行声明。要赋值给一个变量，您可以这样写： <br /><br />　　变量名=值 <br /><br />　　取出变量值可以加一个美元符号（$）在变量前面： <br /><br />　　#!/bin/sh <br />　　#对变量赋值： <br />　　a="hello world" <br />　　# 现在打印变量a的内容： <br />　　echo "A is:" <br />　　echo $a <br /><br />　　在您的编辑器中输入以上内容，然后将其保存为一个文件first。之后执行chmod +x first 使其可执行，最后输入./first执行该脚本。 <br />　　这个脚本将会输出： <br />　　A is: <br />　　hello world <br /><br />　　有时候变量名很容易与其他文字混淆，比如： <br /><br />　　num=2 <br />　　echo "this is the $numnd" <br /><br />　　这并不会打印出"this is the 2nd"，而仅仅打印"this is the "，因为shell会去搜索变量numnd的值，但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量： <br /><br />　　num=2 <br />　　echo "this is the ${num}nd" <br /><br />　　这将打印： this is the 2nd <br /><br />　　有许多变量是系统自动设定的，这将在后面使用这些变量时进行讨论。 <br /><br />　　如果您需要处理数学表达式，那么您需要使用诸如expr等程序（见下面）。 <br /><br />　　除了一般的仅在程序内有效的shell变量以外，还有环境变量。由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论，因为通常情况下仅仅在登录脚本中使用环境变量。 <br /><br />　　Shell命令和流程控制 <br /><br />　　在shell脚本中可以使用三类命令： <br /><br />　　1)Unix 命令: <br /><br />　　虽然在shell脚本中可以使用任意的unix命令，但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 <br /><br />　　常用命令语法及功能 <br /><br />　　echo "some text": 将文字内容打印在屏幕上 <br /><br />　　ls: 文件列表 <br /><br />　　wc -l filewc -w filewc -c file&amp;: 计算文件行数计算文件中的单词数计算文件中的字符数 <br /><br />　　cp sourcefile destfile&amp;: 文件拷贝 <br /><br />　　mv oldname newname : 重命名文件或移动文件 <br /><br />　　rm file&amp;: 删除文件 <br /><br />　　grep 'pattern' file&amp;: 在文件内搜索字符串比如：grep 'searchstring' file.txt <br /><br />　　cut -b colnum file&amp;: 指定欲显示的文件内容范围，并将它们输出到标准输出设备比如：输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆，这是两个完全不同的命令 <br /><br />　　cat file.txt: 输出文件内容到标准输出设备（屏幕）上 <br /><br />　　file somefile&amp;: 得到文件类型 <br /><br />　　read var: 提示用户输入，并将输入赋值给变量 <br /><br />　　sort file.txt: 对file.txt文件中的行进行排序 <br /><br />　　uniq: 删除文本文件中出现的行列比如： sort file.txt | uniq <br /><br />　　expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 <br /><br />　　find: 搜索文件比如：根据文件名搜索find . -name filename -print <br /><br />　　tee: 将数据输出到标准输出设备(屏幕) 和文件比如：somecommand | tee outfile <br /><br />　　basename file&amp;: 返回不包含路径的文件名比如： basename /bin/tux将返回 tux <br /><br />　　dirname file&amp;: 返回文件所在路径比如：dirname /bin/tux将返回 /bin <br /><br />　　head file&amp;: 打印文本文件开头几行 <br /><br />　　tail file : 打印文本文件末尾几行 <br /><br />　　sed: Sed是一个基本的查找替换程序。可以从标准输入（比如命令管道）读入文本，并将结果输出到标准输出（屏幕）。该命令采用正则表达式（见参考）进行搜索。不要和shell中的通配符相混淆。比如：将linuxfocus 替换为 LinuxFocus ：cat text.file | sed 's/linuxfocus/LinuxFocus/' &gt; newtext.file <br /><br />　　awk: awk 用来从文本文件中提取字段。缺省地，字段分割符是空格，可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用，作为字段分割符，同时打印第一个和第三个字段。如果该文件内容如下： Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为：Adam Bor, IndiaKerry Miller, USA <br /><br />　　2) 概念: 管道, 重定向和 backtick <br /><br />　　这些不是系统命令，但是他们真的很重要。 <br /><br />　　管道 (|) 将一个命令的输出作为另外一个命令的输入。 <br />　　grep "hello" file.txt | wc -l <br />　　在file.txt中搜索包含有"hello"的行并计算其行数。 <br />　　在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。 <br /><br />　　重定向：将命令的结果输出到文件，而不是标准输出（屏幕）。 <br />　　&gt; 写入文件并覆盖旧文件 <br />　　&gt;&gt; 加到文件的尾部，保留旧文件内容。 <br /><br />　　反短斜线 <br />　　使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。 <br />　　命令： <br />　　find . -mtime -1 -type f -print <br />　　用来查找过去24小时（-mtime -2则表示过去48小时）内修改过的文件。如果您想将所有查找到的文件打一个包，则可以使用以下脚本： <br />　　#!/bin/sh <br />　　# The ticks are backticks (`) not normal quotes ('): <br />　　tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print` <br /><br />　　3) 流程控制 <br /><br />　　"if" 表达式 如果条件为真则执行then后面的部分： <br />　　if ....; then <br />　　　 .... <br />　　elif ....; then <br />　　　 .... <br />　　else <br />　　　 .... <br />　　fi <br />　　大多数情况下，可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等... <br />　　通常用" [ ] "来表示条件测试<span style="color: red;">。</span><span style="color: red;">注意这里的空格很重要。要确保方括号的空</span><span style="color: red;">格</span>。 <br />　　[ -f "somefile" ] ：判断是否是一个文件 <br />　　[ -x "/bin/ls" ] ：判断/bin/ls是否存在并有可执行权限 <br />　　[ -n "$var" ] ：判断$var变量是否有值 <br />　　[ "$a" = "$b" ] ：判断$a和$b是否相等 <br /><br />　　执行man test可以查看所有测试表达式可以比较和判断的类型。 <br />　　直接执行以下脚本： <br />　　#!/bin/sh <br />　　if [ "$SHELL" = "/bin/bash" ]; then <br />　　　 echo "your login shell is the bash (bourne again shell)" <br />　　else <br />　　　 echo "your login shell is not bash but $SHELL" <br />　　fi <br />　　变量$SHELL包含了登录shell的名称，我们和/bin/bash进行了比较。 <br /><br />　　快捷操作符 <br /><br />　　熟悉C语言的朋友可能会很喜欢下面的表达式： <br /><br />　　[ -f "/etc/shadow" ] &amp;&amp; echo "This computer uses shadow passwors" <br /><br />　　这里 &amp;&amp; 就是一个快捷操作符，如果左边的表达式为真则执行右边的语句。您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印" This computer uses shadow passwors"。同样或操作(||)在shell编程中也是可用的。这里有个例子： <br /><br />#!/bin/sh <br />mailfolder=/var/spool/mail/james <br />[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder"&nbsp; exit 1; } <br />echo "$mailfolder has mail from:" <br />grep "^From " $mailfolder <br /><br />　　该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的"From" 一行。如果不可读则或操作生效，打印错误信息后脚本退出。这里有个问题，那就是我们必须有两个命令： <br /><br />　　-打印错误信息 <br />　　-退出程序 <br /><br />　　我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。 <br />　　不用与和或操作符，我们也可以用if表达式作任何事情，但是使用与或操作符会更便利很多。 <br /><br />　　case表达式可以用来匹配一个给定的字符串，而不是数字。 <br /><br />case ... in <br />...) do something here&nbsp; <br />esac <br /><br />　　让我们看一个例子。 file命令可以辨别出一个给定文件的文件类型，比如： <br /><br />file lf.gz <br /><br />　　这将返回： <br /><br />lf.gz: gzip compressed data, deflated, original filename, <br />last modified: Mon Aug 27 23:09:18 2001, os: Unix <br /><br />我们利用这一点写了一个叫做smartzip的脚本，该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件： <br /><br />#!/bin/sh <br />ftype=`file "$1"` <br />case "$ftype" in <br />"$1: Zip archive"*) <br />　　unzip "$1"&nbsp; <br />"$1: gzip compressed"*) <br />　　gunzip "$1"&nbsp; <br />"$1: bzip2 compressed"*) <br />　　bunzip2 "$1"&nbsp; <br />*) error "File $1 can not be uncompressed with smartzip";; <br />esac <br /><br />　　您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。也就是说，当我们运行：<br /><br />smartzip articles.zip <br />$1 就是字符串 articles.zip <br /><br />　　select 表达式是一种bash的扩展应用，尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。 <br /><br />select var in ...&nbsp; do <br />　break <br />done <br />.... now $var can be used .... <br /><br />下面是一个例子： <br /><br />#!/bin/sh <br />echo "What is your favourite OS?" <br />select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do <br />　　　　break <br />done <br />echo "You have selected $var" <br /><br />下面是该脚本运行的结果： <br /><br />What is your favourite OS? <br />1) Linux <br />2) Gnu Hurd <br />3) Free BSD <br />4) Other <br />#? 1 <br />You have selected Linux <br /><br />您也可以在shell中使用如下的loop表达式： <br /><br />while ...; do <br />.... <br />done <br /><br />while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true. 关键字"break" 用来跳出循环。而关键字"continue"用来不执行余下的部分而直接跳到下一个循环。 <br /><br />for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量： <br /><br />for var in ....; do <br />　.... <br />done <br /><br />在下面的例子中，将分别打印ABC到屏幕上： <br /><br />#!/bin/sh <br />for var in A B C&nbsp; do <br />　echo "var is $var" <br />done <br /><br />下面是一个更为有用的脚本showrpm，其功能是打印一些RPM包的统计信息： <br /><br />#!/bin/sh <br /># list a content summary of a number of RPM packages <br /># USAGE: showrpm rpmfile1 rpmfile2 ... <br /># EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm <br />for rpmpackage in $*; do <br />　if [ -r "$rpmpackage" ];then <br />　　echo "=============== $rpmpackage ==============" <br />　　rpm -qi -p $rpmpackage <br />　else <br />　　echo "ERROR: cannot read file $rpmpackage" <br />　fi <br />done <br /><br />这里出现了第二个特殊的变量$*，该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm <br />此时 $* 包含了 3 个字符串，即openssh.rpm, w3m.rpm and webgrep.rpm. <br /><br /><br />引号 <br /><br />在向程序传递任何参数之前，程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符（比如*）替换成合适的文件名，它变量替换成变量值。为了防止程序作这种替换，您可以使用引号：让我们来看一个例子，假设在当前目录下有一些文件，两个jpg文件， mail.jpg 和tux.jpg。 <br /><br />#!/bin/sh <br />echo *.jpg <br />这将打印出"mail.jpg tux.jpg"的结果。 <br />引号 (单引号和双引号) 将防止这种通配符扩展： <br />#!/bin/sh <br />echo "*.jpg" <br />echo '*.jpg' <br />这将打印"*.jpg" 两次。 <br /><br />单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。 <br /><br />#!/bin/sh <br />echo $SHELL <br />echo "$SHELL" <br />echo '$SHELL' <br /><br />运行结果为： <br />/bin/bash <br />/bin/bash <br />$SHELL <br /><br />最后，还有一种防止这种扩展的方法，那就是使用转义字符&#8212;&#8212;反斜杆： <br /><br />echo *.jpg <br />echo $SHELL <br />这将输出： <br />*.jpg <br />$SHELL <br />Here document. <br /><br />当要将几行文字传递给一个命令时，here document.（译者注：目前还没有见到过对该词适合的翻译）一种不错的方法。对每个脚本写一段帮助性的文字是很有用的，此时如果我们四有那个here document.就不必用echo函数一行行输出。 一个 "Here document.quot; 以 &lt;&lt; 开头，后面接上一个字符串，这个字符串还必须出现在here document.末尾。下面是一个例子，在该例子中，我们对多个文件进行重命名，并且使用here document.打印帮助： <br /><br />#!/bin/sh <br /># we have less than 3 arguments. Print the help text: <br />if [ $# -lt 3 ]&nbsp; then <br />cat &lt;&lt;HELP <br />ren -- renames a number of files using sed regular expressions <br /><br />USAGE: ren 'regexp' 'replacement' files... <br /><br />EXAMPLE: rename all *.HTM files in *.html: <br />　ren 'HTM$' 'html' *.HTM <br /><br />HELP <br />　exit 0 <br />fi <br />OLD="$1" <br />NEW="$2" <br /># The shift command removes one argument from the list of <br /># command line arguments. <br />shift <br />shift <br /># $* contains now all the files: <br />for file in $*; do <br />　　if [ -f "$file" ]&nbsp; then <br />　　　newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"` <br />　　　if [ -f "$newfile" ]; then <br />　　　　echo "ERROR: $newfile exists already" <br />　　　else <br />　　　　echo "renaming $file to $newfile ..." <br />　　　　mv "$file" "$newfile" <br />　　　fi <br />　　fi <br />done <br /><br />这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个，则将帮助文字传递给cat命令，然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。 如果输入参数等于或大于3个，我们就将第一个参数赋值给变量OLD，第二个参数赋值给变量NEW。下一步，我们使用shift命令将第一个和第二个参数从参数列表中删除，这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环，命令行参数列表被一个接一个地被赋值给变量$file。接着我们判断该文件是否存在，如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目的：得到了旧文件名和新文件名。然后使用mv命令进行重命名。 <br /><br />函数 <br /><br />如果您写了一些稍微复杂一些的程序，您就会发现在程序中可能在几个地方使用了相同的代码，并且您也会发现，如果我们使用了函数，会方便很多。一个函数是这个样子的： <br /><br />functionname() <br />{ <br /># inside the body $1 is the first argument given to the function <br /># $2 the second ... <br />body <br />} <br /><br />您需要在每个程序的开始对函数进行声明。 <br /><br />下面是一个叫做xtitlebar的脚本，使用这个脚本您可以改变终端窗口的名称。这里使用了一个叫做help的函数。正如您可以看到的那样，这个定义的函数被使用了两次。 <br /><br />#!/bin/sh <br /># vim: set sw=4 ts=4 et: <br /><br />help() <br />{ <br />　　cat &lt;&lt;HELP <br />xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole <br /><br />USAGE: xtitlebar [-h] "string_for_titelbar" <br /><br />OPTIONS: -h help text <br /><br />EXAMPLE: xtitlebar "cvs" <br /><br />HELP <br />　　exit 0 <br />} <br /><br /># in case of error or if -h is given we call the function help: <br />[ -z "$1" ] &amp;&amp; help <br />[ "$1" = "-h" ] &amp;&amp; help <br /><br /># send the escape sequence to change the xterm titelbar: <br />echo -e "33]0;$107" <br /># <br /><br />　　在脚本中提供帮助是一种很好的编程习惯，这样方便其他用户（和您）使用和理解脚本。 <br /><br />　　命令行参数 <br /><br />　　我们已经见过$* 和 $1, $2 ... $9 等特殊变量，这些特殊变量包含了用户从命令行输入的参数。迄今为止，我们仅仅了解了一些简单的命令行语法（比如一些强制性的参数和查看帮助的-h选项）。但是在编写更复杂的程序时，您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号，后面再加上参数值 (比如文件名)。 <br /><br />　　有好多方法可以实现对输入参数的分析，但是下面的使用case表达式的例子无遗是一个不错的方法。<br /><br />#!/bin/sh <br />help() <br />{ <br />　cat &lt;&lt;HELP <br />This is a generic command line parser demo. <br />USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2 <br />HELP <br />　exit 0 <br />} <br /><br />while [ -n "$1" ]; do <br />case $1 in <br />　　-h) help;shift 1;; # function help is called <br />　　-f) opt_f=1;shift 1;; # variable opt_f is set <br />　　-l) opt_l=$2;shift 2;; # -l takes an argument -&gt; shift by 2 <br />　　--) shift;break;; # end of options <br />　　-*) echo "error: no such option $1. -h for help";exit 1;; <br />　　*) break;; <br />esac <br />done <br /><br />echo "opt_f is $opt_f" <br />echo "opt_l is $opt_l" <br />echo "first arg is $1" <br />echo "2nd arg is $2" <br /><br />您可以这样运行该脚本： <br />cmdparser -l hello -f -- -somefile1 somefile2 <br /><br />返回的结果是： <br />opt_f is 1 <br />opt_l is hello <br />first arg is -somefile1 <br />2nd arg is somefile2 <br /><br />　　这个脚本是如何工作的呢？脚本首先在所有输入命令行参数中进行循环，将输入参数与case表达式进行比较，如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例，首先输入的应该是包含减号的参数。 <br /><br />　　实例 <br /><br />　　一般编程步骤 <br /><br />　　现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本（framework.sh），该脚本包含了大多数脚本都需要的框架结构，是一个非常不错的主意。这时候，在写一个新的脚本时我们只需要执行一下copy命令： <br />cp framework.sh myscript <br />然后再插入自己的函数。 <br /><br />　　让我们再看两个例子： <br /><br />　　二进制到十进制的转换 <br /><br />　　脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子： <br /><br />#!/bin/sh <br /># vim: set sw=4 ts=4 et: <br />help() <br />{ <br />　cat &lt;&lt;HELP <br />b2h -- convert binary to decimal <br /><br />USAGE: b2h [-h] binarynum <br /><br />OPTIONS: -h help text <br /><br />EXAMPLE: b2h 111010 <br />will return 58 <br />HELP <br />　exit 0 <br />} <br /><br />error() <br />{ <br />　　# print an error and exit <br />　　echo "$1" <br />　　exit 1 <br />} <br /><br />lastchar() <br />{ <br />　　# return the last character of a string in $rval <br />　　if [ -z "$1" ]; then <br />　　　　# empty string <br />　　　　rval="" <br />　　　　return <br />　　fi <br />　　# wc puts some space behind the output this is why we need sed: <br />　　numofchar=`echo -n "$1" | wc -c | sed 's/ //g' ` <br />　　# now cut out the last char <br />　　rval=`echo -n "$1" | cut -b $numofchar` <br />} <br /><br />chop() <br />{ <br />　　# remove the last character in string and return it in $rval <br />　　if [ -z "$1" ]; then <br />　　　　# empty string <br />　　　　rval="" <br />　　　　return <br />　　fi <br />　　# wc puts some space behind the output this is why we need sed: <br />　　numofchar=`echo -n "$1" | wc -c | sed 's/ //g' ` <br />　　if [ "$numofchar" = "1" ]; then <br />　　　　# only one char in string <br />　　　　rval="" <br />　　　　return <br />　　fi <br />　　numofcharminus1=`expr $numofchar "-" 1` <br />　　# now cut all but the last char: <br />　　rval=`echo -n "$1" | cut -b 0-${numofcharminus1}` <br />} <br /><br /><br />while [ -n "$1" ]; do <br />case $1 in <br />　　-h) help;shift 1;; # function help is called <br />　　--) shift;break;; # end of options <br />　　-*) error "error: no such option $1. -h for help";; <br />　　*) break;; <br />esac <br />done <br /><br /># The main program <br />sum=0 <br />weight=1 <br /># one arg must be given: <br />[ -z "$1" ] &amp;&amp; help <br />binnum="$1" <br />binnumorig="$1" <br /><br />while [ -n "$binnum" ]; do <br />　　lastchar "$binnum" <br />　　if [ "$rval" = "1" ]; then <br />　　　　sum=`expr "$weight" "+" "$sum"` <br />　　fi <br />　　# remove the last position in $binnum <br />　　chop "$binnum" <br />　　binnum="$rval" <br />　　weight=`expr "$weight" "*" 2` <br />done <br /><br />echo "binary $binnumorig is decimal $sum" <br /># <br />　　该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..)，比如二进制"10"可以这样转换成十进制： <br />　　0 * 1 + 1 * 2 = 2 <br />　　为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc -c计算字符个数，然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。 <br /><br />　　文件循环程序 <br />　　或许您是想将所有发出的邮件保存到一个文件中的人们中的一员，但是在过了几个月以后，这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的脚本rotatefile 可以解决这个问题。这个脚本可以重命名邮件保存文件（假设为outmail）为outmail.1，而对于outmail.1就变成了outmail.2 等等等等... <br /><br />#!/bin/sh <br /># vim: set sw=4 ts=4 et: <br />ver="0.1" <br />help() <br />{ <br />　　cat &lt;&lt;HELP <br />rotatefile -- rotate the file name <br /><br />USAGE: rotatefile [-h] filename <br /><br />OPTIONS: -h help text <br /><br />EXAMPLE: rotatefile out <br />This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1 <br />and create an empty out-file <br /><br />The max number is 10 <br /><br />version $ver <br />HELP <br />　　exit 0 <br />} <br /><br />error() <br />{ <br />　　echo "$1" <br />　　exit 1 <br />} <br />while [ -n "$1" ]; do <br />case $1 in <br />　　-h) help;shift 1;; <br />　　--) break;; <br />　　-*) echo "error: no such option $1. -h for help";exit 1;; <br />　　*) break;; <br />esac <br />done <br /><br /># input check: <br />if [ -z "$1" ]&nbsp; then <br />error "ERROR: you must specify a file, use -h for help" <br />fi <br />filen="$1" <br /># rename any .1 , .2 etc file&amp;: <br />for n in 9 8 7 6 5 4 3 2 1; do <br />　　if [ -f "$filen.$n" ]; then <br />　　　　p=`expr $n + 1` <br />　　　　echo "mv $filen.$n $filen.$p" <br />　　　　mv $filen.$n $filen.$p <br />　　fi <br />done <br /># rename the original file&amp;: <br />if [ -f "$filen" ]; then <br />　　echo "mv $filen $filen.1" <br />　　mv $filen $filen.1 <br />fi <br />echo touch $filen <br />touch $filen <br /><br />　　这个脚本是如何工作的呢？在检测用户提供了一个文件名以后，我们进行一个9到1的循环。文件9被命名为10，文件8重命名为9等等。循环完成之后，我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件。 <br /><br />　　调试 <br /><br />　　最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译，插入一个echo命令也不需要多少时间。 <br /><br />　　shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误，您可以这样来进行调试： <br />　　sh -x strangescript <br />　　这将执行该脚本并显示所有变量的值。 <br />　　shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用： <br />　　sh -n your_script <br />　　这将返回所有语法错误。 <br />　　我们希望您现在可以开始写您自己的shell脚本，希望您玩得开心。<br /> 
<img src ="http://www.blogjava.net/lyjjq/aggbug/389904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-10-20 09:25 <a href="http://www.blogjava.net/lyjjq/articles/389904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>邮件发送退信分析大全/SMTP error, RCPT TO: 550 Relay Deny</title><link>http://www.blogjava.net/lyjjq/articles/382047.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Mon, 02 Jul 2012 23:21:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/382047.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/382047.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/382047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/382047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/382047.html</trackback:ping><description><![CDATA[<h2 class="title content-title">&nbsp;</h2> <div id="content" class="content text-content clearfix"> 　一般情况下，当您发送的邮件无法正常到达收件人时，mail 邮件系统将会自动给您发一封警告信，这封退信通知里面包含了无法正常发送到对方邮件地址的原因，所以绝大多数情况下可以通过退信通知来找出发信失败的原因及解决方式。 当您收到退信时，可以选择将您收到的退信通知的原件完整的转发给我们，由我们协助分析退信产生的原因并提供对应的解决方式。或者您可以参照以下的方式，查看退信内容确认退信原因以便找出解决方式。下面这是一个典型的退信的内容，右边对应的是退信内容的含义。<p>　　Hi. This is the smtp delivery program.</p><p>　　I'm afraid I wasn't able to deliver your message to the following addresses.</p><p>　　This is a permanent error; I've given up. Sorry it didn't work out.</p><p>　　=====================================================</p><p>　　您好!</p><p>　　您的邮件不能成功的递送到指定地址。这是一个永久的错误，因此不得不放弃继续递送。</p><p>　　, sorry, no mailbox here by that name</p><p>　　错误原因</p><p>　　--- Below this line is a copy of the message.</p><p>　　Received: from unknown (HELO test) ([xxx.xxx.xxx.xxx])</p><p>　　(envelope-sender )</p><p>　　by [xxx.xxx.xxx.xxx] with ESMTP</p><p>　　for ; Thu, 23 Dec 2004 09:40:58 +0800</p><p>　　Message-ID: &lt;004201c4e890$73a42b50$33777777@test.local&gt;</p><p>　　From: "test" 原信件发件人地址</p><p>　　To: 原信件收件人地址</p><p>　　Subject: test 原信件主题</p><p>　　Date: Thu, 23 Dec 2004 09:40:58 +0800 原信件发送时间</p><p>　　MIME-Version: 1.0</p><p>　　Content-Type: multipart/alternative;</p><p>　　boundary="----=_NextPart_000_003F_01C4E8D3.816BDDD0"</p><p>　　X-Priority: 3</p><p>　　X-MSMail-Priority: Normal</p><p>　　X-Mailer: Microsoft Outlook Express 6.00.2800.1437</p><p>　　X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441</p><p> </p> <p> </p><p>　　以上是 Winmail Server 产生的错误回弹信，由于各个邮件系统的错误回弹信表达方式不同，所以同一个原因可能因邮件系统的不同而有不同的描述。以下是一些常见的退信分析:(Winmail Server 退信分析)</p><p>　　<strong>(1)收件人地址不存在</strong></p><p>　　错误原因: 收件人邮箱帐号不存在或收件方服务器无法找到收件人邮件地址</p><p>　　可能出现的关键字: 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</p><p>　　解决方法: 由于在该网站中无法找到要投递的用户地址，因此该邮件无法正确投递到该地址中让接受者接收出现了此退信。可能是由于写错了email地址，请确认该地址的输入是否正确，或者同收件人确认是否其email地址。确认无误后重新投递即可。</p><p>　　Winmail Server 退信实例:no mailbox here by that name</p><p>　　其他系统退信实例:</p><p>　　***@yahoo.com, 554 delivery error: dd This user doesn't have a yahoo.com account (***@yahoo.com) [-5] - mta155.mail.sc5.yahoo.com</p><p>　　550 Invalid recipient: &lt;***@index.com.jo&gt; (RCPT TO:***@index.com.jo)</p><p>　　550 ***@szonline.net unknown user account (RCPT TO:***@szonline.net)</p><p>　　550 5.1.1 &lt;***@melco.com.hk&gt;... User unknown (RCPT TO:***@melco.com.hk)</p><p>　　&lt;*****@eyou.com&gt;&#8230;&#8230; invalid address</p><p>　　&lt;*****@126.com&gt;: host &#8230;&#8230;said: 550 5.7.1 Unable to relay for *****@126.com:host&#8230;&#8230;said: 550 5.1.1 is not a valid mailbox</p><p>　　&lt;*****@china.com&gt;: host smtp.china.com[61.135.144.88] said: 550 &lt;*****&gt;, No such user.</p><p>　　&lt;*****@hotmail.com&gt;&#8230;&#8230;user account inactive</p><p>　　&lt;*****@zjuem.zju.edu.cn&gt;&#8230;&#8230; unknown or illegal alias:*****</p><p>　　&lt;*****@163.net&gt;: User ***@163.net is not found in Server.</p><p>　　&lt;*****@263.net.cn&gt;: host &#8230;&#8230;said: 550 Invalid recipient</p><p>　　<strong>(2)收件人邮箱被禁用</strong></p><p>　　错误原因: 收件人用户邮箱被禁用或者不可以使用,可能长时间未登陆使用过，或者未交费等原因导致邮箱帐号被冻结</p><p>　　可能出现的关键字: disabled</p><p>　　解决方法: 联系收件人，请他联系他的邮箱系统管理员确认收件人邮箱问题</p><p>　　Winmail Server 退信实例:sorry, the mailbox has disabled.</p><p>　　其他系统退信实例:</p><p>　　User *****@163.net is disabled</p><p>　　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</p><p> </p> <p> </p><p>　　<strong>(3)收件人信箱空间不足</strong></p><p>　　错误原因: 接收方已经没有足够邮箱空间接受新邮件</p><p>　　可能出现的关键字: mailbox is full、exceed、hard limit</p><p>　　解决方法: 收件人邮箱已经没有足够的剩余空间接收您的邮件，请使用其他的方式与收件人联系，请接收方先清除邮箱中没用的邮件，腾出空间接收新邮件</p><p>　　Winmail Server 退信实例:mail size/count over quota</p><p>　　其他系统退信实例:</p><p>　　***@pa.inter.net mailbox is full (MTA-imposed quota exceeded while writing to file tmp/1084783015.15814.clever.eusc.inter.net): retry timeout exceeded</p><p>　　&lt;*****@tom.com&gt;: the message to ***@tom.com is bounced because : Quota exceed the hard limit</p><p>　　&lt;*****@email.com&gt;: host &#8230;&#8230; said: 552 This person's account is exceeding their quota.</p><p>　　&lt;*****@hotmail.com&gt;&#8230;&#8230;: exceeded storage allocation</p><p>　　<strong>(4)邮件被过滤</strong></p><p>　　错误原因: 对方对接受的邮件作了限制，您的邮件超出了对方的要求或是对方服务器的要求。</p><p>　　可能出现的关键字: not welcome、content rejected、Message blocked、Recipient reject、No welcome message from****、Mail refused/Box is busy</p><p>　　解决方法: 出现 not Welcome/message blocked/content rejected 等信息的原因是收件人在邮箱中设定了一些过滤规则，而你所发的邮件中的信息如"发件人姓名"、"发件人地址"、"邮件主题"、"邮件正文"、"附件"等中的信息符合该收件人或收件人的服务商设置的过滤规则，因此导致邮件在投递后被对方系统拒收。</p><p>　　请把自己所投递邮件做适当的修改，如发送的"邮件主题"等。如果尝试过还是不能正常发送，最好通过其他方式联系收件人，把退信信息提供给收件人查询具体是符合了什么样的过滤规则，确认后进行适当修改就可以正常发送了</p><p>　　Winmail Server 退信实例:delivery failure: the message matches up to the filter rule(level: system， name:xxx)</p><p>　　其他系统退信实例:</p><p>　　****@SINA.COM : Failure reply of RCPT to *****@SINA.COM from 202.106.182.168, 445 服务器拒绝 - server rejected (#4.4.4)</p><p>　　***@kodak.com, 550 5.5.0 Mail refused</p><p>　　&lt;*****@163.net&gt;: This Message is not welcome</p><p>　　&lt;*****@163.net&gt;: Message content rejected</p><p>　　&lt;*****@163.com&gt;:&#8230;&#8230;Error: content rejected</p><p>　　&lt;*****@163.net&gt;: host &#8230;&#8230;said: 450 Fail, Box is busy</p><p>　　******@163.com : No welcome message from 202.108.44.203</p><p>　　&lt;*****@sohu.com&gt;: host &#8230;&#8230;said: 550 Recipient reject</p><p>　　554 &lt;***@long-horn.com&gt;: Sender address rejected: c46 (RCPT TO:***@dial.pipex.com)</p><p> </p> <p> </p><p>　　<strong>(5)域名解析出错</strong></p><p>　　错误原因: 对方服务器或者对方域名有错误，或者域名信息无法正确的被internet的DNS系统解析，无法找到对方的邮件服务器IP，导致投递出错</p><p>　　可能出现的关键字: Host、not found、bad host、domain、unreachable、Connection refused</p><p>　　解决方法: 首先请检查输入收件人地址时的是否存在拼写错误，确认错误后重新发送就可以解决了。相当部分退信存在这样的情况。</p><p>　　确认收件人地址没有问题的时候，还可能由于收件人服务器的域名信息由于DNS失效、更新失败等等原因造成域名解析不正确。具体可以通过nslookup命令等方式查询收件人邮箱域名的mail exchanger进行确认。对于这种情形的话，需要通过其他途径联系收件人，收件人通知自己的服务商管理维护人员修订DNS错误后就可以正常发送了。</p><p>　　Winmail Server 退信实例:don't find mail exchanger and domain's ip address</p><p>　　其他系统退信实例:</p><p>　　&lt;*****@sian.com&gt;: Name service error for domain sian.com: Host not found</p><p>　　&lt;*****@hot.163.net&gt;: Name service error for domain hot.163.net: Host not found</p><p>　　&lt;***@.powerise.com.cn&gt;: bad host/domain syntax: ".powerise.com.cn"</p><p>　　****@shou.com&gt;: connect to shou.com: Connection refused</p><p>　　&lt;*****@263.com&gt;: domain unreachable</p><p>　　<strong>(6)无法识别的命令</strong></p><p>　　错误原因: 无法识别错误命令(邮件系统指令)</p><p>　　可能出现的关键字: error in command、syntax error、Error email address format</p><p>　　解决方法: 其原因多数是由于发件人使用的软件或者发送系统在投递连接对方系统时候，对方系统无法识别此软件或者发送方系统的指令导致发送错误。</p><p>　　请使用常用的软件如Outlook Express或者Foxmail等进行邮件编辑，或者直接使用WEB的方式发送邮件，可以减少出错的机会。</p><p>　　有时由于发送者填写接收者地址时候输入了非法字符如&#8220;"&#8221;&#8220;/&#8221;&#8220;&#8221;&#8220;^&#8221;等非法字符也可以导致此类无法成功发送。</p><p>　　Winmail Server 退信实例:syntax error</p><p>　　其他系统退信实例:</p><p>　　&lt;*****@ap.dragoco.com&gt;: host &#8230;&#8230;said: 500 error in command</p><p>　　&lt;""***@yahoo.com.cn??***""@sina.com&gt;: host &#8230;&#8230;said: 555 *****??? -syntax error (#5.5.4)</p><p>　　***@codiac.co.il, Error email address format</p><p> </p> <p> </p><p>　<strong>　(7)发送的邮件大小超过最大限制</strong></p><p>　　错误原因: 由于发送人的邮件过大导致接收人的邮件系统服务商拒收此邮件</p><p>　　可能出现的关键字: exceeds、maximum message size、Data size</p><p>　　解决方法: 通常此类错误都是由于收件人邮件系统不支持他们系统中的用户接收太大的邮件。因此用户可以把过大的邮件附件使用outlook express的邮件分拆功能进行分拆发送。通常后面跟的数字就是对方系统所允许接收的单个邮件的大小。</p><p>　　Winmail Server 退信实例:sorry, the message size exceeds databytes limit</p><p>　　其他系统退信实例:</p><p>　　&lt;*****@brilliantprint.com.hk&gt;: host &#8230;&#8230; said:552 Message size exceeds fixed maximum message size: 7372800 bytes&lt;*****@brilliantprint.com.hk&gt;:&#8230;&#8230;said: 552 5.2.3 Message size exceeds fixed maximum message size (7200000)</p><p>　　&lt;*****@pub.xaonline.com&gt;: host smtp.xaonline.com[61.134.1.143] said: 552 Data size must not exceed 4096K bytes</p><p>　<strong>　(8)邮件被拒收</strong></p><p>　　错误原因: 由于发送方的邮件被接收方的系统服务商拒收此邮件</p><p>　　可能出现的关键字: banned 、isn't in my list of allowed rcpthosts、domain is not welcome、Connection refused、Relaying denied、spam、spammers</p><p>　　解决方法: 由于对方系统把发送的地址、域或者IP地址列入拒收列表中，使得从此地方寄出的邮件被拒绝接收的情况。</p><p>　　当遇到此情况，您可以联系我们的技术支持，把您接收到的退信内容转发给我们。或联系对方系统管理员，尽快解决此类屏蔽问题。Email邮件头揭密</p><p>　　Winmail Server 退信实例:553 sorry, you don't authenticate or the domain isn't in the list of allowed rcpthosts</p><p>　　退信实例:</p><p>　　50 5.7.1 &lt;******@kalmarlighting.com&gt;... Relaying denied. Please check your mail first or restart your mail session. (RCPT TO: ******@kalmarlighting.com)</p><p>　　&lt;*****@weefth.com&gt;: host&#8230;&#8230;said: 571 ****@21cn.com... from mail01j.rapidsite.net You are banned, contact yourlocal admin.</p><p>　　&lt;*****@tom.COM&gt;: host &#8230;&#8230;said: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)</p><p>　　&lt;*****@cbnweb.com&gt;: host &#8230;&#8230; said: 550&lt;*****@cbnweb.com&gt;... Relaying denied</p><p>　　550 5.7.1 &lt;***@mail1.rayson.com&gt;... Relaying denied (RCPT TO:***@mail1.rayson.com)&lt;*****@163.com&gt;: connect to mf2.***.com: Connection refused</p><p>　　&lt;*****@morgan.ucs.mun.ca&gt;&#8230;&#8230;&lt;*****@163.net&gt;... We don't accept mail from spammers</p><p> </p> <p> </p><p>　　<strong>(9)连接对方服务器失败</strong></p><p>　　错误原因: 在系统发送邮件时查找到了对方的邮件服务器，但由于internet网络不正常或者对方服务器的 mta 服务不正常，而不能正常获得对方邮件服务器的回应，即对方服务器无响应.</p><p>　　可能出现的关键字: Connection timed out、Connect to鬃?鬃.鬃.鬃:25 failure</p><p>　　Error sending mail body to ******、Failure welcome message from</p><p>　　解决方法: 通过nslookup找到对方域名的MX记录指向的邮件服务器IP，通过 telnet 对方服务器的25端口等方式确认是网络连接不正常还是由于对方服务器的25端口没有响应。一般说来，无论是网络故障还是对方系统故障，都能对方系统管理员很快被发现和恢复，所以可以选择再次发送进行尝试。对于部分国外的邮件服务商，出现这种情况持续的时间会比较长，如果尝试超过1天都不能成功，建议先使用其他方式与收件人联系。</p><p>　　确定您的机器能不能正确的连接到外面的主机，最后测试能不能连接发送不成功的主机(出现 220 开头字串提示)。</p><p>　　在命令行方式下执行如下命令:</p><p>　　C:&gt; telnet m209.163.com 25</p><p>　　220 Welcome to coremail System(With Anti-Spam) 2.1 for 163.com</p><p>　　C:&gt; telnet sinamx.sina.com.cn 25</p><p>　　220 sina.com ESMTP</p><p>　　C:&gt; telnet xxx.xxx.xxx.xxx 25</p><p>　　220 *******</p><p>　　Winmail Server 退信实例:connect remote host error (xxx.xxx.xxx.xxx : 25)</p><p>　　其他系统退信实例:</p><p>　　&lt;*****@iris.sipp.ac.cn&gt;: connect to iris.sipp.ac.cn: Connection timed out</p><p>　　*****@hkbn.com ; Connect to 212.227.34.3:25 failure</p><p>　　*******@163.com ; Error sending mail body to 202.108.44.215</p><p>　　***@t-online.de; Failure welcome message from 194.25.134.10</p><p>　　<strong>(10)单封邮件收件人数超过限制</strong></p><p>　　错误原因: 单封邮件有过多收件人</p><p>　　可能出现的关键字: Too many、less than xx</p><p>　　解决方法: 邮件系统会对每一个邮件投递者每次连接时候的同一封邮件的多投用户数量，因此当用户使用群发时候就会出现对方拒收或者错误的信息返回如"Too many recipients"信息。因此用户请再每一封邮件投递时候，尽量使得每次的接收用户数量控制在20～30人左右，如果接收量比较多的情况，可以分开多几次发送。</p><p>　　Winmail Server 退信实例:sorry, too many recipients</p><p>　　其他系统退信实例:</p><p>　　&lt;*****@email.com&gt;: host &#8230;&#8230; said: 553 Too many recipients in the mail, should less than xx</p><p> </p> <p> </p><p>　　<strong>(11)反垃圾邮件列表</strong></p><p>　　错误原因: 发信服务器地址被加入到某些反垃圾邮件组织的黑名单中，导致拒收</p><p>　　可能出现的关键字: Mail from ***.***.***.*** refused, see http://**************</p><p>　　解决方法: 国外很多反垃圾邮件组织也把中国的很多地区的IP地址直接列入到黑名单，他们封闭中国的IP地址未必合理，很多反垃圾邮件组织把中国整个IP地址都列入了黑名单。</p><p>　　当遇到此情况，您可以联系我们的技术支持，把您接收到的退信内容转发给我们。我们会联系反垃圾邮件组织，尽力去解决此类问题。RBL是什么?</p><p>　　Winmail Server 退信实例:553 sorry, your mailserver is listed in bl.spamcop.net(Please see: *********), mail from is not accepted here</p><p>　　退信实例:</p><p>　　550 5.7.1 blacklisted [*.*.*.*] refer : ***@tm.net.my (RCPT TO:***@tm.net.my)</p><p>　　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)</p><p>　　554 5.7.1 Rejected xxx.xxx.xxx.xxx found in dnsbl.sorbs.net</p><p>　　******@roedl.cn ; Failure reply of RCPT to *****@roedl.cn from *.*.*.*, 451 Mail from *.*.*.* refused, see http://anti-spam.org.cn/</p><p>　　<strong>(12)DNS反向解析</strong></p><p>　　错误原因: 某些邮件服务器为了防垃圾邮件的需要，接收邮件时进行对发信人的email地址进行DNS反向查询，对于公网存在正确DNS解析的发件人的邮件放行，而对于DNS反向解析不正确的地址予以拦截。</p><p>　　可能出现的关键字: can't verify FROM domain in DNS、domain does not exist</p><p>　　解决方法: 存在此类问题的多数是具有自己域名的企业邮箱用户，这类的服务器要求用户所用的域名解析设置中有关的SOA记录、MX记录都正确可查询。所以DNS解析记录不完整或者对方反向解析时刚好域名所在的邮件服务器出现故障不能正常返回查询，而收件人的邮件系统具有这样的验证机制是，就会出现这样的退信了。</p><p>　　确认退信是以上原因的时候，通知你的域名服务器的管理员检查确认你的域名解析记录信息或者稍后等域名服务器正常了即可正常发送。 检查MX记录是否存在的方法 域名信息查询</p><p>　　Winmail Server 退信实例:554 refused 'mail from' because return MX does not exist</p><p>　　退信实例:</p><p>　　***@solvay.com, 553 can't verify FROM domain in DNS</p><p>　　***@hkstar.com, 553 zeng.pionmi.com does not exist</p><p>　　&lt;***@se.abb.com&gt; , remote server said: 550-Verification failed for</p><p>　　550-It appears that the DNS operator for bpeg.cn</p><p>　　550-has installed an invalid MX record with an IP address</p><p>　　550-instead of a domain name on the right hand side.</p><p>　　550 Sender verify failed</p></div><img src ="http://www.blogjava.net/lyjjq/aggbug/382047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-07-03 07:21 <a href="http://www.blogjava.net/lyjjq/articles/382047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postfix 邮件维护</title><link>http://www.blogjava.net/lyjjq/articles/377033.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sun, 29 Apr 2012 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/377033.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/377033.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/377033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/377033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/377033.html</trackback:ping><description><![CDATA[<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/newversion/articles/1490910.html">postfix 如何删除队列中的邮件</a><div class="clear"></div><div class="postBody"><div id="cnblogs_post_body"><h2># <a title="Permanent Link to postfix 如何删除队列中的邮件" href="http://yoozhu.com/?p=650" rel="bookmark">postfix 如何删除队列中的邮件</a></h2><div class="date"><a title="查看 linux 的全部文章" href="http://yoozhu.com/?cat=3" rel="category">linux</a> @ 06 二月 2009, </div><div class="entry"><p>[root@mail ~]# mailq 查看队列邮件</p><p>postsuper -d ALL  这样就删除所有邮件啦</p><p>[注意：大小写有区别，请注意大小写！]</p><p>网上看到，Postfix 邮件队列管理的几个 Perl 小程序，pfdel.pl 是用来删除队列中指定用户的邮件的，luserdel.pl 是用来删除队列中无效用户的邮件的，moqdel.pl 是用来删除队列中邮箱配额已满的用户的邮件的，jmoqdel.pl 是删除邮箱配额已满的用户的垃圾邮件箱的。我装的是EMOS1.3，找不到这几个小程序。</p><p>用外面的邮件服务器发点EDM，一直有问题，成功太少，干脆用自己的邮件服务器发送，谁知道3W多封邮件是发出去了，全部堵在我们自己的服务器上，邮件服务器给堵死了<img class="aligncenter size-medium wp-image-651" title="spool" alt="spool" src="http://yoozhu.com/wp-content/uploads/2009/02/spool-300x139.jpg" width="300" height="139" />只好删除队列中的垃圾邮件了，网上说是 mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | postsuper -d </p><p>参考官网写个脚本也不行，应该多研究下还可以的，脚本如下：</p><p>Q: 删除邮件队列</p><p>A: mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; </p><p>| postsuper -d -</p><p><span style="color: rgb(51, 102, 255);">[root@linuxas3 root]# vi mailqueue<br />#!/bin/bash<br /># </span><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#107;&#105;&#108;&#108;&#101;&#114;&#64;&#57;&#56;&#49;&#50;&#46;&#110;&#101;&#116;"><span style="color: rgb(51, 102, 255);">netkiller@9812.net</span></a><span style="color: rgb(51, 102, 255);"><br />queue=$1<br /># echo ${queue}<br />DELETE=&#8221;mailq | tail +2 | awk&nbsp; &#8217;BEGIN { RS = \&#8221;\&#8221; } /${queue}$/ { print \$1 }&#8217; | tr -d &#8216;*!&#8217; </span></p><p>| postsuper -d -&#8221;<br />echo ${DELETE} &gt; queue<br />chmod 755 queue<br />./queue<br />[root@linuxas3 root]# chmod 755 mailqueue<br />[root@linuxas3 root]# ./mailqueue chen@example\\.org<br />mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } /chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | </p><p>由于邮件中有一些正常邮件，所以只能删除特定字符的垃圾邮件，通过mailq显示出来邮件队列：2AB97F815E* 2749 Thu Feb 5 15:48:38 web1@shequsz.com</p><p>szmaxoni@public.szptt.net.cn&nbsp;&nbsp; 删除邮件只需要命令postsuper -d 2AB97F815E即可。应该通过管道可以简单实现，但是我对使用管道不熟悉，只好多走两步了&#8230;&#8230;</p><p>[root@mail ~]# mailq |grep shequsz\.com &gt;&gt;/home/maillist 到出包含shequsz.com的垃圾邮件到maillist</p><p>[root@mail home]# awk &#8216;{print $1}&#8217; maillist &gt;&gt;/home/mywang/dellist 把邮件ID导出来，查看下如果带*，需要编辑替换下</p><p>[root@mail mywang]# cat delmail.sh&nbsp; 编辑一个脚本，把文件里面ID逐个匹配然后删除邮件</p><p>for i in `cat dellist`; </p><p>do&nbsp; postsuper -d $i;</p><p>done</p><p>[root@mail mywang]# sh delmail.sh </p><p><span style="color: rgb(51, 102, 255);">postfix有四种不同的邮件队列，并且由队列管理进程统一进行管理：</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">　　1． maildrop：本地邮件放置在maildrop中，同时也被拷贝到incoming中。</span></p><p><span style="color: rgb(51, 102, 255);">　　2． incoming：放置正在到达或队列管理进程尚未发现的邮件。</span></p><p><span style="color: rgb(51, 102, 255);">　　3． active：放置队列管理进程已经打开了并正准备投递的邮件，该队列有长度的限制。</span></p><p><span style="color: rgb(51, 102, 255);">　　4． deferred：放置不能被投递的邮件。</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">postfix日常维护</span></p><p><span style="color: rgb(51, 102, 255);">启动postfix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix start</span></p><p><span style="color: rgb(51, 102, 255);">停止postfix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix stop</span></p><p><span style="color: rgb(51, 102, 255);">重新读取postfix配置文件&nbsp;&nbsp;&nbsp;&nbsp; postfix reload</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">立即投递队列中所有邮件(慎用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix flush</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">查看队列邮件&nbsp;&nbsp;&nbsp; postqueue -p 或 mailqpostqueue -p |tail</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">使用postsuper 来维护队列。一般是先用mailq查看队列里的邮件，找到对应的id，然后用postsuper -d来删除。例如id是0EAF3A9B 那么postsuper -d 0EAF3A9B</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">Q: 删除邮件队列</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">A: mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | postsuper -d</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">详细要看mailq和postsuper的用法</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">修复队列以及任何权限错误</span></p><p><span style="color: rgb(51, 102, 255);">postfix check</span></p><p><span style="color: rgb(51, 102, 255);">查看邮件系统日志</span></p><p><span style="color: rgb(51, 102, 255);">tail -f /var/log/maillog</span></p></div></div></div><img src ="http://www.blogjava.net/lyjjq/aggbug/377033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-04-29 18:38 <a href="http://www.blogjava.net/lyjjq/articles/377033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn 文件名的大小写转换步骤</title><link>http://www.blogjava.net/lyjjq/articles/369385.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 04 Feb 2012 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/369385.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/369385.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/369385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/369385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/369385.html</trackback:ping><description><![CDATA[ 
1.先将问卷备份出来到另外一个目录<br />2.将Repo-Browser中 中的要改名的问卷删除<br />3.svn update 改名文件所在目录<br />4.关闭netbeans，重启启动（很重要，netbeans会记录svn的原来的文件名，导致提交反复失败）<br />5.修改文件内容提交，测试新文件名是否正确<br /> <img src ="http://www.blogjava.net/lyjjq/aggbug/369385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-02-04 21:39 <a href="http://www.blogjava.net/lyjjq/articles/369385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache 的标准中规定了4类日志：*</title><link>http://www.blogjava.net/lyjjq/articles/369100.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Tue, 31 Jan 2012 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/369100.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/369100.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/369100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/369100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/369100.html</trackback:ping><description><![CDATA[
<div style="margin: 15px;">错误日志<br />*<br />访问日志<br />*<br />传输日志<br />*<br />Cookie日志<br /><br />其中：传输日志和Cookie日志被Apache <br />2.0认为已经过时。所以本节仅仅讨论错误日志和访问日志。同时错误日志和访问日志被Apache <br />2.0默认设置。<br />能从日志中获取哪些信息<br /><br />*<br />访问日志<br />o<br />访问服务器的远程机器的地址：可以得知浏览者来自何方<br />o<br />浏览者访问的资源：可以得知网站中的哪些部分最受欢迎<br />o<br />浏览者的浏览时间：可以从浏览时间（如工作时间或休闲时间）对网站内容进行调整<br />o<br />浏览者使用的浏览器：可以根据大多数浏览者使用的浏览器对站点进行优化<br />*<br />错误日志<br />o<br />获知失效链接<br />o<br />获知 <br />CGI <br />错误<br />o<br />获知用户认证错误<br /><br />配置错误日志<br /><br />错误日志记录了服务器运行期间遇到的各种错误，以及一些普通的诊断信息，比如服务器何时启动、何时关闭等。<br />错误日志配置指令<br />ErrorLog<br /><br />ErrorLog <br />指令指定了当服务器遇到错误时记录错误日志的文件名。其格式为：<br /><br />格式1：ErrorLog 错误日志文件名<br />格式2：ErrorLog <br />"|管道程序名"<br /><br />格式1直接指定错误日志文件名，除非文件位置用&#8221;/&#8220;开头，否则 ErrorLog 所制定的文件位置是相对于 ServerRoot <br />目录的相对路径。<br /><br />格式2实现管道日志，它指定一个命令来处理错误日志。<br />Apache <br />编译时默认的错误日志可以使用如下命令获得：<br /><br />$ apache2 -V| grep DEFAULT_ERRORLOG<br />-D <br />DEFAULT_ERRORLOG="logs/error_log"<br /><br />LogLevel<br /><br />LogLevel <br />用于调整记于错误日志中的信息的详细程度。其格式为：<br /><br />LogLevel 错误日志记录等级<br /><br />下面着重说说日志记录等级：<br />紧急程度 <br />等级 说明<br />1 emerg 出现紧急情况使得该系统不可用，如系统宕机等<br />2 alert 需要立即引起注意的情况<br />3 crit <br />危险情况的警告<br />4 error 除了emerg、alert、crit的其他错误<br />5 warn 警告信息<br />6 notice <br />需要引起注意的情况，但不如error、warn重要<br />7 info 值得报告的一般消息<br />8 debug <br />由运行于debug模式的程序所产生的消息<br /><br />如果指定了等级 warn，那么就记录紧急程度为1至5的所有错误信息。<br />Ubuntu 中 <br />Apache 的错误日志配置<br /><br />配置错误日志相对简单，只要说明日志文件的存放路径和错误日志记录等级即可。<br /><br />从 Ubuntu 中的 <br />/etc/apache2/apache2.conf 中可知，默认的错误日志存放在 <br />/var/log/apache2/error.log<br /><br />ErrorLog <br />/var/log/apache2/error.log<br />LogLevel warn<br /><br />您可以在 <br />/etc/apache2/apache2.conf <br />中设置错误日志记录等级，也可以在相应的虚拟主机的配置文件中设置。<br />错误日志文件举例<br /><br />下面是一个错误日志文件的截取。<br /><br />$ <br />sudo tac /var/log/apache2/error.log<br />[Wed Jun 20 14:53:15 2007] [error] <br />[client 192.168.0.66] File does not exist: <br />/usr/share/phpmyadmin/favicon.ico<br />[Wed Jun 20 11:12:50 2007] [notice] <br />Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.1 mod_python/3.1.4 Python/2.4.3 PHP/5.1.2 <br />configured -- resuming normal operations<br />[Wed Jun 20 11:12:49 2007] [notice] <br />Digest: done<br />[Wed Jun 20 11:12:49 2007] [notice] Digest: generating secret <br />for digest authentication ...<br />[Wed Jun 20 09:22:22 2007] [notice] caught <br />SIGTERM, shutting down<br /><br />从文件内容可以看出，每一行记录了一个错误。格式为：<br /><br />日期和时间 错误等级 <br />错误消息<br /><br />配置访问日志<br />CustomLog<br /><br />CustomLog <br />指令用来对服务器的请求进行日志记录。格式为：<br /><br />格式1：CustomLog 访问日志文件名 <br />记录格式说明串|格式昵称<br />格式2：CustomLog "|管道程序名 访问日志文件名" <br />记录格式说明串|格式昵称<br /><br />其中：<br /><br />1.<br />访问日志文件名：除非文件位置用&#8221;/&#8220;开头，否则所制定的文件位置是相对于 <br />ServerRoot 目录的相对路径<br />2.<br />格式昵称：使用 LogFormat <br />指令将一个记录格式说明串赋以一个名称<br />3.<br />记录格式说明串：用字符串和格式说明符（以%开头）指定日志记录的内容<br />4.<br />管道程序名：管道符&#8221;|&#8221;后面紧跟着一个程序的路径，这个程序把日志从标准输入设备中读入并处理。<br /><br />在 <br />Ubuntu 的 Apache 默认配置中并没有使用 CustomLog 设置访问日志，若您希望记录访问日志，您需要在虚拟主机的配置文件中分别设置，例如：在 <br />/etc/apache2/sites-available/default 中有如下的设置：<br /><br />CustomLog <br />/var/log/apache2/access.log combined<br /><br />LogFormat<br /><br />为了便于分析 Apache <br />的访问日志，Apache 的默认配置文件中，按记录的信息不同（用不同格式昵称说明不同的信息）将访问日志分为4类，并由 LogFormat <br />指令定义了昵称，如表所示。<br />格式分类 格式昵称 说明<br />普通日志格式(common log format,CLF) common <br />大多数日志分析软件都支持这种格式<br />参考日志格式(referer log format) referer <br />记录客户访问站点的用户身份<br />代理日志格式(agent log format) agent 记录请求的用户代理<br />综合日志格式(combined log <br />format) combined 结合以上三种日志信息<br /><br />LogFormat <br />指令用于定义访问日志的记录格式。格式为：<br /><br />LogFormat "记录格式说明串" 格式昵称<br /><br />从 <br />/etc/apache2/apache2.conf 中可知，在 Ubuntu 的 Apache 中定义了下面的 4 <br />种类型的访问日志：<br /><br />LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" <br />\"%{User-Agent}i\"" combined<br />LogFormat "%h %l %u %t \"%r\" %&gt;s %b" <br />common<br />LogFormat "%{Referer}i -&gt; %U" referer<br />LogFormat "%{User-agent}i" <br />agent<br /><br />由于综合日志格式简单地结合了3种日志信息，所以在配置访问日志时，要么使用一个综合文件进行记录，要么使用分离的多个（1-3）文件记录。通常使用一个综合日志格式文件进行记录，配置为：<br /><br />CustomLog <br />/var/log/apache2/access.log combined<br /><br />若使用3个文件分别进行记录，配置为：<br /><br />CustomLog <br />/var/log/apache2/access.log common<br />CustomLog /var/log/apache2/referer.log <br />referer<br />CustomLog /var/log/apache2/agent.log <br />agent<br /><br />下面的指令组：<br /><br />LogFormat "%h %l %u %t \"%r\" %&gt;s %b" <br />common<br />CustomLog logs/access_log common<br /><br />与下面的指令等效：<br /><br />CustomLog <br />logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"<br /><br />通常我们配置访问日志时，使用先使用 <br />LogFormat 指令定义格式昵称，然后再在 CustomLog 指令中引用昵称的方法。<br />格式说明符<br /><br />在使用 LogFormat 和 <br />CustomLog 指令中为了说明要记录的日志内容，可以使用的常用格式说明符如下表。<br />格式说明符 说明<br />%v 进行服务的服务器的标准名字 <br />ServerName，通常用于虚拟主机的日志记录中。<br />%h 客户机的 IP 地址。<br />%l <br />从identd服务器中获取远程登录名称，基本已废弃。<br />%u 来自于认证的远程用户。<br />%t 连接的日期和时间。<br />%r <br />HTTP请求的首行信息，典型格式是&#8220;METHOD RESOURCE PROTOCOL&#8221;，即&#8220;方法 资源 协议&#8221;。经常可能出现的 METHOD 是 <br />GET、POST 和 HEAD；RESOURCE 是指浏览者向服务器请求的文档或 URL；PROTOCOL 通常是HTTP，后面再加上版本号，通常是 <br />HTTP/1.1。<br />%&gt;s 响应请求的状态代码，一般这项的值是 200，表示服务器已经成功地响应浏览器的请求，一切正常；以 3 <br />开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置；以 4 开头的状态代码表示客户端存在某种错误；以 5 <br />开头的状态代码表示服务器遇到了某个错误。<br />%b <br />传送的字节数（不包含HTTP头信息），将日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。<br />%{Referer}i <br />记录引用此资源的网页。<br />%U 请求的URL路径，不包含查询串。<br />%{User-Agent}i <br />使用的浏览器信息。<br />访问日志文件举例<br /><br />下面是从一个访问日志文件中截取的 3 条记录。<br /><br />$ sudo tac <br />/var/log/apache2/access.log<br />192.168.0.66 - - [21/Jun/2007:22:07:58 +0800] <br />"GET /index.html HTTP/1.1" 200 1185 "-" "Mozilla/4.0 (compatible; MSIE 6.0; <br />Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)"<br />192.168.0.77 - - <br />[19/Jun/2007:21:03:33 +0800] "GET /manual/style/manual.css HTTP/1.1" 404 1203 <br />"http://192.168.0.100/manual/logs.html" "Mozilla/4.0 (compatible; MSIE 6.0; <br />Windows NT 5.0)"<br />192.168.0.66 - - [19/Jun/2007:19:21:55 +0800] "GET <br />/dokuwiki/lib/exe/css.php?s=print HTTP/1.1" 304 - <br />"http://192.168.0.191/dokuwiki/doku.php" "Mozilla/5.0 (Windows; U; Windows NT <br />5.1; en-US; rv:1.8.0.12) Gecko/20070508 <br />Firefox/1.5.0.12"<br /><br />将各项信息分离于下表所示。<br />格式说明符 举例1 举例2 举例3<br />%h 192.168.0.66 <br />192.168.1.77 192.168.0.66<br />%l -（表示没有取得信息） - -<br />%u - - -<br />%t <br />[21/Jun/2007:22:07:58 +0800] [19/Jun/2007:21:03:33 +0800] [19/Jun/2007:19:21:55 <br />+0800]<br />%r &#8220;GET /index.html HTTP/1.1&#8221; &#8220;GET /manual/style/manual.css HTTP/1.1&#8221; <br />&#8220;GET /dokuwiki/lib/exe/css.php?s=print HTTP/1.1&#8221;<br />%&gt;s 200 404 304<br />%b <br />1185 1203 -<br />%{Referer}i &#8221;-&#8221; &#8220;http://192.168.0.100/manual/logs.html&#8221; <br />&#8220;http://192.168.0.191/dokuwiki/doku.php&#8221;<br />%{User-Agent}i &#8220;Mozilla/4.0 <br />(compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)&#8221; <br />&#8220;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&#8221; &#8220;Mozilla/5.0 (Windows; U; <br />Windows NT 5.1; en-US; rv:1.8.0.12) Gecko/20070508 <br />Firefox/1.5.0.12&#8221;<br />由于整个格式说明字符串是放在&#8221;&#8220;之内的，所以若要输出的日志信息内含有引号，需要将&#8221;前加转义符\。例如：若要输出子串&#8221;GET <br />/apache_pb.gif HTTP/1.0&#8221;，则格式字符串为\&#8221;%r\&#8221;。 <br /><p><span style="color: red;">#不记录图片，js，css访问日志</span></p><br /><p><span style="color: red;">&lt;FilesMatch "\.(ico|gif|jpg|png|swf|js|mp3|css)"&gt;</span><br /><span style="color: red;">&nbsp;&nbsp;&nbsp; SetEnv NOFILES </span><br /><span style="color: red;">1</span><br /><span style="color: red;">&lt;/FilesMatch&gt;</span></p><br /><p><span style="color: red;">#去掉日志中的Apache internal dummy connection</span></p><br /><p><br /><span style="color: red;">SetEnvIf Remote_Addr "::1" NOFILES</span><br /><span style="color: red;">CustomLog logs/access_log combined </span><br /><span style="color: red;">env=!N</span>OFILES<br /></p><br /></div> 
<img src ="http://www.blogjava.net/lyjjq/aggbug/369100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-01-31 17:28 <a href="http://www.blogjava.net/lyjjq/articles/369100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postfix的配置详解 </title><link>http://www.blogjava.net/lyjjq/articles/366100.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sun, 11 Dec 2011 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/366100.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/366100.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/366100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/366100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/366100.html</trackback:ping><description><![CDATA[<div id="appShareOpt"></div>
<div id="app-share-content">4.1 postfix的配置文件结构<br /><br />postfix的配置文件位于/etc/postfix下，安装完postfix以后，我们可以通过ls命令查看postfix的配置文件：<br /><br />[root@mail postfix]# ls<br /><br />install.cf main.cf master.cf postfix-script<br /><br />这四个文件就是postfix最基本的配置文件，它们的区别在于：<br /><br />mail.cf：是postfix主要的配置文件。<br /><br />Install.cf：包含安装过程中安装程序产生的postfix初始化设置。<br /><br />master.cf：是postfix的master进程的配置文件，该文件中的每一行都是用来配置postfix的组件进程的运行方式。<br /><br />postfix-script：包装了一些postfix命令，以便我们在linux环境中安全地执行这些postfix命令。<br /><br />4.2 postfix的基本配置<br /><br />postfix大约有100个配置参数，这些参数都可以通过main.cf 指定。配置的格式是这样的，用等号连接参数和参数的值。如：<br /><br />myhostname ＝ mail.mydomain.com<br /><br />等号的左边是参数的名称，等号的右边是参数的值； 当然，我们也可以在参数的前面加上$来引用该参数，如：<br /><br />myorigin = $myhostname<br /><br />虽然postfix有100个左右的参数，但是 postfix为大多数的参数都设置了缺省值，所以在让postfix正常为你服务之前，你只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注意的是，一旦你更改了main.cf文件的内容，则必须运行 postfix reload命令使其生效。<br /><br />1． myorigin<br /><br />myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地， postfix使用本地主机名作为myorigin，但是建议你最好使用你的域名，因为这样更具有可读性。比如：安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:<br /><br />myorigin = domain.com<br /><br />当然我们也可以引用其他参数，如：<br /><br />myorigin = $mydomain<br /><br />2． mydestination<br /><br />mydestination参数指定postfix接收邮件时收件人的域名，换句话说，也就是你的postfix系统要接收什么样的邮件。比如：你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样，缺省地，postfix使用本地主机名作为 mydestination。如：<br /><br />mydestination = $mydomain<br /><br />mydestination = domain.com<br /><br />3． notify_classes<br /><br />在postfix系统中，必须指定一个postfix系统管理员的别名指向一个用户，<br /><br />只有这样，在用户遇到问题时才有报告的对象，postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别：<br /><br />bounce：将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故，该邮件的拷贝不包含信头。<br /><br />2bounce：将两次不可投递的邮件拷贝发送给postfix管理员。<br /><br />delay：将邮件的投递延迟信息发送给管理员，仅仅包含信头。<br /><br />policy：将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员，包含整个SMTP会话的内容。<br /><br />protocol：将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。<br /><br />resource：将由于资源错误而不可投递的错误信息发送给postfix管理员，比如：队列文件写错误等等。<br /><br />software：将由于软件错误而导致不可投递的错误信息发送给postfix管理员。<br /><br />缺省值为：<br /><br />notify_classes = resource, software<br /><br />4．myhostname<br /><br />myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地，该值被设定为本地机器名。你也可以指定该值，需要注意的是，要指定完整的主机名。如：<br /><br />myhostname = mail.domain.com<br /><br />5．mydomain<br /><br />mydomain参数指定你的域名，缺省地，postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值，如：<br /><br />mydomain = domain.com<br /><br />6．mynetworks<br /><br />mynetworks 参数指定你所在的网络的网络地址，postfix系统根据其值来区别用户是远程的还是本地的，如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址，也可以用CIDR（无类域间路由）地址来表示,如：<br /><br />192.168.1.0/24<br /><br />192.168.1.0/26<br /><br />7．inet_interfaces<br /><br />inet_interfaces 参数指定postfix系统监听的网络接口。缺省地，postfix监听所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上，则必须指定其监听的地址。如：<br /><br />inet_interfaces = all<br /><br />inet_interface = 192.168.1.1<br /><br />4.3 postfix的UCE（unsolicited commercial email）控制<br /><br />所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。<br /><br />缺省地，postfix转发符合以下条件的邮件：<br /><br />* 来自客户端ip地址符合$mynetworks的邮件。<br /><br />* 来自客户端主机名符合$relay_domains及其子域的邮件。<br /><br />* 目的地为$relay_domains及其子域的邮件。<br /><br />缺省地，postfix接受符合以下条件的邮件：<br /><br />* 目的地为$inet_interfaces的邮件。<br /><br />* 目的地为$mydestination的邮件。<br /><br />* 目的地为$virtual_maps的邮件。<br /><br />但是我们也可以通过下面的规则来实现更强大的控制功能。<br /><br />1． 信头过滤<br /><br />通过header_checks参数限制接收邮件的信头的格式，如果符合指定的格式，则拒绝接收该邮件。可以指定一个或多个查询列表，如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如：<br /><br />header_checks = regexp:/etc/postfix/header_checks<br /><br />header_checks = pcre:/etc/postfix/header_checks<br /><br />缺省地，postfix不进行信头过滤。<br /><br />2．客户端主机名/地址限制<br /><br />通过smtpd_client_restrictions参数限制可以向postfix发起SMTP 连接的客户端的主机名或ip地址。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_unknown_client：如果客户端的ip 地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用 unknown_client_reject_code参数指定返回给客户机的错误代码（缺省为450）。如果你有用户没有作DNS记录则不要启用该选项。<br /><br />permit_mynetworks：如果客户端的ip地址符合$mynetworks参数定义的范围则接受该客户端的连接请求，并转发该邮件。<br /><br />check_client_access maptype:mapname：根据客户端的主机名、父域名、ip地址或属于的网络搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求，并转发该邮件。。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为 554）。<br /><br />reject_maps_rbl：如果客户端的网络地址符合$maps_rbl_domains参数的值则拒绝该客户端的连接请求。可以用maps_rbl_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />示例：<br /><br />smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl<br /><br />smtpd_client_restrictions = permit_mynetworks, reject_unknown_client<br /><br />该参数的缺省值为：<br /><br />smtpd_client_restrictions =<br /><br />也即接收来自任何客户端的SMTP连接。<br /><br />3. 是否请求HELO命令<br /><br />可以通过smtpd_helo_required参数指定客户端在SMTP会话的开始是否发送一个HELO命令。你可以指定该参数的值为yes或no。缺省值为：<br /><br />smtpd_helo_required = no<br /><br />4. HELO主机名限制<br /><br />可以通过smtpd_helo_restrictions参数指定客户端在执行HELO命令时发送给postfix的主机名。缺省地， postfix 接收客户端发送的任意形式的主机名。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_invalid_hostname：如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为501）。<br /><br />permit_naked_ip_address：RFC要求客户端的HELO命令包含的ip地址放在方括号内，你可以用permit_naked_ip_address参数取消该限制。因为有的mail客户端不遵守该RFC的规定。<br /><br />reject_unknown_hostname：如果客户端执行HELO命令时的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />reject_non_fqdn_hostname：如果客户端执行HELO命令时的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为504）。<br /><br />check_helo_access maptype:mapname：根据客户端HELO的主机名、父域名搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />示例：<br /><br />smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname<br /><br />5. RFC 821信头限制<br /><br />RFC 821对邮件的信头做了严格的规定，但是广泛使用的sendmail并不支<br /><br />持该规定，所以对于该参数我们只能说不，即：<br /><br />strict_rfc821_envelopes = no<br /><br />6. 通过发件人地址进行限制<br /><br />可以用smtpd_sender_restrictions参数通过发件人在执行MAIL FROM命令时提供的地址进行限制。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_unknown_sender_domain：如果MAIL FROM命令提供的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />check_sender_access maptype:mapname：根据MAIL FROM命令提供的主机名、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。可以通过该参数过滤来自某些不受欢迎的发件人的邮件。<br /><br />reject_non_fqdn_sender：如果MAIL FROM命令提供的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用non_fqdn_reject_code 参数指定返回给客户机的错误代码（缺省为504）。<br /><br />缺省地，postfix接受来自任何发件人的邮件。<br /><br />示例：<br /><br />smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain<br /><br />7. 通过收件人地址进行过滤<br /><br />可以用smtpd_recipient_restrictions参数通过发件人在执行RCPT TO命令时提供的地址进行限制。缺省值为：<br /><br />smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains<br /><br />可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />check_relay_domains：如果符合以下的条件，则接受SMTP连接请求，否则拒绝该连接，可以用relay_domains_reject_code 参数指定返回给客户机的错误代码（缺省为504）。<br /><br />* 客户端主机名符合$relay_domains及其子域<br /><br />* 目的地为$inet_interfaces、$mydestination或$virtual_maps<br /><br />permit_auth_destination：不管客户端的主机名，只要符合以下的条件，就<br /><br />接受SMTP连接请求：<br /><br />* 解析后的目标地址符合$relay_domains及其子域<br /><br />* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps<br /><br />reject_unauth_destination：不管客户端的主机名，只要符合以下的条件，就拒绝该客户端SMTP连接请求：<br /><br />* 解析后的目标地址符合$relay_domains及其子域<br /><br />* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps<br /><br />check_recipient_access：根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />reject_unknown_recipient_domain：如果收件人的邮件地址在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />reject_non_fqdn_recipient：如果发件人在执行RCPT TO命令时提供的地址<br /><br />不是完整的域名则拒绝其SMTP连接请求。可以用The non_fqdn_reject_code参数指定返回给客户机的错误代码（缺省为504）。<br /><br />4.4 posftfix的性能控制<br /><br />之所以对postfix的性能进行控制，是为了在遇到邮件风暴时保证postfix可以正常运行。通常，我们可以通过对下列postfix 参数的配置来调节postfix的性能，这些参数都是通过mail.cf配置文件进行配置的，修改以后不要忘了运行postfix reload命令来使配置生效。<br /><br />1． 进程数限制<br /><br />可以通过default_process_limit 参数来控制postfix系统同时可以运行的最大进程数目。缺省值是50个。<br /><br />2． 对同一目标主机的并发连接限制<br /><br />当向同一目标主机发出SMTP连接时，postfix初始化发出两个SMTP连接，如果投递成功则增加并发的SMTP连接数目，遇到拥塞时又减少并发连接的数目。postfix中通过以下的参数对同一目标主机的并发连接进行控制：<br /><br />* initial_destination_concurrency：控制对同一目标主机的初始化并发连接数目。缺省值为2。<br /><br />* default_destination_concurrency_limit：控制初始化连接后对同一目标主机的最大并发连接数目。缺省值为10。<br /><br />* local_destination_concurrency_limit：控制对同一本地收件人的最大同时投递的邮件数目。缺省值为2，因为对本地同一收件人投递邮件时投递工作只能一个接一个的进行，所以设得在大也没用。<br /><br />3． 对同一封邮件的收件人数目限制<br /><br />通过default_destination_recipient_limit参数来控制postfix的投递代理（如<br /><br />smtp进程）可以将同一封邮件发送给多少个收件人。缺省值为50。也可以用明确指出该投递代理的参数来覆盖该缺省值。如用smtpd_recipient_limit来指定smtp投递代理可以将同一封邮件发送给多少个收件人，该参数的缺省值为1000。<br /><br />4． 推迟投递控制<br /><br />通过defer_transports参数，我们可以推迟投递该参数指定的邮件直到postfix明确的提出投递要求。下面我们看一个例子：<br /><br />有一个小型的局域网，用户都将邮件发送给局域网内部的一台postfix邮件服务器，然后通过在该服务器上拨号将邮件发送出去。这时我们可以这样指定该参数的值：<br /><br />defer_transports = smtp<br /><br />该语句表示postfix推迟投递所有的邮件直到执行sendmail -q命令，这样我们就可以在ppp的脚本中加上sendmail -q，以便在拨号成功后让postfix开始投递邮件。 </div> <img src ="http://www.blogjava.net/lyjjq/aggbug/366100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-12-11 19:36 <a href="http://www.blogjava.net/lyjjq/articles/366100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rsync 实例</title><link>http://www.blogjava.net/lyjjq/articles/350569.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Thu, 19 May 2011 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/350569.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/350569.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/350569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/350569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/350569.html</trackback:ping><description><![CDATA[rsync -auv --progress -e 'ssh -p 15222' --exclude-from=/home/51fanli/tuannav_ignore.txt /home/www/tuannav_new/*&nbsp; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#53;&#49;&#102;&#97;&#110;&#108;&#105;&#64;&#49;&#49;&#52;&#46;&#56;&#48;&#46;&#54;&#56;&#46;&#49;&#49;&#51;&#58;&#47;&#111;&#112;&#116;&#47;&#119;&#119;&#119;&#47;&#116;&#103;&#47;">51@114.80.xx:/opt/www/tg/</a><br /><br />**/Runtime<br />**/config.php<br />**/.svn <img src ="http://www.blogjava.net/lyjjq/aggbug/350569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-05-19 10:17 <a href="http://www.blogjava.net/lyjjq/articles/350569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn配置</title><link>http://www.blogjava.net/lyjjq/articles/350439.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Tue, 17 May 2011 15:39:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/350439.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/350439.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/350439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/350439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/350439.html</trackback:ping><description><![CDATA[<p>LINUX svn独立配置（不依附APACHE）<br /><br />以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<br />-<br />以root用户登录。<br />将subversion-1.5.1.tar.gz和subversion-deps-1.5.1.tar.gz传到服务器。</p>
<p>tar xfvz subversion-1.5.1.tar.gz<br />tar xfvz subversion-deps-1.5.1.tar.gz<br />cd subversion-1.5.1<br />./configure &#8211;prefix=/opt/svn &#8211;without-berkeley-db &#8211;with-zlib<br />(注：以svnserve方式运行，不加apache编译参数。以fsfs格式存储版本库，不编译berkeley-db)<br />make clean<br />make<br />make install</p>
<p><br />svn测试<br />/opt/svn/svnserve &#8211;version</p>
<p>如果显示如下，svn安装成功:</p>
<p>svnserve, version 1.5.1 (r21228)<br />compiled Oct 12 2006, 10:18:56Copyright (C) 2000-2006 CollabNet.<br />Subversion is open source software, see <a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a><br />This product includes software developed by CollabNet (<a href="http://www.Collab.Net/">http://www.Collab.Net/</a>).</p>
<p>The following repository back-end (FS) modules are available:</p>
<p>* fs_fs : Module for working with a plain file (FSFS) repository.</p>
<p>2. svn配置<br />建立svn版本库目录<br />可建多个：<br />/opt/svn/mkdir -p /opt/svndata/repos1<br />/opt/svn/mkdir -p /opt/svndata/repos2</p>
<p>建立svn版本库<br />svnadmin create /opt/svndata/repos1<br />svnadmin create /opt/svndata/repos2</p>
<p>修改svn版本库配置文件<br />版本库1：<br />vi /opt/svndata/repos1/conf/svnserve.conf</p>
<p>内容修改为:<br />[general]<br />anon-access = none<br />auth-access = write<br />password-db = /opt/svn/conf/pwd.conf<br />authz-db = /opt/svn/conf/authz.conf<br />realm = repos1</p>
<p>版本库2:<br />vi /opt/svndata/repos2/conf/svnserve.conf</p>
<p>内容修改为:<br />[general]<br />anon-access = none<br />auth-access = write<br />password-db = /opt/svn/conf/pwd.conf<br />authz-db = /opt/svn/conf/authz.conf<br />realm = repos2</p>
<p>即除realm = repos2外，其他与版本库1配置文件完全相同。如果有更多的版本库，依此类推。</p>
<p>配置允许访问的svn用户<br />vi /opt/svn/conf/pwd.conf</p>
<p>为了简化配置，2个版本库共用1个用户配置文件。如有必要，也可以分开。</p>
<p>注意：对用户配置文件的修改立即生效，不必重启svn。</p>
<p>文件格式如下：<br />[users]<br />&lt;用户1&gt; = &lt;密码1&gt;<br />&lt;用户2&gt; = &lt;密码2&gt;</p>
<p>其中，[users]是必须的。下面列出要访问svn的用户，每个用户一行。示例：<br />[users]<br />alan = password<br />king = hello</p>
<p>配置svn用户访问权限<br />vi /opt/svn/conf/authz.conf</p>
<p>为了简化配置，3个版本库共用1个权限配置文件/opt/svn/conf/pwd.conf。如有必要，也可以分开。文件中定义用户组和版本库目录权限。</p>
<p>注意：<br />* 权限配置文件中出现的用户名必须已在用户配置文件中定义。<br />* 对权限配置文件的修改立即生效，不必重启svn。</p>
<p>用户组格式：<br />[groups]<br />&lt;用户组名&gt; = &lt;用户1&gt;,&lt;用户2&gt;<br />其中，1个用户组可以包含1个或多个用户，用户间以逗号分隔。</p>
<p>版本库目录格式：<br />[&lt;版本库&gt;:/项目/目录]<br />@&lt;用户组名&gt; = &lt;权限&gt;<br />&lt;用户名&gt; = &lt;权限&gt;</p>
<p>其中，方框号内部分可以有多种写法:<br />/,表示根目录及以下。根目录是svnserve启动时指定的，我们指定为/opt/svndata。这样，/就是表示对全部版本库设置权限。<br /><br /></p>
<p>repos1:/,表示对版本库1设置权限 repos2:/abc, ,表示对版本库2中的abc项目设置权限 repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限 权限主体可以是用户组、用户或*，用户组在前面加@，*表示全部用户<br />-</p>
<p>repos1:/,表示对版本库1设置权限<br />repos2:/abc, ,表示对版本库2中的abc项目设置权限<br />repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限</p>
<p>权限主体可以是用户组、用户或*，用户组在前面加@，*表示全部用户。权限可以是w、r、wr和空，空表示没有任何权限。</p>
<p>示例：<br />[groups]<br />admin = alan</p>
<p>[/]<br />@admin = rw</p>
<p>[repos1:/abc/aaa]<br />king = rw</p>
<p>[repos2:/pass]<br />king =</p>
<p>svn配置完毕，删除无用文件<br />rm /opt/svndata/repos1/conf/authz<br />rm /opt/svndata/repos1/conf/passwd<br />rm /opt/svndata/repos2/conf/authz<br />rm /opt/svndata/repos2/conf/passwd</p>
<p><br />启动svn<br />svnserve -d -r /opt/svndata</p>
<p>其中：<br />-d表示以daemon方式（后台运行）运行<br />-r /opt/svndata指定根目录是/opt/svndata</p>
<p>检查:<br />ps -ef|grep svnserve</p>
<p>如果显示如下，即为启动成功：<br />svn　　　 6941　　 1　0 15:07 ?　　　　00:00:00 svnserve -d &#8211;listen-port 9999 -r /opt/svndata</p>
<p><br />SVN 向版本中导入文件操作：<br />/opt/svn/bin/svn import -m "project" /var/www/dotproject svn://192.168.6.109/repos1 <br />其中 -m "project"为创建说明<br />/var/www/dotproject 为需要导入文件的目录<br />svn://192.168.6.109/repos1 为SVN路径。</p>
<p><br />SVN 导出版本中的文件操作：<br />svn checkout svn://192.168.6.109/repos1 dotproject<br />其中 dotproject为需要导入的目录名.</p>
<p>SVN 说明书：<br /><a href="http://www.subversion.org.cn/svnbook/1.1/">http://www.subversion.org.cn/svnbook/1.1/</a></p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/lyjjq/aggbug/350439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-05-17 23:39 <a href="http://www.blogjava.net/lyjjq/articles/350439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>yum 安装和使用</title><link>http://www.blogjava.net/lyjjq/articles/350437.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Tue, 17 May 2011 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/350437.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/350437.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/350437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/350437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/350437.html</trackback:ping><description><![CDATA[<p align="left"><span style="font-family: 宋体; font-size: 12pt">yum</span><span style="font-family: 宋体; font-size: 12pt">的日常用法<br />（1）通过yum安装和删除RPM包<br />安装rpm包,如dhcp<br />[root@localhost ~]#yum install dhcp</span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt"><br /></span><span style="font-family: 宋体; font-size: 12pt">删除rpm包,包括与该包有依赖性的包<br />[root@localhost ~]#yum remove licq<br />注意:同时会提示删除licq-gnome,licq-qt,licq-text<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">（2）通过yum工具更新软件包<br />检查可更新的rpm包：<br />[root@localhost ~]#yum check-update<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">更新所有的rpm包：<br />[root@localhost ~]#yum update<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">更新指定的rpm包,如更新kernel和kernel source：<br />[root@localhost ~]#yum update kernel kernel-source<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">大规模的版本升级,与yum update不同的是,陈旧的淘汰的包也会升级：<br />[root@localhost ~]#yum upgrade<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">（3）通过yum查询RPM包信息<br />列出资源库中所有可以安装或更新的rpm包的信息：<br />[root@localhost ~]#yum info<br /><br /></span></p>
<p align="left">&nbsp;<span style="font-family: 宋体; font-size: 12pt">列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息：<br />[root@localhost ~]#yum info vsftpd<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">[root@localhost ~]#yum info perl*<br /></span><span style="font-family: 宋体; font-size: 12pt">注意:可以在rpm包名中使用匹配符，如上面例子是列出所有以perl开头的rpm包的信息。<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出资源库中所有可以更新的rpm包的信息：<br />[root@localhost ~]#yum info updates<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出已经安装的所有的rpm包的信息：<br />[root@localhost ~]#yum info installed<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出已经安装的但是不包含在资源库中的rpm包的信息：<br />[root@localhost ~]#yum info extras<br />注：也就是通过其它网站下载安装的rpm包的信息。<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出资源库中所有可以更新的rpm包：<br />[root@localhost ~]#yum list updates</span></p>
<p align="left">&nbsp;</p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出已经安装的所有rpm包：<br />[root@localhost ~]#yum list installed<br />列出已经安装的但不包含在资源库中的rpm包：<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">[root@localhost ~]#yum list extras<br /></span><span style="font-family: 宋体; font-size: 12pt">注：也就是通过其它网站下载安装的rpm包。<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出资源库中所有可以安装或更新的rpm包：<br />[root@localhost ~]#yum list<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">列出资源库中特定的可以安装或更新以及已经安装的rpm包：<br />[root@localhost ~]#yum list sendmail<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">[root@localhost ~]#yum list gcc*<br /></span><span style="font-family: 宋体; font-size: 12pt">注意：可以在rpm包名中使用匹配符， 如上面例子是列出所有以gcc开头的rpm包。<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">搜索匹配特定字符的rpm包的详细信息：<br />[root@localhost ~]#yum search wget<br />注意：可以通过&#8220;search&#8221;在rpm包名，包描述中进行搜索。<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">搜索包含特定文件名的rpm包：<br />[root@localhost ~]#yum provides realplay<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">（4）通过yum操作暂存信息（/var/cache/yum）<br />清除暂存的rpm包文件：<br />[root@localhost ~]#yum clean packages<br /><br /></span></p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">清除暂存的rpm头文件：<br />[root@localhost ~]#yum clean&nbsp; headers</span></p>
<p align="left">&nbsp;</p>
<p align="left"><span style="font-family: 宋体; font-size: 12pt">清除暂存中旧的rpm头文件和包文件：<br />[root@localhost ~]#yum clean&nbsp; all<br /><br /></span></p><img src ="http://www.blogjava.net/lyjjq/aggbug/350437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-05-17 22:23 <a href="http://www.blogjava.net/lyjjq/articles/350437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>crontab 定时任务执行</title><link>http://www.blogjava.net/lyjjq/articles/346800.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Wed, 23 Mar 2011 00:56:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/346800.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/346800.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/346800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/346800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/346800.html</trackback:ping><description><![CDATA[<p align="justify">#vi /etc/crontab<br />
看到下面几个<br />
</p>
<div><br />
# run-parts<br />
01 * * * * root run-parts /etc/cron.hourly<br />
02 4 * * * root run-parts /etc/cron.daily<br />
22 5 * * 0 root run-parts /etc/cron.weekly<br />
42 5 1 * * root run-parts /etc/cron.monthly<br />
</div>
<p><br />
在/etc/cron.daily<br />
下添加一个backup.sh（内容就写最上面的sh脚本）就会每天执行<br />
<br />
重新启动crond&nbsp;&nbsp;<br />
<br />
# /etc/rc.d/init.d/crond restart&nbsp;&nbsp;<br />
<a></a><br />
<br />
--------------------------<br />
看一下crontab 的格式<br />
第1列分钟1～59<br />
第2列小时1～23（0表示子夜）<br />
第3列日1～31<br />
第4列月1～12<br />
第5列星期0～6（0表示星期天）<br />
第6列要运行的命令<br />
<br />
下面是crontab的格式：<br />
分 时 日 月 星期 要运行的命令<br />
<br />
这里有crontab文件条目的一些例子：<br />
<br />
30 21 * * * /usr/local/apache/bin/apachectl restart<br />
上面的例子表示每晚的21:30重启apache。<br />
<br />
45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart<br />
上面的例子表示每月1、10、22日的4 : 45重启apache。<br />
<br />
10 1 * * 6,0 /usr/local/apache/bin/apachectl restart<br />
上面的例子表示每周六、周日的1 : 10重启apache。<br />
<br />
0,30 18-23 * * * /usr/local/apache/bin/apachectl restart<br />
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。<br />
<br />
0 23 * * 6 /usr/local/apache/bin/apachectl restart<br />
上面的例子表示每星期六的11 : 00 pm重启apache。<br />
<br />
)&nbsp;*/1 * * * /usr/local/apache/bin/apachectl restart<br />
每一小时重启apache<br />
<br />
0&nbsp;23-7/1 * * * /usr/local/apache/bin/apachectl restart<br />
晚上11点到早上7点之间，每隔一小时重启apache<br />
<br />
0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart<br />
每月的4号与每周一到周三的11点重启apache<br />
<br />
0 4 1 jan * /usr/local/apache/bin/apachectl restart<br />
</p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/346800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-03-23 08:56 <a href="http://www.blogjava.net/lyjjq/articles/346800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql忘记root密码拯救方法(flush privileges)</title><link>http://www.blogjava.net/lyjjq/articles/346797.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Wed, 23 Mar 2011 00:34:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/346797.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/346797.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/346797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/346797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/346797.html</trackback:ping><description><![CDATA[关键字: mysql，root，密码，忘记
<div class="blog_content">
<p>1、结束当前正在运行的mysql进程。<br />
# /etc/init.d/mysql stop<br />
<br />
2、用mysql安全模式运行并跳过权限验证。<br />
# /usr/bin/mysqld_safe --skip-grant-tables<br />
<br />
3、以root身份登录mysql。<br />
# mysql -u root<br />
<br />
4、修改root用户口令。<br />
mysql&gt; use mysql;<br />
Reading table information for completion of table and column names<br />
You can turn off this feature to get a quicker startup with -A<br />
<br />
Database changed<br />
mysql&gt; update user set Password = PASSWORD('root') where User ='root';<br />
Query OK, 3 rows affected (0.00 sec)<br />
Rows matched: 3&nbsp; Changed: 3&nbsp; Warnings: 0<br />
<br />
mysql&gt; exit<br />
<br />
5、结束mysql安全模式，用正常模式运行mysql。<br />
# /etc/init.d/mysql restart<br />
<br />
6、试试你新修改的口令，嘿嘿&#8230;&#8230;屡试屡爽！<br />
&nbsp;<br />
mysql&gt; update mysql.user set password=PASSWORD（'新密码'） where User='root'；&nbsp;<br />
<br />
mysql&gt; flush privileges；<br />
mysql&gt; quit<br />
<br />
<br />
<br />
</p>
</div>
 <img src ="http://www.blogjava.net/lyjjq/aggbug/346797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-03-23 08:34 <a href="http://www.blogjava.net/lyjjq/articles/346797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>yum命令详解</title><link>http://www.blogjava.net/lyjjq/articles/345528.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Wed, 02 Mar 2011 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/345528.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/345528.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/345528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/345528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/345528.html</trackback:ping><description><![CDATA[<div class="blog_content"><span style="color: red">一. yum是什么</span> <br />
yum = Yellow dog Updater, Modified <br />
主要功能是更方便的添加/删除/更新RPM包. <br />
它能自动解决包的倚赖性问题. <br />
它能便于管理大量系统的更新问题 <br />
注:为什么要使用yum而不用apt,最简单的原因,Fedora自带 <br />
<br />
<span style="color: red">二. yum特点</span> <br />
*可以同时配置多个资源库(Repository) <br />
*简洁的配置文件(/etc/yum.conf) <br />
*自动解决增加或删除rpm包时遇到的倚赖性问题 <br />
*使用方便 <br />
*保持与RPM数据库的一致性 <br />
<br />
<span style="color: red">三. yum安装</span> <br />
Fedora自带 <br />
#rpm -ivh yum-2.0.4-2.noarch.rpm <br />
<br />
<span style="color: red">四. yum配置</span> <br />
注:修改和增加配置文件中的资源库,加快下载速度和拥有更多可更新的rpm包 <br />
将/etc/yum.conf的内容全部替换为 <br />
[main] <br />
cachedir=/var/cache/yum <br />
debuglevel=2 <br />
logfile=/var/log/yum.log <br />
pkgpolicy=newest <br />
distroverpkg=fedora-release <br />
tolerant=1 <br />
exactarch=1 <br />
<br />
[fedora-us-1] <br />
name=Fedora Core 1 -- Fedora US mirror <br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os <br />
<br />
[fedora-us-1-updates] <br />
name=Fedora Core 1 updates -- Fedora US mirror <br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates <br />
<br />
[fedora-us-1-stable] <br />
name=Fedora Linux (stable) for Fedora Core 1 -- Fedora US mirror <br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable <br />
<br />
[freshrpms] <br />
name=Fedora Linux $releasever - $basearch - freshrpms <br />
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms <br />
<br />
<br />
<span style="color: red">五. yum应用</span> <br />
注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长. <br />
<br />
检查有哪些可更新的rpm包 <br />
#yum check-update <br />
<br />
安装rpm包,使xmms可以播放mp3 <br />
#yum install xmms-mp3 <br />
<br />
安装mplayer,同时自动安装相关的软件 <br />
#yum install mplayer <br />
<br />
删除licq包,同时删除与该包有倚赖性的包 <br />
#yum remove licq <br />
注:同时会提示删除licq-gnome,licq-qt,licq-text,非常方便 <br />
<br />
系统更新(更新所有可以升级的rpm包,包括kernel) <br />
#yum -y update <br />
<br />
每天定期执行系统更新 <br />
#chkconfig yum on <br />
#service yum start <br />
<br />
<br />
<span style="color: red">六. yum指令详解</span> <br />
*rpm包的更新 <br />
<br />
检查可更新的rpm包 <br />
#yum check-update <br />
<br />
更新所有的rpm包 <br />
#yum update <br />
<br />
更新指定的rpm包,如更新kernel和kernel source <br />
#yum update kernel kernel-source <br />
<br />
大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级 <br />
#yum upgrade <br />
<br />
<br />
*rpm包的安装和删除 <br />
<br />
安装rpm包,如xmms-mp3 <br />
#yum install xmms-mp3 <br />
<br />
删除rpm包,包括与该包有倚赖性的包 <br />
#yum remove licq <br />
注:同时会提示删除licq-gnome,licq-qt,licq-text <br />
<br />
<br />
*yum暂存(/var/cache/yum/)的相关参数 <br />
清除暂存中rpm包文件 <br />
#yum clean packages <br />
<br />
清除暂存中rpm头文件 <br />
#yum clean headers <br />
<br />
清除暂存中旧的rpm头文件 <br />
#yum clean oldheaders <br />
<br />
清除暂存中旧的rpm头文件和包文件 <br />
#yum clean 或#yum clean all <br />
注:相当于yum clean packages + yum clean oldheaders <br />
<br />
<br />
*rpm包列表 <br />
<br />
列出资源库中所有可以安装或更新的rpm包 <br />
#yum list <br />
<br />
列出资源库中特定的可以安装或更新以及已经安装的rpm包 <br />
#yum list mozilla <br />
#yum list mozilla* <br />
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包 <br />
<br />
列出资源库中所有可以更新的rpm包 <br />
#yum list updates <br />
<br />
列出已经安装的所有的rpm包 <br />
#yum list installed <br />
<br />
列出已经安装的但是不包含在资源库中的rpm包 <br />
#yum list extras <br />
注:通过其它网站下载安装的rpm包 <br />
<br />
<br />
*rpm包信息显示(info参数同list) <br />
<br />
列出资源库中所有可以安装或更新的rpm包的信息 <br />
#yum info <br />
<br />
列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息 <br />
#yum info mozilla <br />
#yum info mozilla* <br />
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息 <br />
<br />
列出资源库中所有可以更新的rpm包的信息 <br />
#yum info updates <br />
<br />
列出已经安装的所有的rpm包的信息 <br />
#yum info installed <br />
<br />
列出已经安装的但是不包含在资源库中的rpm包的信息 <br />
#yum info extras <br />
注:通过其它网站下载安装的rpm包的信息 <br />
<br />
<br />
*搜索rpm包 <br />
搜索匹配特定字符的rpm包 <br />
#yum search mozilla <br />
注:在rpm包名,包描述等中搜索 <br />
<br />
搜索有包含特定文件名的rpm包 <br />
#yum provides realplay <br />
<br />
<span style="color: red">七. 安全的更新freshrpms.net的rpm包</span> <br />
安装freshrpms.net的GPG key <br />
#rpm --import http://freshrpms.net/packages/RPM-GPG-KEY.txt <br />
<br />
编辑/etc/yum.conf,增加以下信息到尾部 <br />
[freshrpms] <br />
name=Fedora Linux $releasever - $basearch - freshrpms <br />
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms <br />
gpgcheck=1 <br />
<br />
注: <br />
检查GPG Key <br />
# rpm -qa gpg-pubkey* <br />
<br />
显示Key信息 <br />
#rpm -qi gpg-pubkey-e42d547b-3960bdf1 <br />
<br />
删除Key <br />
#rpm -e gpg-pubkey-e42d547b-3960bdf1 <br />
<br />
<span style="color: red">八、yum是干什么的</span> <br />
使用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更为精简等。 <br />
<br />
————————————————<span style="color: red">以下是deemstone添加</span>——————————————— <br />
注：这个单词我也不太认识，后来到网上查了一下：http://man.chinaunix.net/develop/cvsdoc_zh/Repository.html <br />
deemstone的理解：rpm文件是安装包，而yum和其他的一些软件，如：Debian下的apt，是管理这些安装包（自动安装，自动解决包之间的依赖关系&#8230;&#8230;）的软件。 <br />
————————————————————————————————————————— <br />
<br />
<span style="color: red">YUM简介:</span>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并加以分析，才能自动化地完成余下的任务。 <br />
如果没有安装,先我们要到下面的地址下载与自己系统相对应的版本的 yum： <br />
http://ayo.freshrpms.net/ <br />
比如我用的是Fedora core 4.0 就下载如下的包安装： <br />
[root@localhost beinan]# rpm -ivh freshrpms-release-1.1-1.fc.noarch.rpm <br />
warning: freshrpms-release-1.1-1.fc.noarch.rpm: Header V3 DSA signature: NOKEY, key ID e42d547b <br />
Preparing... ########################################### [100%] <br />
1:freshrpms-release ########################################### [100%] <br />
<br />
<span style="color: red">YUM的配置文件</span> <br />
yum的一切配置信息都储存在一个叫yum.conf的配置文件中，通常位于/etc目 录下，这是整个yum系统的重中之重，所以有必要详细介绍。下面是一个从网上找来的yum.con文件，让我们以此为例，进行说明。 <br />
<br />
[main] <br />
cachedir=/var/cache/yum <br />
debuglevel=2 <br />
logfile=/var/log/yum.log <br />
pkgpolicy=newest <br />
distroverpkg=redhat-release <br />
tolerant=1 <br />
exactarch=1 <br />
retries=1 <br />
<br />
[base] <br />
name=Fedora Core $releasever - $basearch - Base <br />
baseurl=http://download.atrpms.net/mirrors/fedoracore/$releasever/$basearch/os <br />
http://rpmfind.net/linux/fedora/cor...er/$basearch/os <br />
http://mirror.clarkson.edu/pub/dist...er/$basearch/os <br />
<br />
<br />
[updates-released] <br />
name=Fedora Core $releasever - $basearch - Released Updates <br />
<br />
转自：http://blog.chinaunix.net/u/32645/showart.php?id=258653 </div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/345528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-03-02 22:17 <a href="http://www.blogjava.net/lyjjq/articles/345528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux Php连接SQLServer数据库(freetds)</title><link>http://www.blogjava.net/lyjjq/articles/345374.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Mon, 28 Feb 2011 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/345374.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/345374.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/345374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/345374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/345374.html</trackback:ping><description><![CDATA[由于工作原因我们需要通过<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a>访问我们以前的Sql Server 2005数据,所以就有了这篇文章的诞生.废话就少说了,做程序设计的最不喜欢兜圈子了.用简介步骤说明问题,往下看.
<p>　　系统: <a title="Linux" href="http://security.zdnet.com.cn/files/list-0-0-49050-1-1.htm">Linux</a></p>
<p>　　数据库: Sql Server 2005</p>
<p>　　1.下载FreeTDS</p>
<p>　　官方网站：http://www.freetds.org</p>
<p>　　2.安装FreeTDS</p>
<p>　　# tar zxvf freetds-current.tgz(解压)</p>
<p>　　# ./configure --prefix=/usr/local/freetds --with-tdsver=7.2 --enable-msdblib</p>
<p>　　# make</p>
<p>　　# make install</p>
<p>　　其他可选 根据自己情况</p>
<p>　　--enable-dbmfix --with-gnu-ld --enable-shared --enable-static</p>
<p>　　安装freetds到目录/usr/local/freetds：--prefix=/usr/local/freetds 如果不带这个默认好像也是这目录</p>
<p>　　对应数据库版本--我的是Microsoft SQL Server 2005 所以我带的是 --with-tdsver=7.2</p>
<p>　　4.2 Sybase SQL Server &lt; 10 and Microsoft SQL Server 6.5</p>
<p>　　5.0 Sybase SQL Server &gt;= 10</p>
<p>　　7.0 Microsoft SQL Server 7.0</p>
<p>　　7.1 Microsoft SQL Server 2000</p>
<p>　　7.2 Microsoft SQL Server 2005</p>
<p>　　3.编辑/usr/local/freetds/etc/freetds.conf</p>
<p>　　# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $</p>
<p>　　#</p>
<p>　　# This file is installed by FreeTDS if no file by the same</p>
<p>　　# name is found in the installation directory.</p>
<p>　　#</p>
<p>　　# For information about the layout of this file and its settings,</p>
<p>　　# see the freetds.conf manpage "man freetds.conf".</p>
<p>　　# Global settings are overridden by those in a database</p>
<p>　　# server specific section</p>
<p>　　[global]</p>
<p>　　# TDS protocol version</p>
<p>　　; tds version = 4.2</p>
<p>　　# Whether to write a TDSDUMP file for diagnostic purposes</p>
<p>　　# (setting this to /tmp is insecure on a multi-user system)</p>
<p>　　; dump file = /tmp/freetds.log</p>
<p>　　; debug flags = 0xffff</p>
<p>　　# Command and connection timeouts</p>
<p>　　; timeout = 10</p>
<p>　　; connect timeout = 10</p>
<p>　　# If you get out-of-memory errors, it may mean that your client</p>
<p>　　# is trying to allocate a huge buffer for a TEXT field.</p>
<p>　　# Try setting "text size" to a more reasonable limit</p>
<p>　　text size = 64512</p>
<p>　　#解决中文乱码问题</p>
<p>　　client charset=utf8</p>
<p>　　# A typical Sybase server</p>
<p>　　#[egServer50]</p>
<p>　　# host = symachine.domain.com</p>
<p>　　# port = 5000</p>
<p>　　# tds version = 5.0</p>
<p>　　# A typical Microsoft server</p>
<p>　　#[egServer70]</p>
<p>　　# host = ntmachine.domain.com</p>
<p>　　# port = 1433</p>
<p>　　# tds version = 7.0</p>
<p>　　#这个名字程序和命令行用得上,叫什么自己定</p>
<p>　　[Server2005]</p>
<p>　　host = 192.168.3.100 #我的SQL Server2005 IP,根据自己改</p>
<p>　　port = 1433</p>
<p>　　tds version = 7.2</p>
<p>　　4.测试连接:</p>
<p>　　[root@test bin]# ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB</p>
<p>　　locale is "zh_CN"</p>
<p>　　locale charset is "GB2312"</p>
<p>　　Default database being set to PublicDB</p>
<p>　　1&gt;</p>
<p>　　出现这个表示连接成功! 退出:quit 和 exit 都行.</p>
<p>　　参数说明</p>
<p>　　-S 配置的服务名</p>
<p>　　-H 主机名</p>
<p>　　-p 端口</p>
<p>　　-U username</p>
<p>　　-P password</p>
<p>　　-D database</p>
<p>　　5.测试查询:</p>
<p>　　# ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB</p>
<p>　　1&gt; select USER_ID,TRUE_NAME from USER_INFO</p>
<p>　　2&gt; go</p>
<p>　　可以显示中文没问题!</p>
<p>　　6.让<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a>支持mssql(freeTDS)</p>
<p>　　重新编译<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a> 这些参数根据自己情况来定,下面是我们需要的</p>
<p>　　但是必须带--with-mssql=/usr/local/freetds</p>
<p>　　./configure --prefix=/usr/local/<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a> --with-<a title="MySQL" href="http://security.zdnet.com.cn/files/list-0-0-49513-1-1.htm">MySQL</a>=/usr/local/<a title="MySQL" href="http://security.zdnet.com.cn/files/list-0-0-49513-1-1.htm">MySQL</a> --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-<a title="MySQL" href="http://security.zdnet.com.cn/files/list-0-0-49513-1-1.htm">MySQL</a>=/usr/local/<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a>bak/lib/<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a>/extensions/no-debug-non-zts-20060613/pdo_<a title="MySQL" href="http://security.zdnet.com.cn/files/list-0-0-49513-1-1.htm">MySQL</a>.so --enable-sockets --with-curl --with-pear --with-mssql=/usr/local/freetds</p>
<p>　　如果编译报错请执行:</p>
<p>　　# touch /usr/local/freetds/include/tds.h</p>
<p>　　# touch /usr/local/freetds/lib/libtds.a</p>
<p>　　7.<a title="PHP" href="http://security.zdnet.com.cn/files/list-0-0-49937-1-1.htm">PHP</a>测试程序</p>
<p>　　<?php</p>
<p>　　/**</p>
<p>　　* MOIT</p>
<p>　　*</p>
<p>　　* @author 明白(admin126com@126.com) 日 期: Wed Nov 18 05:00:07 GMT 2009</p>
<p>　　* @copyright Copyright (c) 2009</p>
<p>　　* @desc 测试</p>
<p>　　*/</p>
<p>　　$msconnect=mssql_connect("Server2005","java","java");</p>
<p>　　$msdb=mssql_select_db("PublicDB",$msconnect);</p>
<p>　　$msquery = "select TRUE_NAME,USER_ID,USER_NAME,PASSWORD from USER_INFO";</p>
<p>　　$msresults= mssql_query($msquery);</p>
<p>　　while ($row = mssql_fetch_array($msresults)) {</p>
<p>　　echo $row["USER_ID"] . " ".$row["TRUE_NAME"]. " " . $row["USER_NAME"] . " " . $row["PASSWORD"] . "<br />
";</p>
<p>　　}</p>
<p>　　?&gt;</p>
<p>　　8.安装完毕,祝您成功!</p>
  <img src ="http://www.blogjava.net/lyjjq/aggbug/345374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-02-28 22:03 <a href="http://www.blogjava.net/lyjjq/articles/345374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX网络基本配置：</title><link>http://www.blogjava.net/lyjjq/articles/345119.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Fri, 25 Feb 2011 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/345119.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/345119.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/345119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/345119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/345119.html</trackback:ping><description><![CDATA[1.ifconfig eth1 down 禁用网卡<br />
2.ifconfig eth1 up 启用网卡<br />
<p align="left">&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr> 两个部分：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 网络基础：全局参数&nbsp;<wbr> 局部参数</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> *开机之后，新添加的网卡可以通过在开机过程中配置</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 来使用。</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 配置完成之后，使用ifconfig来进行查看：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IP地址、子网掩码、广播地址、统计信息等</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 通过配置文件：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/services&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 定义常用的服务端口号，一般无需修改</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 可以参照netstat -nl 查询本机开放的服务</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/sysconfig/network</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 通常情况下可用于更改计算机名称</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/hosts</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在没有DNS域名解析系统的情况下优先通过该</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 文件实现名称到地址的对应（域名解析）</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/resolv.conf</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 定义本机使用的DNS服务器地址</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/sysconfig/network-scripts/ifcfg-ethx</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 局部参数：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 定义指定网卡IP、MASK、GW、HW Address</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 如果本机使用的是以太网卡，</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 设备名:eth0 eth1 eth2&nbsp;<wbr>&nbsp;<wbr> eth---&gt;ethernet</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 其中内容信息可以通过vi修改</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 完成之后需要使用service network restart&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 重启------&gt;该网络信息的配置永久生效</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 通过命令使用：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> netconfig&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ---&gt;/etc/sysconfig/network-scripts/ifcfg-ethx</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 配置网卡基本参数，完成之后重启服务</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> service network restart&nbsp;<wbr> 或</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/rc.d/init.d/network restart</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 重新启动网络服务</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> redhat-config-network/system-config-network</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 该命令影响的配置文件：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/sysconfig/networking/devices/ifcfg-ethx</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 该命令执行的优先级更高</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ifconfig</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>ifconfig ethx -dynamic</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 临时通过DHCP服务器来获取地址</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ifconfig ethx IPADDRESS netmask MASK</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 临时指定IP地址以及子网掩码</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ifup/ifdown</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 临时启动或者关闭网络连接</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dhclient</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 动态获得IP地址</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 网络高级：路由、ADSL、多网卡、多IP</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 路由添加删除：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> route&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 查询当前路由表</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> route add -net 网络ID netmask 子网掩码 gw 网关</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 增加一条路由</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> route del -net 网络ID netmask 子网掩码</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 删除一条路由</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 接入广域网ADSL设置：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>adsl-setup命令&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ----&gt;按照提示进行操作</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> adsl-start&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 连接客户端</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> adsl-stop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 关闭客户端</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> adsl-status&nbsp;<wbr>&nbsp;<wbr> 查看</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> adsl-connect&nbsp;<wbr> 连接客户端</p>
<p align="left">&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 多网卡配置：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>多个网卡启动的时候会被识别为eth0 eth1 eth2...</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 添加多个网卡，开机自动识别</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 通常通过配置文件拷贝的方式建立其他网卡配置</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 假如：原网卡配置</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> /etc/sysconfig/network-scripts/ifcfg-eth0</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 那么拷贝</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cd /etc/sysconfig/network-scripts/</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cp ifcfg-eth0 ifcfg-eth1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> vi ifcfg-eth1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在更改完成配置之后，</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> service network restart&nbsp;<wbr>&nbsp;<wbr> 重启生效</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> vi /etc/sysctl.conf&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ----&gt;将路由转发功能由0改为1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 执行sysctl -p刷新</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 直到查看cat /proc/sys/net/ipv4/ip_forward</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 显示内容为1,则证明本机IP路由转发功能成功！</p>
<p align="left">&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 多IP绑定配置：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cd /etc/sysconfig/network-scripts/</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cp ifcfg-eth0 ifcfg-eth0:1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> vi ifcfg-eth0:1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 修改IP地址以及设备名称&nbsp;<wbr>&nbsp;<wbr> device=eth0:1</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 保存退出，重启网络</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 对网络信息的检测：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ifconfig&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 查看网络配置信息</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ping&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 选项方面的差别：</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> -c &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 发包数量</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> -s&nbsp;<wbr>&nbsp;<wbr> 发包大小</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> -f&nbsp;<wbr>&nbsp;<wbr> 泛洪</p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> tcpdump&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 检测网卡流经的数据&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> traceroute&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p align="left">&nbsp;</p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/345119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-02-25 14:43 <a href="http://www.blogjava.net/lyjjq/articles/345119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在Linux下查找文件内容包含某个特定字符串的文件</title><link>http://www.blogjava.net/lyjjq/articles/344852.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Tue, 22 Feb 2011 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/344852.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/344852.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/344852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/344852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/344852.html</trackback:ping><description><![CDATA[1.查找目录文件名包含 log的文件列表<br />
find /path -name *log*<br />
2.查找/usr/local/jira/下的所有子目录中的包含MAXIMUM_MEMORY的文件<br />
(1)find /usr/local/jira/ -type f -print | xargs grep MAXIMUM_MEMORY<br />
(2)grep -F MAX -R /usr/local/jira/bin/<br />
(3)find /usr/local/jira/bin |xargs grep PERM_SIZE
<img src ="http://www.blogjava.net/lyjjq/aggbug/344852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-02-22 15:04 <a href="http://www.blogjava.net/lyjjq/articles/344852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache 目录列表 </title><link>http://www.blogjava.net/lyjjq/articles/330569.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Wed, 01 Sep 2010 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/330569.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/330569.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/330569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/330569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/330569.html</trackback:ping><description><![CDATA[<div class="content" id="cont">
<p>
<p>之前都看到很多人在问apache目录列表的问题，如何让apache把目录中的文件列表出来，然后禁止apache目录列表，又如何在访问某个目录时默认指向 index.php .这些在apache配置文档稍作配置就可以做到了。<br />
<br />
DirectoryIndex 指令<br />
DirectoryIndex指令设置了当客户端在请求的目录名的末尾刻意添加一个"/"以表示请求该目录的索引时，服务器需要寻找的资源列表。Local-url(%已解码的)是一个相对于被请求目录的文档的URL(通常是那个目录中的一个文件)。可以指定多个URL，服务器将返回最先找到的那一个。用到apache的mod_dir模块。举例：<br />
<br />
&lt;IfModule dir_module&gt;<br />
&nbsp;&nbsp;&nbsp; DirectoryIndex index.php index.html<br />
&lt;/IfModule&gt;<br />
<br />
这里，首先寻找 index.php, 没有找到再去寻找 index.html<br />
若一个也没有找到或没有设置DirectoryIndex，这就涉及到目录列表的问题了。<br />
如果那个目录设置了Indexes选项，服务器将会自动产生一个那个目录中的资源列表。<br />
<br />
Options 指令<br />
说明: 配置在特定目录使用哪些特性 <br />
语法: Options [+|-]可选项 [[+|-]可选项] ... <br />
默认值: Options All <br />
上下文: 服务器配置, 虚拟主机, 目录, .htaccess <br />
覆盖项: Options <br />
状态: 核心 <br />
模块: core <br />
<br />
option可以为None ，在这种情况下，将不启用任何额外特性。或设置为以下选项中的一个或多个：<br />
<br />
All <br />
除MultiViews之外的所有特性。这是默认设置。 <br />
<br />
ExecCGI <br />
允许使用mod_cgi执行CGI脚本。 <br />
<br />
FollowSymLinks <br />
服务器允许在此目录中使用符号连接。 <br />
注意：即使服务器会使用符号连接，但它不会改变用于匹配&lt;Directory&gt;段的路径名。<br />
注意：如果此配置位于&lt;Location&gt;配置段中，则此设置会被忽略。</p>
<p>Includes <br />
允许使用mod_include提供的服务器端包含。 <br />
<br />
IncludesNOEXEC <br />
允许服务器端包含，但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。 <br />
<br />
Indexes <br />
如果一个映射到目录的URL被请求，而此目录中又没有DirectoryIndex(例如：index.html)，那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表。 <br />
<br />
MultiViews <br />
允许使用mod_negotiation提供内容协商的"多重视图"(MultiViews)。 <br />
<br />
SymLinksIfOwnerMatch <br />
服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。 <br />
<br />
举个例子，允许目录列表：<br />
<br />
&lt;Directory /web/docs&gt;<br />
Options Indexes FollowSymLinks<br />
&lt;/Directory&gt;<br />
<br />
这里设置允许 /web/docs 的目录列表。<br />
禁止列表则可以这么设置<br />
<br />
&lt;Directory /web/docs&gt;<br />
Options None<br />
&lt;/Directory&gt;</p>
<p>&nbsp;</p>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/330569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2010-09-01 14:08 <a href="http://www.blogjava.net/lyjjq/articles/330569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RPM 大全</title><link>http://www.blogjava.net/lyjjq/articles/330529.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Wed, 01 Sep 2010 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/330529.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/330529.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/330529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/330529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/330529.html</trackback:ping><description><![CDATA[RPM 大全
<p>&nbsp; RPM 有五种基本的操作方式(不包括创建 软件 包): 安装, 卸载, 升级, 查询,和验证。 </p>
<p>&nbsp;&nbsp; 下面我们就来逐一的讲解吧。 </p>
<p>一、 安装RPM包 </p>
<p>&nbsp; RPM 软件 包通常具有类似foo-1.0-1.i386.rpm 的文件名。</p>
<p>&nbsp; 其中包括 软件 包的名称(foo)，版本号(1.0)，发行号(1)， 和 硬件平台(i386)。</p>
<p>&nbsp; 安装一个 软件 包只需简单的键入以下命令： $ rpm -ivh foo-1.0-1.i386.rpm foo #################################### RPM安装完毕后会打印出 软件 包的名字(并不一定与文件名相同)， 而后打印一连串的#号以表示安装进度。</p>
<p>&nbsp;&nbsp; 虽然 软件 包的安装被设计的尽量简单易行， 但还是可能会发生如下的错误： </p>
<p>&nbsp; 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将忽略该错误信息强行安装。 </p>
<p>&nbsp; 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 命令行选项。 </p>
<p>&nbsp; 3、未解决依赖关系 RPM 软件 包可能依赖于其它 软件 包，也就是说要求在安装了特定的 软件 包之后才能安装该 软件 包。如果在您安装某个 软件 包时存在这种未解决的依赖关系。会产生以下信息： $ rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 您必须安装完所依赖的 软件 包，才能解决这个问题。如果您想强制安装(这是个坏主意， 因为安装后的 软件 包未必能正常运行)， 请使用--nodeps 命令行选项。 &nbsp; </p>
<p>&nbsp; 二、卸载RPM包 </p>
<p>&nbsp;&nbsp; 卸载 软件 包就象安装 软件 包时一样简单： $ rpm -e foo 注意这里使用 软件 包的名字name ``foo， 而不是 软件 包文件的名字file ``foo-1.0-1.i386.rpm。如果其它 软件 包依赖于您要卸载的 软件 包，卸载时则会产生错误信息。</p>
<p>&nbsp; 如： $ rpm -e foo removing these packages would break dependencies:foo is needed by bar-1.0-1 若让RPM忽略这个错误继续卸载(这可不是一个好主意，因为依赖于该 软件 包的程序可能无法运行)，请使用--nodeps 命令行选项。 &nbsp; </p>
<p>&nbsp; 三、升级RPM包 </p>
<p>&nbsp; 升级 软件 包和安装 软件 包十分类似：. $ rpm -Uvh foo-2.0-1.i386.rpm foo #################################### RPM将自动卸载已安装的老板本的foo 软件 包，您不会看到有关信息。事实上您可能总是使用 -U 来安装 软件 包，因为即便以往未安装过该 软件 包，也能正常运行。</p>
<p>&nbsp; 因为RPM 执行智能化的 软件 包升级， 自动处理配置文件，您将会看到如下信息： saving /etc/foo.conf as /etc/foo.conf.rpmsave 这表示您对配置文件的修改不一定能向上兼容。 </p>
<p>&nbsp; 因此，RPM 会先备份老文件再安装新文件。您应当尽快解决这两个配置文件的不同之处，以使系统能持续正常运行。 </p>
<p>&nbsp; 因为升级实际包括 软件 包的卸载与安装两个过程，所以您可能会碰到由这两个操作引起的错误。</p>
<p>&nbsp; 另一个你可能碰到的问题是：当您使用旧版本的 软件 包来升级新版本的 软件 时，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 如果你确有需要将该 软件 包&#8221;降级，加入 --oldpackage 命令选项就可以了。 <br />
<br />
&nbsp;&nbsp; 四、 查询已安装的软件包 </p>
<p>&nbsp;&nbsp; 使用命令rpm -q来查询已安装 软件 包的 数据库 。</p>
<p>&nbsp;&nbsp; 简单的使用命令 rpm -q foo 会打印出foo 软件 包 的包名 ， 版本号，和发行号： $ rpm -q foo foo-2.0-1 除了指定 软件 包名以外，您还可以使用以下选项来指明要查询哪些 软件 包的信 息。 </p>
<p>这些选项被称之为&#8220; 软件 包指定选项&#8220;。 </p>
<p>&#183; -a 查询所有已安装的 软件 包 <br />
&#183; -f 将查询包含有文件. 的 软件 包 <br />
&#183; -p 查询 软件 包文件名为的 软件 包 还可以指定查询 软件 包时所显示的信息。它们被称作信息选择选项： <br />
&#183; -i 显示 软件 包信息，如描述, 发行号, 尺寸, 构建日期, 安装日期, 平台, 以及其它一些各类信息。 <br />
&#183; -l 显示 软件 包中的文件列表。 <br />
&#183; -s 显示 软件 包中所有文件的状态。 <br />
&#183; -d 显示被标注为文档的文件列表(man 手册, info 手册, READMEs, etc)。 <br />
&#183; -c 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以定制的文件(sendmail.cf, passwd, inittab, etc)。 </p>
<p>对于那些要显示文件列表的文件, 您可以增加-v 命令行选项以获得如同 ls -l 格式的输出。 &nbsp; </p>
<p>&nbsp; 五、 验证软件包 </p>
<p>&nbsp; 验证软件包是通过比较已安装的文件和 软件 包中的原始文件信息来进行的。验证主要是比较文件的尺寸,MD5 校验码, 文件权限, 类型, 属主和用户组等。 </p>
<p>&nbsp; rpm-V命令用来验证一个 软件 包。您可以使用任何包选择选项来查询您要验证的软件包。 </p>
<p>&nbsp; 命令rpm -V foo 将用来验证foo 软件包。</p>
<p>又如： </p>
<p>&#183; 验证包含特定文件的 软件 包： rpm -Vf /bin/vi <br />
&#183; 验证所有已安装的 软件 包： rpm -Va <br />
&#183; 根据一个RPM包来验证： rpm -Vp foo-1.0-1.i386.rpm </p>
<p>&nbsp;&nbsp; 如果您担心你的RPM 数据库 已被破坏，就可以使用这种方式。 如果一切均校验正常将不会产生任何输出。如果有不一致的地方，就会显示出来。 输出格式是8位长字符 串, ``c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM 数据库 中一种属性的比较 结果 。``. (点) 表示<a class="channel_keylink" href="http://softtest.chinaitlab.com/" target="_blank">测试</a>通过。.</p>
<p>&nbsp; 下面的字符表示对RPM 软件 包进行的某种<a class="channel_keylink" href="http://softtest.chinaitlab.com/" target="_blank">测试</a>失败： </p>
<p>&nbsp; 显示字符 错误源 5 MD5 </p>
<p>&nbsp; 校验码 <br />
S 文件尺寸 <br />
L 符号连接 <br />
T 文件修改日期 <br />
D 设备 <br />
U 用户 <br />
G 用户组 <br />
M 模式e (包括权限和文件类型) 如果有错误信息输出, 您应当认真加以考虑，是通过删除还是重新安装来解决出现的问题。 &nbsp; </p>
<p>&nbsp;&nbsp; 六、教你一招 </p>
<p>&nbsp; RPM不仅是安装/卸载程序的工具，它还是系统维护和诊断的一把好手。</p>
<p>&nbsp; 看过下面几个例子你就会领教它的 厉害了。 </p>
<p>&#183; 如果您误删了一些文件, 但您不能肯定到底都删除了那些文件，怎么办？ <br />
您可以键入： rpm -Va rpm会在屏幕上显示出文件删除的情况。若你发现一些文件丢失了或已被损坏, 您就可以重新安装或先卸载 再安装该 软件 包。 <br />
&#183; 如果您碰到了一个自己不认识的文件，要想查处它属于哪个 软件 包，您可以输入以下命令 rpm -qf /usr/X11R6/bin/xjewel 输出的结果会是： xjewel-1.6-1 <br />
&#183; 如果发生综合以上两个例子的情况，如文件/usr/bin/paste出了问题。您想知道哪个 软件 包中包含该文 件，您这时可以简单的键入： rpm -Vf /usr/bin/paste <br />
&#183; 如果您想了解正在使用的程序的详细信息, 您可以键入如下命令来获得 软件 包中关于该程序的文档信息： 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 <br />
&#183; 您发现了一个新的koules RPM，但您不知道它是做什么的，您可以键入如下命令： rpm -qip koules-1.2-2.i386.rpm <br />
&#183; 现在您想了解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包管理功能。</p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/330529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2010-09-01 11:11 <a href="http://www.blogjava.net/lyjjq/articles/330529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让xp系统自动选择用户登录</title><link>http://www.blogjava.net/lyjjq/articles/325193.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sun, 04 Jul 2010 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/325193.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/325193.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/325193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/325193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/325193.html</trackback:ping><description><![CDATA[<strong>第一种是修改注册表</strong>
<p>&nbsp;&nbsp;&nbsp; 这种方法比较麻烦，而且要求对注册表有一定的了解。</p>
<p>&nbsp;&nbsp;&nbsp; 第1步：运行注册表编辑器，依次展开 [HKEY_LOCAL_MACHINE\SOFTWARE\<a class="nounderline" title="Microsoft" href="http://product.it168.com/list/b/05080150_1.shtml" target="_blank">Microsoft</a>\Windows NT\CurrentVersion\Winlogon] 分支，然后在右侧窗口双击 "DefaultUserName"，接着输入你的登录用户名。如果没有 "DefaultUserName" 这一项，可以按<a class="nounderline" title="鼠标" href="http://product.it168.com/list/b/0220_1.shtml" target="_blank">鼠标</a>右键选&#8220;编辑&#8594;新建&#8594;字符串值(s)&#8594;DefaultUserName&#8221;来添加这个项目，注意要区分大小写字母。</p>
<p>&nbsp;&nbsp;&nbsp; 第2步：同样在该分支下，在右侧窗口中双击 "DefaultPassword"，然后在空白栏内输入你的密码。假如未发现 "DefaultPassword" 这一项，可按上面的步骤来新建该字符串值。</p>
<p>&nbsp;&nbsp;&nbsp; 第3步：接下来在右侧窗口中双击 "AutoAdminLogon"，将数值设置为 "1"。假如未发现 "AutoAdminLogon" 这一项，可按上面的步骤来新建。</p>
<p>&nbsp;&nbsp;&nbsp; 现在关闭注册表编辑器并重新启动电脑，就可以实现XP的自动登录了。</p>
<p>&nbsp;&nbsp;&nbsp; <strong>第二种方法比较简单</strong></p>
<p>&nbsp;&nbsp;&nbsp; 在 Windows XP 中单击&#8220;开始&#8594;运行&#8221;，输入 &#8220;rundll32 netplwiz.dll,UsersRunDll&#8221;（注意大小写及空格），按回车就会出现一个&#8220;用户账户&#8221;的操作窗口，如果你对 Windows 2000 比较熟悉的话，相信你应该知道怎么做了，取消对&#8220;要使用本机，用户必须输入用户名和密码&#8221;项的选择，点击&#8220;应用&#8221;。在接下来弹出的对话框中输入你想让电脑每次自动登录的用户名及其密码，下次启动时就可以实现XP的自动登录了</p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/325193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2010-07-04 14:00 <a href="http://www.blogjava.net/lyjjq/articles/325193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下IPTABLES配置详解</title><link>http://www.blogjava.net/lyjjq/articles/303964.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Fri, 27 Nov 2009 11:11:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/303964.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/303964.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/303964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/303964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/303964.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px" width="100%">
<div><strong>如果你的IPTABLES基础知识还不了解,建议先去看看.</strong></div>
<div><strong>开始配置</strong></div>
<div><strong>我们来配置一个filter表的防火墙.</strong></div>
<div><strong>(1)查看本机关于IPTABLES的设置情况</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />
Chain INPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain FORWARD (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain OUTPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain RH-Firewall-1-INPUT (0 references)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; icmp --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icmp type 255 <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; esp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; ah&nbsp;&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 224.0.0.251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:5353 <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:631 <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state RELATED,ESTABLISHED <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:22 <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:80 <br />
ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:25 <br />
REJECT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp; --&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reject-with icmp-host-prohibited <br />
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.</div>
<div>如果你在安装linux时没有选择启动防火墙,是这样的</div>
<div>
<div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />
Chain INPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain FORWARD (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain OUTPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;</div>
<div>什么规则都没有.</div>
<div><strong>(2)清除原有规则.</strong></div>
<div>不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.</div>
<div>
<div><font color="#0000ff">[root@tp ~]# iptables -F</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除预设表filter中的所有规则链的规则<br />
<font color="#0000ff">[root@tp ~]# iptables -X</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除预设表filter中使用者自定链中的规则</div>
<div>我们在来看一下</div>
<div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />
Chain INPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain FORWARD (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain OUTPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.</div>
<div><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><font color="#0000ff"><font face="Courier New">[root@tp ~]# </font>/etc/rc.d/init.d/iptables save</font></span></div>
<div>&nbsp;</div>
<div><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma">这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.</span></div>
<div><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><font color="#0000ff">[root@tp ~]# service iptables restart</font></span></div>
<div>&nbsp;</div>
<div>现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧</div>
<div><strong>(3)设定预设规则</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -P INPUT DROP</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -P OUTPUT ACCEPT</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -P FORWARD DROP</font><br />
<strong><font style="background-color: rgb(255,255,255)" color="#ff0000">上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包</font></strong></div>
<div><strong><font style="background-color: rgb(255,255,255)" color="#ff0000">而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.</font></strong></div>
<div><strong><font style="background-color: rgb(255,255,255)" color="#ff0000">可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.</font></strong></div>
<div><strong><font style="background-color: rgb(255,255,255)" color="#ff0000">这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.</font></strong></div>
<div>注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.</div>
<div>怎么办,去本机操作呗!</div>
<div><strong>(4)添加规则.</strong></div>
<div><strong><font color="#000000">首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链</font></strong></div>
<div><strong><font color="#000000">为了能采用远程SSH登陆,我们要开启22端口.</font></strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT</font></div>
<div><font style="background-color: rgb(255,255,255)" color="#ff0000">[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT</font> <strong>(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.</strong></div>
<div><strong>其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:</strong></div>
<div><font color="#ff0000">[root@tp ~]# iptables -A OUTPUT -p tcp --sport&nbsp;80 -j ACCEPT&nbsp;,其他同理.)</font></div>
<div><strong>如果做了WEB服务器,开启80端口.</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport&nbsp;80 -j ACCEPT</font><br />
<strong>如果做了邮件服务器,开启25,110端口.</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT<br />
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT</font><br />
<strong>如果做了FTP服务器,开启21端口</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport&nbsp;21 -j ACCEPT</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport&nbsp;20 -j ACCEPT</font></div>
<div><strong>如果做了DNS服务器,开启53端口</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT</font></div>
<div>如果你还做了其他的服务器,需要开启哪个端口,照写就行了.</div>
<div>上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP</div>
<div><strong>允许icmp包通过,也就是允许ping,</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT&nbsp; (INPUT设置成DROP的话)</font><br />
</div>
<div>
<div><strong>允许loopback!(不然会导致DNS无法正常关闭等问题)</strong></div>
<div><font color="#0000ff">IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)<br />
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)<br />
</font></div>
</div>
<div>下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.</div>
<div><strong>减少不安全的端口连接</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p tcp --sport&nbsp;31337 -j DROP</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p tcp --dport&nbsp;31337 -j DROP</font></div>
<div><font color="#000000" size="2">有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会</font></div>
<div><font color="#000000">还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139（smb）,2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.</font></div>
<div>&nbsp;</div>
<div><strong><font color="#ff0000">当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加</font></strong></div>
<div><strong><font color="#ff0000">允许SSH登陆一样.照着写就行了.</font></strong></div>
<div>&nbsp;</div>
<div><strong>下面写一下更加细致的规则,就是限制到某台机器</strong></div>
<div><strong>如:我们只允许192.168.0.3的机器进行SSH连接</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT</font></div>
<div>如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.</div>
<div>24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.</div>
<div>-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.</div>
<div>或采用命令方式:</div>
<div><font color="#0000ff">[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT</font></div>
<div>然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.</div>
<div><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><font color="#0000ff"><font face="Courier New">[root@tp ~]# </font>/etc/rc.d/init.d/iptables save</font></span></div>
<div>这样写 !192.168.0.3 表示除了192.168.0.3的ip地址</div>
<div>其他的规则连接也一样这么设置.</div>
<div>&nbsp;</div>
<div><strong>在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.</strong></div>
<div><strong>开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)</strong></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT</font></div>
<div><font color="#0000ff">[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT</font></div>
<div><strong>丢弃坏的TCP包</strong></div>
<div>[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP</div>
<div><strong>处理IP碎片数量,防止攻击,允许每秒100个</strong></div>
<div><font color="#0000ff">[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT</font></div>
<div><strong>设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.</strong> </div>
<div><font color="#0000ff">[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT</font></div>
<div>我在前面只所以允许ICMP包通过,就是因为我在这里有限制.<br />
</div>
<div><font color="#000000"><strong>二,配置一个NAT表放火墙</strong></font></div>
<div><strong>1,查看本机关于NAT的设置情况</strong></div>
<div><strong>[root@tp rc.d]# iptables -t nat -L</strong><br />
Chain PREROUTING (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>Chain POSTROUTING (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
SNAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp; --&nbsp; 192.168.0.0/24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anywhere&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to:211.101.46.235 </div>
<div>Chain OUTPUT (policy ACCEPT)<br />
target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp; </div>
<div>我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章</div>
<div>当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的</div>
<div><strong>如果你想清除,命令是</strong></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -F -t nat</font></span></span></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New"><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -X -t nat</font></span></span></font></span></span></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New"><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -<span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><font face="Courier New">Z</font></span></span></span></span> -t nat</font></span></span></font></span></span></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"></span></span></span>&nbsp;</div>
<div><strong>2,添加规则</strong></div>
<div><strong>添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),</strong></div>
<div><strong>添加规则,我们只添加DROP链.因为默认链全是ACCEPT.</strong></div>
<div><strong>防止外网用内网IP欺骗</strong></div>
<div><font color="#0000ff">[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP<br />
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP<br />
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP</font><br />
&nbsp;<strong>如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)</strong></div>
<div><strong>例：</strong><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"></span></div>
<div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><strong>禁止与211.101.46.253的所有连接</strong></span></div>
<font color="#0000ff">&nbsp;</font><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><font color="#0000ff"><span><font face="Courier New">[root@tp ~]# iptables </font></span>-t nat -A PREROUTING&nbsp; -d&nbsp;211.101.46.253 -j DROP</font></span></div>
</div>
</div>
<div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><span><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><strong>禁用FTP(21)端口</strong></span>&nbsp;</span></span></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><font color="#0000ff"><span><font face="Courier New">[root@tp ~]# iptables </font></span>-t nat -A PREROUTING -p tcp --dport 21 -j DROP</font></span></div>
<div><strong>这样写范围太大了,我们可以更精确的定义.</strong></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><font color="#0000ff"><font face="Courier New">[root@tp ~]# iptables </font>-t nat -A PREROUTING&nbsp; -p tcp --dport 21 -d 211.101.46.253 -j DROP</font> </span></div>
<div><span lang="EN-US" style="font-size: 10pt; font-family: Verdana"><strong>这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.</strong></span></div>
</div>
<div><strong>按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.</strong></div>
<div>&nbsp;</div>
<div><strong>最后：</strong></div>
<div><strong>drop非法连接</strong><br />
<font color="#0000ff">[root@tp ~]# iptables -A INPUT&nbsp;&nbsp; -m state --state INVALID -j DROP<br />
[root@tp ~]# iptables -A OUTPUT&nbsp; -m state --state INVALID -j DROP<br />
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP</font><br />
<strong>允许所有已经建立的和相关的连接</strong><br />
<font color="#0000ff">[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
</font></div>
<p><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><font color="#0000ff"><font face="Courier New">[root@tp ~]# </font>/etc/rc.d/init.d/iptables save</font></span></p>
<p><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><strong>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用．</strong></span></p>
<p><span lang="EN-US" style="font-size: 9pt; font-family: Tahoma"><font color="#0000ff">[root@tp ~]# service iptables restart</font></span></p>
<br />
<strong>别忘了保存，不行就写一部保存一次．你可以一边保存，一边做实验，看看是否达到你的要求， </strong>
<div><strong>上面的所有规则我都试过，没有问题．</strong></div>
<div><strong>写这篇文章，用了我将近１个月的时间．查找资料，自己做实验，希望对大家有所帮助．如有不全及不完善的地方还请提出.</strong></div>
<div><strong>因为本篇文章以配置为主.关于IPTABLES的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的.</strong></div>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/303964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2009-11-27 19:11 <a href="http://www.blogjava.net/lyjjq/articles/303964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IPTables 控制脚本配置文件​</title><link>http://www.blogjava.net/lyjjq/articles/303963.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Fri, 27 Nov 2009 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/303963.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/303963.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/303963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/303963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/303963.html</trackback:ping><description><![CDATA[<strong style="color: black; background-color: rgb(255,255,102)">IPTables</strong> 控制脚本<strong style="color: black; background-color: rgb(160,255,255)">配置文件</strong>​
<p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">iptables</strong></tt> 初始脚本是由 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong>-config</tt> <strong style="color: black; background-color: rgb(160,255,255)">配置文件</strong>所控制的​。​以​下是包括在这个文件中的项的列表​： </font></p>
<div class="itemizedlist">
<ul>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_MODULES</tt> — 在防火墙被激活时，指定一组空间独立的额外 <tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">iptables</strong></tt> 模块来加载。这可以包括 connection tracking 和 NAT helper。 </font></p>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_MODULES_UNLOAD</tt> — 在重新启动和停止时卸载的模块。这个项接受以下值： </font></p>
    <div class="itemizedlist">
    <ul>
        <li>
        <p><font face="宋体"><tt class="command">yes</tt> — 默认的值。这个选项必须被设置来在启动和停止一个防火墙时达到一个正确的​状态。 </font></p>
        <li>
        <p><font face="宋体"><tt class="command">no</tt> — 这个选项只有在卸载 netfilter 模块出现问题时才应该设置。 </font></p>
        </li>
    </ul>
    </div>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_SAVE_ON_STOP</tt> — 当防火墙停止时把当前的防火墙规则保存到 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong></tt>。这个项接受以下值​： </font></p>
    <div class="itemizedlist">
    <ul>
        <li>
        <p><font face="宋体"><tt class="command">yes</tt> — 当防火墙停止时把现存的规则保存到 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong></tt>，而以​前的版本被保存为 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong>.save</tt>。 </font></p>
        <li>
        <p><font face="宋体"><tt class="command">no</tt> — 默认值。​当防火墙停止时不保存当前的规则。 </font></p>
        </li>
    </ul>
    </div>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_SAVE_ON_RESTART</tt> — 当防火墙重新启动时，保存当前的防火墙规则。这个项接受以下值： </font></p>
    <div class="itemizedlist">
    <ul>
        <li>
        <p><font face="宋体"><tt class="command">yes</tt> — 当防火墙重新启动时，保存现存的规则到 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong></tt>，而以前的版本被存为 <tt class="filename">/etc/sysconfig/<strong style="color: black; background-color: rgb(255,255,102)">iptables</strong>.save</tt>。 </font></p>
        <li>
        <p><font face="宋体"><tt class="command">no</tt> — 默认值。防火墙重新启动时，不保存现存的规则。 </font></p>
        </li>
    </ul>
    </div>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_SAVE_COUNTER</tt> — 保存并恢复所有chain 和规则中的数据包和字节计数器。这个项接受以下值： </font></p>
    <div class="itemizedlist">
    <ul>
        <li>
        <p><font face="宋体"><tt class="command">yes</tt> — 保存计数器的值。 </font></p>
        <li>
        <p><font face="宋体"><tt class="command">no</tt> — 默认值。不保存计数器值。 </font></p>
        </li>
    </ul>
    </div>
    <li>
    <p><font face="宋体"><tt class="command"><strong style="color: black; background-color: rgb(255,255,102)">IPTABLES</strong>_STATUS_NUMERIC</tt> — 输出的IP地址是数字的格式，而不是域名和主机名的形式。​这个项接受以下值： </font></p>
    <div class="itemizedlist">
    <ul>
        <li>
        <p><font face="宋体"><tt class="command">yes</tt> — 默认的值。在状态输出中只包括IP地址。 </font></p>
        <li>
        <p><font face="宋体"><tt class="command">no</tt> — 在状态输出中返回域名或主机名。 </font></p>
        </li>
    </ul>
    </div>
    </li>
</ul>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/303963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2009-11-27 18:54 <a href="http://www.blogjava.net/lyjjq/articles/303963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>释放linux cache</title><link>http://www.blogjava.net/lyjjq/articles/293125.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 29 Aug 2009 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/293125.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/293125.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/293125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/293125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/293125.html</trackback:ping><description><![CDATA[<p align="right">&nbsp;</p>
<div class="entry">
<p>因为LINUX的内核机制，一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。<br />
先说下free命令怎么看内存<br />
<code><br />
[root@yuyii proc]# free<br />
total used free shared buffers cached<br />
Mem: 515588 295452 220136 0 2060 64040<br />
-/+ buffers/cache: 229352 286236<br />
Swap: 682720 112 682608<br />
</code></p>
<p>其中第一行用全局角度描述系统使用的内存状况：<br />
total——总物理内存<br />
used——已使用内存，一般情况这个值会比较大，因为这个值包括了cache+应用程序使用的内存<br />
free——完全未被使用的内存<br />
shared——应用程序共享内存<br />
buffers——缓存，主要用于目录方面,inode值等（ls大目录可看到这个值增加）<br />
cached——缓存，用于已打开的文件<br />
<font color="red">note:</font><br />
total=used+free<br />
used=buffers+cached (maybe add shared also)</p>
<p>第二行描述应用程序的内存使用：<br />
前个值表示-buffers/cache——应用程序使用的内存大小，used减去缓存值<br />
后个值表示+buffers/cache——所有可供应用程序使用的内存大小，free加上缓存值<br />
<font color="red">note:</font><br />
-buffers/cache=used-buffers-cached<br />
+buffers/cache=free+buffers+cached</p>
<p>第三行表示swap的使用：<br />
used——已使用<br />
free——未使用</p>
<p>cache释放：<br />
To free pagecache:<br />
echo 1 &gt; /proc/sys/vm/drop_caches<br />
To free dentries and inodes:<br />
echo 2 &gt; /proc/sys/vm/drop_caches<br />
To free pagecache, dentries and inodes:<br />
echo 3 &gt; /proc/sys/vm/drop_caches</p>
<p>说明，释放前最好sync一下，防止丢数据。</p>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/293125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2009-08-29 21:41 <a href="http://www.blogjava.net/lyjjq/articles/293125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么样彻底杀死某用户的所有进程 </title><link>http://www.blogjava.net/lyjjq/articles/292912.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Thu, 27 Aug 2009 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/292912.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/292912.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/292912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/292912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/292912.html</trackback:ping><description><![CDATA[<h2>&nbsp;</h2>
su - username -c 'kill -9 -1'
<img src ="http://www.blogjava.net/lyjjq/aggbug/292912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2009-08-27 22:59 <a href="http://www.blogjava.net/lyjjq/articles/292912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache httpd.conf 配置典型</title><link>http://www.blogjava.net/lyjjq/articles/244772.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 06 Dec 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/244772.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/244772.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/244772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/244772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/244772.html</trackback:ping><description><![CDATA[<p>#设置虚拟主机 <br />
&lt;VirtualHost *:80&gt; <br />
ServerAdmin www.adddd.com <br />
DocumentRoot E:/Tomcat/webapps/ROOT <br />
#您的站点项目所在路径，应与tomcat中的目录设置相同 <br />
ServerName www.adddd.com <br />
Alias /p "F:\\uploadFiles" <br />
&lt;Directory "F:\\uploadFiles"&gt; <br />
Options -Indexes MultiViews <br />
AllowOverride None <br />
Order allow,deny <br />
Allow from all <br />
&lt;/Directory&gt; </p>
<p>Alias /aaaaaa "F:\\aaaaaa" <br />
&lt;Directory "F:\\aaaaaa\abcc"&gt; <br />
Options -Indexes MultiViews <br />
AllowOverride None <br />
Order allow,deny <br />
Allow from all <br />
&lt;/Directory&gt; <br />
DirectoryIndex index.html index.htm index.jsp <br />
ErrorLog logs/shsc-error_log.txt <br />
CustomLog logs/shsc-access_log.txt common <br />
JkMount /servlet/* ajp13 <br />
#让Apache支持对servlet传送，用以Tomcat解析 <br />
JkMount /*.jsp ajp13 <br />
#让Apache支持对jsp传送，用以Tomcat解析 <br />
JkMount /*.do ajp13 <br />
#让Apache支持对.do传送，用以Tomcat解析 <br />
&lt;/VirtualHost&gt; <br />
本文来自: 脚本之家(www.jb51.net) 详细出处参考：http://www.jb51.net/article/15269.htm</p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/244772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2008-12-06 15:14 <a href="http://www.blogjava.net/lyjjq/articles/244772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ssh访问限制</title><link>http://www.blogjava.net/lyjjq/articles/234251.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Tue, 14 Oct 2008 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/234251.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/234251.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/234251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/234251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/234251.html</trackback:ping><description><![CDATA[/etc/hosts.allow<br />
sshd:192.168.168.225:allow<br />
sshd:192.168.168.224:allow<br />
<img src ="http://www.blogjava.net/lyjjq/aggbug/234251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2008-10-14 15:55 <a href="http://www.blogjava.net/lyjjq/articles/234251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>portmap</title><link>http://www.blogjava.net/lyjjq/articles/200694.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Thu, 15 May 2008 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/200694.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/200694.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/200694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/200694.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/200694.html</trackback:ping><description><![CDATA[/etc/exports<br />
--在222和227上分别执行 <br />
service portmap start <br />
service nfs start <br />
--在227上执行 <br />
mount 192.168.168.222:/opt/51point /opt/51point <br />
umount /opt/51point <br />
<br />
<p style="text-indent: 2em"><strong>1.NFS访问 </strong>
<p style="text-indent: 2em">如果你使用NFS网络文件系统服务，应该确保你的/etc/exports具有最严格的访问权限设置，也就是意味着不要使用任何通配符、不允许root写权限并且只能安装为只读文件系统。编辑文件/etc/exports并加入如下两行。
<p style="text-indent: 2em">/dir/to/export host1.mydomain.com(ro，root_squash)
<p style="text-indent: 2em">/dir/to/export host2.mydomain.com(ro，root_squash)
<p style="text-indent: 2em">/dir/to/export是你想输出的目录，host.mydomain.com是登录这个目录的机器名，ro意味着mount成只读系统，root_squash禁止root写入该目录。为了使改动生效，运行如下命令。
<p style="text-indent: 2em"># /usr/sbin/exportfs -a </p>
<img src ="http://www.blogjava.net/lyjjq/aggbug/200694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2008-05-15 18:05 <a href="http://www.blogjava.net/lyjjq/articles/200694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux服务器网卡驱动安装及故障排除</title><link>http://www.blogjava.net/lyjjq/articles/151199.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Mon, 08 Oct 2007 23:08:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/151199.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/151199.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/151199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/151199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/151199.html</trackback:ping><description><![CDATA[<div class="left_1">
<h1 align="center">Linux服务器网卡驱动安装及故障排除</h1>
<script language="javascript" src="http://www.51cto.com/php/ajax_art_2.js"></script>作者: 出处:<a href="http://www.ccw.com.cn/" target="_blank">计算机世界</a>　<font color="#cc0000">&nbsp;(&nbsp;<span id="count0_3">21</span>&nbsp;)&nbsp;砖&nbsp;&nbsp;(&nbsp;<span id="count0_1">35</span>&nbsp;)&nbsp;好&nbsp;&nbsp;<a title="查看所有评论" style="color: #cc0000" href="http://server.51cto.com/php/feedbackt.php?id=26111" target="_blank">评论&nbsp;(&nbsp;<span id="feedback">0 </span>) 条</a> </font>　<a title="技术论坛" href="http://bbs.51cto.com/" target="_blank">进入论坛</a> </div>
<div class="left_2"><span class="font_3">更新时间：</span><a title="滚动新闻" href="http://server.51cto.com/oldnews" target="_blank">2006-05-08 15:11</a><br />
<span class="font_3">关 键 词：</span><a href="http://server.51cto.com/php/search.php?keyword=Linux" target="_blank">Linux</a><br />
<span class="font_3">阅读提示：</span><span class="shortmsg">各种设备驱动程序构成了Linux操作系统代码的主要部分，而网卡的驱动又是Linux操作系统中极其重要的一块，本文作一介绍。</span> </div>
<div class="left_3">
<p>
<p>网卡是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协议之上实现的。 </p>
<p>由于交换机、路由器通常独立于Linux或者其他操作系统。网卡设置故障是造成Linux 服务器故障最主要原因。可能因为硬件的质量或性能、磨损老化、人为误操作、不正确的网络设置、管理问题、Linux软件的BUG、系统受到黑客攻击和Linux病毒等原因造成。 </p>
<p>Linux 服务器网卡故障排除的思路是：应当遵循先硬件后软件的方法。因为硬件如果出现物理损坏那么如何设定网卡都不能解决故障。解决问题的方法可以从自身Linux计算机的网卡查起，如果确定硬件没有问题了，再来考虑软件的设定。 </p>
<p><strong>1. 网卡的选择</strong> </p>
<p>一般来说，2.4版本以后的 Linux可以支持的网卡芯片组数量已经很完备了，包括著名厂商如：Intel 以及使用广泛的 RealTek, Via 等网卡芯片都已经被支持，所以使用者可以很轻易的设定好他们的网络卡。但是由于Linux发行版本众多（目前超过188个），使用前最好查看Linux发行版本的文档。以Redhat Linux 9.0为例，这个设备列表在Ethernet- HOWTO文档中。另外最直接的方法是查看一个目录：/lib/modules/release/kernel/drivers/net,其中 release是内核版本，可以使用命令：&#8220;uname -r&#8221;获得。对于Redhat Linux 9.0是2.4.20-8。
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>#ls /lib/modules/2.4.20-8/kernel/drivers/net/ </p>
            <p>3c501.o atp.o eth16i.o ni52.o smc-ultra.o </p>
            <p>3c503.o bonding.o ethertap.o ni65.o starfire.o </p>
            <p>3c505.o cs89x0.o ewrk3.o ns83820.o strip.o </p>
            <p>3c507.o de4x5.o fc pcmcia sundance.o </p>
            <p>3c509.o de600.o fealnx.o pcnet32.o sungem.o </p>
            <p>3c515.o de620.o hamachi.o plip.o sunhme.o </p>
            <p>3c59x.o defxx.o hamradio ppp_async.o tc35815.o </p>
            <p>8139cp.o depca.o hp100.o ppp_deflate.o tg3.o </p>
            <p>8139too.o dgrs.o hp.o ppp_generic.o tlan.o </p>
            <p>82596.o dl2k.o hp-plus.o ppp_synctty.o tokenring </p>
            <p>8390.o dmfe.o irda r8169.o tulip </p>
            <p>ac3200.o dummy.o lance.o rcpci.o tulip_old </p>
            <p>acenic.o e100 lne390.o sb1000.o tun.o </p>
            <p>aironet4500_card.o e1000 lp486e.o shaper.o via-rhine.o </p>
            <p>aironet4500_core.o e2100.o mii.o sis900.o wan </p>
            <p>aironet4500_proc.o eepro100.o natsemi.o sk98lin wavelan.o </p>
            <p>amd8111e.o eepro.o ne2k-pci.o skfp wd.o </p>
            <p>appletalk eexpress.o ne3210.o slhc.o winbond-840.o </p>
            <p>arlan.o epic100.o ne.o slip.o wireless </p>
            <p>arlan-proc.o eql.o netconsole.o smc9194.o wireless_old </p>
            <p>at1700.o es3210.o ni5010.o smc-ultra32.o yellowfin.o </p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>可以看到这个目录列出所有Linux内核支持的网络设备驱动程序。其中大部分是以太网卡（8139、3COM、Intel）。也有一些是其他类型设备。对于初学者应当尽量选择目录中已经列出的网卡。注意以.o 后缀结束的文件就是驱动程序。而没有后缀的是驱动程序目录（红色）。</p>
<p><strong>3.为新网卡设定IP地址</strong> </p>
<p>&nbsp;</p>
<p>在Linux 网络设备在配置时被赋予别名，该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0，其他设备依次被编号为 1、2、3，等。但是网卡并不是最为裸设备出现在/dev目录下，而是存在内存中。eth0, eth1是以太网卡接口。它们用于大多数的以太网卡，包括许多并行端口以太网卡。本文主要讨论这类网卡。为Linux以太网卡设定IP地址的方式非常灵活，你可以选择适合你工作情况的方法： </p>
<p>（1） 使用ip或ifconfig命令 </p>
<p>ifconfig命令是最重要的Linux网络命令，最主要的用途是设定、修改网卡的IP地址，修改网卡ip地址：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#ifconfig eth0 192.168.0.2 netmask 255.255.255.0</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>默认情况下， ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它主要用于网卡状态调试。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置，但是需要注意在完成测试之后，将所有设置恢复回去。通过使用 ifconfig ，我们无需影响已保存的设置，就能够快速地配置网卡。 </p>
<p>Ip命令是iproute2软件包里面的一个强大的网络配置工具，它能够替代一些传统的网络管理工具。例如：ifconfig、route等。 现在，绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作，但它们在Linux2.2和更高版本的内核上显得有一些落伍。使用iproute2前你应该确认已经安装了这个工具。这个包的名字在RedHat Linux 9.0叫作&#8220;iproute2&#8221;，也可以在：ftp://ftp.inr.ac.ru/ip-routing/ 下载源代码安装。 </p>
<p>如果希望在以太网接口eth0上增加一个地址10.0.0.1，掩码长度为24位，标准广播地址，标签为eth0:Alias：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>netconfig命令可以设置网络设备的ip地址，netconfig命令可以永久保存设置。 </p>
<p>使用方法是：&#8220;netconfig ethX&#8221;。使用命令&#8220;netconfig eth0&#8221;后会在命令行下弹出一个对话框，这时即可进行设定。 </p>
<p>设定结束后用&#8220;tab&#8221;键选择&#8220;OK&#8221;即可保存设置并且退出。然后使用命令：&#8220;service network restart &#8220;激活即可生效。 </p>
<p>使用neat命令需要配置好X window系统，在命令行下运行&#8220;neat&#8221;命令后添加IP地址和其他相关参数后保存设置，从新启动网络和网络服务或计算机。 </p>
<p>另外neat命令还有一个同价命令：&#8220;redhat－config－network&#8221;，二者完全相同。Neat和redhat－config－config命令可以永久保存设置。 </p>
<p>除非另行指定，Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的TCP/IP网络配置文件是：/etc/sysconfig/network-scripts/ifcfg-ethx。其中x从0开始，第一个以太网配置文件即：/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件，也可以修改网卡IP地址。
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#vi /etc/sysconfig/network-scripts/ifcfg-eth0 </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>DEVICE=eth0#设定网卡的名称，要跟文件名称对应 # </p>
<p>ONBOOT=yes#是否在开机的的时候启动网卡# </p>
<p>BOOTPROTO=static #启动的时候的 IP 取得的协议，这里是固定的， </p>
<p>如果是动态主机的话，要改成 dhcp 才行# </p>
<p>IPADDR=192.168.1.2 #IP 地址# </p>
<p>NETMASK=255.255.255.0#子网掩吗# </p>
<p>NETWORK=192.168.1.0#该网段的第一个 IP# </p>
<p>BROADCAST=192.168.1.255#最后一个同网段的广播地址# </p>
<p>GATEWAY=192.168.1.2#网关地址# </p>
<p>#GATEWAYDEV=eth0 </p>
<p>存盘后使用命令：&#8220;service network restart &#8220;激活即可生效。这个方法同样可以永久保存设置。 </p>
<p>（5） 为网卡添加IPV6地址 </p>
<p>和Windows系统相比Linux对Ipv6的支持更好，最早的支持Ipv6的Linux 内核是 2.2.xxx。一般Linux基于2.4内核的Linux发行版本都可以直接使用Ipv6，使用前要看系统IPv6模块是否被加载，如果没有的话可以使用命令手工加载，这需要超级用户的权限。然后使用命令检测，如果显示IPv6地址(inet6 addr：fe80::200:e8ff:fea0:2586/64)证明IPv6已经加载。
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre># modprobe IPv6；#ifconfig -a</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>如果希望Linux系统启动时自动加载Ipv6模块，可以在配置文件：/etc/modules.conf中加入一行：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>alias net?pf?10 ipv6 # automatically load IPv6 module on demand</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>4.调整网卡工作模式</strong> </p>
<p>现在的网卡大多是自适应工作模式，在配置网卡参数时我们很少考虑它的工作模式，有时发现一些网卡模块已经加载，但是在某些模式工作不稳定。如笔者使用的一块XXX品牌的杂牌RTL-8139C芯片10/100自适应网卡在100兆全双工状态下极其不稳定（在Qcheck的TCP和UDP的测试过程中，数据包遗失率9.12％。）。在Linux环境下，我们可以使用系统自带的工具mii-tool 命令来配置网卡工作模式。显示Linux服务器网卡支持的所有以太网卡类型，使用命令：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p># mii-tool －v </p>
            <p>eth0: negotiated 100baseTx-FD, link ok </p>
            <p>product info: vendor 00:00:00, model 0 rev 0 </p>
            <p>basic mode: autonegotiation enabled </p>
            <p>basic status: autonegotiation complete, link ok </p>
            <p>capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD </p>
            <p>advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD </p>
            <p>link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD </p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>从以上信息中可以看出，这块网卡工作在100全双工自适应模式下，&#8220;100aseTx-FD&#8221;意为100M Full Duplex。这里可以强制网卡工作在100M半工模式下，输入命令：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#mii-tool &#8211;F 100baseTx-HD eth0 </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>以后恢复网卡的自适应工作模式，输入命令：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#mii-tool &#8211;r eth0 </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>另外路由器、交换机、代理服务器等通信量比较大的关键设备上，应该为它指定正确的工作模式，这样可以提高通信效率。 </p>
<p><strong>5.DHCP客户端网卡设定</strong> </p>
<p>如果希望使用DHCP是动态主机配置协议，这个协议用于向计算机自动提供IP地址,子网掩码和路由信息。当设备接入这个局域网时，它们会向 DHCP 服务器请求一个 IP 地址。然后 DHCP 服务器为每个请求的设备分配一个地址，直到分配完该范围内的所有 IP 地址为止。已经分配的 IP 地址必须定时地延长借用期。这个延期的过程称作 leasing，确保了当客户机设备在正常地释放 IP 地址之前突然从网络断开时被分配的地址可以归还给服务器。Linux下配置DHCP客户端有两种方法：图形界面和手工配置。使用图形界面可以使用neat 命令界面。选中&#8220;自动获得IP地址设置使用DHCP&#8221;即可。 </p>
<p>通常笔者更喜欢使用选择手工配置 DHCP 客户，需要修改 /etc/sysconfig/network 文件来启用联网；并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中，每个设备都有一个叫做 ifcfg-ethX 的配置文件，ethX是网络设备的名称。如eth0等。如果你想在引导时启动联网，NETWORKING 变量必须 被设为 yes。除了此处之外/etc/sysconfig/network 文件应该包含以下行：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>NETWORKING=yes </p>
            <p>DEVICE=eth0 </p>
            <p>BOOTPROTO=dhcp </p>
            <p>ONBOOT=yes</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>6.VPN服务器网卡设置</strong> </p>
<p>&nbsp;</p>
<p>VPN是由经过相互授权的通信双方在公网上建立的安全通信隧道，数据在隧道中进行加密传输，用于总部与分支机构的安全通信。虚拟专用网络是一种新的网络技术，用于跨过 Internet 或局域网而安全地访问企业网。Redhat Linux下的VPN技术主要有CIPE （Crypto IP Encapsulation：加密 IP 封装）是主要为 Linux 而开发的 VPN 实现。CIPE 使用加密的 IP 分组，这些分组被封装或&#8220;包围&#8221;在数据报（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开始的递增数字。 </p>
<p>（1）VPN服务器端网卡设置 </p>
<p>首先手工建立/etc/sysconfig/network-scripts/ifcfg-cipcb0文件，它是VPN服务器的虚拟网络接口，主要内容： </p>
<p>USERCTL=yes #是否允许所有用户修改配置# </p>
<p>TYPE=CIPE #接口类型# </p>
<p>DEVICE=cipcb0 #给 CIPE 设备命名# </p>
<p>ONBOOT=yes #系统启动时激活设备# </p>
<p>IPADDR=10.0.0.1 #本地虚拟地址# </p>
<p>MYPORT=7777 #通讯端口# </p>
<p>PTPADDR=10.0.0.2 #远程虚拟地址# </p>
<p>PEER=0.0.0.0 #本地地址，0.0.0.0 表示接受连续监听# </p>
<p>ME=192.168.1.9 #对端的 CIPE UDP 地址# </p>
<p>TUNNELDEV=eth0 #隧道穿越设备# </p>
<p>然后建立/etc/cipe/options.cipcb0文件，这个文件存放密匙，主要内容： </p>
<p>cttl 64 #设置载体生存时间值（TTL）；推荐的值是64# </p>
<p>maxerr &#8211;1 #服务器错误挂起时间# </p>
<p>key 54240266869983357939377846801171299051 #128位密匙# </p>
<p>（2）客户端网卡的配置 </p>
<p>由于CIPE要求服务器和客户机的密匙完全相同所以，首先将密匙文件：options.cipcb从服务器复制到客户机主机的/etc/cipe/ 目录中。 </p>
<p># scp root@192.168.1.9:/etc/cipe/options.cipcb0 /etc/cipe/options.cipcb0 </p>
<p>Are you sure you want to continue connecting (yes/no)? yes </p>
<p>Warning: Permanently added '192.168.1.9' (RSA) to the list of known hosts. </p>
<p>root@192.168.1.9's password: </p>
<p>options.cipcb0 100% |***************************************| 61 00:00 </p>
<p>然后使用vi编辑器建立客户端网卡配置文件：/etc/sysconfig/network-scripts/ifcfg-cipcb0包含以下内容： </p>
<p>USERCTL=no #不允许客户端修改配置# </p>
<p>BOOTPROTO＝none </p>
<p>TYPE=CIPE #接口类型# </p>
<p>DEVICE=cipcb0 #给 CIPE 设备命名# </p>
<p>ONBOOT=yes #系统启动时激活设备# </p>
<p>IPADDR=10.0.0.2 #本地虚拟地址# </p>
<p>MYPORT=7777 #通讯端口# </p>
<p>PTPADDR=10.0.0.1 #远程虚拟地址# </p>
<p>PEER=192.168.1.29:7777 #VPN服务器真实IP地址和端口号# </p>
<p>ME=192.168.1.9 #对端的 CIPE UDP 地址# </p>
<p>TUNNELDEV=eth0 #隧道穿越设备# </p>
<p>MTU＝&#8220;&#8221; #使用缺省设置# </p>
<p>NETMASK＝&#8220;&#8221; #使用缺省设置# </p>
<p>NETWORK＝&#8220;&#8221; #使用缺省设置# </p>
<p>BROADCAST＝&#8220;&#8221; #使用缺省设置# </p>
<p>（3）使用ifup命令激活VPN网卡
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre># ifup cipcb0 </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>这时VPN通道已经开启，可以使用tcpdump等工具检查。</p>
<p><strong>7.无线网卡在Linux下安装</strong> </p>
<p>&nbsp;</p>
<p>随着Linux网络技术的快速增长，硬件厂商大大加速对硬件产品对Linux的技术支持。使得Linux 支持的无线网卡的数量在过去的一两年里增长显著。一旦在计算机中安装好了无线局域网卡，首先要做的就是安装驱动来让网卡工作。无线网卡实现了IEEE 802.11系列协议中的一种或多种的物理层(PHY)和媒质访问控制子层(MAC)的功能，而驱动是用来控制无线网卡，向上提供与以太网一致的接口并提供其他一些无线局域网特定的管理接口的。对于不同厂商的不同网卡，还没有一种统一的方法可以驱动所有的网卡。首先必须确保内核配置中启动了无线局域网。如果没有无线局域网支持，你应该重新配置、编译内核来启动"Wireless LAN (non-hamradio) Drivers and Wireless Extensions"。 </p>
<p>目前，常见的无线网卡大多为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的无线网卡安装就比较复杂了。需要一个第三方工具安装。 </p>
<p>目前经过www.Linux.org 认证的PCMCIA网卡有两大类。使用基于朗讯(Lucent)芯片组的PCIMCIA无线网卡和使用基于intersil PRISM2-based cards 芯片组的PCMCIA的无线网卡见表－1。 </p>
<p>Lucent chipset-based cards intersil PRISM2-based cards </p>
<p>Lucent Wavelan/IEEE and Orimoco Linksys(WPC11 v2.5) </p>
<p>Cabletron/Enterays RoarmAbout SMS（2632W） </p>
<p>Compaq(WL110、WL210、 WL215) Compaq(WL100、WL200) </p>
<p>Apple Airport Cisco Aironet Wireless 802.11b（340、350） </p>
<p>IBM High Rate Wireless LAN Dlink DWL-650 </p>
<p>HP 802.11bWiewless LAN Nokia </p>
<p>DELL TrueMobile Intel PRO/Wireless 2100 </p>
<p>3Com AirConnect SAMSUNG 11Mbps WLAN Card </p>
<p>LA4111 Spectrum24 Wireless LAN PC Card PROXIM LAN PC CARD HARMONY 80211B </p>
<p>NCR WaveLAN/IEEE Adapter </p>
<p>总的来说Linux下无线网卡的安装顺序一般是： </p>
<p>采取全部安装方式安装Linux发行版本，重新编译内核，并除去任何对内核提供的 PCMCIA 驱动程序的部分。 </p>
<p>了解网卡的规格并且下载并编译相应的 PCMCIA-CS 库和驱动程序 </p>
<p>下载、编译并安装无线网卡必需的所有驱动程序。这一步骤对于有些网卡是可选的，而对于有些网卡是必须执行的。做与不做很大程度上取决于您所选的无线网卡。 </p>
<p>修改和无线网卡的相关设定。从新启动Linux系统和网络。 </p>
<p>设置无线网络相关步骤如下： </p>
<p>（1）用&#8220;iwconfig&#8221;命令来显示无线网卡（eth0、eth1）的信息。在以下的步骤中，用ethX表示无线网卡的名称。 </p>
<p>（2）设置无线网卡的操作模式为Managed：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#iwconfig ethX mode Managed</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>（3）如果采用了WEP加密，需要设置WEP密码：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#iwconfig ethX key password XXXXXX</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>对应40位和128位加密，password分别为6位和10位的十六进制数字。 </p>
<p>（4）设置SSID，其中ESSID为无线接入（Access Point）的SSID。
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre># iwconfig ethX essid ESSID</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>（5）创建/etc/sysconfig/network/ifcfg-ethX配置文件，使得机器每次启动时，无线网卡都会自动获得IP地址。该文件内容如下：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>BOOTPROTO=&#8216;dhcp&#8217; </p>
            <p>MTU=&#8216;&#8217; </p>
            <p>REMOTE_IPADDR=&#8216;&#8217; </p>
            <p>STARTMODE=&#8216;onboot&#8217; </p>
            <p>UNIQUE=&#8216;&#8217; </p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>（6）启动无线网卡：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#ifconfig ethX up</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/151199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2007-10-09 07:08 <a href="http://www.blogjava.net/lyjjq/articles/151199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>