﻿<?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/OpenVPN/Python</title><link>http://www.blogjava.net/jelver/category/7677.html</link><description>“一直很多人说我是天才，但我却相信这个世界没有天才。如果没有卓越的努力和娴熟的球性，你永远不会踢出精彩的足球。我从来不会低估努力的重要性，而这正是我对自己的要求。”---罗纳尔迪尼奥(Ronaldinho)</description><language>zh-cn</language><lastBuildDate>Wed, 23 Sep 2009 22:05:47 GMT</lastBuildDate><pubDate>Wed, 23 Sep 2009 22:05:47 GMT</pubDate><ttl>60</ttl><item><title>Java 调用 Shell 命令</title><link>http://www.blogjava.net/jelver/articles/296128.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Wed, 23 Sep 2009 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/296128.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/296128.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/296128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/296128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/296128.html</trackback:ping><description><![CDATA[<p>&nbsp;近日项目中有这样一个需求：系统中的外币资金调度完成以后，要将调度信息生成一个Txt文件，然后将这个Txt文件发送到另外一个系统(Kondor)中。生成文件自然使用OutputStreamWirter了，发送文件有两种方式，一种是用写个一个类似于FTP功能的程序，另外一种就是使用Java来调用Shell，在Shell中完成文件的发送操作。我们选择后一种，即当完成外币资金的调度工作后，用Java的OutputStreamWriter来生成一个Txt文件，然后用Java来调用Shell脚本，在Shell脚本中完成FTP文件到Kondor系统的工作。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>以下为Java程序JavaShellUtil.java： </p>
<div style="background-color: #cccccc">
<pre>import java.io.BufferedReader;<br />
import java.io.File;<br />
import java.io.FileOutputStream;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.io.OutputStream;<br />
import java.io.OutputStreamWriter;<br />
import java.text.DateFormat;<br />
import java.text.SimpleDateFormat;<br />
import java.util.Date;<br />
<br />
public class JavaShellUtil {<br />
//基本路径<br />
private static final String basePath = "/tmp/";<br />
<br />
//记录Shell执行状况的日志文件的位置(绝对路径)<br />
private static final String executeShellLogFile = basePath + "executeShell.log";<br />
<br />
//发送文件到Kondor系统的Shell的文件名(绝对路径)<br />
private static final String sendKondorShellName = basePath + "sendKondorFile.sh";<br />
<br />
public int executeShell(String shellCommand) throws IOException {<br />
int success = 0;<br />
StringBuffer stringBuffer = new StringBuffer();<br />
BufferedReader bufferedReader = null;<br />
//格式化日期时间，记录日志时使用<br />
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS ");<br />
<br />
try {<br />
stringBuffer.append(dateFormat.format(new Date())).append("准备执行Shell命令 ").append(shellCommand).append(" \r\n");<br />
<br />
Process pid = null;<br />
String[] cmd = {"/bin/sh", "-c", shellCommand};<br />
//执行Shell命令<br />
pid = Runtime.getRuntime().exec(cmd);<br />
if (pid != null) {<br />
stringBuffer.append("进程号：").append(pid.toString()).append("\r\n");<br />
//bufferedReader用于读取Shell的输出内容 bufferedReader = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024);<br />
pid.waitFor();<br />
} else {<br />
stringBuffer.append("没有pid\r\n");<br />
}<br />
stringBuffer.append(dateFormat.format(new Date())).append("Shell命令执行完毕\r\n执行结果为：\r\n");<br />
String line = null;<br />
//读取Shell的输出内容，并添加到stringBuffer中<br />
while (bufferedReader != null &amp;<br />
&amp;<br />
(line = bufferedReader.readLine()) != null) {<br />
stringBuffer.append(line).append("\r\n");<br />
}<br />
} catch (Exception ioe) {<br />
stringBuffer.append("执行Shell命令时发生异常：\r\n").append(ioe.getMessage()).append("\r\n");<br />
} finally {<br />
if (bufferedReader != null) {<br />
OutputStreamWriter outputStreamWriter = null;<br />
try {<br />
bufferedReader.close();<br />
//将Shell的执行情况输出到日志文件中<br />
OutputStream outputStream = new FileOutputStream(executeShellLogFile);<br />
outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");<br />
outputStreamWriter.write(stringBuffer.toString());<br />
} catch (Exception e) {<br />
e.printStackTrace();<br />
} finally {<br />
outputStreamWriter.close();<br />
}<br />
}<br />
success = 1;<br />
}<br />
return success;<br />
}<br />
<br />
}<br />
</pre>
</div>
<p>&nbsp;<wbr><br />
&nbsp;<wbr><br />
&nbsp;<wbr><br />
&nbsp;<wbr><br />
以下是Shell脚本sendKondorFile.sh，该Shell脚本的作用是FTP文件到指定的位置： </p>
<div style="background-color: #cccccc">#!/bin/sh<br />
<br />
#日志文件的位置<br />
logFile="/opt/fms2_kondor/sendKondorFile.log"<br />
<br />
#Kondor系统的IP地址，会将生成的文件发送到这个地址<br />
kondor_ip=192.168.1.200<br />
<br />
#FTP用户名<br />
ftp_username=kondor<br />
<br />
#FTP密码<br />
ftp_password=kondor<br />
<br />
#要发送的文件的绝对路径<br />
filePath=""<br />
<br />
#要发送的文件的文件名<br />
fileName=""<br />
<br />
#如果Shell命令带有参数，则将第一个参数赋给filePath，将第二个参数赋给fileName<br />
if [ $# -ge "1" ]<br />
then<br />
filePath=$1<br />
else<br />
echo "没有文件路径"<br />
echo "没有文件路径\n" &gt;<br />
&gt;<br />
$logFile<br />
return<br />
fi<br />
<br />
if [ $# -ge "2" ]<br />
then<br />
fileName=$2<br />
else<br />
echo "没有文件名"<br />
echo "没有文件名\n" &gt;<br />
&gt;<br />
$logFile<br />
return<br />
fi<br />
<br />
echo "要发送的文件是 ${filePath}/${fileName}"<br />
<br />
cd ${filePath}<br />
ls $fileName<br />
if (test $? -eq 0)<br />
then<br />
echo "准备发送文件：${filePath}/${fileName}"<br />
else<br />
echo "文件 ${filePath}/${fileName} 不存在"<br />
echo "文件 ${filePath}/${fileName} 不存在\n" &gt;<br />
&gt;<br />
$logFile<br />
return<br />
fi<br />
<br />
ftp -n ${kondor_ip} &lt;<br />
&lt;<br />
_end<br />
user ${ftp_username} ${ftp_password}<br />
asc<br />
prompt<br />
put $fileName<br />
bye<br />
_end<br />
<br />
echo "`date +%Y-%m-%d' '%H:%M:%S` 发送了文件 ${filePath}/${fileName}"<br />
echo "`date +%Y-%m-%d' '%H:%M:%S` 发送了文件 ${filePath}/${fileName}\n" &gt;<br />
&gt;<br />
$logFile<br />
</div>
<p>&nbsp;<wbr><br />
&nbsp;<wbr><br />
&nbsp;<wbr><br />
&nbsp;<wbr><br />
调用方法为： </p>
<div style="background-color: #cccccc">JavaShellUtil javaShellUtil = new JavaShellUtil();<br />
//参数为要执行的Shell命令，即通过调用Shell脚本sendKondorFile.sh将/temp目录下的tmp.pdf文件发送到192.168.1.200上<br />
int success = javaShellUtil.executeShell("sh /tmp/sendKondorFile.sh /temp tmp.pdf");<br />
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/296128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2009-09-23 10:16 <a href="http://www.blogjava.net/jelver/articles/296128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python调用cx_Oracle开发(-)---cx_Oracle安装(转)</title><link>http://www.blogjava.net/jelver/articles/294583.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 10 Sep 2009 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/294583.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/294583.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/294583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/294583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/294583.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/LIUYANG007/archive/2007/03/16/1531167.aspx">http://blog.csdn.net/LIUYANG007/archive/2007/03/16/1531167.aspx</a><br />
开始在ubuntu下用python调用oracle,决定使用cx_Oracle.</p>
<p>安装前要确定oracle安装成功并能正常使用</p>
<p>在cx_Oracle的网站上http://www.python.net/crew/atuining/cx_Oracle/</p>
<p>有windows和linux 2种安装版本</p>
<p>按照自己的具体配置选择下载版本,我是oracle10,python 2.4</p>
<p><br />
下载Fedora Core 5 RPM (Oracle 10g, Python 2.4),</p>
<p>cx_Oracle-4.3-10g-py24-1.i386.rpm</p>
<p><br />
先把rpm转换成deb安装</p>
<p>suod alien cx_Oracle-4.3-10g-py24-1.i386.rpm cx_Oracle-4.3-10g-py24-1.i386.deb</p>
<p><br />
再安装deb</p>
<p>sudo dpkg -i cx_Oracle-4.3-10g-py24-1.i386.deb</p>
<p><br />
安装完成后在python里输入</p>
<p>&gt;&gt;&gt; import cx_Oracle</p>
<p>Traceback (most recent call last):</p>
<p>&nbsp; File "", line 1, in ?</p>
<p>ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory</p>
<p><br />
经过查找发现是oracle的路径没有设置</p>
<p>输入:</p>
<p>locate libclntsh.so.10.1</p>
<p>获取对于路径</p>
<p>/app/oracle/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1</p>
<p>&nbsp;</p>
<p><br />
编辑/etc/ld.so.conf</p>
<p>sudo gedit /etc/ld.so.conf</p>
<p><br />
在最后一行输入获取的路径</p>
<p>/app/oracle/oracle/product/10.2.0/db_1/lib/</p>
<p><br />
保存,关闭gedit</p>
<p>执行</p>
<p>ldconfig</p>
<p><br />
再调用就好了</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/LIUYANG007/archive/2007/03/16/1531167.aspx</p>
<img src ="http://www.blogjava.net/jelver/aggbug/294583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2009-09-10 14:52 <a href="http://www.blogjava.net/jelver/articles/294583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell监控服务器alive并自动发短信报警</title><link>http://www.blogjava.net/jelver/articles/291534.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Mon, 17 Aug 2009 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/291534.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/291534.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/291534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/291534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/291534.html</trackback:ping><description><![CDATA[原帖：<a href="http://bbs.linuxtone.org/redirect.php?tid=3325&amp;goto=lastpost">http://bbs.linuxtone.org/redirect.php?tid=3325&amp;goto=lastpost</a><br />
<span href="http://bbs.linuxtone.org/tag.php?name=%BD%C5%B1%BE" onclick="tagshow(event)" class="t_tag">脚本</span>借助了<a href="http://bbs.linuxtone.org/space-uid-1656.html" target="_blank"><font color="#000000">抚琴煮酒</font></a> 的<a href="http://bbs.linuxtone.org/thread-2065-1-1.html" target="_blank"><font color="#000000">测试局域网内主机是否alive的小脚本</font></a> <br />
<a href="http://bbs.linuxtone.org/thread-2065-1-1.html" target="_blank">http://bbs.<span href="http://bbs.linuxtone.org/tag.php?name=linux" onclick="tagshow(event)" class="t_tag">linux</span>tone.org/thread-2065-1-1.html</a><br />
新加入了飞信免费发短信API接口（可以自己给自己发短信，完全免费）<br />
把ping不同的ip地址写到一个<span href="http://bbs.linuxtone.org/tag.php?name=%CE%C4%BC%FE" onclick="tagshow(event)" class="t_tag">文件</span>里面，并去判断这个文件是否为空来实现报警功能<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!/bin/bash</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;cat&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">dev</span><span style="color: #000000;">/</span><span style="color: #000000;">null&nbsp;</span><span style="color: #000000;">&gt;/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">sbin</span><span style="color: #000000;">/</span><span style="color: #000000;">51edu.txt<br />
&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">66</span><span style="color: #000000;">..</span><span style="color: #000000;">75</span><span style="color: #000000;">};&nbsp;do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host</span><span style="color: #000000;">=</span><span style="color: #000000;">192.168</span><span style="color: #000000;">.0.$n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ping&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c5&nbsp;$host&nbsp;</span><span style="color: #000000;">&amp;&gt;/</span><span style="color: #000000;">dev</span><span style="color: #000000;">/</span><span style="color: #000000;">null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;[&nbsp;$?&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">$host&nbsp;is&nbsp;up</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;/</span><span style="color: #000000;">dev</span><span style="color: #000000;">/</span><span style="color: #000000;">null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">$host</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;&gt;/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">sbin</span><span style="color: #000000;">/</span><span style="color: #000000;">51edu.txt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;[[&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">s&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">sbin</span><span style="color: #000000;">/</span><span style="color: #000000;">51edu.txt&nbsp;]];then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOWN</span><span style="color: #000000;">=</span><span style="color: #000000;">`cat&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">sbin</span><span style="color: #000000;">/</span><span style="color: #000000;">51edu.txt</span><span style="color: #000000;">|</span><span style="color: #000000;">paste&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">s&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">,</span><span style="color: #800000;">'</span><span style="color: #000000;">`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">http://sms.api.bz/fetion.php?username=1501*******&amp;password=******&amp;&nbsp;amp;sendto=1501*******&amp;message=$DOWN服务器down机，请尽快处理!</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
&nbsp;done</span></div>
<br />
更简洁：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!/bin/bash</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">Checks&nbsp;to&nbsp;see&nbsp;if&nbsp;hosts&nbsp;192.168.100.1-192.168.100.16&nbsp;are&nbsp;alive</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">$?输出命令退出代码：0为命令正常执行，1-255为有出错</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">1</span><span style="color: #000000;">..</span><span style="color: #000000;">16</span><span style="color: #000000;">};&nbsp;do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host</span><span style="color: #000000;">=</span><span style="color: #000000;">192.168</span><span style="color: #000000;">.</span><span style="color: #000000;">100</span><span style="color: #000000;">.$n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ping&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c2&nbsp;$host&nbsp;</span><span style="color: #000000;">&amp;&gt;/</span><span style="color: #000000;">dev</span><span style="color: #000000;">/</span><span style="color: #000000;">null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;[&nbsp;$?&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">$host&nbsp;is&nbsp;UP</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">$host&nbsp;is&nbsp;DOWN</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">http://sms.api.bz/fetion.php?username=135****&amp;password=***&amp;sendto=135***&amp;message=$host服务器down机，请尽快处理!</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
done</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/jelver/aggbug/291534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2009-08-17 18:50 <a href="http://www.blogjava.net/jelver/articles/291534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高级语言与shell的交互</title><link>http://www.blogjava.net/jelver/articles/270063.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Mon, 11 May 2009 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/270063.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/270063.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/270063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/270063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/270063.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p><font color="#ff6600">原文 <a href="http://blog.chinaunix.net/u1/42963/showart_709425.html">http://blog.chinaunix.net/u1/42963/showart_709425.html</a></font></p>
            <p><font color="#003300">由于项目需要，最近研究了高级语言调用其他一些脚本的方法，这里主要介绍两个语言，分别是Java 和 C语言。</font></p>
            <div><font color="#003300"><font face="黑体" size="4"><strong>1.Java调用shell</strong></font><br />
            &nbsp;&nbsp; Java语言以其跨平台性和简易性而著称，在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口，这就是Runtime类，在Runtime类里提供了获取当前运行环境的接口。 其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种：<br />
            &nbsp;&nbsp; <br />
            public Process exec(String command) throws IOException<br />
            public Process exec(String command,String[] envp) throws IOException<br />
            public Process exec(String command,String[] envp,File dir) throws IOException<br />
            public Process exec(String[] cmdarray) throws IOException<br />
            public Process exec(String[] cmdarray, String[] envp) throws IOException<br />
            public Process exec(String[] cmdarray, String[] envp,File dir) throws IOException</font></div>
            <div></div>
            <div><font color="#003300">&nbsp;&nbsp; 我们在这里主要用到的是第一个和第四个函数，具体方法很简单，就是在exec函数中传递一个代表命令的字符串。exec函数返回的是一个Process类型的类的实例。Process类主要用来控制进程，获取进程信息等作用。(具体信息及其用法请参看Java doc)。</font></div>
            <div></div>
            <div><font color="#003300"><font size="3"><strong>1）执行简单的命令的方法：<br />
            </strong></font>代码如下：<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String commands = "ls -l";<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process process = Runtime.getRuntime().exec (commands);</font></div>
            <div><font color="#003300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // for showing the info on screen <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader ir=new InputStreamReader(process.getInputStream());<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader input = new BufferedReader (ir);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = input.readLine ()) != null){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(line);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (java.io.IOException e){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println ("IOException " + e.getMessage());<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></div>
            <div><br />
            <font color="#003300">上面的代码首先是声明了一个代表命令的字符串commands，它代表了ls -l 这个命令。之后我们用Runtime.getRuntime().exec(commands)来生成一个子进程来执行这个命令，如果这句话运行成功，则 命令 ls -l 运行成功(由于没有让它显示，不会显示ls -l 的结果)。后面的流操作则是获取进程的流信息，并把它们一行行输出到屏幕。</font></div>
            <div><br />
            <font color="#003300"><font size="3"><strong>2）执行带有参数的命令</strong></font>(尤其是参数需要用引号的)时则需要用String的数组来表示整个命令，而且要用转义符把引号的特殊含义去除，例如我们要执行 find / -name "*mysql*" -print 时，用如下代码<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] commands = new String[]{"find",".","-name","*mysql*","-print"};<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process process = Runtime.getRuntime().exec (commands);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader ir=new InputStreamReader(process.getInputStream());<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader input = new BufferedReader (ir);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = input.readLine ()) != null){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(line);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (java.io.IOException e){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println ("IOException " + e.getMessage());</font></div>
            <div></div>
            <div><font color="#003300">3)<font size="3"><strong>执行一个自己写的脚本</strong></font></font></div>
            <div><font color="#003300">非常简单，只需要在构造commands时写出它的详细路径和文件名，及参数等。</font></div>
            <div><font color="#003300">&nbsp;&nbsp;&nbsp;<br />
            &nbsp;&nbsp; try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String commands = "/root/test/checkfile.sh";<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process process = Runtime.getRuntime().exec (commands);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader ir=new InputStreamReader(process.getInputStream());<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader input = new BufferedReader (ir);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = input.readLine ()) != null){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(line);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end try<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (java.io.IOException e){<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println ("IOException " + e.getMessage());</font></div>
            <div></div>
            <div><font color="#003300"><font size="2">如果命令中有参数，同2）要用数组的形式</font>。</font></div>
            <div></div>
            <div><font face="黑体" color="#003300" size="4"><strong>2.C程序调用shell</strong></font></div>
            <div></div>
            <div><font color="#003300">C程序调用shell脚本共有三种方式：system()、popen()、exec系列函数<br />
            <br />
            <font size="3"><strong>1）system(shell命令或shell脚本路径);</strong></font><br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp; system()会调用fork()产生子进程，由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令，此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置，SIGINT和SIGQUIT 信号则会被忽略。<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; 返回值：如果system()在调用/bin/sh时失败则返回127，其他失败原因返回-1。若参数string为空指针(NULL)，则返回非零值。如果 system()调用成功则最后会返回执行shell命令后的返回值，但是此返回值也有可能为system()调用/bin/sh失败所返回的127，因此最好能再检查errno 来确认执行成功。</font></div>
            <div></div>
            <div><font color="#003300">&nbsp;&nbsp; system命令以其简单高效的作用得到很很广泛的应用，下面是一个例子</font></div>
            <div><br />
            <font color="#003300">例：在~/test/目录下有shell脚本test.sh，内容为</font></div>
            <div><font color="#003300">#!bin/bash<br />
            #test.sh<br />
            echo hello</font></div>
            <div></div>
            <div><font color="#003300">在同层目录下新建一个c文件system_test.c，内容为：</font></div>
            <div></div>
            <div><font color="#003300">#include&lt;stdlib.h&gt;</font></div>
            <div><font color="#003300">int main()<br />
            {<br />
            system("~/test/test.sh");<br />
            }</font></div>
            <div></div>
            <div><font color="#003300">执行结果如下：</font></div>
            <div></div>
            <div><font color="#003300">[root@localhost test]$gcc system_test.c -o system_test <br />
            [root@localhost test]$./system_test<br />
            hello<br />
            [root@localhost test]$ </font></div>
            <div><br />
            <font color="#003300"><font size="3"><strong>2）popen(char *command,char *type)</strong></font>&nbsp;&nbsp;&nbsp; </font></div>
            <div></div>
            <div><font color="#003300">&nbsp;&nbsp;&nbsp; popen()会调用fork()产生子进程，然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用&#8220;r&#8221;代表读取，&#8220;w&#8221;代表写入。依照此type值，popen()会建立管道连到子进程的标准输出设备或标准输入设备，然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外，所有使用文件指针(FILE*)操作的函数也都可以使用，除了fclose()以外。</font></div>
            <div></div>
            <div><font color="#003300">&nbsp;&nbsp;&nbsp; 返回值：若成功则返回文件指针，否则返回NULL，错误原因存于errno中。注意：在编写具SUID/SGID权限的程序时请尽量避免使用popen()，popen()会继承环境变量，通过环境变量可能会造成系统安全的问题。</font></div>
            <div></div>
            <div><font color="#003300">例：C程序popentest.c内容如下：</font></div>
            <div><font color="#003300">&nbsp;&nbsp;&nbsp; #include&lt;stdio.h&gt;<br />
            &nbsp;&nbsp;&nbsp; main<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE * fp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charbuffer[80];<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fp=popen(&#8220;~/myprogram/test.sh&#8221;,&#8221;r&#8221;);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fgets(buffer,sizeof(buffer),fp);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;%s&#8221;,buffer);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pclose(fp);<br />
            &nbsp;&nbsp;&nbsp; }</font></div>
            <div></div>
            <div></div>
            <div><font color="#003300">执行结果如下：</font></div>
            <div></div>
            <div><font color="#003300">[root@localhost test]$ vim popentest.c<br />
            [root@localhost test]$ gcc popentest.c -o popentest<br />
            [root@localhost test]$ ./popentest<br />
            /root/test<br />
            [root@localhost test]$ </font></div>
            <div></div>
            <div><font color="#003300">对于exec系列函数这里就不做具体介绍了。</font></div>
            <div><font color="#003300">希望这些东西对大家有用。<br />
            </font></div>
            <div><font color="#003300">本文参考了下面这片文章，谢过作者。</font></div>
            <div>
            <p><a href="http://www.kainatech.com.cn/frame.php?frameon=yes&amp;referer=http%3A//www.kainatech.com.cn/viewthread.php%3Ftid%3D652"><font color="#003300">http://www.kainatech.com.cn/frame.php?frameon=yes&amp;referer=http%3A//www.kainatech.com.cn/viewthread.php%3Ftid%3D652</font></a></p>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/jelver/aggbug/270063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2009-05-11 16:14 <a href="http://www.blogjava.net/jelver/articles/270063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在linux中数据库实现每天自动备份数据及自动删除5天前备份数据</title><link>http://www.blogjava.net/jelver/articles/267137.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 23 Apr 2009 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/267137.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/267137.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/267137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/267137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/267137.html</trackback:ping><description><![CDATA[<font size="2"><a href="http://tolywang.itpub.net/post/48/451719"><font size="2"><br />
&nbsp;原帖：在linux中数据库实现每天自动备份数据及自动删除5天前备份数据(常用)</font></a><br />
<div class="t_msgfont" id="message9427686"><font size="2"><font style="font-size: 14pt"><font face="Times New Roman ">1</font></font><font face="宋体 "><font style="font-size: 14pt">数据库每天自动备份数据需求 </font></font><br />
<font face="宋体 "><font style="font-size: 14pt">第一</font></font><font face="宋体 "><font style="font-size: 14pt">:</font></font><font face="宋体 "><font style="font-size: 14pt">每天自动备份当天的数据库的数据信息</font></font><font style="font-size: 14pt"><font face="Times New Roman "> </font></font><font face="宋体 "><font style="font-size: 14pt">。</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">第二</font></font><font face="宋体 "><font style="font-size: 14pt">：把当天备份的数据和日志一起打成.tar.gz包，这样会减少硬盘的容量。</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">第三</font></font><font face="宋体 "><font style="font-size: 14pt">：用FTP把当天的数据.tar.gz包上传到外面的服务器做备份。</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">第四</font></font><font face="宋体 "><font style="font-size: 14pt">：每天的数据日益增加，硬盘的容量有限。所以只保留前五天的数据备份，删除五天前的数据备份。</font></font><br />
</font><font size="2"><font face="宋体 "><font style="font-size: 14pt"><br />
2</font></font><font face="宋体 "><font style="font-size: 14pt">自动备份实现步骤（从数据库服务器1备份到服务器2）<br />
</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.1</font></font><font face="黑体 ">在数据库服务器</font><font face="Arial ">1</font><font face="黑体 ">编写</font><font face="Arial ">backup.sh</font><font face="黑体 ">文件</font><br />
<font face="宋体 "><font style="font-size: 14pt">用安装Oracle数据库的用户（这里的用户为oracle）在数据库服务器的/home/databackup创建并编写backup.sh文件。该文件先定义Oracle的环境变量，然后导出当天的数据，并创建相关的日志，然后把当天的数据和日志打包成.tar.gz文件。</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">文件内容：（#为注释）</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#Oracle</font></font><font face="宋体 "><font style="font-size: 14pt">的字符集，Oracle数据库的中文字符集为AMERICAN_AMERICA.ZHS16GBK</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">export ORACLE_HOME=/oracle/product/10.2.0/db_1</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#Oracle</font></font><font face="宋体 "><font style="font-size: 14pt">数据库的根目录</font></font><br />
</font><font size="2"><font face="宋体 "><font style="font-size: 14pt">/oracle/product/10.2.0/db_1/bin/exp risenet56/1@ora10g file=risenet56`date +%Y%m%d`.dmp log=risenet56`date +%Y%m%d`.log<br />
owner=risenet56</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">导出当日的数据库的数据并写日志。如当为2008-1-16，数据文件为risenet5620080116.dmp,日志为risenet5620080116.log</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">tar -cf risenet56`date +%Y%m%d`.tar risenet56`date +%Y%m%d`.dmp risenet56`date +%Y%m%d`.log</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">把数据文件和日志打包</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">gzip risenet56`date +%Y%m%d`.tar</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">把tar包压缩成.tar.gz包</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">cat risenet56`date +%Y%m%d`.log | mail -s 'risenet56 Web Backup' <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#110;&#103;&#122;&#104;&#97;&#111;&#108;&#105;&#97;&#110;&#103;&#64;&#114;&#105;&#115;&#101;&#115;&#111;&#102;&#116;&#46;&#110;&#101;&#116;">mengzhaoliang@risesoft.net</a></font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">把当天日志发送到<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#110;&#103;&#122;&#104;&#97;&#111;&#108;&#105;&#97;&#110;&#103;&#64;&#114;&#105;&#115;&#101;&#115;&#111;&#102;&#116;&#46;&#110;&#101;&#116;"><font color="#0000ff">mengzhaoliang@risesoft.net</font></a>邮箱</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">rm -f risenet56`date +%Y%m%d`.dmp</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">rm -f risenet56`date +%Y%m%d`.log</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">删除备份.dmp文件和.log日志</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">mv risenet56`date +%Y%m%d`.tar.gz /home/databackup</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">把当前目录的.tar.gz包移动到/home/databackup目录下</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">rm -f /home/databackup/risenet56`date -d -5day +%Y%m%d`.tar.gz</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">删除/home/databackup/目录下前第5天的数据</font></font><br />
<br />
</font><font size="2"><font face="Arial "><font face="Arial ">2.2</font></font><font face="黑体 ">在数据库服务器</font><font face="Arial ">1</font><font face="黑体 ">创建</font><font face="Arial ">FTP</font><font face="黑体 ">服务的</font><font face="Arial ">autoftp.sh</font><font face="黑体 ">文件</font><br />
<font face="宋体 "><font style="font-size: 14pt">从数据库服务器1的当天备份数据用FTP上传到另一服务器2。在数据库服务器1的/home/databackup的目录下创建并编写autoftp.sh文件。</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">文件内容如下：</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">#!/bin/sh</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">ftp -i -v -n &lt;&lt;!</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">open ***.***.***.***</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">启动 FTP 连接服务器2<br />
***.***.***.***为服务器2的ip地址</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">user risesoft ******</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#risesoft</font></font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">为用户名<br />
******为密码</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">Binary</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">以二进制传输</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">prompt off</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">lcd /home/databackup</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">在数据库服务器1的目录</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">cd /home/risesoft/67OracleBackup</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">在服务器2的目录</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">mput risenet56`date +%Y%m%d`.tar.gz</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">上传数据</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">close</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">bye</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">!</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">--------------------------------------------------<br />
</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.3</font></font><font face="黑体 ">在数据库服务器</font><font face="Arial ">1</font><font face="黑体 ">上给两个</font><font face="Arial ">shell</font><font face="黑体 ">文件赋予权限<br />
</font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt"><br />
用oracle用户给backup.sh赋予相应的权限，启动一个终端，执行切换用户命令：su &#8211; oracle ，然后输入用户的密码。执行赋予权限命令：chmod +x /home/databackup/backup.sh <br />
然后再执行命令：chomd +x /home/databackup/autoftp.sh<br />
<br />
</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.4</font></font><font face="黑体 ">在数据库服务器</font><font face="Arial ">1</font><font face="黑体 ">中的</font><font face="Arial ">crontab</font><font face="黑体 ">来定时执行</font><font face="Arial ">shell</font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">用oracle用户启动一个终端，输入命令进行编写：crontab &#8211;e</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">内容如下：</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">30 19 * * * /home/databackup/backup.sh 2&gt;&amp;1</font></font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">30<br />
22 * * * /home/databackup/autoftp.sh 2&gt;&amp;1</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">--------------------------------------------------</font></font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">保存，可以用命令：crontab &#8211;l<br />
来查看.</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">上述的作用：每天19:30执行backup.sh文件，而backup.sh进行备份当天的数据，并删除前第6天的数据，则保留前5天的数据。每天22：30执行autoftp.sh文件，把当天的备份数据从数据库服务器1上传到另一服务器2。<br />
<br />
</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.5</font></font><font face="黑体 ">在服务器</font><font face="Arial ">2</font><font face="黑体 ">上创建删除前第</font><font face="Arial ">6</font><font face="黑体 ">天的</font><font face="Arial "> shell</font><font face="黑体 ">文件<br />
</font><br />
<font face="宋体 "><font style="font-size: 14pt">每天都从数据库服务器1的备份数据上传到另一服务器2上，但服务器2）上的容量也是有限的，只保留前5天的数据，每天自动删除前第六天的备份数据。因为上传的用户名为risesoft,所以用risesoft用户在服务器2的/home/risesoft/67OracleBackup目录下创建并编写delete.sh文件。</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">内容如下：</font></font><br />
<br />
<font face="宋体 "><font style="font-size: 14pt">rm -f /home/risesoft/67OracleBackup/risenet56`date -d -5day +%Y%m%d`.tar.gz</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">#</font></font><font face="宋体 "><font style="font-size: 14pt">删除前第5天的数据</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">--------------------------------------------------</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.6</font></font><font face="黑体 ">在服务器</font><font face="Arial ">2</font><font face="黑体 ">上给</font><font face="Arial ">delete.sh</font><font face="黑体 ">文件赋予权限</font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">备份的数据是用risesoft用户上传上来的，用risesoft用户给delete.sh赋予相应的权限，启动一个终端，执行切换用户命令：su &#8211; risesoft<br />
，然后输入用户的密码。执行赋予权限命令：chmod +x /home/risesoft/67OracleBackup/delete.sh<br />
<br />
</font></font></font><font size="2"><font face="Arial "><font face="Arial ">2.7</font></font><font face="黑体 ">在服务器</font><font face="Arial ">2</font><font face="黑体 ">中的</font><font face="Arial ">crontab</font><font face="黑体 ">定时执行</font><font face="Arial ">delete.sh</font><font face="黑体 ">文件<br />
</font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">用oracle用户启动一个终端，输入命令进行编写：crontab &#8211;e</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">内容如下：</font></font><br />
</font><font size="2"><font face="宋体 "><font style="font-size: 14pt">30<br />
23 * * * /home/risesoft/67OracleBackup/delete.sh 2&gt;&amp;1</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">--------------------------------------------------</font></font></font><font size="2"><font face="宋体 "><font style="font-size: 14pt">保存，可以用命令：<br />
crontab &#8211;l<br />
来查看.</font></font><br />
<font face="宋体 "><font style="font-size: 14pt">上述作用：在每天的23:30自动执行delete.sh文件，delete.sh文件则自动删除在/home/risesoft/67OracleBackup目录下的前第5天的备份数据。</font></font></font></div>
</font>
<img src ="http://www.blogjava.net/jelver/aggbug/267137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2009-04-23 14:17 <a href="http://www.blogjava.net/jelver/articles/267137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下的resin定时重启</title><link>http://www.blogjava.net/jelver/articles/149647.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sat, 29 Sep 2007 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/149647.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/149647.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/149647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/149647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/149647.html</trackback:ping><description><![CDATA[&nbsp;配置crontab： &nbsp; <br />
&nbsp; #crontab &nbsp; -e &nbsp; <br />
&nbsp; 添加如下一行： &nbsp; <br />
&nbsp; 0&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp; * &nbsp; * &nbsp; * &nbsp; /usr/local/resin-3.0.12/bin/httpd.sh &nbsp; restart &nbsp; <br />
&nbsp; 表示每天凌晨8点自动重启resin &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 此时要注意： &nbsp; <br />
&nbsp; resin自动重启时是不读入环境变量的！！！ &nbsp; <br />
&nbsp; 因此我们要在resin的启动<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">文件</nobr>httpd.sh中加上环境变量！ &nbsp; <br />
&nbsp; #vi &nbsp; httpd.sh &nbsp; <br />
&nbsp; 注意一定要把#! &nbsp; /bin/sh放在文件的第一行，否则将无法手动执行httpd.sh文件 &nbsp; <br />
&nbsp; 然后在下面添加如下几行： &nbsp; <br />
&nbsp; CLASSPATH=...... &nbsp; <br />
&nbsp; LANG=...... &nbsp; <br />
&nbsp; JAVA_HOME=...... &nbsp; <br />
&nbsp; PATH=...... &nbsp; <br />
&nbsp; export &nbsp; CLASSPATH &nbsp; LANG &nbsp; JAVA_HOME &nbsp; PATH &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 注意最后一定要export各个变量，否则无法生效 &nbsp; <br />
&nbsp; 这四个变量的值可以通过这个命令： &nbsp; <br />
&nbsp; #env &nbsp; <br />
&nbsp; 来查看当前<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">机器</nobr>上的配置，然后拷贝过去就可以。 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 我的blog：http://farmerinchina.blog.sohu.com 
<img src ="http://www.blogjava.net/jelver/aggbug/149647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-09-29 17:55 <a href="http://www.blogjava.net/jelver/articles/149647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(定时任务)crontab和cron 的用法</title><link>http://www.blogjava.net/jelver/articles/146295.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 18 Sep 2007 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/146295.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/146295.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/146295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/146295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/146295.html</trackback:ping><description><![CDATA[<p>cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。 </p>
<p>cron 假定系统持续运行。如果当某任务被调度时系统不在运行，该任务就不会被执行。 </p>
<p>要使用 cron 服务，你必须安装了 <tt class="FILENAME"><font face="新宋体">vixie-cron</font></tt> RPM 软件包，而且必须在运行 <tt class="COMMAND"><font face="新宋体">crond</font></tt> 服务。要判定该软件包是否已安装，使用 <tt class="COMMAND"><font face="新宋体">rpm -q vixie-cron</font></tt> 命令。要判定该服务是否在运行，使用 <tt class="COMMAND"><font face="新宋体">/sbin/service crond status</font></tt> 命令。 </p>
<div class="SECT2">
<h2 class="SECT2"><a name="S2-AUTOTASKS-CRON-CONFIGURING"></a>37.1.1. 配置 cron 任务</h2>
<p>cron 的主配置文件是 <tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt>，它包括下面几行： </p>
<table class="SCREEN" width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <pre class="SCREEN"><tt class="COMPUTEROUTPUT">SHELL=/bin/bash
            PATH=/sbin:/bin:/usr/sbin:/usr/bin
            MAILTO=root
            HOME=/
            # run-parts
            01 * * * * root run-parts /etc/cron.hourly
            02 4 * * * root run-parts /etc/cron.daily
            22 4 * * 0 root run-parts /etc/cron.weekly
            42 4 1 * * root run-parts /etc/cron.monthly</tt></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>前四行是用来配置 cron 任务运行环境的变量。<tt class="COMPUTEROUTPUT"><font face="新宋体">SHELL</font></tt> 变量的值告诉系统要使用哪个 shell 环境（在这个例子里是 bash shell）；<tt class="COMPUTEROUTPUT"><font face="新宋体">PATH</font></tt> 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 <tt class="COMPUTEROUTPUT"><font face="新宋体">MAILTO</font></tt> 变量定义的用户名。如果 <tt class="COMPUTEROUTPUT"><font face="新宋体">MAILTO</font></tt> 变量被定义为空白字符串（<tt class="COMPUTEROUTPUT"><font face="新宋体">MAILTO=""</font></tt>），电子邮件就不会被寄出。<tt class="COMPUTEROUTPUT"><font face="新宋体">HOME</font></tt> 变量可以用来设置在执行命令或脚本时使用的主目录。 </p>
</div>
<div id="a001178more">
<div id="more">
<p><tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt> 文件中的每一行都代表一项任务，它的格式是： </p>
<table class="SCREEN" width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <pre class="SCREEN"><tt class="COMPUTEROUTPUT">minute   hour   day   month   dayofweek   command</tt></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<ul>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">minute</font></tt> — 分钟，从 0 到 59 之间的任何整数</p>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">hour</font></tt> — 小时，从 0 到 23 之间的任何整数</p>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">day</font></tt> — 日期，从 1 到 31 之间的任何整数（如果指定了月份，必须是该月份的有效日期）</p>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">month</font></tt> — 月份，从 1 到 12 之间的任何整数（或使用月份的英文简写如 jan、feb 等等）</p>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">dayofweek</font></tt> — 星期，从 0 到 7 之间的任何整数，这里的 0 或 7 代表星期日（或使用星期的英文简写如 sun、mon 等等）</p>
    <li>
    <p><tt class="COMPUTEROUTPUT"><font face="新宋体">command</font></tt> — 要执行的命令（命令可以是 <tt class="COMMAND"><font face="新宋体">ls /proc &gt;&gt; /tmp/proc</font></tt> 之类的命令，也可以是执行你自行编写的脚本的命令。）</p>
    </li>
</ul>
<p>在以上任何值中，星号（*）可以用来代表所有有效的值。譬如，月份值中的星号意味着在满足其它制约条件后每月都执行该命令。 </p>
<p>整数间的短线（-）指定一个整数范围。譬如，<tt class="USERINPUT"><strong><font face="新宋体">1-4</font></strong></tt> 意味着整数 1、2、3、4。 </p>
<p>用逗号（,）隔开的一系列值指定一个列表。譬如，<tt class="USERINPUT"><strong><font face="新宋体">3, 4, 6, 8</font></strong></tt> 标明这四个指定的整数。 </p>
<p>正斜线（/）可以用来指定间隔频率。在范围后加上 <tt class="USERINPUT"><strong><font face="新宋体">/&lt;<tt class="REPLACEABLE"><em>integer</em></tt>&gt;</font></strong></tt> 意味着在范围内可以跳过 integer。譬如，<tt class="USERINPUT"><strong><font face="新宋体">0-59/2</font></strong></tt> 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如，<tt class="USERINPUT"><strong><font face="新宋体">*/3</font></strong></tt> 的值可以用在月份字段中表示每三个月运行一次任务。 </p>
<p>开头为井号（#）的行是注释，不会被处理。 </p>
<p>如你在 <tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt> 文件中所见，它使用 <tt class="COMMAND"><font face="新宋体">run-parts</font></tt> 脚本来执行 <tt class="FILENAME"><font face="新宋体">/etc/cron.hourly</font></tt>、<tt class="FILENAME"><font face="新宋体">/etc/cron.daily</font></tt>、<tt class="FILENAME"><font face="新宋体">/etc/cron.weekly</font></tt> 和 <tt class="FILENAME"><font face="新宋体">/etc/cron.monthly</font></tt> 目录中的脚本，这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。 </p>
<p>如果某 cron 任务需要根据调度来执行，而不是每小时、每日、每周、或每月地执行，它可以被添加到 <tt class="FILENAME"><font face="新宋体">/etc/cron.d</font></tt> 目录中。该目录中的所有文件使用和 <tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt> 中一样的语法。 </p>
<div class="EXAMPLE"><a name="CRONTAB-EXAMPLES"></a>
<table class="SCREEN" width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <pre class="SCREEN"><tt class="COMPUTEROUTPUT"># record the memory usage of the system every monday
            # at 3:30AM in the file /tmp/meminfo
            30 3 * * mon cat /proc/meminfo &gt;&gt; /tmp/meminfo
            # run custom script the first day of every month at 4:10AM
            10 4 1 * * /root/scripts/backup.sh</tt></pre>
            </td>
        </tr>
    </tbody>
</table>
<p><strong>例 37-1. crontab 的例子</strong></p>
</div>
<p>根用户以外的用户可以使用 <tt class="COMMAND"><font face="新宋体">crontab</font></tt> 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 <tt class="FILENAME"><font face="新宋体">/var/spool/cron</font></tt> 目录中，并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目，登录为该用户，然后键入 <tt class="COMMAND"><font face="新宋体">crontab -e</font></tt> 命令，使用由 <tt class="COMPUTEROUTPUT"><font face="新宋体">VISUAL</font></tt> 或 <tt class="COMPUTEROUTPUT"><font face="新宋体">EDITOR</font></tt> 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 <tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt> 相同。当对 crontab 所做的改变被保存后，该 crontab 文件就会根据该用户名被保存，并写入文件 <tt class="FILENAME"><font face="新宋体">/var/spool/cron/<tt class="REPLACEABLE"><em>username</em></tt></font></tt> 中。 </p>
<p>cron 守护进程每分钟都检查 <tt class="FILENAME"><font face="新宋体">/etc/crontab</font></tt> 文件、<tt class="FILENAME"><font face="新宋体">etc/cron.d/</font></tt> 目录、以及 <tt class="FILENAME"><font face="新宋体">/var/spool/cron</font></tt> 目录中的改变。如果发现了改变，它们就会被载入内存。这样，当某个 crontab 文件改变后就不必重新启动守护进程了。 </p>
<div class="SECT2">
<h2 class="SECT2"><a name="S2-AUTOTASKS-CRON-ACCESS"></a>37.1.2. 控制对 cron 的使用</h2>
<p><tt class="FILENAME"><font face="新宋体">/etc/cron.allow</font></tt> 和 <tt class="FILENAME"><font face="新宋体">/etc/cron.deny</font></tt> 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了，cron 守护进程（<tt class="COMMAND"><font face="新宋体">crond</font></tt>）不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。 </p>
<p>无论使用控制文件中的规定如何，根用户都总是可以使用 cron。 </p>
<p>如果 <tt class="FILENAME"><font face="新宋体">cron.allow</font></tt> 文件存在，只有其中列出的用户才被允许使用 cron，并且 <tt class="FILENAME"><font face="新宋体">cron.deny</font></tt> 文件会被忽略。 </p>
<p>如果 <tt class="FILENAME"><font face="新宋体">cron.allow</font></tt> 文件不存在，所有在 <tt class="FILENAME"><font face="新宋体">cron.deny</font></tt> 中列出的用户都被禁止使用 cron。 </p>
</div>
<div class="SECT2">
<h2 class="SECT2"><a name="S2-AUTOTASKS-CRON-SERVICE"></a>37.1.3. 启动和停止服务</h2>
<p>要启动 cron 服务，使用 <tt class="COMMAND"><font face="新宋体">/sbin/service crond start</font></tt> 命令。要停止该服务，使用 <tt class="COMMAND"><font face="新宋体">/sbin/service crond stop</font></tt> 命令。推荐你在引导时启动该服务</p>
<br />
<br />
<div class="mtitle">(定时任务)crontab 的用法</div>
<div>
<p>crontab task 格式 </p>
<p>* * * * * task<br />
分 时 日 月 周 task</p>
<p>第1列 分钟1～5 9&nbsp; (0表示0分)<br />
第2列 小时1～2 3（0表示子夜）<br />
第3列 日1～3 1&nbsp;&nbsp;&nbsp; <br />
第4列 月1～1 2&nbsp;&nbsp; <br />
第5列 星期0～6（0表示星期天）<br />
第6列 要运行的命令</p>
<p>一些例子:<br />
30 21* * * /apps/bin/cleanup.sh<br />
上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。<br />
45 4 1,10,22 * * /apps/bin/backup.sh<br />
上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。<br />
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;<br />
上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。<br />
0,30 18-23 * * * /apps/bin/dbcheck.sh<br />
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。<br />
0 23 * * 6 /apps/bin/qtrend.sh<br />
上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h</p>
<p>实现定时task的两种方式<br />
一种是编辑一个文件,用crontab 载入<br />
一种是用crontab -e 直接编辑生效</p>
<p>我自己一个例子</p>
<p>每隔以一分钟往一个文件打入一堆字符<br />
先vi crontab1<br />
#every minute echo char to file<br />
1-59 * * * * echo `date`" lj\n" &gt;&gt; /opt/lijie/lj.txt<br />
最好加上注释<br />
这样就能明确当前的这个定时任务的目的<br />
然后 crontab crontab1载入crontab1这个定时任务</p>
<p>&nbsp;</p>
<p>另外一种是<br />
crontab -e<br />
#every minute echo char to file<br />
1-59 * * * * echo `date`" lj\n" &gt;&gt; /opt/lijie/lj.txt</p>
<p>date 用单引号,是表示如果date是一个命令,就作为命令执行<br />
如果你直接用date ,那么输出的是"date"这个字符串,而不是date这个命令的执行结果</p>
<p>&gt;&gt; 是附加到文件末尾,而&gt;是直接覆盖文件</p>
<p>如果crontab -e无法编辑<br />
那么是你的环境变量没有配置<br />
请你进入 vi /etc/profile<br />
加上<br />
EDITOR=vi<br />
export EDITOR</p>
crontab -l 列出所有定时任务
<p>如果要删除一个定时任务<br />
那么<br />
crontab -e<br />
注释掉对应定时任务语句<br />
例如要删除我刚刚定义的那个定时任务<br />
#every minute echo char to file<br />
&nbsp;1-59 * * * * echo `date`" lj\n" &gt;&gt; /opt/lijie/lj.txt<br />
只需要<br />
#every minute echo char to file<br />
#1-59 * * * * echo `date`" lj\n" &gt;&gt; /opt/lijie/lj.txt</p>
<p>如果用crontab -r<br />
就删除拉所有的定时任务<br />
</p>
<p><font color="#ff0000">特别注意:<br />
1, 如果用crontab 文件来载入定时任务,将会冲掉定时任务<br />
所以如果要新增定时任务,最好就用crontab -e来新增定时任务<br />
不要用crontab 文件。</font></p>
<p><font color="#ff0000">2,&nbsp;crontab的日志文件为 /var/log/cron</font></p>
<p><font color="#ff0000">3, 如果使用 crontab &lt;filename&gt; 来设置cron，一定要注意文件乱码的问题。我就碰到一个问题，/var/log/cron 日志里面显示 Dec 28 11:34:00 TARGET CROND[13449]: (hnuc) CMD (/home/hnuc/shell/t.sh^M) 后面的～M是乱码，原因是：我是使用editplus编辑的cron file，里面的回车换行符号是dos的而不是linux或者unix的。这里的^M 实际上是个dos的换行符，在linux环境下解析成这个了。</font></p>
</div>
</div>
</div>
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/146295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-09-18 23:27 <a href="http://www.blogjava.net/jelver/articles/146295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VM中Linux虚拟机下安装VMware Tools （转）</title><link>http://www.blogjava.net/jelver/articles/108103.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 03 Apr 2007 00:37:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/108103.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/108103.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/108103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/108103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/108103.html</trackback:ping><description><![CDATA[<p>VM中Linux虚拟机下安装VMware Tools<br>&nbsp;&nbsp;&nbsp;&nbsp; 使用VMware 来安装Linux ,都会被那个VMware-Tools弄得晕头转向。现在详细向大家介绍如何安装Linux下的VMwareTools.<br>1.安装工具。让虚拟机运行于窗口状态，不要全屏，按Ctrl+Alt让鼠标释放出来。在VMware的菜单栏上选择"虚拟机/安装虚拟机工具(VM/Install VMware Tools...)"。然后切换到客户操作系统，即Linux。 <br>2.挂载光盘。mount /dev/cdrom /mnt/cdrom<br>3.执行命令。进入虚拟光盘，可以看到有两个文件，一个是压缩包，一个为rpm包。直接运行rpm包安装，命令行也可。rpm -Uvh VMwareTools-版本号-版本号.i386.rpm<br>4.上述操作完成后，进入/usr/bin目录，查找vmware-config-tools.pl.找到后，运行它。<br>5.一路YES，直到让我们安装C编译器的时候选择NO就好。<br>6.完成配置。如果一切顺利，即会出现一个界面，让你选择当前屏幕的分辨率，当然我的kernel应为升级到了最新的版本，会有一些消息要你确认，应该直接确认就可以。选择一个分辨率。重新启动，即可。<br>&nbsp;<br>若不重新启动不要忘记卸载CDROM。 <br>&nbsp;<br>&nbsp;</p>
<p>VMware Workstation 从软盘和/或 CD-ROM 直接安装未修改的操作系统。在构造一台虚拟机时，这个安装过程是第一步并且也是唯一必需的一步。<br>但是，VMware 强烈建议你在每一台虚拟机中完成操作系统安装之后立即安装 VMware Tools 套件。在客户操作系统中安装 VMware Tools 非常重要。如果你不安装 VMware Tools，虚拟机中的图形环境被限制为 VGA 模式图形(640x480，16 色)。<br>使用 VMware Tools，SVGA 驱动程序被安装，VMware Workstation 支持最高 32 位显示和高显示分辨率，显著提升总体的图形性能。 <br>工具包中的其他工具通过支持下面的增强，让你更方便地使用你的虚拟机。注意，只有正在运行 VMware Tools 时，这些增强才可用。<br>在主机和客户机之间时间同步 <br>注释: 只有当你在客户操作系统中设置时钟为一个比在主机中设置的时间更早的时间时，才可以在客户和主机操作系统之间同步时间。 <br>自动捕获和释放鼠标光标 <br>在主机和客户机之间或者从一台虚拟机到另一台虚拟机进行复制和粘贴操作 <br>改善的网络性能 <br>VMware Tools 工具包由两个组件组成: <br>一个为 VMware Workstation 虚拟图形卡优化的图形驱动程序。对于 Linux 客户操作系统，它包含我们自己的 XFree86 X server 版本。图形驱动程序由向导安装。安装之后，需要在重启动之后才可以使用。 <br>一个小的后台应用程序，允许你在虚拟机中更改配置设置。VMware Workstation 控制光标设置和可移动设备的连接状态，例如软盘和 CD-ROM 驱动器。<br>光标设置允许你在虚拟机和主机图形用户界面之间平滑移动鼠标光标。光标设置也允许你在虚拟机和主机之间以及从一台虚拟机到另一台虚拟机复制和粘贴文本缓存。注意，只有当应用程序正在运行时，这些增强才可用。<br>设置 VMware Tools 参数<br>在一个 Windows 客户操作系统中为 VMware Tools 设置参数<br>打开 VMware Tools。双击系统托盘中的 VMware Tools 图标。 <br>VMware Tools 选项卡包含有关虚拟机的状态信息。单击链接按钮访问 VMware 主页。 <br>设备选项卡允许你启用或禁用可移动设备。(你也可以从 VMware Workstation 应用程序窗口的设备菜单中设置这些选项。) <br>压缩选项卡 允许你从你的虚拟磁盘中删除未使用的磁盘块，从而减少(压缩)由虚拟磁盘消耗的存储空间的数量。它也会重新安排你的虚拟磁盘，以使它的数据块相互邻接。 <br>其他选项卡显示其他选项: <br>在虚拟机和主机操作系统之间时间同步。 <br>注释: 只有当你在客户操作系统中设置时钟为一个比在主机中设置的时间更早的时间时，才可以在客户和主机操作系统之间同步时间。 <br>在工具栏中显示 VMware Tools。 <br>在一个 Linux 客户操作系统中为 VMware Tools 设置参数<br>打开 VMware Tools。在一个终端中运行下列命令: <br>vmware-toolbox. <br>设备选项卡允许你启用或禁用可移动设备。(你也可以从 VMware Workstation 应用程序窗口的设备菜单中设置这些选项。) <br>压缩选项卡 允许你从你的虚拟磁盘中删除未使用的磁盘块，从而减少(压缩)由虚拟磁盘消耗的存储空间的数量。它也会重新安排你的虚拟磁盘，以使它的数据块相互邻接。 <br>&#8220;选项&#8221;选项卡显示这些选项: <br>在虚拟机和主机操作系统之间时间同步。你可以在虚拟机和主机操作系统之间同步时间。 <br>注释: 只有当你在客户操作系统中设置时钟为一个比在主机中设置的时间更早的时间时，才可以在客户和主机操作系统之间同步时间。 <br>如果正在运行 VMware Tools，你可以在虚拟机和主机的应用程序之间或者在两台虚拟机之间复制和粘贴文本。<br>要进行复制和粘贴:<br>确保在你的虚拟机中已经安装并且启动 VMware Tools。 <br>使用来源窗口中的操作系统支持的方式在来源窗口中选择要复制的项目。 <br>更改光标和键盘控制到目标窗口，然后使用目标窗口中的操作系统支持的方式粘贴项目。 <br>你只能复制和粘贴文本，而不是图片或者其他项目。</p>
<img src ="http://www.blogjava.net/jelver/aggbug/108103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-04-03 08:37 <a href="http://www.blogjava.net/jelver/articles/108103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux (EL4)下卸载虚拟机的VMwareTools</title><link>http://www.blogjava.net/jelver/articles/108099.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 03 Apr 2007 00:32:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/108099.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/108099.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/108099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/108099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/108099.html</trackback:ping><description><![CDATA[<p><br>前两天安装Linux下的VMwareTools,想修改分辨率为1024*768，谁知道没有成功<br>最后连图形界面都进不了了，只好卸载掉，以tar包安装后的目录下有一个卸载文件<br>在安装目录/bin/下有一个uninstall文件，执行该文件就ok了，如果以rmp方式的安装<br>则用常规的卸载方式就可以了</p>
<img src ="http://www.blogjava.net/jelver/aggbug/108099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-04-03 08:32 <a href="http://www.blogjava.net/jelver/articles/108099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python培训技术</title><link>http://www.blogjava.net/jelver/articles/99223.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sun, 11 Feb 2007 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/99223.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/99223.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/99223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/99223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/99223.html</trackback:ping><description><![CDATA[
		<a href="http://czug.org/blog/eishn/python-jishupeixun-disanzhoujiangyi">http://czug.org/blog/eishn/python-jishupeixun-disanzhoujiangyi</a>
		<br />
		<div class="documentDescription description">简单的网络通信及即时聊天</div>
		<p>  今天是网络编程。不妨做一个即时聊天工具吧, 不过这次的程序很简陋, 只能说是一个网络对讲机罢了。<br />  今天我不准备去讲更底层的东西, 比如使用 Socket 来编写通信程序。不过以后, 可能就是下次我们就会涉及到。<br />  然而, 今天的东西相当有用。在没有必要钻牛角尖的时候 (这是大多数的情况), 今天所用到的方法几乎是第一选择。使用 XMLRPC 来进行网络编程, 确实出奇的简单。但是请注意, 千万不要被现在国内的风气给误导了, 其实使用简单的工具来进行编程并不愚蠢, 相反是你聪明的表现。而且, 复杂的应用通常是用最简单的方法建立的, 如果妄图使用石器时代的工具来建造高楼大厦, 那几乎是不可能的。<br />  下面先来个服务器。<br /><br /></p>
		<blockquote>  <b>from</b> SimpleXMLRPCServer <b>import</b> SimpleXMLRPCServer<br /><br />  <b>def</b> foo():<br />    <b>return</b> "Hello world!"<br /><br />  server = SimpleXMLRPCServer( ("localhost", 8000) )<br />  server.register_function(foo)<br />  server.serve_forever()<br /></blockquote>
		<p>
				<br />  用 IE 来访问 http://localhost:8000 看看我们得到了什么? 是一个出错页面, 不错, 这表示我们的服务器工作正常, 只是访问的方法不对而已。<br />  下面, 给出这个程序的客户机程序。<br /><br /></p>
		<blockquote>  <b>from</b> xmlrpclib <b>import</b> ServerProxy<br />  server = ServerProxy("http://localhost:8000")<br />  <b>print</b> server.foo()<br /></blockquote>
		<p>
				<br />  我们会看到服务器返回了 "Hello world!"。这里 localhost 是指本机, 8000 是端口, 我们通常会指定大于 1024 的端口号。localhost 我们通常会用域名 (机器名) 或 IP 来代替, 而端口号是任意的。<br />  下面, 该传些东西了。比如发送一句话到服务器上去显示出来。<br /><br /></p>
		<blockquote>  <b>from</b> SimpleXMLRPCServer <b>import</b> SimpleXMLRPCServer<br /><br />  <b>def</b> msg(s):<br />    <b>print</b> s<br />    <b>return</b> True<br /><br />  server = SimpleXMLRPCServer( ("localhost", 8000) )<br />  server.register_function(msg)<br />  server.serve_forever()<br /></blockquote>
		<p>
				<br />  对应的客户机程序。<br /><br /></p>
		<blockquote>  <b>from</b> xmlrpclib <b>import</b> ServerProxy<br />  server = ServerProxy("http://localhost:8000")<br /><br />  <b>while</b> True:<br />    msg = raw_input()<br />    server.msg(msg)<br /></blockquote>
		<p>
				<br />  开个玩笑, 一个即时通信工具已经写好了。两台机器互相知道 IP 或者机器名, 协商好端口号。然后打开一个服务器、将客户机指向对方的服务器就可以了。<br />  那么怎么将客户端和服务器合并在一起呢? 因为调用 serve_forever() 之后程序就停在那里了, 所以无法再接收用户输入的东西了。这里顺便讲一下多线程编程, 但是这个话题不在本次主题之内, 大家仅做理解就可以了。<br /><br /></p>
		<blockquote>  <b>import</b> thread<br />  <b>from</b> SimpleXMLRPCServer <b>import</b> SimpleXMLRPCServer<br />  <b>from</b> xmlrpclib <b>import</b> ServerProxy<br /><br />  <b>def</b> msg(s):<br />    <b>print</b> s<br />    <b>return</b> True<br /><br />  <b>def</b> run_server():<br />    my_server = SimpleXMLRPCServer( ("localhost", 8001) )<br />    my_server.register_function(msg)<br />    my_server.serve_forever()<br /><br />  <b>def</b> run_client():<br />    your_server = ServerProxy("http://localhost:8002")<br />    while True:<br />      msg = raw_input()<br />      your_server.msg(msg)<br /><br />  thread.start_new_thread( run_server, () )<br />  run_client()<br /></blockquote>
		<p>
				<br />  第二个差不多, 只是把互相的地址换了一下而已。<br /><br /></p>
		<blockquote>  <b>import</b> thread<br />  <b>from</b> SimpleXMLRPCServer <b>import</b> SimpleXMLRPCServer<br />  <b>from</b> xmlrpclib <b>import</b> ServerProxy<br /><br />  <b>def</b> msg(s):<br />    <b>print</b> s<br />    <b>return</b> True<br /><br />  <b>def</b> run_server():<br />    my_server = SimpleXMLRPCServer( ("localhost", 8002) )<br />    my_server.register_function(msg)<br />    my_server.serve_forever()<br /><br />  <b>def</b> run_client():<br />    your_server = ServerProxy("http://localhost:8001")<br />    <b>while</b> True:<br />      msg = raw_input()<br />      your_server.msg(msg)<br /><br />  thread.start_new_thread( run_server, () )<br />  run_client()<br /></blockquote>
		<p>
				<br />  这样, 一对对讲机就写好了。<br />  接下来就要用到我上一次讲到的图形界面的知识, 用 Tkinter 来写一个界面了。<br />  首先把窗体画出来。<br /><br /></p>
		<blockquote>  <b>from</b> Tkinter <b>import</b> *<br />  wnd = Tk()<br />  wnd.lab = Label(wnd, text="---")<br />  wnd.ent = Entry(wnd)<br />  wnd.btn = Button(wnd, text="send")<br />  wnd.lab.pack()<br />  wnd.ent.pack(side=LEFT)<br />  wnd.btn.pack(side=LEFT)<br /></blockquote>
		<p>
				<br />  然后把刚才的网络部分加上去。<br /><br /></p>
		<blockquote>  <b>import</b> thread<br />  <b>from</b> SimpleXMLRPCServer <b>import</b> SimpleXMLRPCServer<br />  <b>from</b> xmlrpclib <b>import</b> ServerProxy<br /><br /><i>  # 第一个对讲机</i><br />  my_server   = SimpleXMLRPCServer( ("localhost", 8002) )<br />  your_server = ServerProxy("http://localhost:8001")<br /><br /><i>  # 第二个对讲机 (需要交换一下地址)<br />  # my_server   = SimpleXMLRPCServer( ("localhost", 8001) )<br />  # your_server = ServerProxy("http://localhost:8002")</i><br /><br />  <b>def</b> msg(s):<br />    wnd.lab.config(text=s)<br />    <b>return</b> True<br /><br />  <b>def</b> run_server():<br />    my_server.register_function(msg)<br />    my_server.serve_forever()<br /><br />  <b>def</b> send():<br />    msg = wnd.ent.get()<br />    wnd.ent.select_range(0, len(msg))<br />    your_server.msg(msg)  <br /><br />  wnd.btn.config(command=send)<br /><br />  thread.start_new_thread( run_server, () )<br />  wnd.mainloop()<br /></blockquote>
		<p>
				<br />  因为程序比较长, 所以另外一个终端就不写了。注意, 这里两台终端的地址是在程序中写死的。而且现在的程序只能显示最近收到的一条消息。<br />  ·我们可以使用 Tkinter 中的输入框来叫用户自己输入目标机器的地址和端口。<br />  ·我们可以使用 Tkinter 中的编辑框组件来显示多行消息。<br />  这个作为这次的作业。我的意思是完善这个聊天程序, 做成比较漂亮的样子。同时思考一下如何来实现一个多人聊天室。<br />  下周可能会涉及到 Socket, 请预习一下。<br /></p>
		<br />
<img src ="http://www.blogjava.net/jelver/aggbug/99223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-02-11 10:39 <a href="http://www.blogjava.net/jelver/articles/99223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux必学的60个命令 </title><link>http://www.blogjava.net/jelver/articles/72777.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Fri, 29 Sep 2006 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/72777.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/72777.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/72777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/72777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/72777.html</trackback:ping><description><![CDATA[
		<div style="MARGIN-TOP: 1px; MARGIN-LEFT: 15px">
				<span class="dark_c" style="FONT-WEIGHT: bold; FONT-SIZE: 14pt">收藏：Linux必学的60个命令</span>
		</div>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<b>关键字:</b>        </div>
		<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>这篇文章写得很好，介绍了LINUX下常用的六类命令，在网上广为流传，本想收藏到我的<a href="http://del.icio.us/jxb8901" target="blank">美味书签</a>，可在GOOGLE上找了半天，也不见一个带目录的版本，这里仅建立这篇文章的链接，以便随时查阅。 <br />另：在GOOGLE上搜索后发现，这篇文章被很多人转载，有的注明了转载字样，但未说明出处，有的根本未注明转载字样［或许那是原作？]，有的则将文章改了标题，各种花样，不一而足，足见网民的版权意识之淡薄。</p>
												<p>
														<a href="http://zhanjun.net/?q=node/27" target="blank">Linux必学的60个命令(1)-安装与登陆</a>
														<br />安装和登录命令：login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last；</p>
												<p>
														<a href="http://zhanjun.net/?q=node/28" target="blank">Linux必学的60个命令(2)-文件处理</a>
														<br />文件处理命令：file、mkdir、grep、dd、find、mv、ls、diff、cat、ln；</p>
												<p>
														<a href="http://zhanjun.net/?q=node/29" target="blank">Linux必学的60个命令(3)-系统管理</a>
														<br />系统管理相关命令：df、top、free、quota、at、lp、adduser、groupadd、kill、crontab；</p>
												<p>
														<a href="http://zhanjun.net/?q=node/30" target="blank">Linux必学的60个命令(4)-网络操作</a>
														<br />网络操作命令：ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup；</p>
												<p>
														<a href="http://zhanjun.net/?q=node/31" target="blank">Linux必学的60个命令(5)-系统安全</a>
														<br />系统安全相关命令：passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who；</p>
												<p>
														<a href="http://zhanjun.net/?q=node/32" target="blank">Linux必学的60个命令(6)-其它</a>
														<br />其它命令：tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/jelver/aggbug/72777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-09-29 13:01 <a href="http://www.blogjava.net/jelver/articles/72777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux常用命令及技巧</title><link>http://www.blogjava.net/jelver/articles/72431.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 28 Sep 2006 00:14:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/72431.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/72431.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/72431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/72431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/72431.html</trackback:ping><description><![CDATA[
		<font color="#000099">
				<p>打包压缩</p>
				<p>tar -zcfv filename.tar.gz ./</p>
				<p>服务器解压缩</p>
				<p>tar -zxfv filename.tar.gz</p>
				<p>删除</p>
				<p>rm -rf file</p>
				<p>
						<strong>
								<font size="4">
								</font>
						</strong> </p>
				<p>
				</p>
				<p> 1. SHUTDOWN 关闭系统, 参数(-k 不真正关闭系统只是警告,-r 关闭后重新引导,-h 关闭后终止 ,-f  快速重新引导,-n 不通过init 直接关闭,-c 取消shutdown,-t时间<br />2. 制作引导盘 # redv zlmage<br />           #fdformat /dev/fd0H1440<br />           #dd if=zlmage of=/dev/fd0<br />3. badblocks 查找坏的族<br />4. dump 备份文件<br />5. dumpe2fs 打印文件系统的信息<br />6. tar 解压缩 tar xf name.tar<br />            tar zxf name.tar.gz<br />            tar zxf name.tar.z<br />7. ps 查看进程<br />8. cat 查看文件内容<br />9. ls 文件列表<br />10.cd 进入目录<br />11.cp 拷贝<br />12.rpm 安装rpm软件包<br />13.mkdir 创建目录<br />14.startx 进入x-windows<br />15. mount 坝设备安装到文件系统 mount  /dev/ /fd1 –t vfat /mnt/floppy<br />16.umount <br />17.logout 重新登录<br />18. vmstat 查看cpu使用情况 vmstat interval [count]<br />19.renice 改变运行的进程的优先级<br />20.su 切换用户<br />21. who 查看用户<br />22.passwd 改变口令<br />23.pwd 当前目录<br />24.rmdir 删除目录,目录为空<br />25.rm 删除目录<br />26.more 同cat 一屏一屏滚动<br />27 .wc 查看文件的信息<br />28.df 磁盘空间<br />29.free 内存空间<br />30.man 查看命令的具体用法<br />31.adduser 添加用户<br />32.groupadd 添加用户组<br />33.chmod 文件权限命令<br />34.&amp; 用于将程序调入后台运行 updatedb &amp;<br />35。pstree 显示进程树<br />36.ifconfig 用于显示设定网络接口<br />37。netconfig 提供了网络的超集成设定<br />38。netstat 检查网络连接的状态，路由表和其他信息<br />39。ping 同dos的ping<br />40。mkfs 创建文件系统 如格式化软盘成ext2 mkfs －t ext2 /mnt/floppy<br />41.fsck 检查修复文件系统<br />42。pwd显示当前路径<br />43。tree 显示树状目录<br />44。which 显示指令完整路径<br />45，mv 用于移动文件和重命名文件<br />46。more 用于分页显示<br />47。find查找文件，功能强大<br />48，du 查看磁盘使用情况<br />49 。env显示所有环境变量<br />50。route 用于显示，设定，删除网络接口上的路由</p>
				<p>
						<br />
						<br />1.虚拟控制台</p>
		</font>
		<br />  登录后按Alt+F2键这时又可以看到”login:”提示符, 这个就是第二个虚拟控制台.再按Alt+F1又回到第一 <br />个控制台，来回切换很方便。查看/etc/inittab文件可以找到一下几行： <br />      #Run gettys in standard runlevels <br />      1:12345:respawn:/sbin/mingetty tty1 <br />      2:2345:respawn:/sbin/mingetty tty2 <br />      3:2345:respawn:/sbin/mingetty tty3 <br />      4:2345:respawn:/sbin/mingetty tty4 <br />      5:2345:respawn:/sbin/mingetty tty5 <br />      6:2345:respawn:/sbin/mingetty tty6 <br />  也就是说初始化的时候定义了6个虚拟控制台，你可以编辑这个文件来增加或减少虚拟控制台。在Xwin下 <br />使用虚拟控制台则要用Ctrl+Alt+F?来切换。Xwindow占用虚拟控制台后的第一个控制台，缺省就是tty7,所 <br />以要切换回Xwin则按Alt+F7(当你改变了虚拟控制台的数目时则要改变)。如果启动了第二个Xserver则应该 <br />是Alt+F8,等等。 <p><font color="#000099">2.Redhat下显示彩色目录及文件列表</font><br />  用ls –color -F，参数–color指示用彩色显示，参数-F会在文件/目录名后加一个字符来指示它的类别。 <br />建议初学者用man ls看看详细信息。比如用-l参数列出文件/目录的绝大部分信息(长格式显示)；用-a参数 <br />列出所有文件；包括首字符为”.”的隐含文件；用-N参数不处理文件名直接显示，这样在中文环境下就可以 <br />显示中文文件名了。还要注意ls与其它命令搭配使用可以生出很多技巧(最简单的如”ls -l | more”)。 <br />  为了方便起见，你可以编辑/etc/bashrc或自己家目录(home)下的.bashrc,加入一行： <br />     alias ls=”ls –color -F -N” <br />  重新运行一下bash会立即生效，如果加在/etc/bashrc里则对所有使用bash shell的用户有效。如果使用 <br />的是其它的shell,则去找对应的配置文件。注意不是/etc/aliases文件，那是sendmail的别名配置文件。 <br />  ls显示的颜色是可以修改的，请参考”Colours with Linux terminals”，里面有个shell脚本可以显示所 <br />有的ANSI颜色。你可以去看一下/etc/DIR_COLORS或$HOME/.dir_colors，要注意两个文件的作用范围不同。 <br />也可以用dircolors -p命令列出设置，更详细信息见”man dircolors”。 </p><p><font color="#000099">3.只列子目录的方法：</font><br />  ls -F | grep /$ 或者 alias sub = “ls -F | grep /$”(linux) <br />  ls -l  | grep “^d” 或者 ls -lL | grep “^d” (Solaris) <br />  find . -type d <br />  find . -type d | sort <br />  参考<a href="http://www.linuxforum.net/books/LinuxFAQ/program-shell-dtree.html">dtree</a></p><p><font color="#000099">4.列出除了某些类型文件的当前目录所有文件</font><br />  使用Ksh,用ls !(*.Z)可以显示所有文件，除了*.Z文件。 <br />  这个命令在一个目录里有许多种类型的文件的时候很有用. </p><p><font color="#000099">5.计算文件数和目录数</font><br />  下面的语句可以帮你计算有多少个文件和多少个目录.. <br />  ls -l * | grep “^-” | wc -l   &lt;—- to count files <br />  ls -l *  | grep “^d” | wc -l  &lt;—– to count dir <br />  还可以将以上的语句变成script或做个alias </p><p><font color="#000099">6.复制子目录及子目录下的所有文件</font><br />  在用cp时加上-r参数，如”cp -r /mnt/floppy/* /usr/local/” <br />  要参考的重要参数是-f -s </p><p><font color="#000099">7.文件/目录改名</font><br />  简单地用move命令移到新名字下即可。例如”mv /usr/oldname /usr/newname” </p><p><font color="#000099">8.删除一个目录下的所有文件和子目录及子目录下的所有文件</font><br />  rm -rf /tmp/example <br />  这些都是给懒人们准备的，新手最好多用man命令学习。要是英语不好，等中文发行版出来 <img class="wp-smiley" alt=":-(" src="http://www.foxfool.com/wp-includes/images/smilies/icon_sad.gif" /></p><p><font color="#000099">9.快速进入某些目录</font><br />  键入 cd ~ (或cd $HOME)可进入用户的home目录. <br />  键入 cd - 可进入上一次所在的目录. </p><p><font color="#000099">10.显示环境变量</font><br />   echo $HOME    显示家目录 <br />   echo $PATH    显示可执行文件搜索路径 <br />   env           显示所有环境变量(可能很多,最好用”env | more”,”env | grep PATH”等) <br />   修改环境变量，在bash下用export,在csh下用setenv。比如： <br />   export PATH=$PATH:/usr/local/bin <br />   要想知道export的具体用法，可以用shell的help命令：help export </p><p><font color="#000099">11.显示文件的类型</font><br />   用file命令，比如”file /bin/mount”,”file xxx.gz”,”file netscape”,”file initrd.img”等等。 <br />   相关的配置文件在/etc/magic或者/usr/share/magic </p><p><font color="#000099">12.查找命令文件的路径</font><br />   比如你要查找mount命令的具体路径，可以用 <br />   type mount <br />   whereis mount 这个命令还可以找出与这个命令文件相关的文件如manuals page。 </p><p><font color="#000099">13.查找文件</font><br />   使用find命令，比如： <br />    find /usr -name XF86*          在/usr目录下(包含子目录)查找名字前四个字母为XF86的文件 <br />    find . -name netscape -print   在当前目录下(包含子目录)查找名为netscape的文件 <br />    find /home -nouser         在/home目录下查找没有用户属主的文件(用户帐号被删除但有遗留文件) <br />    find /var -newer test          在/var目录下查找比test文件日期更新的文件 <br />   find命令有很多参数，注意用man命令查看。 <br />   更快速的查找文件是使用locate,第一次使用locate之前用updatedb来更新文件/目录名数据库。 <br />   它把文件/目录信息写到数据库中，以后查找起来就特别的快。updatedb放在crontab中而且缺省 <br />   配置是在半夜自动执行。locate存在轻微的安全性问题，因为普通用户可以用它来取得自己不能 <br />   访问的目录/文件的部分信息。现在有个<a href="http://pep.netnation.com/slocate/">secure locate</a>,把uid/gid也保存到数据库中，用户在 <br />   locate时先比较权限。 </p><p><font color="#000099">14.控制台下回卷屏幕</font><br />   如何查看已经卷过屏幕的信息呢？试试这两个按键组合：shift+PageUp和shift+PageDown <br />   对xterm/nxterm/cxterm/xxgdb都有效。而KDE带的KVT已经做得很好了。 </p><p><font color="#000099">15.查看文件内容的特殊方法</font><br />   相信最基本的cat和less你已经很熟悉了，如果有特殊的要求呢： <br />   如果你只想看文件的前5行，可以使用head命令，如： <br />     head -5 /etc/passwd <br />   如果你想查看文件的后10行，可以使用tail命令，如： <br />     tail -10 /etc/passwd <br />     tail -f /var/log/messages <br />          参数-f使tail不停地去读最新的内容，这样有实时监视的效果， <br />          当你在ppp拨号的过程中用它岂不是很方便！ <br />   查看文件中间一段，你可以使用sed命令 如: <br />     sed -n ‘5,10p’ /etc/passwd <br />   这样你就可以只查看文件的第5行到第10行。 </p><p><font color="#000099">16.取消^M字符</font><br />   当你FTP一些DOS文件到unix下时，你经常会看见每行文件后面有个讨厌的^M 字符， <br />   有两个简单的方法可以取消它。 <br />   用”vi”打开此文件，在Command mode下敲入： <br />     :%s/^V^M//g <br />   或者，在UNIX SHELL下敲入: <br />     sed ’s/^V^M//g’ foo &gt; foo.new </p><p><font color="#000099">17.利用Find命令改变所有权</font><br />   想要改变当前目录下所有文件的所有权,可以这样: <br />     find . -exec chown OWNER.[GROUP] {} ; (Solaris) <br />     find . -exec chown -R OWNER.[GROUP] {} ; (Linux) </p><p><font color="#000099">18.改变xterm/cxterm下字体大小</font><br />   同时按下Ctrl键和鼠标右键会弹出一个菜单让你选择，也可以在启动xterm时指定字体， <br />   如”xterm -fn 8×16 &amp;” <br />   提示：难道你不想试试Ctrl+鼠标左键会有什么吗?! </p><p><font color="#000099">19.启动一个程序时让它立即进入后台运行方式</font><br />   看过前面一篇bash的介绍应该明白Ctrl+z/bg/fg的用法。有些程序工作起来挺费时间，在它后面加 <br />   个&amp;符号看看，例如”updatedb &amp;”，”netscape &amp;”等等。这样这个shell会释放出来干别的活。注意 <br />   这样出来的程序父进程仍然是这个shell,若你退出这个shell,这些程序也会被kill掉(除非这个程序 <br />   自己特别处理能脱离shell)。建议退出shell之前用jobs命令查看后台作业。 </p><p><font color="#000099">20.使用nohup命令(不挂起)</font><br />   如果你想进程在你退出系统后还能执行，可以使用NOHUP命令如： <br />     % nohup tar -cf /dev/tape /home &amp; <br />   你logout退出后再重新登录的话，使用’ps’命令可以看到进程还在执行 <br />   注意，要想把命令真正放到后台运行，nohup必须与&amp;操作同时使用。 <br />   有些软件自己能处理SIGHUP信号，如wget，则对它们无须用nohup。 <br />   如果你愿开动脑筋的话，还可以用nohup来实现ppp回拨：先拨号上去，然后以nohup执行一个自制的 <br />   脚本，如”sleep 60; ppp-start-script”等等。最后logout退出并挂断电话等着就是。 </p><p><font color="#000099">21.快速调出历史命令</font><br />   看了上一篇bash的介绍，想必对history,!,!!这些用法很熟悉了。其实你还可以用上下光标键 <br />   来调出历史命令，然后用左右光标键移动并可编辑命令行。 </p><p><font color="#000099">22.产生一个以当日日期为后缀的文件</font><br />    file=`date   ‘+%m%d’` | touch todayis.$file <br />   或者做一个shell脚本： <br />     #!/usr/bin/sh <br />     file=`date  ‘+%M%d’` <br />     touch todayis.$file <br />     exit 0 <br />   注意定义file变量中的“`”不是“ ‘”，而是左上角数字键1傍边那个(左单引号)。 </p><p><font color="#000099">23.将man/info的内容存为文本文件</font><br />   以man tcsh为例： <br />   1) man tcsh | col -b &gt; tcsh.txt <br />   2) nroff -man tcsh.man | col -b &gt; tcsh.txt <br />   以info emacs为例 <br />   info emacs -o emacs.txt -s <br />   提示，如果安装了<a href="http://www.kde.org/">KDE</a>的话用kdehelp去看man page和info page是很方便的。 <br />   嫌KDE太大的话还有<a href="http://http.cs.berkeley.edu/%7Ephelps/tcltk/">TkMan</a>可以选择，也是图形/超文本方式的，有搜索引擎，功能更强。 <br />   新来者要多去看man和info哟！ </p><p><font color="#000099">24.关于rpm的小技巧</font><br />   1)安装rpm包时显示进度 <br />     用-vh参数，如rpm -ivh ipchains-1.3.6-1.i386.rpm <br />     如果用glint或xrpm则不必。 <br />   2)直接通过ftp来安装rpm包 <br />     如rpm -i ftp://ftp.xxx.xxx <br />   3)校验所有的rpm包，查找丢失的文件 <br />     rpm -Va <br />   4)查找一个文件属于哪个rpm包 <br />     例如：rpm -qf /usr/bin/who <br />   5)列出一个rpm包的描述信息 <br />     例如：rpm -qpi mon-0.37j-1.i386.rpm <br />   6)列出一个rpm包的文件信息 <br />     例如：rpm -qpl mon-0.37j-1.i386.rpm </p><p><font color="#000099">25.快速展开xxx.tar.gz/xxx.tgz压缩的包</font><br />   tar zvfx xxx.tgz 在当前目录下展开这个包 <br />   tar zvft xxx.tgz 只测试不展开 <br />   tar zvfx xxx.tgz -C /new-dir 展开后放到/new-dir目录下 <br />   tar zvfc test.tgz /test 把/test目录下所有的文件及子目录打包成test.tgz <br />   tar的参数很多，要仔细学习。 </p><p><font color="#000099">26.拷贝与粘贴文本</font><br />   如果启动了gpm这个守护神(deamon)程序的话，可以用鼠标左键来选择文本，然后就可以用鼠标 <br />   中键把它粘贴到你所想要的地方。如果是两键鼠标则在配置是要选择防真3键鼠标，之后同时按 <br />   下左右键模拟中键。在文本终端下应该用鼠标右键来粘贴。 </p><p><font color="#000099">27.快速查找某个程序运行中的PID号/关机</font><br />   例如想查找inetd: ps aux | grep inetd <br />   又如想找到最吃内存的进程： ps aux | sort +4n <br />   找到进程的PID之后就可以用kill给它发信号,或者强制杀死它如：kill -9 xxx(某个进程的PID) <br />   在Linux下还提供了一个killall，可以直接使用进程的名字而不是PID号，如killall -HUP inetd <br />   又如killall xdm。killall会把信号发给以指定名字的程序运行的所有进程。 <br />   用killall -l列出所有可用的信号。 <br />   提到ps忍不住给大家介绍一下<a href="http://www.nada.kth.se/%7Ef91-men/qps/">qps</a>,用<a href="http://www.troll.no/">qt</a>写的图形界面，综合了free,top,ps及kill的特点，还可以看到 <br />   进程的Socket/Memory Map/Files信息。还有为KDE写的ktop，优点是列出了父子进程的关系。 <br />   shutdown -r now 杀掉所有进程立即重新启动 <br />   shutdown -h now 杀掉所有进程立即停机 <br />   shutdown -h +5 “Warning: After 5 minutes I’ll shutdown” 给用户发消息并在5分钟后停机。 <br />   相关命令有reboot,halt,poweroff,init等。 <br />   要想实现软件关掉电源，则你的PC机必须是ATX结构的，然后去配置编译内核，打开 <br />   charactor device/Advanced Power Management support/Power off on shutdown这一项。 </p><p><font color="#000099">28.查找Xwindow下的字体信息，特别是字符映射表(内码)</font><br />   xlsfonts 列出所有字体 <br />   xfontsel 分类列出所有字体并显示示范文本 <br />   xfd 显示某个字体文件中的所有字符及内码，比如用 xfd -fn hanzigb16fs 看看中文内码 <br />   再用xfd -fn cclib16st看看cxterm所用字库的内码与XF86的不同(注意最高位)。 </p><p><font color="#000099">29.查找日期为某一天的文件</font><br />   A=`find ~ -print` | ls -l –full-time $A 2&gt;/dev/null | grep “Jun 27″  | grep 1998 <br />   Linux的命令很厉害的呀！ <br />   给你写了下面这个script，用着方便点儿。你把它存成一个随便什么名字的文件,置上x属性就行了。 <br />   #!/bin/sh <br />   # Copyright by Ming Gong(宫敏) for news://news.freesoft.cei.gov.cn/chinese.com.linux <br />   # GPL V2, Jun 30, 1998 <br />   # The right of usage, distribution and modification is here by granted by the author. <br />   # The author deny any responsibilities and liabilities related to the code. <br />   # <br />   OK=0 <br />   A=`find $1 -print` <br />   if expr $3 == 1 &gt;/dev/null  ; then M=Jan ; OK=1 ; fi <br />   if expr $3 == 2 &gt;/dev/null  ; then M=Feb ; OK=1 ; fi <br />   if expr $3 == 3 &gt;/dev/null  ; then M=Mar ; OK=1 ; fi <br />   if expr $3 == 4 &gt;/dev/null  ; then M=Apr ; OK=1 ; fi <br />   if expr $3 == 5 &gt;/dev/null  ; then M=May ; OK=1 ; fi <br />   if expr $3 == 6 &gt;/dev/null  ; then M=Jun ; OK=1 ; fi <br />   if expr $3 == 7 &gt;/dev/null  ; then M=Jul ; OK=1 ; fi <br />   if expr $3 == 8 &gt;/dev/null  ; then M=Aug ; OK=1 ; fi <br />   if expr $3 == 9 &gt;/dev/null  ; then M=Sep ; OK=1 ; fi <br />   if expr $3 == 10 &gt;/dev/null  ; then M=Oct ; OK=1 ; fi <br />   if expr $3 == 11 &gt;/dev/null  ; then M=Nov ; OK=1 ; fi <br />   if expr $3 == 12 &gt;/dev/null  ; then M=Dec ; OK=1 ; fi <br />   if expr $3 == 1 &gt;/dev/null  ; then M=Jan ; OK=1 ; fi </p><p>   if expr $OK == 1 &gt; /dev/null ; then <br />     ls -l –full-time $A 2&gt;/dev/null | grep “$M $4″ | grep $2 ; <br />   else <br />     echo Usage: $0 path Year Month Day; <br />     echo Example: $0 ~ 1998 6 30; <br />   fi </p><p><font color="#000099">30.使用软盘/光盘等移动介质</font><br />     刚从跺死/瘟都死转过来的朋友，手拿着软盘/光盘不知道该如何办，因为Linux下没有A盘D盘的 <br />   概念.我自己刚开始学习Linux时也是这样(以前从来就没有做过root  <img class="wp-smiley" alt=":-)" src="http://www.foxfool.com/wp-includes/images/smilies/icon_smile.gif" /> 。如果你手头有讲Linux <br />   的书，仔细去看设备及文件系统的相关章节。简单地说，你需要把软盘/光盘设备上的文件系统安 <br />   装到Linux目录树上的一个点上，称之为安装点(mount point)，通常是一个目录。安装Linux后会 <br />   有个缺省的安装点/mnt，在它下面还有/mnt/floppy和/mnt/cdrom。你可以用 <br />       mount -t ext2 /dev/fd0 /mnt/floppy  &lt;–把linux文件系统格式的软盘安装上来 <br />       mount -t msdos /dev/fd0 /mnt/floppy &lt;–把dos文件系统格式的软盘安装上来 <br />       mount -t vfat /dev/fd0  /mnt/floppy &lt;–vfat支持瘟95/98的长文件名 <br />       mount /dev/hdb /mnt/cdrom  &lt;–把以从盘方式接在第一个IDE口上的光驱上的光盘安装上来 <br />       mount /dev/cdrom /mnt/cdrom  &lt;– /dev/cdrom是指向光驱设备的一个连接 <br />       mount /mnt/cdrom    &lt;–可以这么用是因为在/etc/fstab里已经定义了 <br />       umount /mnt/floppy  &lt;–在拿出软盘之前先要把它卸载 <br />       umount /mnt/cdrom   &lt;–不卸载就拿不出光盘 <br />   当然你也可以自己建一些安装点，比如”mkdir /mnt/smb”,”mkdir /scd”然后 <br />       mount -t iso9660 /dev/scd0 /scd  &lt;–/dev/scd0: SCSI光驱 <br />       smbmount //fjj/download /mnt/smb <br />   等等，熟悉之后就可以灵活运用。 <br />   单用mount而不跟任何参数可以显示已经安装的文件系统，或者查看/etc/mtab文件 <br />   初学者还经常问到如何格式化磁盘，在Linux里概念有些不同，称之为制作文件系统(make filesystem) <br />   应该用mkfs命令，由于现在的Linux都使用ext2格式，最好直接使用mke2fs,比如mke2fs /dev/fd0 <br />   mke2fs /dev/hdb2等等。如果要对软盘低级格式化，则可以用fdformat，而硬盘在出厂时已经格式化， <br />   无须低级格式化(那是危险的)。检查文件系统则用e2fsck，如e2fsck -av /dev/fd0。 <br />   哈，这个根本算不上Tips,不过有些初学者总是不喜欢看书思考，甚至还问如何添加/删除用户。 </p><p><font color="#000099">31.添加/删除用户</font><br />   用useradd username(或者adduser username)添加一个名为username的用户，然后用passwd username <br />   指定口令。用户的信息记录在/etc/passwd文件里，由于每个用户都可以(而且必须能)读出这个文件然 <br />   后就可以crack出其它用户的密码，为安全考虑现在都使用shadow。在/etc/passwd下用户的口令变为x <br />   真正的口令密文记录在/etc/shadow里，而这个文件只有以root权限才能读出。Redhat 5.1以下版本没 <br />   有直接使用shadow，需要用pwconv转换一下，如果要变回来，可以用pwunconv。提示：在/etc/skel目 <br />   录记录了一个用户应该有的基本文件(ls -a /etc/skel/看看都有什么),useradd会自动把这些文件复 <br />   制到用户的家目录下并置上适当的权限(除非添加用户时用了-m参数: useradd -m xxx)。如果你在这个 <br />   目录下键一个public_html的目录，则以后添加的用户在它的家目录下都会自动有个同名的目录，这样 <br />   每个用户都有了“个人主页”。 <br />   删除用户可以用userdel usrname或userdel -r username(有些发行版可能是deluser)，-r参数会删除 <br />   这个用户的家目录，但是在系统里别的地方还可能有此用户的信息，所以在删除用户之前最好还要 <br />   用find / -user username等方式去找一找相关信息。 <br />   如果要临时禁止一个用户，可以在/etc/passwd文件中此用户的密码这一项第一个字符前添加一个*号。 <br />   如果把密码域改为空，则此用户不需要密码就可以进入系统，当你忘记root口令时，可以用软盘启动 <br />   把原来的root安装上来，直接去改passwd文件。我记得以单用户方式启动时不需要密码可以进去。 <br />   长用户名的问题，在Redhat发行版中已经做得很好了，也允许用户名中有空格。如果你手上的发行版 <br />   不支持，到/usr/include/utmpbits.h里把UT_NAMEDSIZE改为32,重新编译相关程序。 <br />   另一个直观的配置工具是linuxconf，比如用它来配置pppuser等等。 <br />   这里只能给一些线索,自己多看”man useradd”,”man shadow”,”man group”,”man userdel”…… <br />   再一次建议新来者多看书多思考多看看man page，否则不大容易找到/etc/skel是干什么的。 </p><p><font color="#000099">32.列出一个目录占用的空间</font><br />   du或du -s或du -k <br />   du -S | sort -n 可以迅速发现那个目录是最大的。 <br />   用df可以看到已安装的文件系统的空间大小及剩余空间大小。 <br />   quota -v查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。 </p><p><font color="#000099">33.命令补起(TAB键的妙用)</font><br />   很多shell都有这个功能。 <br />   1) 只需输入文件或目录名的前几个字符, 然后按TAB <br />      键,如无相重的,完整的文件名立即自动在命令行 <br />      出现;如有相重的,再按一下TAB键,系统会列出 <br />      当前目录下所有以这几个字符开头的名字.例如 <br />      cd /mnt/cd&lt;tab键&gt; 自动补起为 cd /mnt/cdrom <br />   2) 在命令行下,只需输入例如”m”,再连续按两次TAB <br />      键,系统将列出所有以”m”开头的命令,(包括自定义 <br />      的Bshell命令函数),对查找某些记不清楚的命令特 <br />      有用.例如输入”ftp”,将查到ftp,ftpcount,ftpwho <br />      ftpshut等本不熟悉的命令. </p><p><font color="#000099">34.在redhat5.0中没有setenv,用set设定的变量在程序中用getenv读不出来.</font><br /><font color="#000099">   用哪个函数可以读出用set设定的环境变量?</font><br />   set env;export env <br />   然后在用getenv去读。 </p><p><font color="#000099">35.让grep搜寻文件及所有子目录下的文件里的内容</font><br />   例如搜寻ZhXwin下所有C原代码中的”Chinput”(试试取消下行的-q参数): <br />   find /download/ZhXwin -name *.c -exec grep -q -s Chinput {} ; -print <br />   查找所有文件则可以用： <br />   find . -type f -exec grep -s chinese {} ; -print <br />   如果喜欢图形界面，KDE带的kfind很不错。 </p><p><font color="#000099">36.查看启动时的log信息</font><br />   首先去查看/etc/syslog.conf文件，找到对应的文件。 <br />   (更详细的信息去看”man syslogd” “man syslog.conf” 以及”man klogd”) <br />   通常在SlackWare下为/var/adm/messages，在Redhat下为/var/log/messages。 <br />   这些文件可能会很大，要注意备份和删除。 <br />   前面已经提到用tail(tail -f)查看这些文件的方法，另外还有个<a href="http://logscanner.tradeservices.com/">logscanner</a>工具，挺不错的。 </p><img src ="http://www.blogjava.net/jelver/aggbug/72431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-09-28 08:14 <a href="http://www.blogjava.net/jelver/articles/72431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下rpm命令的基本用法 </title><link>http://www.blogjava.net/jelver/articles/69344.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Wed, 13 Sep 2006 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/69344.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/69344.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/69344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/69344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/69344.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#295200" size="5">Linux下rpm命令的基本用法</font>
		</strong>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#a5bd6b" cellspacing="1" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td align="middle">
										<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td align="middle">
																		<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
																				<tbody>
																						<tr>
																								<td>
																										<div id="art" style="MARGIN: 15px">
																												<div class="articleTitle">
																														<a href="http://www.lgsky.com/blog/index.php?id=85">
																																<font color="#800080">
																																</font>
																														</a> </div>
																												<div class="articleCon">rpm基本用法   <br /><br /><br />   1.安装一个包 <br />     # rpm -ivh  <br /><br />   2.升级一个包 <br />     # rpm -Uvh  <br /><br />   3.移走一个包 <br />     # rpm -e  <br /><br />   4.安装参数 <br />    --force  即使覆盖属于其它包的文件也强迫安装 <br />    --nodeps 如果该RPM包的安装依赖其它包，即使其它包没装，也强迫安装。 <br /><br />   5.查询一个包是否被安装 <br />     # rpm -q &lt; rpm package name&gt; <br /><br />   6.得到被安装的包的信息 <br />     # rpm -qi &lt; rpm package name&gt; <br /><br />   7.列出该包中有哪些文件 <br />     # rpm -ql &lt; rpm package name&gt; <br /><br />   8.列出服务器上的一个文件属于哪一个RPM包 <br />     # rpm -qf  <br /><br />   9.可综合好几个参数一起用 <br />     # rpm -qil &lt; rpm package name&gt; <br /><br />  10.列出所有被安装的rpm package <br />     # rpm -qa  <br /><br />  11.列出一个未被安装进系统的RPM包文件中包含有哪些文件？ <br />     # rpm -qilp &lt; rpm package name&gt;</div>
																												<div>
																												</div>
																										</div>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/jelver/aggbug/69344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-09-13 12:35 <a href="http://www.blogjava.net/jelver/articles/69344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RHEL AS4U3+httpd2.2+tomcat5.5+mysql5.0+php5.1详细安装文档  </title><link>http://www.blogjava.net/jelver/articles/69289.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Wed, 13 Sep 2006 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/69289.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/69289.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/69289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/69289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/69289.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top">
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td valign="top" align="left" width="*">
																		<a href="http://bbs.chinaunix.net/misc.php?action=viewratings&amp;tid=816902&amp;pid=5675565" name="pid5675565" alt="查看评分记录">
																		</a>发表于: 2006-8-24 10:15    </td>
																<td align="right" width="40%">
																		<!--编辑栏 开- -->
																		<b> <a href="http://bbs.chinaunix.net/post.php?action=reply&amp;fid=13&amp;tid=816902&amp;repquote=5675565&amp;extra=" alt="引用此帖内容"><font color="#000000">[引用]</font></a>  <a href="http://bbs.chinaunix.net/misc.php?action=report&amp;fid=13&amp;tid=816902&amp;pid=5675565&amp;page=1" alt="向版主投诉此帖"><font color="#000000">[投诉]</font></a><a onclick="fastreply('回复 1楼 vepeta 的帖子')" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###" alt="" pop="跳转到快速回复界面"><font color="#000000">[快速回复]</font></a></b>
																		<!--编辑栏 结- -->
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
						<tr>
								<td>
										<hr style="COLOR: #000000; HEIGHT: 1px" width="100%" />
								</td>
						</tr>
						<tr>
								<td valign="top">
										<span style="FONT-SIZE: 13px">在论坛里看了许多相关帖子，自己也实验了多次，终于在前几天测试成功，感谢cu里的前辈们为我们新人铺路，因为我实际工作中要用到这些，以前是兄弟公司的哥们帮我们配置。现在我也配置成功，和大家分享一下成果吧。一直从cu里吸取精华，希望我的文档能给一些新人有帮助。<br />   说明：实现WEB服务器能运行html、php、jsp等格式文件<br /><br />一、        所用软件及版本<br />1、        操作系统：RHEL as4u3<br />2、        Apache：httpd-2.2.2.tar.gz<br />apr-util-1.2.7.tar.gz<br />apr-1.2.7.tar.gz<br />3、        Tomcat：apache-tomcat-5.5.15.tar.gz<br />4、        Mysql：mysql-5.0.22.tar.gz<br />5、        Jdk：jdk-1_5_0_07-linux-i586.bin<br />6、        Apache和Tomcat连接：tomcat-connectors-1.2.18-src.tar.gz<br />7、        Php: php-5.1.4.tar.gz<br />二、        安装步骤：<br />1、        安装操作系统：这里就不介绍了，主要将相关的开发包装上。我将所有开发包都安装了。<br />2、        Apache安装：将以上所需要的所有软件上传到/usr/local下。<br />先解压：<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code0'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code0" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz httpd-2.2.2.tar.gz<br />cd httpd-2.2.2</div>首先可以看看里面的安装说明INSTALL和README。<br />在安装apache之前先安装apr-util-1.2.7.tar.gz和apr-1.2.7.tar.gz<br />首先安装apr。<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code1'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code1" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz apr-1.2.7.tar.gz<br />cd apr-1.2.7<br />./configure --prefix=/usr/local/apr-httpd<br />make<br />make install<br />cd ..</div>再安装apr-util-1.2.7.tar.gz<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code2'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code2" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz apr-util-1.2.7.tar.gz<br />cd apr-util-1.2.7<br />./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd<br />make<br />make install</div>3、        接下来继续安装apache<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code3'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code3" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">cd ../httpd-2.2.2<br />./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-module=most --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd --enable-so<br />make<br />make install</div>如果没有报错，apache基本安装完毕。<br />4、        安装JDK<br />回到local目录下：<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code4'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code4" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">cd ..<br />./jdk-1_5_0_07-linux-i586.bin<br />ln –s jdk1.5.0_07 jdk</div>设置JDK环境变量<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code5'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code5" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">vi /etc/profile</div>再文件尾部增加以下几句：<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code6'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code6" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">JAVA_HOME=/usr/local/jdk<br />JRE=$JAVA_HOME/jre<br />LC_ALL=zh_CN.GBK<br />PATH=$JAVA_HOME/bin:$JRE/bin:$PATH<br />CLASSPATH=.:$JAVA_HOME/bin/tools.jar:$JAVA_HOME/lib/dt.jar<br />export JAVA_HOME JRE LC_ALL CLASSPATH PATH </div>5、        安装MYSQL<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code7'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code7" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz mysql-5.0.22.tar.gz<br />cd mysql-5.0.22<br />./configure --prefix=/usr/local/mysql/ --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler<br />make<br />make install<br />groupadd mysql<br />useradd -g mysql mysql<br />cp support-files/my-medium.cnf /etc/my.cnf<br />cd /usr/local/mysql<br />bin/mysql_install_db --user=mysql<br />chown -R root  .<br />chown -R mysql var<br />chgrp -R mysql .<br />bin/mysqld_safe --user=mysql &amp;<br />mysqladmin –uroot password new-password</div>6、        安装php<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code8'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code8" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz php-5.1.4.tar.gz<br />cd php-5.1.4<br />./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs<br />make &amp;&amp; make install<br />cp php.ini-dist /usr/local/lib/php.ini</div>7、        安装tomcat<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code9'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code9" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar xvfz apache-tomcat-5.5.15.tar.gz<br />mv apache-tomcat-5.5.15 tomcat</div>8、        安装Apache和Tomcat连接<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code10'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code10" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">tar zxvf tomcat-connectors-1.2.18-src.tar.gz<br />cd tomcat-connectors-1.2.18-src/ native/<br />./configure --with-apxs=/usr/local/apache/bin/apxs<br />make &amp;&amp; make install</div>三、        配置httpd.conf<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code11'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code11" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">cd /usr/local/conf/<br />vi httpd.conf</div>1、        注释掉一下几行<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code12'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code12" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">#ServerAdmin you@example.com<br />#ServerName www.example.com:80<br />#DocumentRoot "/usr/local/apache/htdocs"</div>2、        修改里面相关内容<br />A、<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code13'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code13" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">&lt;Directory /&gt;<br />    Options FollowSymLinks<br />#    AllowOverride None<br />     AllowOverride all<br />     Order deny,allow<br />#    Deny from all<br />     Allow from all<br />&lt;/Directory&gt;</div>B、<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code14'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code14" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">#&lt;Directory "/usr/local/apache/htdocs"&gt;<br />&lt;Directory "/usr/local/tomcat/webapps"&gt;<br />    #<br />    # Possible values for the Options directive are "None", "All",<br />    # or any combination of:<br />    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews<br />    #<br />    # Note that "MultiViews" must be named *explicitly* --- "Options All"<br />    # doesn't give it to you.<br />    #<br />    # The Options directive is both complicated and important.  Please see<br />    # http://httpd.apache.org/docs/2.2/mod/core.html#options<br />    # for more information.<br />    #<br />#    Options Indexes FollowSymLinks<br />    #<br />    # AllowOverride controls what directives may be placed in .htaccess files.<br />    # It can be "All", "None", or any combination of the keywords:<br />    #   Options FileInfo AuthConfig Limit<br />    #<br />    AllowOverride None<br /><br />    #<br />    # Controls who can get stuff from this server.<br />    #<br />    Order allow,deny<br />    Allow from all<br /><br />&lt;/Directory&gt;</div>因为我这里将网站放在/usr/local/tomcat/webapps下<br /><br />C、将<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code15'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code15" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">#Include conf/extra/httpd-vhosts.conf</div>这行#除掉<br /><br />3、        增加以下内容：<br />A、在AddType application/x-gzip .gz .tgz下增加以下两行<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code16'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code16" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">AddType application/x-httpd-php .php .phtml<br />   AddType application/x-httpd-php-source .phps</div>B、结尾增加<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code17'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code17" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">#add mod_jk module<br />LoadModule jk_module modules/mod_jk.so<br /># Update this path to match your modules location<br /># Where to find workers.properties<br /># Update this path to match your conf directory location (put workers.properties next to #httpd.conf)<br />  JkWorkersFile /usr/local/apache/conf/workers.properties<br /># Where to put jk logs<br /># Update this path to match your logs directory location (put mod_jk.log next to access_log)<br />  JkLogFile     /usr/local/apache/logs/mod_jk.log<br /># Set the jk log level [debug/error/info]<br />  JkLogLevel    info<br /># Select the log format<br />  JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br /># JkOptions indicate to send SSL KEY SIZE,<br />  JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories<br /># JkRequestLogFormat set the request format<br />  JkRequestLogFormat     "%w %V %T"<br /># Send everything for context /examples to worker named worker1 (ajp13)<br />  JkMount  /*.jsp worker1</div>C、在/usr/local/apache/conf下增加一个workers.properties文件，内容如下：<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code18'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code18" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys"># Define 1 real worker using ajp13<br />  worker.list=worker1<br /># Set properties for worker1 (ajp13)<br />  worker.worker1.type=ajp13<br />  worker.worker1.host=localhost<br />  worker.worker1.port=8009<br />  worker.worker1.lbfactor=50<br />  worker.worker1.cachesize=10<br />  worker.worker1.cache_timeout=600<br />  worker.worker1.socket_keepalive=1<br />  worker.worker1.reclycle_timeout=300</div>D、再编辑/usr/local/apache/conf/extra/下httpd-vhosts.conf文件<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code19'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code19" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">vi httpd-vhosts.conf</div>将里面例子修改一下<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code20'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code20" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">&lt;VirtualHost 192.168.0.170:80&gt;<br />&lt;Directory "/usr/local/tomcat/webapps/ROOT" &gt;<br />DirectoryIndex index.htm index.html index.jsp index.php<br />&lt;/Directory&gt;<br />    ServerAdmin xxx@126.com<br />    DocumentRoot /usr/local/tomcat/webapps/ROOT<br />    ServerName 192.168.0.170<br />    ErrorLog logs/170-error_log<br />    CustomLog logs/170-access_log common<br />&lt;/VirtualHost&gt;</div>因为没有做域名解析，我这里在ServerName下直接用的是IP地址。<br />四、        测试<br />先启动tomcat，再启动apache。启动apache之前可以到apache/bin下测试一下虚拟域是否配置正确。./httpd –S 如果配置有错误会提示你。<br />没有问题后，在IE地址栏输入http://192.168.0.170 此时将显示的是tomcat的默认界面，证明可以正常访问jsp文件了。再将/usr/local/tomcat/webapps/ROOT下index.jsp换一个index.php文件，只要在index.php里输入以下内容即可测试：<br /><br /><div class="smalltxt" style="FONT-WEIGHT: bold; MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em"><div style="FLOAT: left">CODE:</div><div style="FLOAT: right; TEXT-ALIGN: right"><a class="smalltxt" onclick="copycode(findobj('code21'));" href="http://bbs.chinaunix.net/viewthread.php?tid=816902###"><font color="#000000">[Copy to clipboard]</font></a></div></div><div class="altbg2" id="code21" style="CLEAR: both; BORDER-RIGHT: #698cc3 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #698cc3 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 3px 2em 2em; BORDER-LEFT: #698cc3 1px solid; WORD-BREAK: break-all; PADDING-TOP: 5px; BORDER-BOTTOM: #698cc3 1px solid; FONT-FAMILY: fixedsys">&lt;? echo phpinfo() ?&gt;</div>重启apache，再在IE地址栏输入http://192.168.0.170 将能看到php的相关信息。<br />主要参考文章有：<br />http://www.chinaunix.net/jh/13/669895.html<br />http://www.chinaunix.net/jh/13/770898.html<br />http://httpd.apache.org/docs/2.2/</span>
										<font size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/jelver/aggbug/69289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-09-13 09:02 <a href="http://www.blogjava.net/jelver/articles/69289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vmware 4.5.1+redhat9.0+oracle 9.2.0.4 (转贴)</title><link>http://www.blogjava.net/jelver/articles/68220.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 07 Sep 2006 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/68220.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/68220.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/68220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/68220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/68220.html</trackback:ping><description><![CDATA[
		<font size="2">我的安装环境是：vmware 4.5.1+redhat9.0+oracle 9.2.0.4，虚机上只有120M内存、6G硬盘，资源非常紧张。 <br /><br />首先必须把ORACLE发行介质的3张光盘放到公司的270主机上，解开生成STAGE文件，然后再通过NFS访问（解决NFS访问的问题花了老鼻子劲了）。 <br /><br />然后要忍受ORACLE安装期间超低的系统性能，即使关闭所有不必要的应用，还是需要等待数秒的窗口切换时间，到最后安装完毕，笔记本电脑靠近硬盘的地方竟然微微发热（声明一下，公司空调挺猛的）。 <br /><br />最后还不得不取消ORACLE建库，因为一个数据库实例的最低内存要求是我实存的114%！ <br /><br />安装过程参阅的文档如下（不同的地方用红色标出）： <br /><br /><br />在安装之前有几个地方需要注意的： <br />你的交换分区最好有一个G左右那么大，第二你的硬盘分区最好也要有足够大的空间。 <br />-- 我的swap空间251m，使用率一度接近80% <br />下面我那个转贴的中译本： <br />-- 也是舶来品 <br />1、创建用户和组： <br />[roko@miniroko] su - <br /><br />[root@miniroko]# groupadd oinstall <br />[root@miniroko]# groupadd dba <br />[root@miniroko]# useradd -g oinstall -G dba oracle <br />[root@miniroko]# passwd oracle <br /><br />2、准备文件目录： <br />-- 这步可以省略，runInstaller会替你做的 <br />[root@miniroko]# mkdir -p /opt/ora9/product/9.2 <br />[root@miniroko]# mkdir /var/opt/oracle <br />[root@miniroko]# chown oracle.dba /var/opt/oracle <br />[root@miniroko]# chown -R oracle.dba /opt/ora9 <br /><br />3、调节系统内核参数及安装支持软件包： <br />3.1、首先用命令rpm -qa|grep compat 查看系统中是否安有以下几个软件包： <br /><br />compat-gcc-7.3-2.96.118.i386.rpm <br />compat-libgcj-7.3-2.96.118.i386.rpm <br />compat-libgcj-devel-7.3-2.96.118.i386.rpm <br />nss_db-compat-2.2-20.i386.rpm <br /><br />如果没有，请拿出你的安装盘，安装以上的包。不要用原文给的那个APT的东东，不熟的人遇上没有解决的依赖性问题的话，就特别讨厌。 <br />-- 我去下载这些包的url地址：http://download.fedoralegacy.org/redhat/9/os/i386/ <br /><br />3.2、设置内核参数，调节信号灯及共享内存： <br />[root@miniroko]# echo 250 32000 100 128 &gt; /proc/sys/kernel/sem <br />[root@miniroko]# echo 536870912 &gt; /proc/sys/kernel/shmmax <br />[root@miniroko]# echo 4096 &gt; /proc/sys/kernel/shmmni <br />[root@miniroko]# echo 2097152 &gt; /proc/sys/kernel/shmall <br />[root@miniroko]# echo 65536 &gt; /proc/sys/fs/file-max <br />[root@miniroko]# echo 1024 65000 &gt; /proc/sys/net/ipv4/ip_local_port_range <br /><br />当然为了一开机系统就能自动帮你设好这些参数，也可改动 /etc/sysctl.conf 这个文件，加入以下的语句： <br />kernel.shmmax = 536870912 <br />kernel.shmmni = 4096 <br />kernel.shmall = 2097152 <br />kernel.sem = 250 32000 100 128 <br />fs.file-max = 65536 <br />net.ipv4.ip_local_port_range = 1024 65000 <br /><br />保存后，即可。建议关于net.ipv4.ip_local_port_range不要改动，可以用cat /proc/sys/net/ipv4/ip_local_port_range 看到红帽子对这个所定义的范围已经符合，而且端口范围比这个小。 <br /><br />3.3、设置oracle对文件的要求： <br />编辑文件：/etc/security/limits.conf 加入以下语句： <br />oracle soft nofile 65536 <br />oracle hard nofile 65536 <br />oracle soft nproc 16384 <br />oracle hard nproc 16384 <br /><br />这个需要重启后才能生效的。但是安装的时候无所谓了。 <br />-- 这是作者的臆断了，re-login就生效了 <br /><br />4、设置oracle的系统环境： <br />以oracle用户的身份登录： <br />su oracle <br /><br />cd ~ <br /><br />编辑它的.bashrc文件加入以的东东： <br />#oracle 9i <br />export ORACLE_BASE=/opt/ora9 <br />export ORACLE_HOME=/opt/ora9/product/9.2 <br />export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH <br />export ORACLE_OWNER=oracle <br />export ORACLE_SID=ora9i <br />export ORACLE_TERM=vt100 <br />export LD_ASSUME_KERNEL=2.4.1 <br />export THREADS_FLAG=native <br />export LD_LIBRARY_PATH=/opt/ora9/product/9.2/lib:$LD_LIBRARY_PATH <br />export PATH=/opt/ora9/product/9.2/bin:$PATH <br /># <br /># change this NLS settings to suit your country: <br /># example: <br /># german_germany.we8iso8859p15, american_america.we8iso8859p2 etc. <br /># <br />#export NLS_LANG='croatian_croatia.ee8iso8859p2' (注意这个东东把它注释掉，因为我们用的是中文系统。然而为了能够显示中文加入以下一行： <br />export LC=en_US <br />-- 非oracle的几个环境变量设置应该很关键 <br /><br />退出，将你下载的三个iso文件准备好。 <br />5、解压你下载的文件： <br />5.1、新建一个目录：mkdir /mnt/Oracle <br />5.2、将三个文件拷入新建的目录：cp ln_* /mnt/Oracle <br />5.3、解压三个文件： cd /mnt/Oracle <br />gunzip gunzip lnx_920_disk1.cpio.gz <br />gunzip lnx_920_disk2.cpio.gz <br />gunzip lnx_920_disk3.cpio.gz <br />cpio -idmv &lt; lnx_920_disk1.cpio <br />cpio -idmv &lt; lnx_920_disk2.cpio <br />cpio -idmv &lt; lnx_920_disk3.cpio <br />5.4、这个将生成三个文件夹：DISK1, DISK2, DISK3 <br />6、开始安装： <br />以oracle的用户身份进入： <br />su oracle <br />cd ~ <br />/mnt/Oracle/DSIK1/runInstall.sh <br /><br />-- 可能是我今天运气好或者是oracle的新发行介质已经修正了错误，后面提到的错误我都没有碰到，所以后面的修正步骤都没有执行。最后dbca正常运行，因为资源的限制被我取消了。 <br />-- 以下省略，原文见链接（这可是人家2003年的著作）。 <br /><br />一个群UNIXBLOG，由成员共同维护。欢迎同道一起来做 <br /></font>
		<a class="postlink" href="http://www.unixblog.net/" target="_blank">
				<font size="2">http://www.unixblog.net</font>
		</a>
<img src ="http://www.blogjava.net/jelver/aggbug/68220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-09-07 12:27 <a href="http://www.blogjava.net/jelver/articles/68220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于linux操作系统架构openvpn总结 </title><link>http://www.blogjava.net/jelver/articles/43456.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 27 Apr 2006 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/43456.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/43456.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/43456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/43456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/43456.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">使用OPENVPN实现各机房的互通 1 
</p>
		<p style="TEXT-INDENT: 2em">1 现状 2 
</p>
		<p style="TEXT-INDENT: 2em">2 网络结构 2 
</p>
		<p style="TEXT-INDENT: 2em">3 服务器信息以及网络安全 4 
</p>
		<p style="TEXT-INDENT: 2em">3.1 服务器信息 4 
</p>
		<p style="TEXT-INDENT: 2em">3.2 网络安全 4 
</p>
		<p style="TEXT-INDENT: 2em">4 使用openvpn实现南北互通 5 
</p>
		<p style="TEXT-INDENT: 2em">4.1 Openvpn简介 5 
</p>
		<p style="TEXT-INDENT: 2em">4.2 下载 5 
</p>
		<p style="TEXT-INDENT: 2em">4.3 安装 6 
</p>
		<p style="TEXT-INDENT: 2em">4.4 你的操作系统支持tun吗？ 6 
</p>
		<p style="TEXT-INDENT: 2em">4.5 配置C/S结构的VPN网络 7 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1 如何生成ca和cert/key? 7 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.1 产生MASTER Certificate Authority(CA) 的公钥(certificate)和私钥(key) 7 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.2 创建server端的cert和key文件 8 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.3 创建3个client端cert和key文件 9 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.4 建立 Diffie Hellman文件 9 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.5 所有文件的列表及使用的主机 9 
</p>
		<p style="TEXT-INDENT: 2em">4.5.2 OpenVPN Server端的配置 10 
</p>
		<p style="TEXT-INDENT: 2em">4.5.3 OpenVPN Client端的配置 12 
</p>
		<p style="TEXT-INDENT: 2em">4.5.4 运行OpenVPN 14 
</p>
		<p style="TEXT-INDENT: 2em">5 其它配置 15 
</p>
		<p style="TEXT-INDENT: 2em">5.1 让多个client的子网间互通 15 
</p>
		<p style="TEXT-INDENT: 2em">5.2 控制运行中的openvpn进程 15 
</p>
		<p style="TEXT-INDENT: 2em">5.3 windows下的配置： 15 
</p>
		<p style="TEXT-INDENT: 2em">6 实际应用情况 16 
</p>
		<p style="TEXT-INDENT: 2em">7 参考文档 17 
</p>
		<p style="TEXT-INDENT: 2em">1 现状 
</p>
		<p style="TEXT-INDENT: 2em">假设现在的某公司的服务器存放在广州、河北、杭州三个机房中，每个机房使用不用的子网： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">机房 子网（内部） 
</p>
		<p style="TEXT-INDENT: 2em">广州 10.1.0.0/16 
</p>
		<p style="TEXT-INDENT: 2em">河北 10.2.0.0/16 
</p>
		<p style="TEXT-INDENT: 2em">杭州 10.3.0.0/16 
</p>
		<p style="TEXT-INDENT: 2em">各机房使用不同的网段，为使用vpn连接创造了有利条件。 
</p>
		<p style="TEXT-INDENT: 2em">由于电信至网通间的网络速度是否缓慢，对广州与河北机房间的数据同步带来非常大的困难。我们找到一台即连接了网通的线路，又连接了电信线路的服务器，但却不能直接用其作为路由。如果使用porxy的方式或转发的方式又会降低同步的效率。 
</p>
		<p style="TEXT-INDENT: 2em">采用C/S结构的vpn方式，即解决了同步的问题，又不会影响同步的效率。 
</p>
		<p style="TEXT-INDENT: 2em">2 网络结构 
</p>
		<p style="TEXT-INDENT: 2em">下图是三个机房实现互连互通后的拓扑图： 
</p>
		<p style="TEXT-INDENT: 2em">（由于是发到论坛的关系，请看贴子最后的图） 
</p>
		<p style="TEXT-INDENT: 2em">从上图可以看到，该VPN系统是一个C/S的结构。中间为VPN SERVER；广州、河北、杭州三个机房各取出一台服务器作为VPN CLIENT。 
</p>
		<p style="TEXT-INDENT: 2em">VPN SERVER拥有两块网卡和两条线路（电信和网通），两个网卡均需要设置公网IP。根据实际的情况设置路由，这里我是设置电信的线路为默认路由，设置到河北机房网段的走网通的路由。 
</p>
		<p style="TEXT-INDENT: 2em">VPN CLIENT可以有两块网卡也可以只用一块网卡，如果是电信的线路则连接vpn server的电信的IP；如果是网通的线路则连接网通的vpn server 的网通方面的IP。 
</p>
		<p style="TEXT-INDENT: 2em">3 服务器信息以及网络安全 
</p>
		<p style="TEXT-INDENT: 2em">3.1 服务器信息 
</p>
		<p style="TEXT-INDENT: 2em">在本文中我们使用了4台服务器分别作为vpn server和client。由于使用vpn传输数据对服务器的负载不大，所以除了vpn server需要一台新的服务器外，各机房的client服务器只需要找一台负载轻的服务器来担当即可。 
</p>
		<p style="TEXT-INDENT: 2em">本文使用的四台服务器的详细信息： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">机房 Vpn 模式 操作系统 服务器IP 
</p>
		<p style="TEXT-INDENT: 2em">Vpn server RedHat 9.0 公网IP1 (网通) 
</p>
		<p style="TEXT-INDENT: 2em">公网IP2（电信） 
</p>
		<p style="TEXT-INDENT: 2em">广州机房 Vpn client FreeBSD4.9 10.1.0.1 
</p>
		<p style="TEXT-INDENT: 2em">河北机房 Vpn client RedHat9.0 10.2.0.1 
</p>
		<p style="TEXT-INDENT: 2em">杭州机房 Vpn client FreeBsd4.9 10.3.0.1 
</p>
		<p style="TEXT-INDENT: 2em">3.2 网络安全 
</p>
		<p style="TEXT-INDENT: 2em">除vpn server外，其它的机房中的vpn client均无需公网IP，所以vpn server需要加强安全方面的设置。 
</p>
		<p style="TEXT-INDENT: 2em">该服务器是RedHat9.0的操作系统，登陆界面使用的是grub，并设置的grub密码，保证物理上的安全。 
</p>
		<p style="TEXT-INDENT: 2em">使用Iptables设置包过滤防火墙，只允许你的服务器对其进行访问： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">iptables –F 
</p>
		<p style="TEXT-INDENT: 2em">iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT 
</p>
		<p style="TEXT-INDENT: 2em">iptables -A INPUT -s YOURNETWORK -j ACCEPT 
</p>
		<p style="TEXT-INDENT: 2em">iptables -A INPUT -p udp --dport 1194 –j DROP 
</p>
		<p style="TEXT-INDENT: 2em">4 使用openvpn实现南北互通 
</p>
		<p style="TEXT-INDENT: 2em">4.1 Openvpn简介 
</p>
		<p style="TEXT-INDENT: 2em">OpenVPN 是一个强大、高度可配置、基于ssl的 VPN （Virtual Private Network）Open Source 软件。它具有多种的验证方式以及许多强大的功能。 
</p>
		<p style="TEXT-INDENT: 2em">OpenVPN工作在OSI模型的第2或第3层，使用SSL/TLS协议进行网络传输。支持多种客户认证方法，如证书、smart cards，加上用户名密码的证书认证等。除此以外，还有强大的ACL功能限制客户的信息交换。 
</p>
		<p style="TEXT-INDENT: 2em">OpenVPN可以运行在多种操作系统中，包括： 
</p>
		<p style="TEXT-INDENT: 2em">Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris. 
</p>
		<p style="TEXT-INDENT: 2em">使用OpenVpn，可以实现: 
</p>
		<p style="TEXT-INDENT: 2em">● 使用特定udp或tcp端口实现两台主机的之间的vpn连接。 
</p>
		<p style="TEXT-INDENT: 2em">● 实现C/S结构，实现多台client通过server服务器互连互通。 
</p>
		<p style="TEXT-INDENT: 2em">● 通过TLS/SSL加密保证数据传输的安全。 
</p>
		<p style="TEXT-INDENT: 2em">● 通过数据的压缩，提高数据传输的速度。 
</p>
		<p style="TEXT-INDENT: 2em">（由于其它功能在本文中并不需要使用，如想要详细了解请访问http://openvpn.net） 
</p>
		<p style="TEXT-INDENT: 2em">4.2 下载 
</p>
		<p style="TEXT-INDENT: 2em">从以下网址下载最新版本的openvpn source包。 
</p>
		<p style="TEXT-INDENT: 2em">http://nchc.dl.sourceforge.net/sourceforge/openvpn/openvpn-2.0_rc16.tar.gz 
</p>
		<p style="TEXT-INDENT: 2em">由于openvpn需要使用数据压缩，所以还需要安装lzo包： 
</p>
		<p style="TEXT-INDENT: 2em">http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz 
</p>
		<p style="TEXT-INDENT: 2em">4.3 安装 
</p>
		<p style="TEXT-INDENT: 2em">Linux： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">软件 编译安装 
</p>
		<p style="TEXT-INDENT: 2em">Lzo ./configure Make &amp;&amp; make install 
</p>
		<p style="TEXT-INDENT: 2em">Openvpn ./configure -prefix=/opt/openvpn Make &amp;&amp; make install 
</p>
		<p style="TEXT-INDENT: 2em">FreeBSD： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Lzo ./configure Make &amp;&amp; make install 
</p>
		<p style="TEXT-INDENT: 2em">Openvpn ./configure -prefix=/opt/openvpn --with-lzo－headers=/usr/local/include --with-lzo-headers=/usr/local/include Make &amp;&amp; make install 
</p>
		<p style="TEXT-INDENT: 2em">参照上面的安装方法分别在linux和freebsd主机上安装好openvpn。 
</p>
		<p style="TEXT-INDENT: 2em">4.4 你的操作系统支持tun吗？ 
</p>
		<p style="TEXT-INDENT: 2em">从我安装过的操作系统看，RedHat9.0和FreeBSD4.9的内核默认已经支持TUN，并且已经安装tun模块。RedHat AS3则没有该模块，需要重新编译内核支持。 
</p>
		<p style="TEXT-INDENT: 2em">加载tun模块： 
</p>
		<p style="TEXT-INDENT: 2em">●Linux 2.4 or higher (with integrated TUN/TAP driver): 
</p>
		<p style="TEXT-INDENT: 2em">(1) make device node: mknod /dev/net/tun c 10 200 
</p>
		<p style="TEXT-INDENT: 2em">(2a)add to:　echo "alias char-major-10-200 tun" &gt;&gt; /etc/modules.conf 
</p>
		<p style="TEXT-INDENT: 2em">(2b) load driver: modprobe tun 
</p>
		<p style="TEXT-INDENT: 2em">(3) enable routing: echo 1 &gt; /proc/sys/net/ipv4/ip_forward 
</p>
		<p style="TEXT-INDENT: 2em">●FreeBSD 4.1.1+: 
</p>
		<p style="TEXT-INDENT: 2em">kldload if_tap 
</p>
		<p style="TEXT-INDENT: 2em">4.5 配置C/S结构的VPN网络 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1 如何生成ca和cert/key? 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Ca certificate 
</p>
		<p style="TEXT-INDENT: 2em">authority（认证授权），所有的server和client均使用同一个ca文件。 
</p>
		<p style="TEXT-INDENT: 2em">cert certificate（证书）。公钥，每一个server和client各自独立生成的公钥。 
</p>
		<p style="TEXT-INDENT: 2em">key 私钥，每一个server和client工作独立生成的私钥。 
</p>
		<p style="TEXT-INDENT: 2em">◎ server端只需要知道它自己的cert和key。它不需要知道每一个可以连接到它的client的cert。 
</p>
		<p style="TEXT-INDENT: 2em">◎ server端接受的client必须拥有以server的CA产生的cert。server能使用它自己的CA私钥来确认client的cert中是否带有其CA的记号。 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.1 产生MASTER Certificate Authority(CA) 的公钥(certificate)和私钥(key) 
</p>
		<p style="TEXT-INDENT: 2em">####### 
</p>
		<p style="TEXT-INDENT: 2em">In this section we will generate a master CA certificate/key, a server certificate/key, and certificates/keys for 3 separate clients 
</p>
		<p style="TEXT-INDENT: 2em">####### 
</p>
		<p style="TEXT-INDENT: 2em">在本节，我们会尝试建立一对master CA的cert和key，一对server端的cert和key，和3个不同client的年的cert和keys。 
</p>
		<p style="TEXT-INDENT: 2em">UNIX： 
</p>
		<p style="TEXT-INDENT: 2em">在openvpn的源码中可以找到easy-rsa文件夹。 
</p>
		<p style="TEXT-INDENT: 2em">cd easy-rsa 
</p>
		<p style="TEXT-INDENT: 2em">. ./vars 建立环境变量 ＃这个地方很多人会弄错，两点之间是有空间的 
</p>
		<p style="TEXT-INDENT: 2em">./clean-all 清除以前的 
</p>
		<p style="TEXT-INDENT: 2em">./build-ca 建立CA 
</p>
		<p style="TEXT-INDENT: 2em">最后一个命令会调用openssl来创建CA的公钥和私钥: 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Country Name (2 letter code) [KG]: 
</p>
		<p style="TEXT-INDENT: 2em">State or Province Name (full name) [NA]: 
</p>
		<p style="TEXT-INDENT: 2em">Locality Name (eg, city) [BISHKEK]: 
</p>
		<p style="TEXT-INDENT: 2em">Organization Name (eg, company) [OpenVPN-TEST]:yourcorp 在此输入公司名 
</p>
		<p style="TEXT-INDENT: 2em">Organizational Unit Name (eg, section) []: 
</p>
		<p style="TEXT-INDENT: 2em">Common Name (eg, your name or your server's hostname) []:hbroute 在此输入主机名或随便输一个名字 
</p>
		<p style="TEXT-INDENT: 2em">Email Address [me@myhost.mydomain]: 
</p>
		<p style="TEXT-INDENT: 2em">其它的按默认即可。 
</p>
		<p style="TEXT-INDENT: 2em">完成后会在keys目录中创建ca.crt ca.key index.txt serial四个文件。 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.2 创建server端的cert和key文件 
</p>
		<p style="TEXT-INDENT: 2em">cd easy-rsa 
</p>
		<p style="TEXT-INDENT: 2em">./build-key-server server 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Country Name (2 letter code) [KG]: 
</p>
		<p style="TEXT-INDENT: 2em">State or Province Name (full name) [NA]: 
</p>
		<p style="TEXT-INDENT: 2em">Locality Name (eg, city) [BISHKEK]: 
</p>
		<p style="TEXT-INDENT: 2em">Organization Name (eg, company) [OpenVPN-TEST]:yourcorp 输入公司名 
</p>
		<p style="TEXT-INDENT: 2em">Organizational Unit Name (eg, section) []: 
</p>
		<p style="TEXT-INDENT: 2em">Common Name (eg, your name or your server's hostname) []:hbrouteserver 输入主机名或随便一个名字 
</p>
		<p style="TEXT-INDENT: 2em">Email Address [me@myhost.mydomain]: 
</p>
		<p style="TEXT-INDENT: 2em">Please enter the following 'extra' attributes 
</p>
		<p style="TEXT-INDENT: 2em">to be sent with your certificate request 
</p>
		<p style="TEXT-INDENT: 2em">A challenge password []: 
</p>
		<p style="TEXT-INDENT: 2em">An optional company name []: 
</p>
		<p style="TEXT-INDENT: 2em">Sign the certificate? [y/n]:y 输入y 
</p>
		<p style="TEXT-INDENT: 2em">1 out of 1 certificate requests certified, commit? [y/n]y 输入y 
</p>
		<p style="TEXT-INDENT: 2em">Write out database with 1 new entries 
</p>
		<p style="TEXT-INDENT: 2em">Data Base Updated 
</p>
		<p style="TEXT-INDENT: 2em">其它的按回车。 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.3 创建3个client端cert和key文件 
</p>
		<p style="TEXT-INDENT: 2em">与创建server端的非常相似. 
</p>
		<p style="TEXT-INDENT: 2em">./build-key gz 
</p>
		<p style="TEXT-INDENT: 2em">./build-key hb 
</p>
		<p style="TEXT-INDENT: 2em">./build-key hz 
</p>
		<p style="TEXT-INDENT: 2em">注意gz、hb和hz不能一样，否则两个相同名字的client只能有一个能连接进来。 
</p>
		<p style="TEXT-INDENT: 2em">如果想使用带密码的client key，可以使用build-key-pass脚本。 
</p>
		<p style="TEXT-INDENT: 2em">如建立广州的： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">./build-key gz 
</p>
		<p style="TEXT-INDENT: 2em">Country Name (2 letter code) [KG]: 
</p>
		<p style="TEXT-INDENT: 2em">State or Province Name (full name) [NA]: 
</p>
		<p style="TEXT-INDENT: 2em">Locality Name (eg, city) [BISHKEK]: 
</p>
		<p style="TEXT-INDENT: 2em">Organization Name (eg, company) [OpenVPN-TEST]:mycorp 
</p>
		<p style="TEXT-INDENT: 2em">Organizational Unit Name (eg, section) []: 
</p>
		<p style="TEXT-INDENT: 2em">Common Name (eg, your name or your server's hostname) []:gz 键入"gz" 
</p>
		<p style="TEXT-INDENT: 2em">Email Address [me@myhost.mydomain]: 
</p>
		<p style="TEXT-INDENT: 2em">Certificate is to be certified until Mar 14 08:15:16 2015 GMT (3650 days) 
</p>
		<p style="TEXT-INDENT: 2em">Sign the certificate? [y/n]:y 键入“y” 
</p>
		<p style="TEXT-INDENT: 2em">1 out of 1 certificate requests certified, commit? [y/n]y 键入“y” 
</p>
		<p style="TEXT-INDENT: 2em">Write out database with 1 new entries 
</p>
		<p style="TEXT-INDENT: 2em">Data Base Updated 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.4 建立 Diffie Hellman文件 
</p>
		<p style="TEXT-INDENT: 2em">Diffie Hellman参数必须要在openvpn server中使用。 
</p>
		<p style="TEXT-INDENT: 2em">./build-dh 
</p>
		<p style="TEXT-INDENT: 2em">4.5.1.5 所有文件的列表及使用的主机 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Filename Needed By Purpose Secret 
</p>
		<p style="TEXT-INDENT: 2em">ca.crt server + all clients Root CA certificate NO 
</p>
		<p style="TEXT-INDENT: 2em">ca.key key signing machine only Root CA key YES 
</p>
		<p style="TEXT-INDENT: 2em">Dh{n}.pem server only Diffie Hellman parameters NO 
</p>
		<p style="TEXT-INDENT: 2em">server.crt server only Server Certificate NO 
</p>
		<p style="TEXT-INDENT: 2em">server.key server only Server Key YES 
</p>
		<p style="TEXT-INDENT: 2em">gz.crt 广州 only gz Certificate NO 
</p>
		<p style="TEXT-INDENT: 2em">Gz.key 广州 only gz Key YES 
</p>
		<p style="TEXT-INDENT: 2em">hcrt 河北 only hb Certificate NO 
</p>
		<p style="TEXT-INDENT: 2em">hb.key 河北 only hb Key YES 
</p>
		<p style="TEXT-INDENT: 2em">hz.crt 杭州 only hz Certificate NO 
</p>
		<p style="TEXT-INDENT: 2em">hz.key 杭州 only hz Key YES 
</p>
		<p style="TEXT-INDENT: 2em">根据上表，将所有的文件拷贝到需要这些文件的主机上。 
</p>
		<p style="TEXT-INDENT: 2em">4.5.2 OpenVPN Server端的配置 
</p>
		<p style="TEXT-INDENT: 2em">刚安装完openvpn的时候，/opt/openvpn目录下只有sbin和man两个文件夹，为方便起见，我们可以在该目录下建立其它的文件夹。 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">目录名 作用 
</p>
		<p style="TEXT-INDENT: 2em">Sbin 放置openvpn的主程序“openvpn” 
</p>
		<p style="TEXT-INDENT: 2em">Conf 放置配置文件 
</p>
		<p style="TEXT-INDENT: 2em">Ccd 放置各client的独立配置文件 
</p>
		<p style="TEXT-INDENT: 2em">Log 放置server的日志文件 
</p>
		<p style="TEXT-INDENT: 2em">Keys 放置认证文件 
</p>
		<p style="TEXT-INDENT: 2em">Man 放置man文档 
</p>
		<p style="TEXT-INDENT: 2em">配置文件：./conf/server.conf 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">port 1194 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 
</p>
		<p style="TEXT-INDENT: 2em">ca /opt/openvpn/keys/ca.crt 
</p>
		<p style="TEXT-INDENT: 2em">cert /opt/openvpn/keys/server.crt 
</p>
		<p style="TEXT-INDENT: 2em">key /opt/openvpn/keys/server.key 
</p>
		<p style="TEXT-INDENT: 2em">dh /opt/openvpn/keys/dh1024.pem 
</p>
		<p style="TEXT-INDENT: 2em">server 10.99.0.0 255.255.255.0 
</p>
		<p style="TEXT-INDENT: 2em">ifconfig-pool-persist /opt/openvpn/log/ipp.txt 
</p>
		<p style="TEXT-INDENT: 2em">client-config-dir ccd 
</p>
		<p style="TEXT-INDENT: 2em">route 10.1.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">route 10.2.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">route 10.3.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">push "route 10.10.0 255.255.0.0" 
</p>
		<p style="TEXT-INDENT: 2em">push "route 10.2.0.0 255.255.0.0" 
</p>
		<p style="TEXT-INDENT: 2em">push "route 10.3.0.0 255.255.0.0" 
</p>
		<p style="TEXT-INDENT: 2em">client-to-client 
</p>
		<p style="TEXT-INDENT: 2em">keepalive 10 120 
</p>
		<p style="TEXT-INDENT: 2em">comp-lzo 
</p>
		<p style="TEXT-INDENT: 2em">user nobody 
</p>
		<p style="TEXT-INDENT: 2em">group nobody 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">status /opt/openvpn/log/openvpn-status.log 
</p>
		<p style="TEXT-INDENT: 2em">log /opt/openvpn/log/openvpn.log 
</p>
		<p style="TEXT-INDENT: 2em">verb 6 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 
</p>
		<p style="TEXT-INDENT: 2em">writepid /opt/openvpn/log/server.pid 
</p>
		<p style="TEXT-INDENT: 2em">Client的自定义配置：./ccd/ 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">gz: 
</p>
		<p style="TEXT-INDENT: 2em">iroute 10.1.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">hz: 
</p>
		<p style="TEXT-INDENT: 2em">iroute 10.3.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">hb: 
</p>
		<p style="TEXT-INDENT: 2em">iroute 10.2.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">配置文件解释： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">;local a,b,c,d listen的IP 
</p>
		<p style="TEXT-INDENT: 2em">port 1194 listen的端口 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 使用UDP协议 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 使用tunnel的模块 
</p>
		<p style="TEXT-INDENT: 2em">ca ca.crt 公钥（s端和c端使用相同的ca） 
</p>
		<p style="TEXT-INDENT: 2em">cert server.crt server的公钥 
</p>
		<p style="TEXT-INDENT: 2em">key server.key server的私钥（要保管好）（s端和c端使用各自的cert和key） 
</p>
		<p style="TEXT-INDENT: 2em">dh dh1024.pem 产生方法：openssl dhparam -out dh1024.pem 1024 
</p>
		<p style="TEXT-INDENT: 2em">server 10.99.0.0 255.255.255.0 设置为server模式，并指定子网的IP段，server端默认会设为.1的地址。 
</p>
		<p style="TEXT-INDENT: 2em">ifconfig-pool-persist ipp.txt 当vpn断开或重启后，可以利用该文件重新建立相同IP地址的连接。 
</p>
		<p style="TEXT-INDENT: 2em">push "route 10.1.0.0 255.255.0.0" 让client端建立到另一个子网的路由。 
</p>
		<p style="TEXT-INDENT: 2em">client-to-client 让不同的client之间可以互相“看到”。 
</p>
		<p style="TEXT-INDENT: 2em">;max-clients 100 最多的client数量。 
</p>
		<p style="TEXT-INDENT: 2em">keepalive 10 120 每10秒ping一次，如果120秒没有回应则认为对方已经down。 
</p>
		<p style="TEXT-INDENT: 2em">user nobody 
</p>
		<p style="TEXT-INDENT: 2em">group nobody 指定运行openvpn的用户和组。（减少危险）。 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">status openvpn-status.log 每分钟记录一次连接的状态。 
</p>
		<p style="TEXT-INDENT: 2em">log openvpn.log 将log记录到指定文件中 
</p>
		<p style="TEXT-INDENT: 2em">verb 3 设置日志要记录的级别。 
</p>
		<p style="TEXT-INDENT: 2em">0只记录错误信息。 
</p>
		<p style="TEXT-INDENT: 2em">4能记录普通的信息。 
</p>
		<p style="TEXT-INDENT: 2em">5和6在连接出现问题时能帮助调试 
</p>
		<p style="TEXT-INDENT: 2em">9是极端的，所有信息都会显示，甚至连包头等信息都显示（像tcpdump） 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 相同信息的数量，如果连续出现20条相同的信息，将不记录到日志中。 
</p>
		<p style="TEXT-INDENT: 2em">4.5.3 OpenVPN Client端的配置 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">目录名 作用 
</p>
		<p style="TEXT-INDENT: 2em">Sbin 放置openvpn的主程序“openvpn” 
</p>
		<p style="TEXT-INDENT: 2em">Conf 放置配置文件 
</p>
		<p style="TEXT-INDENT: 2em">Keys 放置认证文件 
</p>
		<p style="TEXT-INDENT: 2em">Man 放置man文档 
</p>
		<p style="TEXT-INDENT: 2em">配置文件：./conf/client.conf 
</p>
		<p style="TEXT-INDENT: 2em">广州： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Client 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 
</p>
		<p style="TEXT-INDENT: 2em">remote VPNSERVERIP11194 
</p>
		<p style="TEXT-INDENT: 2em">resolv-retry infinite 
</p>
		<p style="TEXT-INDENT: 2em">nobind 
</p>
		<p style="TEXT-INDENT: 2em">user nobody 
</p>
		<p style="TEXT-INDENT: 2em">group nobody 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">ca /opt/openvpn/keys/ca.crt 
</p>
		<p style="TEXT-INDENT: 2em">cert /opt/openvpn/keys/gz.crt 
</p>
		<p style="TEXT-INDENT: 2em">key /opt/openvpn/keys/gz.key 
</p>
		<p style="TEXT-INDENT: 2em">comp-lzo 
</p>
		<p style="TEXT-INDENT: 2em">verb 3 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 
</p>
		<p style="TEXT-INDENT: 2em">杭州： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">client 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 
</p>
		<p style="TEXT-INDENT: 2em">remote VPNSERVERIP1 1194 
</p>
		<p style="TEXT-INDENT: 2em">resolv-retry infinite 
</p>
		<p style="TEXT-INDENT: 2em">nobind 
</p>
		<p style="TEXT-INDENT: 2em">user nobody 
</p>
		<p style="TEXT-INDENT: 2em">group nobody 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">ca /opt/openvpn/keys/ca.crt 
</p>
		<p style="TEXT-INDENT: 2em">cert /opt/openvpn/keys/hz.crt 
</p>
		<p style="TEXT-INDENT: 2em">key /opt/openvpn/keys/hz.key 
</p>
		<p style="TEXT-INDENT: 2em">comp-lzo 
</p>
		<p style="TEXT-INDENT: 2em">verb 3 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 
</p>
		<p style="TEXT-INDENT: 2em">河北： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">client 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 
</p>
		<p style="TEXT-INDENT: 2em">remote VPNSERVERIP2 1194 
</p>
		<p style="TEXT-INDENT: 2em">resolv-retry infinite 
</p>
		<p style="TEXT-INDENT: 2em">nobind 
</p>
		<p style="TEXT-INDENT: 2em">user nobody 
</p>
		<p style="TEXT-INDENT: 2em">group nobody 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">ca /opt/openvpn/keys/ca.crt 
</p>
		<p style="TEXT-INDENT: 2em">cert /opt/openvpn/keys/hb.crt 
</p>
		<p style="TEXT-INDENT: 2em">key /opt/openvpn/keys/hb.key 
</p>
		<p style="TEXT-INDENT: 2em">comp-lzo 
</p>
		<p style="TEXT-INDENT: 2em">verb 3 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 
</p>
		<p style="TEXT-INDENT: 2em">4.5.4 运行OpenVPN 
</p>
		<p style="TEXT-INDENT: 2em">建立脚本： 
</p>
		<p style="TEXT-INDENT: 2em">Server端： 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">#!/bin/sh 
</p>
		<p style="TEXT-INDENT: 2em">OPENVPN=/opt/openvpn/sbin/openvpn 
</p>
		<p style="TEXT-INDENT: 2em">CFG=/opt/openvpn/conf/server.conf 
</p>
		<p style="TEXT-INDENT: 2em">PID=`cat /opt/openvpn/log/server.pid` 
</p>
		<p style="TEXT-INDENT: 2em">case "$1" in 
</p>
		<p style="TEXT-INDENT: 2em">start) 
</p>
		<p style="TEXT-INDENT: 2em">$OPENVPN --config $CFG &amp; 
</p>
		<p style="TEXT-INDENT: 2em">;; 
</p>
		<p style="TEXT-INDENT: 2em">stop) 
</p>
		<p style="TEXT-INDENT: 2em">kill $PID 
</p>
		<p style="TEXT-INDENT: 2em">;; 
</p>
		<p style="TEXT-INDENT: 2em">restart) 
</p>
		<p style="TEXT-INDENT: 2em">kill $PID 
</p>
		<p style="TEXT-INDENT: 2em">sleep 5 
</p>
		<p style="TEXT-INDENT: 2em">$OPENVPN --config $CFG &amp; 
</p>
		<p style="TEXT-INDENT: 2em">;; 
</p>
		<p style="TEXT-INDENT: 2em">*) 
</p>
		<p style="TEXT-INDENT: 2em">echo "Usage: `basename $0` {start|stop|restart}" 
</p>
		<p style="TEXT-INDENT: 2em">;; 
</p>
		<p style="TEXT-INDENT: 2em">esac 
</p>
		<p style="TEXT-INDENT: 2em">Client端 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">#!/bin/sh 
</p>
		<p style="TEXT-INDENT: 2em">/opt/openvpn/sbin/openvpn --config /opt/openvpn/conf/client.conf &amp; 
</p>
		<p style="TEXT-INDENT: 2em">5 其它配置5.1 让多个client的子网间互通 
</p>
		<p style="TEXT-INDENT: 2em">●client-config-dir ccd 
</p>
		<p style="TEXT-INDENT: 2em">添加一个ccd的文件夹，里面的文件名为client的名字（如gz，hb）。当一个新client连接到server上时，程序会检查ccd文件夹，看是否有一个文件的名字与client的名字一致。如果有，进程会读该文件里面的指令并将这些指令应用于该名字的client。 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">●在ccd文件夹中创建一个文件hz，该文件中包括： 
</p>
		<p style="TEXT-INDENT: 2em">iroute 10.3.0.0 255.255.0.0 这会告诉hz client，不要在本机添加10.3.0.0网段（因为杭州本来就是10.23/16网段）。 
</p>
		<p style="TEXT-INDENT: 2em">●在server的配置文件中加入： 
</p>
		<p style="TEXT-INDENT: 2em">route 10.3.0.0 255.255.0.0 
</p>
		<p style="TEXT-INDENT: 2em">如果想两个client可以互通，请在server的配置文件中加入： 
</p>
		<p style="TEXT-INDENT: 2em">client-to-client 
</p>
		<p style="TEXT-INDENT: 2em">push "route 10.3.0.0 255.255.0.0" 
</p>
		<p style="TEXT-INDENT: 2em">记得在各子网内的机器上设置路由（如果server和client机器不是作为默认网关的话）。 
</p>
		<p style="TEXT-INDENT: 2em">5.2 控制运行中的openvpn进程 
</p>
		<p style="TEXT-INDENT: 2em">在配置文件中加入writepid参数指定pid文件。 
</p>
		<p style="TEXT-INDENT: 2em">SIGUSR1--以非root的身份重启openvpn进程。 
</p>
		<p style="TEXT-INDENT: 2em">SIGHUP--重启 
</p>
		<p style="TEXT-INDENT: 2em">SIGUSR2--输出连接统计到log文件 
</p>
		<p style="TEXT-INDENT: 2em">SIGTERM,SIGINT--exit。 
</p>
		<p style="TEXT-INDENT: 2em">5.3 windows下的配置： 
</p>
		<p style="TEXT-INDENT: 2em">windows版本的openvpn下载地址： 
</p>
		<p style="TEXT-INDENT: 2em">http://nchc.dl.sourceforge.net/sourceforge/openvpn/openvpn-2.0_rc17-install.exe 
</p>
		<p style="TEXT-INDENT: 2em">安装方法很简单，和其它windows下的软件无异。 
</p>
		<p style="TEXT-INDENT: 2em">我安装到c:\program file\openvpn下。 
</p>
		<p style="TEXT-INDENT: 2em">在config中建立配置文件win.ovpn 
</p>
		<p style="TEXT-INDENT: 2em">代码: 
</p>
		<p style="TEXT-INDENT: 2em">Client 
</p>
		<p style="TEXT-INDENT: 2em">dev tun 
</p>
		<p style="TEXT-INDENT: 2em">proto udp 
</p>
		<p style="TEXT-INDENT: 2em">remote VPNSERVER1 1194 
</p>
		<p style="TEXT-INDENT: 2em">resolv-retry infinite 
</p>
		<p style="TEXT-INDENT: 2em">nobind 
</p>
		<p style="TEXT-INDENT: 2em">persist-key 
</p>
		<p style="TEXT-INDENT: 2em">persist-tun 
</p>
		<p style="TEXT-INDENT: 2em">ca ../keys/ca.crt 
</p>
		<p style="TEXT-INDENT: 2em">cert ../keys/win.crt 
</p>
		<p style="TEXT-INDENT: 2em">key ../keys/win.key 
</p>
		<p style="TEXT-INDENT: 2em">comp-lzo 
</p>
		<p style="TEXT-INDENT: 2em">verb 3 
</p>
		<p style="TEXT-INDENT: 2em">mute 20 
</p>
		<p style="TEXT-INDENT: 2em">从server中生成ca.crt ,win.crt,win.key文件并拷贝到windows上。生成文件的方法请参考章节5.5.1.3。 
</p>
		<p style="TEXT-INDENT: 2em">在命令行运行： 
</p>
		<p style="TEXT-INDENT: 2em">openvpn --config win.ovpn 
</p>
		<p style="TEXT-INDENT: 2em">如果要将openvpn做成服务，运行： 
</p>
		<p style="TEXT-INDENT: 2em">openvpnsev.exe -install 
</p>
		<p style="TEXT-INDENT: 2em">这样就可以在服务中找到openvpn服务了。 
</p>
		<p style="TEXT-INDENT: 2em">当openvpn作为服务时，会到config文件夹寻找ovpn后缀的配置文件。生成的日志会放在log文件夹中。 
</p>
		<p style="TEXT-INDENT: 2em">6补充：BY yazjiyao/yzjboy 
</p>
		<p style="TEXT-INDENT: 2em">如果用openvpn-2.0_rc16.tar.gz在configure的时候遇到下如错误，我们用rpm包安装， 
</p>
		<p style="TEXT-INDENT: 2em">configure: checking for OpenSSL SSL Library and Header files... 
</p>
		<p style="TEXT-INDENT: 2em">checking openssl/ssl.h usability... no 
</p>
		<p style="TEXT-INDENT: 2em">checking openssl/ssl.h presence... no 
</p>
		<p style="TEXT-INDENT: 2em">checking for openssl/ssl.h... no 
</p>
		<p style="TEXT-INDENT: 2em">configure: error: OpenSSL SSL headers not found. 
</p>
		<p style="TEXT-INDENT: 2em">第一步：下载用所需的rpm包： 
</p>
		<p style="TEXT-INDENT: 2em">openssl-0.9.6g-1.i386.rpm(其他版本不可以) 
</p>
		<p style="TEXT-INDENT: 2em">openssl-devel-0.9.6g-1.i386.rpm (其他版本不可以) 
</p>
		<p style="TEXT-INDENT: 2em">lzo-1.08-3.i386.rpm 
</p>
		<p style="TEXT-INDENT: 2em">openvpn-2.0.2-1.i386.rpm 
</p>
		<p style="TEXT-INDENT: 2em">第二步：安装低版本的openssl包，在linux 9系统是openssl-0.9.7a-2.i386.rpm和openssl-devel-0.9.7a-2.i386.rpm （不要删除啊，不然系统会出错严重点可能系统都无法启动），那么我们就通过rpm 的--force参数来安装低版的openssl 
</p>
		<p style="TEXT-INDENT: 2em">rpm -ivh --force openssl-0.9.6g-1.i386.rpm 
</p>
		<p style="TEXT-INDENT: 2em">rpm -ivh --force openssl-devel-0.9.6g-1.i386.rpm 
</p>
		<p style="TEXT-INDENT: 2em">第三步：四个rpm安装完毕后，把client.conf或server.conf放在/etc/openvpn/目录下就行了，其他配置跟上面差不多，这里就不再说明了。 
</p>
		<p style="TEXT-INDENT: 2em">第四步：然后，/etc/rc.d/init.d/openvpn stsart|stop|restart　成功！<br />(e129) </p>
<img src ="http://www.blogjava.net/jelver/aggbug/43456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-04-27 08:58 <a href="http://www.blogjava.net/jelver/articles/43456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开放原代码的 Qmail+Mysql+Jsp 中文电子邮局系统说明</title><link>http://www.blogjava.net/jelver/articles/33186.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 02 Mar 2006 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/33186.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/33186.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/33186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/33186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/33186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开放原代码的 Qmail+Mysql+Jsp 中文电子邮局系统说明2005-08-24 10:00 am作者：linux宝库 (http://www.linuxmine.com)来自：linux宝库 (http://www.linuxmine.com)联系：linuxmine#gmail.com前面介绍了两个国外的程序, 现在介绍一个我正在改进的系统给大家.系统也是建立在 qmail + mysq...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/33186.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/33186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-03-02 13:46 <a href="http://www.blogjava.net/jelver/articles/33186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RedHat9.0 + OpenVPN2.0 +CA实现安全的VPN </title><link>http://www.blogjava.net/jelver/articles/33184.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 02 Mar 2006 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/33184.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/33184.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/33184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/33184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/33184.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: RedHat9.0 + OpenVPN2.0 +CA实现安全的VPN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/33184.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/33184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-03-02 13:38 <a href="http://www.blogjava.net/jelver/articles/33184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用OpenVPN构建安全VPN [OpenVPN + CA] （转）</title><link>http://www.blogjava.net/jelver/articles/33180.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 02 Mar 2006 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/33180.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/33180.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/33180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/33180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/33180.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用OpenVPN构建安全VPN [OpenVPN + CA] （转）一直想写一片关于VPN配置方面的文章，由于时间等等很多问题，一直没有落实，现在终于和大家见面了，由于本人知识有限也并非专业从事这方面工作的，难免有错误，望指正，共同提高。 自从认识VPN以来，一直在找寻一个容易配置、功能强大、支持多系统的VPN程序，由于一直没有找到合适的软件，Linux下的FreeSWAN、OpenBSD Fre...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/33180.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/33180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-03-02 13:23 <a href="http://www.blogjava.net/jelver/articles/33180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>