﻿<?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>C++博客-elva-随笔分类-系统管理</title><link>http://www.cppblog.com/elva/category/4224.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 20 Oct 2010 14:54:25 GMT</lastBuildDate><pubDate>Wed, 20 Oct 2010 14:54:25 GMT</pubDate><ttl>60</ttl><item><title>XP右下角USB图标消失怎么办</title><link>http://www.cppblog.com/elva/archive/2010/10/20/130572.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 20 Oct 2010 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2010/10/20/130572.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/130572.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2010/10/20/130572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/130572.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/130572.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">现象：右下角USB快速删除图标和音量控制图标无法在任务栏显示，而在声音和音频设备属性中&#8220;将音量图标显示在任务栏&#8221;的复选框是被选择状态，还伴随的症状有刚开机任务栏好长时间处于不能使用状态。</p>
<p style="TEXT-INDENT: 2em">&nbsp;描述环境：Windows XP（SP2）</p>
<p style="TEXT-INDENT: 2em">&nbsp;解决方法：开始-运行services.msc，找到服务SSDP Discovery Service，双击，在属性中停止服务，并在启动类型中选择&#8220;禁用&#8221;</p>
<p style="TEXT-INDENT: 2em">&nbsp;重启后故障排除！</p>
<br><br>转自：<br><a href="http://mumu.er.blog.163.com/blog/static/9782226820092411115271/">http://mumu.er.blog.163.com/blog/static/9782226820092411115271/</a>
<img src ="http://www.cppblog.com/elva/aggbug/130572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2010-10-20 15:13 <a href="http://www.cppblog.com/elva/archive/2010/10/20/130572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程登陆提示  "您没有登陆到该会话的权限" 之解决办法</title><link>http://www.cppblog.com/elva/archive/2008/03/12/44303.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 12 Mar 2008 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2008/03/12/44303.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/44303.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2008/03/12/44303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/44303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/44303.html</trackback:ping><description><![CDATA[Windows 2003&nbsp;终端访问的时候提示 "您没有登陆到该会话的权限" 之解决办法<br><br>如果您在终端服务管理中添加了相应的权限而依然无效,那么你可以采用下面的办法.<br><br>1.&nbsp; 在&#8220;添加删除程序中&#8221;---》&#8220;添加删除windows组建&#8221;， 取消掉&#8220;终端服务&#8221;和&#8220;终端服务授权&#8221;，将其删除掉，完成之后，不要选择重新启动.<br><br>2.右击&#8220;我的电脑&#8221;，属性---》远程&nbsp; 勾选&#8220;允许用户远程连接&#8221;<br><br>3.重新启动，OK.<br><br><br>补充：这个问题是由于终端服务的授权引起的。从事件日志中可以看到。 
<img src ="http://www.cppblog.com/elva/aggbug/44303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2008-03-12 21:06 <a href="http://www.cppblog.com/elva/archive/2008/03/12/44303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实例讲解lilo.conf的使用 </title><link>http://www.cppblog.com/elva/archive/2008/02/27/43345.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 27 Feb 2008 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2008/02/27/43345.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/43345.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2008/02/27/43345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/43345.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/43345.html</trackback:ping><description><![CDATA[Linux 加载程序或者说 LILO 是引导Linux 操作系统最常用的程序，本文将以实例详细叙述Lilo 的配置。<br><br>如果你第一次安装Linux ，那么可能就需要用到双重启动。<br>LILO（LInux LOader）就是实现这种功能的最简单但是最<br>具有伸缩性的程序。<br><br>计算机启动时，BIOS 会执行位于硬盘主引导记录（MBR）<br>或者软盘上的一段引导程序，这段程序的作用就是定位并<br>加载操作系统。如果是引导Linux 的话，引导程序会把Linux 内核调入内存。LILO 就是干这种活儿的程序。<br><br>首先遇到LILO，估计应该在你安装Linux 的时候，你会被要求选择LILO 的安装处，是MBR 还是Linux 的根分区。如果你有其他的启动管理程序例如Boot Magic 或者 System Commander 等，并且想使用他们，那么你应该把LILO 安装到Linux 的根分区。如果你选择使用LILO 作为启动管理程序，就可以选择MBR。如阆朐谄舳贝莶问诤耍灿&#937;檬褂肕BR。<br><br>使用LILO 作为启动程序后，机器启动后就会有LILO：的提示符，按下 TAB 键，可以看到可以选择的操作系统列表。输入其中的操作系统标签名就可以启动到对应的操作系统，或者直接输入回车启动到缺省的操作系统。<br><br>我们来看一个LILO 启动的配置文件（/etc/lilo.conf）实例：<br><br>boot = /dev/hda <br>vga = normal <br>read-only <br>prompt <br>default = dos <br>timeout = 30 <br>append="hdc=ide-scsi" <br><br>image = /boot/vmlinuz <br>label = linux <br>root = /dev/hda2 <br>initrd = /boot/initrd <br><br>第一个选项是 boot ，定义了LILO 的安装位置，<br>'/dev/hda' 就是把LILO 安装到 MBR，所以你如果要把<br>LILO 作为启动管理程序，就必须这样写哦！反之，你要把他定位到具体的Linux 根分区例如 /dev/hda3。<br><br>vga 是一个显示启动菜单的配置选项，可以有：<br><br>'normal' （80x25 文本模式）， <br>'extended' （80x50 文本模式）<br>以及 'ask' （提示你选择文本模式）。<br><br>采用read-only 选项时，系统会把根分区挂接为只读方式，<br>推荐采用这个选项，因为 fsck 程序要求文件系统只读。<br>但不用担心你的根分区会不能写入了，相反，系统一旦<br>启动就会把根分区挂接为读写方式。<br><br>prompt 是一个必须放入的选项，否则就没有LILO 的提示符了。但是按住 shift 键可以看到提示。<br><br>default 指定缺省的引导映像，如果没有指定，那么第一个<br>定义的映像就成为缺省值。<br><br>timeout 是提示显示的时间，单位是 0.1 秒。<br><br>append 是一个十分有用的选项，他允许你把额外的参数传递给内核，例子中的 /dev/hdc 是一个可擦写CD驱动器，传递的参数就是用来让内核认识这个驱动器，另外这个选项在个别不认识内存的机器上十分有用。需要注意的是，你需要使用双引号来引入想要传递的参数，不褂玫ヒ拧?<br>LILO 也可以让你手工在LILO 提示符下传递这些参数。例如：<br><br>LILO: linux single <br><br>就是告诉Linux 启动Linux 进入单用户模式。在引导区损坏时，可以从软盘启动，然后指定硬盘的根来修复硬盘引导扇区。<br><br>LILO: linux root=/dev/hda3<br><br>image 指定需要启动的内核映像。每个映像还包括一个 label 选项定义启动时你需要输入的标签。<br><br>还可以为某一个 image 指定口令：<br><br>password='password' <br><br>添加 restricted 选项后，系统就会在你传递额外的参数时提示口令。这就防止有人采用&#8220;linux single&#8221; 来直接引导到提示符，而不需要验证系统口令。这在采用主机托管的服务器上十分有用，如果碰到别有用心的主机托管机房的管理人员时，这一招还是管用的。<br><br>LILO 引导其他类型的操作系统和引导Linux 一样配置，但是更加简单：<br><br>other = /dev/hda3 <br>label = dos <br>table = /dev/hda <br><br>other 指明操作系统所在的分区，同样的和Linux 下的image 一样也需要给定一个标签（label），table 选项指向包含分区表的设备，这个选项必不可少，因为LILO 会从这个这个分区表寻找对应的分区信息，然后把他传递给<br>要启动的操作系统。<br><br>对lilo.conf 的任何改变都要求重新运行 /sbin/lilo ，保证最新的改变能写入分区。<br>另外，如果你升级内核或者重构了 initrd 映像，也需要重新运行 /sbin/lilo。<br><br>运行/sbin/lilo 后，可以看到如下信息：<br><br>Added linux * <br>Added suse <br>Added windows <br><br>表示各种映像已经写入分区，带有 * 的分区是目前的缺省引导分区。<br>可以用 -D 参数改变缺省引导分区：<br><br>/sbin/lilo -D windows <br><br>Added linux <br>Added suse <br>Added windows * <br><br>可以看到缺省分区已经成为 windows了。<br><br>
<img src ="http://www.cppblog.com/elva/aggbug/43345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2008-02-27 16:55 <a href="http://www.cppblog.com/elva/archive/2008/02/27/43345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下Tomcat的安装</title><link>http://www.cppblog.com/elva/archive/2008/02/27/43343.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 27 Feb 2008 08:53:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2008/02/27/43343.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/43343.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2008/02/27/43343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/43343.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/43343.html</trackback:ping><description><![CDATA[<p>Linux下Tomcat的安装</p>
<p>１．下载Tomcat</p>
<p>在下面的地址下载Tomcat的二进制版</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://mirrors.ccs.neu.edu/Apache/dist/jakarta/tomcat-4/binaries/">http://mirrors.ccs.neu.edu/Apache/dist/jakarta/tomcat-4/binaries/</a></p>
<p>即下载文件</p>
<p>&nbsp;&nbsp;&nbsp; tomcat-4.1.18.tar.gz</p>
<p>2. 安装</p>
<p>首先解压缩</p>
<p>&nbsp;&nbsp;&nbsp; gunzip tomcat-4.1.18.tar.gz<br>&nbsp;&nbsp;&nbsp; tar -zxvf tomcat-4.1.18.tar</p>
<p>得到Tomcat的所有文件.然后把它拷贝到你要安装的位置，如</p>
<p>&nbsp;&nbsp;&nbsp; /opt/tomcat-4.1.18/</p>
<p>然后为了方便，你可以把目录名tomcat-4.1.18改为tomcat．</p>
<p>３．设置</p>
<p>设置路经</p>
<p>在/etc/profile文件中加入如下两行</p>
<p>&nbsp;&nbsp;&nbsp; export JAVA_HOME=/opt/jdk1.4<br>&nbsp;&nbsp;&nbsp; export TOMCAT_HOME=/opt/tomcat</p>
<p>在此我们假设Java JDK安装在/opt/jdk1.4目录下．<br>　 <br>激活ROOT</p>
<p>ROOT的缺省设置是没有激活(disabled)．为了激活ROOT，打开文件</p>
<p>&nbsp;&nbsp;&nbsp; tomcat/conf/server.xml</p>
<p>然后把</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="ROOT" debug="0"/&gt;<br>&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>的注释去掉，即去掉&lt;!--和--&gt;．</p>
<p>设置Port<br>Tomcat缺省的Port number是8080．由于Tomcat是一个独立的(Standalone) Web Server，它可以不用Apache而独立工作，所以你可以不安装Apache，这样你可以把Tomcat设置在Port 80．这样你就可以在URL中省略:8080. 打开文件tomcat/conf/server.xml，找到如下的字段：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br>&nbsp;&nbsp;&nbsp; port="8080" ...<br>&nbsp;&nbsp;&nbsp; ... /&gt;</p>
<p>然后把8080改成80即可．</p>
<p>&nbsp; <br>激活Invoker Servlet</p>
<p>即把tomcat/conf/web.xml中的下列字段的注释去掉</p>
<p>&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br>　 </p>
<p>　 <br>创建temp子目录<br>在/opt/tomcat/目录下建立一个temp子目录<br>&nbsp;&nbsp;&nbsp; mkdir temp <br>４．启动Tomcat</p>
<p>安装完后，重新启动计算机，以使JAVA_HOME和TOMCAT_HOME的设置生效．然后到</p>
<p>&nbsp;&nbsp;&nbsp; /opt/tomcat/bin</p>
<p>下，运行命令：</p>
<p>&nbsp;&nbsp;&nbsp; ./startup.sh</p>
<p>正常情况下可以见到如下的信息：</p>
<p>&nbsp;&nbsp;&nbsp; Using CATALINA_BASE:&nbsp;&nbsp; /opt/tomcat<br>&nbsp;&nbsp;&nbsp; Using CATALINA_HOME:&nbsp;&nbsp; /opt/tomcat<br>&nbsp;&nbsp;&nbsp; Using CATALINA_TEMDIR: /opt/tomcat/temp<br>&nbsp;&nbsp;&nbsp; Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /opt/jdk1.4</p>
<p>然后用浏览器打开如下的网页</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost/">http://localhost/</a></p>
<p>或者</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost:8080/">http://localhost:8080/</a>&nbsp;&nbsp;&nbsp;&nbsp; （如果没有把Port number改为８０）</p>
<p>如果你见到Tomcat的网页（index.jsp），证明Tomcat安装成功，并已经启动．</p>
<p>如要关闭Tomcat，在/opt/tomcat/bin下运行下面的命令即可</p>
<p>&nbsp;&nbsp;&nbsp; ./shutdown.sh</p>
<p>5. 注册你自己的项目（Project）</p>
<p>假设你有一个自己的JSP项目，他应该安装在下面的目录下：</p>
<p>&nbsp;&nbsp;&nbsp; /opt/tomcat/webapps/myproject</p>
<p>你必须在tomcat/conf/server.xml中加入一行</p>
<p>&nbsp;&nbsp;&nbsp; &lt;Context path="/myproject" docBase="myproject" debug="0"/&gt;</p>
<p>在浏览器中对应的地址为：</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost/myproject">http://localhost/myproject</a><br></p>
<img src ="http://www.cppblog.com/elva/aggbug/43343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2008-02-27 16:53 <a href="http://www.cppblog.com/elva/archive/2008/02/27/43343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Solaris系统管理</title><link>http://www.cppblog.com/elva/archive/2008/02/27/43342.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 27 Feb 2008 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2008/02/27/43342.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/43342.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2008/02/27/43342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/43342.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/43342.html</trackback:ping><description><![CDATA[<p>dd命令复制硬盘</p>
<p><br>&nbsp;1)确保原盘和目的盘几何特性相同 <br>2)成为超级用户 <br>3)在用主盘的系统中输入touch /reconfigure,有主盘的系统需要/reconfigure文件，以便在重新启动时发现复制盘 <br>4)输入init 0关闭系统 <br>5)将复制盘连接到系统并开机 <br>6)在OK提示符下输入boot <br>7)输入dd if=/dev/dsk/device-name of=/dev/dsk/device-name bs=blocksize (输入文件if是主盘设备，输入文件of是复制盘设备) <br>8)输入fsck /dev/rdsk/device-name (检测新的文件系统) <br>9)输入mount /dev/rdsk/device-name /mnt 加载复制盘的root文件系统。 <br>10)编辑复制盘上的/etc/vfstab文件，指向正确的设备名。 <br>11)输入umount/mnt ，卸载复制盘的root文件系统。 <br>12)输入init 0关闭系统。 <br>13)输入boot diskN -s以单用户模式引导复制盘。 <br>14)输入sys-uconfig恢复配置复制盘，在该盘配置恢复后系统关闭。 <br>15)输入boot diskN 引导复制盘 <br>16)提供相关的系统信息。(HOSTNAME TIMEZONE&nbsp; IP...) <br>17)系统完成，即作为超级用户登录验证系统信息。 </p>
<p>例： <br>#dd if=/dev/dsk/c0t0d0s2 of=/dev/dsk/c0t1d0s2 bs=100k <br>#fsck /dev/rdsk/c0t1d0s2 <br>#mount /dev/rdsk/c0t1d0s2 /mnt <br>#cd /mnt/etc <br>#vi /etc/vfstab <br>#cd /;umount /mnt <br>#init 0 <br>OK boot disk2 -s <br>#sys-unconfig <br>OK boot disk2 -s </p>
<p><br>=================================================================================<br>Solaris网络配置</p>
<p>主机名为sampdt,ip 10.1.1.1 </p>
<p>1 /etc/hosts 主机名解析 <br># <br># Internet host table <br># <br>127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>10.1.1.1&nbsp; sampdt&nbsp; loghost <br>10.1.1.46&nbsp; test.china.org <br>10.1.1.3&nbsp;&nbsp; sidemo <br>2 /etc/hostmane.hme0 网络接口名 <br>sampdt <br>3 /etc/netmasks 网络掩码 <br>4 /etc/inetd.conf 服务项目定义 <br>5 /etc/defaultroot 设定路由 <br>6 /etc/nsswitch.files 设定名字搜索顺序 <br>7 /etc/defaultrouter 缺省路由 </p>
<p>做为DNS服务器 <br>建立/etc/named.boot <br>named.boot格式： <br>directory /etc/namedb <br>cache&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; named.root <br>primary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.127.in-addr.arpa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; named.local <br>primary domain name file </p>
<p>远程访问命令 <br>1. rlogin 在远程机上注册 <br>格式 ： rlogin hostname -l username <br>2. rsh 在远程机上执行一个程序 <br>格式 ： rsh hostname -l username order <br>3. rcp 在远程系统之间拷贝文件 <br>格式 ： rsh host:filename filename&nbsp; </p>
<p>访问鉴别相关文件&nbsp; <br>当rlogin,rsh,rcp命令时，有几个文件对网络安全是很重要的. <br>/etc/passwd <br>如远程系统的口令文件有本地用户的登记项，否则必须使用 [-l] 选项以指明不同用户,可支持root用户。 <br>$home/.rhosts <br>rlogin,rsh,rcp首先检查用户主目录下的.rhosts文件，如主机及用户被列在文件中，则此用户为可信任主机，不需口令即可登录，如远程鉴 <br>别失败，则正常询问口令 <br>/etc/hosts.equiv <br>作用与.rhosts 文件类似，文件中列出用户对于本机为可信任用户，不需口令即可登录（除超级用户） <br>&nbsp; <br>网络监控 <br>1.rusers 标识网络上注册用户 <br>格式：rusers -la <br>2.rup 标识网络上主机 <br>命令格式：rup&nbsp; <br>3.ping 检测主机连接状况 <br>命令格式：ping [hostname|IP address] <br>4.spray ping命令格式为低层协议，spray使用高层协议 <br>命令格式：spray hostname <br>5.netstat 显示与网络有关的各种数据结构 <br>命令格式：netstat -[r| i]n&nbsp; <br>-r :显示路由信息 -i :显示接口信息 <br>6.ifconfig 显示网络接口 <br>命令格式：ifconfig -a <br>其中 lo0: 本机自回馈接口 le0: 10M接口 hme0:100M接口 hme1:第二100M接口 <br>7.netstat 显示与网络有关的各种数据结构 <br>命令格式：netstat -[r| i]n&nbsp; -r :显示路由信息 <br>-i :显示接口信息 <br>8.route 路由设置 <br>命令格式：route [add|delete] 设置网络路由 <br>defaultrouter &lt;-缺省静态路由 <br>9.arp 反响解析 <br>命令格式：arp -[a|s] </p>
<p>================================================================================</p>
<p>Solaris使用技巧 </p>
<p>在从WINDOWS传到UNIX在每行的结尾可能会出现^M <br>解决方法： <br>1、用ASCII模式重传。 <br>2、用vi 中的替换 <br>&nbsp;&nbsp; %s/^M$//&nbsp; &lt;- ^ ctrl+v&nbsp;&nbsp; M ctrl+m <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>文件名为 -filename 如何去删除 <br>rm -- "-filename" <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>fd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/fd fd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br>/proc&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /proc&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br>/dev/dsk/c0t3d0s0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/rdsk/c0t3d0s0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ufs&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br>/dev/dsk/c0t0d0s3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/rdsk/c0t0d0s3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr&nbsp;&nbsp;&nbsp; ufs&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br>/dev/dsk/c0t0d0s0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/rdsk/c0t0d0s0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /download&nbsp; ufs&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp; - <br>/dev/dsk/c0t3d0s1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/rdsk/c0t3d0s1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /export ufs&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp; - <br>#/dev/dsk/c0t0d0s1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br>#swap&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp&nbsp;&nbsp;&nbsp; tmpfs&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp; - </p>
<p>&nbsp;</p>
<p>ls的特殊用法: <br>%ls -R // 显示所有文件包括子目录 <br>%ls * // 同上 <br>%ls -t // 以时间排序来显示 <br>下面的语句可以帮你计算有多少个文件和多少个目录.. <br># ls -l * |grep "^-"|wc -l // to count files&nbsp; <br># ls -l * |grep "^d"|wc -l // to count dir&nbsp; <br>还可以将以上的语句变成script或做个alias <br>只列子目录的方法： <br>ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(Linux) <br>ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris) </p>
<p><br>Grep命令用法 <br>%grep user1 /etc/passwd <br>%grep -i user1 /etc/passwd //不管大小写&nbsp; </p>
<p><br>Alias用法 <br>%alias find1 find . -name '\!*' -print // alias a new find&nbsp; </p>
<p><br>Find命令用法 <br>%find . ctime 0 -print //搜寻今天修改过的所有文件 <br>%find . -name '*.bak' -exec rm {}\ //搜寻加删除 <br>%find . \(-name *.txt -ctime 7\) -print //搜寻7天前修改过的txt文件 <br>利用Find命令改变所有权，想要改变当前目录下所有文件的所有权,可以这样: <br>find . -exec chown OWNER.[GROUP] {} \; (Solaris) <br>find . -exec chown -R OWNER.[GROUP] {} \; (Linux)&nbsp; </p>
<p><br>Cut命令用法 <br>%cut -f field_list file //以逗号或空格来间隔 <br>%cut -d: -f5,7-9 mydata //以冒号来间隔 <br>%cut -s -c35-40 mydata //以列数来间隔-s 不包括头部注释 </p>
<p>列出除了某些类型文件的当前目录所有文件: <br>使用Ksh,用ls !(*.Z)可以显示所有文件，除了*.Z文件。 <br>这个命令在一个目录里有许多种类型的文件的时候很有用。&nbsp; </p>
<p><br>改变unix提示符： <br>%PS1=&#8217;newprompt&#8217; <br>%export PS1 <br>还可以这么做： <br>%set prompt='user1[\!]' // \! 显示命令次数&nbsp; </p>
<p><br>为环境变量增加新PATH路径(不影响老路径)。 <br>%PATH=$PATH:$HOME/bin:/&#8230;/&#8230;/ <br>%export PATH&nbsp; </p>
<p><br>列举与某个主题相关的所有unix命令： <br>%apropos lp //列举与lp(打印机)相关的所有命令&nbsp; </p>
<p><br>查看unix版本号: <br>%uname &#8211;a </p>
<p>UNIX下整个目录拷贝 <br>%cp &#8211;r /home/baoshan/zzy . <br>//将/home/baoshan/zzy整个目录拷贝到当前目录下 </p>
<p><br>UNIX下文件格式与DOS文件格式互换 <br>%unix2dos oldfile newfile <br>%dos2unix oldfile newfile </p>
<p><br>查看UNIX下已经安装的包-package <br>%pkginfo </p>
<p><br>显示某一目录下所有文件size <br>%du &#8211;d /; //显示根目录下所有文件的size大小 </p>
<p><br>文件加密： <br>%crypt passwd &lt; myfile &gt; newfile //compress <br>%rm myfile <br>%crypt passwd &lt; newfile //restore </p>
<p><br>取消^M字符: <br>当你FTP一些DOS文件到unix下时，你经常会看见每行文件后面有个讨 <br>厌的^M 字符,(把 HTML 文件传输到 UNIX 系统可引起回车符转变成&#8220;^M&#8221;字符), <br>有两个简单的方法可以取消它。 <br>用"vi"打开此文件，在Command mode下敲入： <br>:%s/^V^M//g&nbsp; <br>或者，在UNIX SHELL下敲入: <br>sed 's/^V^M//g' foo &gt; foo.new&nbsp; </p>
<p><br>使用nohup命令: <br>如果你想进程在你退出系统后还能执行，可以使用NOHUP命令 <br>如： % nohup tar -cf /dev/tape /home &amp;&nbsp; <br>你退出后再重新登录的话，使用'ps'命令可以看到进程还在执行 </p>
<p><br>查看文件的方法: <br>如果你只想看文件的前5行，可以使用head命令，如： <br>head -5 /etc/passwd&nbsp; <br>如果你想查看文件的后10行，可以使用tail命令，如： <br>tail -10 /etc/passwd&nbsp; <br>你知道怎么查看文件中间一段吗？你可以使用sed命令 如:&nbsp; <br>sed -n '5,10p' /etc/passwd&nbsp; <br>这样你就可以只查看文件的第5行到第10行。 </p>
<p><br>检查磁盘剩余空间： <br>%df &#8211;k <br>%df &#8211;t </p>
<p><br>超级用户修改系统时间： <br>#date MMDDHHMI <br>#date &#8211;u MMDDHHMIYYYY </p>
<p><br>超级用户修改正常用户口令： <br>#passwd &#8211;d user1 //删除用户user1的口令 </p>
<p><br>==================================================================================</p>
<p><br>SUN软件包管理的命令：pkginfo、pkgadd和pkgrm </p>
<p><br>&nbsp;<br>pkginfo&nbsp; <br>查看当前操作系统已经安装的软件包。&nbsp; <br># pkginfo | more&nbsp; <br>&nbsp; <br>application SUNWAxg Solaris XGL 3.3 AnswerBook&nbsp; <br>application SUNWaadm Solaris 7 System Administrator Collection&nbsp; <br>system SUNWab2m Solaris Documentation Server Lookup&nbsp; <br>system SUNWab2r Solaris Documentation Server&nbsp; <br>system SUNWab2s Solaris Documentation Server&nbsp; <br>system SUNWab2u Solaris Documentation Server&nbsp; <br>application SUNWabda Sun Ultra 5/10 Hardware AnswerBook&nbsp; <br>application SUNWabe Solaris 7 User Collection&nbsp; <br>application SUNWabsdk Solaris 7 Software Developer Collection&nbsp; </p>
<p><br>pkginfo [ -d [ device | pathname ] ] [ -l ] pkg_name&nbsp; </p>
<p>参数：&nbsp; <br>－d 软件包所在的设备路径&nbsp; <br>－l 软件包的详细描述&nbsp; <br>pkg_name 软件包的 名字&nbsp; <br>&nbsp;# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product -l SUNWaudio&nbsp; <br>PKGINST: SUNWaudio&nbsp; <br>NAME: Audio applications&nbsp; <br>CATEGORY: system&nbsp; <br>ARCH: sparc&nbsp; <br>VERSION: 3.6.4,REV=1.98.08.13&nbsp; <br>BASEDIR: /&nbsp; <br>VENDOR: Sun Microsystems, Inc.&nbsp; <br>DESC: Audio binaries&nbsp; <br>PSTAMP: dtbuild37s19980813171753&nbsp; <br>HOTLINE: Please contact your local service provider&nbsp; <br>STATUS: spooled&nbsp; <br>FILES: 9 spooled pathnames&nbsp; <br>2 directories&nbsp; <br>3 executables&nbsp; <br>4 package information files&nbsp; <br>700 blocks used (approx)&nbsp; </p>
<p>pkgrm&nbsp; <br>pkgrm用于删除软件包&nbsp; </p>
<p>语法：&nbsp; </p>
<p>pkgrm package_name&nbsp; </p>
<p># pkgrm SUNWaudio&nbsp; <br>The following package is currently installed:&nbsp; <br>SUNWaudio Audio applications&nbsp; <br>(sparc) 3.6.4,REV=1.98.08.13&nbsp; <br>Do you want to remove this package? y&nbsp; <br>## Removing installed package instance&nbsp;&nbsp; <br>## Verifying package dependencies.&nbsp; <br>WARNING:&nbsp; <br>The&nbsp; package depends on the package&nbsp; <br>currently being removed.&nbsp; <br>WARNING:&nbsp; <br>The&nbsp; package depends on the package&nbsp; <br>currently being removed.&nbsp; <br>WARNING:&nbsp; <br>The&nbsp; package depends on the package&nbsp; <br>currently being removed.&nbsp; <br>WARNING:&nbsp; <br>The&nbsp; package depends on the package&nbsp; <br>currently being removed.&nbsp; <br>Dependency checking failed.&nbsp; <br>Do you want to continue with the removal of this package [y,n,?,q]&nbsp; </p>
<p>注：如果某个文件被多个软件包共用，则只当最后的包被删除时才被删除。&nbsp; <br>&nbsp;&nbsp; <br>pkgadd&nbsp; <br>使用pkgadd添加软件包&nbsp; <br>命令格式：&nbsp; <br>pkgadd [ -d [device | pathname ]] pkg_name&nbsp; <br>&nbsp;&nbsp; <br># pkgadd -d /cdrom/cdrom0/s0/Solaris_2.7/Product SUNWaudio&nbsp; <br>Processing package instance&nbsp; from&nbsp; <br>&nbsp; <br>Audio applications&nbsp; <br>(sparc) 3.6.4,REV=1.98.08.13&nbsp; <br>Copyright 1998 Sun Microsystems, Inc. All rights reserved.&nbsp; <br>Using&nbsp; as the package base directory.&nbsp; <br>## Processing package information.&nbsp; <br>## Processing system information.&nbsp; <br>2 package pathnames are already properly installed.&nbsp; <br>## Verifying package dependencies.&nbsp; <br>## Verifying disk space requirements.&nbsp; <br>## Checking for conflicts with packages already installed.&nbsp; <br>## Checking for setuid/setgid programs.&nbsp; <br>This package contains scripts which will be executed with super-user&nbsp; <br>permission during the process of installing this package.&nbsp; <br>Do you want to continue with the installation of&nbsp; [y,n,?] y&nbsp; <br>Installing Audio applications as&nbsp;&nbsp; <br>## Installing part 1 of 1.&nbsp; <br>Installation of&nbsp; was successful. </p>
<p><br>=================================================================================</p>
<p>Solaris性能监控的Swap空间管理 </p>
<p>&nbsp;<br>随着电子商务如火如荼的开展，网站服务器的性能变得尤其重要。一旦服务器的能力不能满足用户的需要，就会对用户的服务大打折扣，那么就需要对服务器进行升级扩容。但是，有些时候只需对服务器进行一些适当的性能调整，便可以越过性能的瓶颈，大大提高服务器的吞吐能力，从而减少服务器升级的费用。&nbsp; </p>
<p>本文介绍了在Solaris平台上Swap（交换）空间的基本概念、实现的原理以及对Swap（交换）空间进行监控的方法和调整的策略。&nbsp; </p>
<p>什么是SWAP（交换）空间&nbsp; </p>
<p>对于一般的Solaris系统管理员来说，很少会接触Swap（交换）空间，在他们看来Swap区只不过是磁盘上的一两个分区或是几个Swap（交换）文件，当系统没有足够的物理内存来处理当前进程的时候，就利用Swap（交换）空间作为虚拟内存的临时存储空间，这种说法从技术角度来说是没有错的，但Solaris在实现Swap时有其非常独特的地方。&nbsp; </p>
<p>SWAP空间作用&nbsp; </p>
<p>众所周知，现代操作系统都实现了&#8220;虚拟内存&#8221;这一技术，不但在功能上突破了物理内存的限制，使程序可以操纵大于实际物理内存的空间，更重要的是&#8220;虚拟内存&#8221;是隔离每个进程的安全保护网，使每个进程不受其他程序的干扰。&nbsp; </p>
<p>Swap空间的作用可简单描述为：当系统的物理内存不够用的时候，就需要将物理内存中的一部分空间释放出来，以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序，这些被释放的空间被临时保存到Swap空间中，等到那些程序要运行时，再从Swap中恢复保存的数据到内存中。这样，系统总是在物理内存不够时，才进行Swap交换。这种现象对于计算机使用者是经常遇到的。&nbsp; </p>
<p>有一点要声明的是，并不是所有从物理内存中交换出来的数据都会被放到Swap中（如果这样的话，Swap会不堪重负），有相当一部分的数据直接交换到文件系统。例如，有的程序会打开一些文件，对文件进行读写(其实每个程序都至少打开一个文件，那就是运行程序本身)，当这些程序的内存空间需要交换出去时，文件部分的数据就没有必要放到Swap空间中了，如果是读文件操作，那么内存数据直接就释放了，不需要交换出来，因为下次需要时，直接从文件系统就能恢复;如果是写文件，只需要将变化的数据保存到文件中，以便恢复。但是那些用malloc(3C)和new函数生成的对象的数据则不同，需要Swap空间，因为它们在文件系统中没有相应的&#8220;储备&#8221;文件，因此被称为&#8220;匿名&#8221;(Anonymous)的内存数据，这类数据还包括堆栈中的一些状态和变量数据等，所以说，Swap空间是&#8220;匿名&#8221;数据的交换空间。&nbsp; </p>
<p>Swap的配置对性能的影响&nbsp; </p>
<p>太多的Swap空间会浪费磁盘的空间，而太少的Swap空间，系统则会发生错误。&nbsp; </p>
<p>如果系统的物理内存用光了，你的系统就会跑得慢，但仍能运行；如果Swap空间用光了，那么系统就会发生错误。例如，Web服务器能根据不同的请求数量衍生出多个服务进程(或线程)，如果Swap空间用完，则服务进程无法进动，通常会出现"application is out of memory"的错误，严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。&nbsp; </p>
<p>通常情况下，Swap空间应大于或等于物理内存的大小，最小不应小于64M，通常Swap空间的大小应是物理内存的2－2.5倍(Solaris 2以上的版本有所变化，见下文)。但根据不同的应用，应有不同的配置：如果是小的桌面系统，只需要较小的Swap空间，而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器会随着访问量的增加，对Swap 空间的要求也会增加，具体配置参见各自服务器产品的说明。&nbsp; </p>
<p>另外，Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘I/O的操作，如果有多个Swap交换区，Swap空间的分配会以轮流的方式操作于所有的Swap，这样会大大均衡I/O的负载，加快Swap交换的速度。如果只有一个交换区，所有的交换操作会使交换区变得很忙，使系统大多数时间位于等待状态，效率很低，用性能监视工具就会发现，此时的CPU并不很忙，而系统却慢，这说明，瓶颈在I/O上，依靠提高CPU的速度是解决不了问题的。&nbsp; </p>
<p>性能监视&nbsp; </p>
<p>Swap空间的分配固然很重要，而系统在运行时的性能监控却更加有价值，通过性能监视工具可以检查系统的各项性能指标，找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。&nbsp; </p>
<p>最常用的是Vmstat命令，在大多数Unix平台下都有此命令，此命令可以查看大多数性能的指标。&nbsp; </p>
<p>另外使用swap －s 也能简单的查看当前swap资源的使用情况。例如：&nbsp; <br>＃ swap －s&nbsp; <br>total: 65896k bytes allocated ＋ 56840k reserved = 122736k used, 1069456k available&nbsp; </p>
<p>能够方便的看出swap空间的已用和未用资源的大小。应该使Swap保持30％的负载以下，才能保证系统的良好性能。&nbsp; </p>
<p>Solaris中Swap的特点&nbsp; </p>
<p>虚拟Swap空间&nbsp; </p>
<p>本来Swap空间就是为虚拟内存服务的，现在Solaris的Swap空间也成为虚拟，这到底是怎么回事呢？&nbsp; </p>
<p>让我们看一个例子就明白了，当在Solaris 2以前版本的Solaris(或其它Unix， 如Linux)上编程时经常会出现一个问题：&nbsp; </p>
<p>假设系统当前还有可用的内存空间为30M，而只剩下10M的Swap空间了，这时，如果有一个进程开始运行并企图执行Malloc(15＊1024＊1024)的命令(分配15M空间)，这个进程会因为这个命令而失败。&nbsp; </p>
<p>为什么呢？系统不是有30M可用的内存空间吗？原因在于：你的Swap空间不足，系统认为你在分配空间以后，没有能力(空间)在发生页面交换时，将这部分数据保存起来，因此认为你没有资格分配这块空间。这不是太不公平了吧！也许这15M空间根本不用交换，当前系统可是还有30M内存空间的富余啊!&nbsp; </p>
<p>还有更不公平的呢?有些大型系统配备了海量的内存，1G或4G，配了这么多内存就是为了避免交换，提高运行速度，可是系统还要为这个系统分配并不需要的Swap空间，占用了大量磁盘资源。&nbsp; </p>
<p>为了弥补这个缺陷，Sun为Solaris 2 以后的版本设计了虚拟Swap空间。所谓虚拟的Swap空间，概念其实很简单，swap空间再也不是单指硬盘的分区或文件。虚拟Swap空间包含两个部分：部分物理内存和传统上的Swap分区。经过适当的配置，可以使系统需要Swap空间时，先使用内存部分的swap空间，如果内存部分的swap空间不够，再使用磁盘部分的Swap空间。这样，也许你硬盘上的Swap空间很少得到使用了，甚至根本不需要Swap分区。&nbsp; </p>
<p>Swap空间与TMPFS文件系统的关系&nbsp; </p>
<p>你知道吗？虚拟Swap空间与 /tmp目录有相当大的关系。Sun在实现&nbsp; <br>/tmp目录时，充分考虑了应用程序运行的效率。许多应用程序，特别是数据库服务都会频繁使用&nbsp; <br>/tmp目录作为临时数据保存区，而Solaris将&nbsp; <br>/tmp目录下的文件都放在内存中而不是硬盘里，这样会大大提高应用程序的效率。&nbsp; </p>
<p>但是/tmp目录的空间是从系统虚拟空间里挤出来的，是虚拟Swap空间的一部分。如果说，你用完了/tmp空间，也就是用完了Swap空间，所以要小心监视系统的/tmp目录的使用情况，千万别用光了，否则系统会瘫痪!下面两点建议作为参考：&nbsp; </p>
<p>1.在Mount /tmp目录时，使用(－o Size)选项来控制/tmp目录的大小。&nbsp; </p>
<p>2.当使用编译器编译文件时，如果不想占用Swap空间，则用TMPDIR环境变量指向另外一个临时目录，而不是/tmp目录。&nbsp; </p>
<p>有关Swap空间操作的系统命令&nbsp; </p>
<p>增加Swap空间&nbsp; </p>
<p>1.成为超级用户 ＄su － root&nbsp; </p>
<p>2.创建Swap文件 ＃mkfile nnn[klblm] filename&nbsp; <br>如：＃mkfile 100m swapfile1&nbsp; </p>
<p>3.激活Swap文件&nbsp; <br>＃/usr/sbin/swap －a /path/filename&nbsp; <br>Swap文件必须以绝对路径来指定，filename指的是上一步创建的文件。&nbsp; </p>
<p>4.现在新加的Swap文件已经起作用了，但系统重新启动以后，并不会记住前几步的操作。因此要在/etc/vfstab文件中记录文件的名字，和Swap类型，如：&nbsp; <br>/path/filename － － Swap － no －&nbsp; </p>
<p>5.效验Swap文件是否加上 /usr/sbin/swap －l&nbsp; </p>
<p>删除多余的Swap空间&nbsp; </p>
<p>1.成为超级用户&nbsp; </p>
<p>2.使用swap －d 命令收回swap空间。&nbsp; <br>＃/usr/sbin/swap －d /path/filename&nbsp; </p>
<p>3.编辑/etc/ufstab文件，去掉此Swap(交换)文件的实体。&nbsp; </p>
<p>4.从文件系统中回收此文件。&nbsp; <br>＃rm swap－filename&nbsp; </p>
<p>5.当然，如果此Swap(交换)空间不是一个文件，而是一个分区，则需创建一个新的文件系统，再挂接到原来的文件系统上。&nbsp; </p>
<p>&nbsp;</p>
<p>==================================================================================</p>
<p>&nbsp;<br>随着电子商务如火如荼的开展，网站服务器的性能变得尤其重要。一旦服务器的能力不能满足用户的需要，就会对用户的服务大打折扣，那么就需要对服务器进行升级扩容。但是，有些时候只需对服务器进行一些适当的性能调整，便可以越过性能的瓶颈，大大提高服务器的吞吐能力，从而减少服务器升级的费用。&nbsp; </p>
<p>本文介绍了在Solaris平台上Swap（交换）空间的基本概念、实现的原理以及对Swap（交换）空间进行监控的方法和调整的策略。&nbsp; </p>
<p>什么是SWAP（交换）空间&nbsp; </p>
<p>对于一般的Solaris系统管理员来说，很少会接触Swap（交换）空间，在他们看来Swap区只不过是磁盘上的一两个分区或是几个Swap（交换）文件，当系统没有足够的物理内存来处理当前进程的时候，就利用Swap（交换）空间作为虚拟内存的临时存储空间，这种说法从技术角度来说是没有错的，但Solaris在实现Swap时有其非常独特的地方。&nbsp; </p>
<p>SWAP空间作用&nbsp; </p>
<p>众所周知，现代操作系统都实现了&#8220;虚拟内存&#8221;这一技术，不但在功能上突破了物理内存的限制，使程序可以操纵大于实际物理内存的空间，更重要的是&#8220;虚拟内存&#8221;是隔离每个进程的安全保护网，使每个进程不受其他程序的干扰。&nbsp; </p>
<p>Swap空间的作用可简单描述为：当系统的物理内存不够用的时候，就需要将物理内存中的一部分空间释放出来，以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序，这些被释放的空间被临时保存到Swap空间中，等到那些程序要运行时，再从Swap中恢复保存的数据到内存中。这样，系统总是在物理内存不够时，才进行Swap交换。这种现象对于计算机使用者是经常遇到的。&nbsp; </p>
<p>有一点要声明的是，并不是所有从物理内存中交换出来的数据都会被放到Swap中（如果这样的话，Swap会不堪重负），有相当一部分的数据直接交换到文件系统。例如，有的程序会打开一些文件，对文件进行读写(其实每个程序都至少打开一个文件，那就是运行程序本身)，当这些程序的内存空间需要交换出去时，文件部分的数据就没有必要放到Swap空间中了，如果是读文件操作，那么内存数据直接就释放了，不需要交换出来，因为下次需要时，直接从文件系统就能恢复;如果是写文件，只需要将变化的数据保存到文件中，以便恢复。但是那些用malloc(3C)和new函数生成的对象的数据则不同，需要Swap空间，因为它们在文件系统中没有相应的&#8220;储备&#8221;文件，因此被称为&#8220;匿名&#8221;(Anonymous)的内存数据，这类数据还包括堆栈中的一些状态和变量数据等，所以说，Swap空间是&#8220;匿名&#8221;数据的交换空间。&nbsp; </p>
<p>Swap的配置对性能的影响&nbsp; </p>
<p>太多的Swap空间会浪费磁盘的空间，而太少的Swap空间，系统则会发生错误。&nbsp; </p>
<p>如果系统的物理内存用光了，你的系统就会跑得慢，但仍能运行；如果Swap空间用光了，那么系统就会发生错误。例如，Web服务器能根据不同的请求数量衍生出多个服务进程(或线程)，如果Swap空间用完，则服务进程无法进动，通常会出现"application is out of memory"的错误，严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。&nbsp; </p>
<p>通常情况下，Swap空间应大于或等于物理内存的大小，最小不应小于64M，通常Swap空间的大小应是物理内存的2－2.5倍(Solaris 2以上的版本有所变化，见下文)。但根据不同的应用，应有不同的配置：如果是小的桌面系统，只需要较小的Swap空间，而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器会随着访问量的增加，对Swap 空间的要求也会增加，具体配置参见各自服务器产品的说明。&nbsp; </p>
<p>另外，Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘I/O的操作，如果有多个Swap交换区，Swap空间的分配会以轮流的方式操作于所有的Swap，这样会大大均衡I/O的负载，加快Swap交换的速度。如果只有一个交换区，所有的交换操作会使交换区变得很忙，使系统大多数时间位于等待状态，效率很低，用性能监视工具就会发现，此时的CPU并不很忙，而系统却慢，这说明，瓶颈在I/O上，依靠提高CPU的速度是解决不了问题的。&nbsp; </p>
<p>性能监视&nbsp; </p>
<p>Swap空间的分配固然很重要，而系统在运行时的性能监控却更加有价值，通过性能监视工具可以检查系统的各项性能指标，找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。&nbsp; </p>
<p>最常用的是Vmstat命令，在大多数Unix平台下都有此命令，此命令可以查看大多数性能的指标。&nbsp; </p>
<p>另外使用swap －s 也能简单的查看当前swap资源的使用情况。例如：&nbsp; <br>＃ swap －s&nbsp; <br>total: 65896k bytes allocated ＋ 56840k reserved = 122736k used, 1069456k available&nbsp; </p>
<p>能够方便的看出swap空间的已用和未用资源的大小。应该使Swap保持30％的负载以下，才能保证系统的良好性能。&nbsp; </p>
<p>Solaris中Swap的特点&nbsp; </p>
<p>虚拟Swap空间&nbsp; </p>
<p>本来Swap空间就是为虚拟内存服务的，现在Solaris的Swap空间也成为虚拟，这到底是怎么回事呢？&nbsp; </p>
<p>让我们看一个例子就明白了，当在Solaris 2以前版本的Solaris(或其它Unix， 如Linux)上编程时经常会出现一个问题：&nbsp; </p>
<p>假设系统当前还有可用的内存空间为30M，而只剩下10M的Swap空间了，这时，如果有一个进程开始运行并企图执行Malloc(15＊1024＊1024)的命令(分配15M空间)，这个进程会因为这个命令而失败。&nbsp; </p>
<p>为什么呢？系统不是有30M可用的内存空间吗？原因在于：你的Swap空间不足，系统认为你在分配空间以后，没有能力(空间)在发生页面交换时，将这部分数据保存起来，因此认为你没有资格分配这块空间。这不是太不公平了吧！也许这15M空间根本不用交换，当前系统可是还有30M内存空间的富余啊!&nbsp; </p>
<p>还有更不公平的呢?有些大型系统配备了海量的内存，1G或4G，配了这么多内存就是为了避免交换，提高运行速度，可是系统还要为这个系统分配并不需要的Swap空间，占用了大量磁盘资源。&nbsp; </p>
<p>为了弥补这个缺陷，Sun为Solaris 2 以后的版本设计了虚拟Swap空间。所谓虚拟的Swap空间，概念其实很简单，swap空间再也不是单指硬盘的分区或文件。虚拟Swap空间包含两个部分：部分物理内存和传统上的Swap分区。经过适当的配置，可以使系统需要Swap空间时，先使用内存部分的swap空间，如果内存部分的swap空间不够，再使用磁盘部分的Swap空间。这样，也许你硬盘上的Swap空间很少得到使用了，甚至根本不需要Swap分区。&nbsp; </p>
<p>Swap空间与TMPFS文件系统的关系&nbsp; </p>
<p>你知道吗？虚拟Swap空间与 /tmp目录有相当大的关系。Sun在实现&nbsp; <br>/tmp目录时，充分考虑了应用程序运行的效率。许多应用程序，特别是数据库服务都会频繁使用&nbsp; <br>/tmp目录作为临时数据保存区，而Solaris将&nbsp; <br>/tmp目录下的文件都放在内存中而不是硬盘里，这样会大大提高应用程序的效率。&nbsp; </p>
<p>但是/tmp目录的空间是从系统虚拟空间里挤出来的，是虚拟Swap空间的一部分。如果说，你用完了/tmp空间，也就是用完了Swap空间，所以要小心监视系统的/tmp目录的使用情况，千万别用光了，否则系统会瘫痪!下面两点建议作为参考：&nbsp; </p>
<p>1.在Mount /tmp目录时，使用(－o Size)选项来控制/tmp目录的大小。&nbsp; </p>
<p>2.当使用编译器编译文件时，如果不想占用Swap空间，则用TMPDIR环境变量指向另外一个临时目录，而不是/tmp目录。&nbsp; </p>
<p>有关Swap空间操作的系统命令&nbsp; </p>
<p>增加Swap空间&nbsp; </p>
<p>1.成为超级用户 ＄su － root&nbsp; </p>
<p>2.创建Swap文件 ＃mkfile nnn[klblm] filename&nbsp; <br>如：＃mkfile 100m swapfile1&nbsp; </p>
<p>3.激活Swap文件&nbsp; <br>＃/usr/sbin/swap －a /path/filename&nbsp; <br>Swap文件必须以绝对路径来指定，filename指的是上一步创建的文件。&nbsp; </p>
<p>4.现在新加的Swap文件已经起作用了，但系统重新启动以后，并不会记住前几步的操作。因此要在/etc/vfstab文件中记录文件的名字，和Swap类型，如：&nbsp; <br>/path/filename － － Swap － no －&nbsp; </p>
<p>5.效验Swap文件是否加上 /usr/sbin/swap －l&nbsp; </p>
<p>删除多余的Swap空间&nbsp; </p>
<p>1.成为超级用户&nbsp; </p>
<p>2.使用swap －d 命令收回swap空间。&nbsp; <br>＃/usr/sbin/swap －d /path/filename&nbsp; </p>
<p>3.编辑/etc/ufstab文件，去掉此Swap(交换)文件的实体。&nbsp; </p>
<p>4.从文件系统中回收此文件。&nbsp; <br>＃rm swap－filename&nbsp; </p>
<p>5.当然，如果此Swap(交换)空间不是一个文件，而是一个分区，则需创建一个新的文件系统，再挂接到原来的文件系统上。&nbsp; </p>
<p>&nbsp;</p>
<p>===============================================================================</p>
<p><br>Solaris如何改变系统运行级别 init </p>
<p><br>系统运行级别有8种，分别为：&nbsp; <br>运行级别 意义&nbsp; <br>0 进入PROM状态（OK状态）&nbsp; <br>1 管理状态（所有文件系统都挂上的单用户模式，禁止其他用户登录）&nbsp; <br>2 多用户模式（没有网络文件共享服务）&nbsp; <br>3 多用户模式（有网络文件共享服务）&nbsp; <br>4 未使用&nbsp; <br>5 退出操作系统并关机&nbsp; <br>6 重新启动机器&nbsp; <br>S,s 单用户模式&nbsp; <br>init&nbsp; <br>init命令用于改变操作系统的运行级别。&nbsp; <br>命令格式：&nbsp; <br>init [ 0123456Ss ]&nbsp; </p>
<p># init 0&nbsp; <br>INIT: New run level: 0&nbsp; <br>The system is coming down. Please wait.&nbsp; <br>System services are now being stopped.&nbsp; <br>Print services stopped.&nbsp; <br>Stopping the syslog service.&nbsp; <br>syslogd: going down on signal 15&nbsp; <br>Aug 14 14:54:30 snmpdx: received signal 15&nbsp; <br>The system is down.&nbsp; <br>syncing file systems... done&nbsp; <br>Program terminated&nbsp; <br>Type help for more information&nbsp; <br>ok&nbsp; </p>
<p><br>shutdown&nbsp; <br>用于改变操作系统运行级别。&nbsp; <br>命令格式：&nbsp; <br>shutdown [ -y ] [ -g seconds ] [ -i init-state ] [message]&nbsp; </p>
<p>选项：&nbsp; <br>y 系统提示时默认回答为YES&nbsp; <br>g 过多长时间改变&nbsp; <br>i 想要的运行级别&nbsp; <br>message 给所有登录用户的信息&nbsp; </p>
<p># shutdown -y -g 0 -i 0&nbsp; <br>Shutdown started. Mon Dec 15 15:13:57 PST 1997&nbsp; <br>Broadcast Message from root (console) on mcmurdo Mon Dec&nbsp; <br>15 15:13:57...&nbsp; <br>THE SYSTEM IS BEING SHUT DOWN NOW ! ! !&nbsp; <br>Log off now or risk your files being damaged&nbsp; <br>Changing to init state 0 - please wait&nbsp; <br>ok&nbsp; </p>
<p><br>halt&nbsp; <br>进入0运行级别&nbsp; <br>poweroff&nbsp; <br>关闭系统并切断电源&nbsp; <br>reboot&nbsp; <br>重新启动系统&nbsp; </p>
<p>&nbsp;</p>
<p>=============================================================================</p>
<p><br>为Sun服务器配置多网卡</p>
<p><br>---- 在网络设计中，在服务器端，为了防止网络传输过载或出于连接多子网的需要，往往要为服务器配置多块网卡。下面介绍如何为Sun服务器来配置新网卡。&nbsp; </p>
<p>---- 一．安装新网卡&nbsp; </p>
<p>---- １．通知操作系统在重新启动时检测新硬件．命令如下：&nbsp; </p>
<p>---- ＃touch /reconfigure&nbsp; </p>
<p>---- ２．关闭服务器和电源．&nbsp; </p>
<p>---- ＃shutdown -i5 -g60 -y&nbsp; </p>
<p>---- 此命令通知连接的客户机，服务器将在60秒（-g60）后关闭；运行级别5（-i5）指明如果硬件支持，就自动关闭服务器电源。&nbsp; </p>
<p>---- ３．物理安装新网卡&nbsp; </p>
<p>---- 小心取下服务器背板上的插板，移去网卡上的托架，安好网卡，再插回原位，最后将网线插入新网卡接口，启动服务器。&nbsp; </p>
<p>---- 二．配置新网卡&nbsp; </p>
<p>---- １．检查新网卡的设备号&nbsp; </p>
<p>---- 服务台器启动后，用以下命令来检查分配给新网卡的设备号，这与把网卡安装在哪个槽上有关；&nbsp; </p>
<p>---- ＃dmesg&nbsp; </p>
<p>---- 此命令执行后将显示所有用户的设备号，如原有网卡的设备号为hme0，新网卡的设备号为hme1等；&nbsp; </p>
<p>---- ２．为新网卡配置主机名和IP地址&nbsp; </p>
<p>---- 在/etc 目录用 vi 建立名为 hostname. 后跟新网卡的设备号（如hostname.hme1）的文件，其内容为绑定所给网卡的主机名；修改/etc/hosts文件，增加一条记录，其前半部分为新网卡的IP地址，加空格后跟新网卡的主机名（hostname.hme1）。&nbsp; </p>
<p>---- 如：&nbsp; </p>
<p>10.10.10.100 sun1　#first network adapter <br>88.1.1.10　sun2　#second network adapter </p>
<p>---- ３．路由功能&nbsp; <br>---- 操作系统将自动开启多网卡的路由功能，若想关闭路由功能，可用如下命令：&nbsp; </p>
<p>---- ＃touch /etc/notrouter&nbsp; </p>
<p>---- 完成以上步骤后重新启动系统可用如下命令使配置生效&nbsp; </p>
<p>---- ＃shutdown -i6 -g60 -y&nbsp; </p>
<p>---- 最后不要忘记修改DNS或NIS服务器，以使网络的其它主机能与之的通讯．&nbsp; </p>
<p>---- 以上方法需要Root用此权限在Sun Enterprise 3000服务器和Salaris 2.6 server操作系统上测试通过．&nbsp; </p>
<p>&nbsp;</p>
<p>==================================================================================</p>
<p><br>solaris中的系统log日志原理分析 </p>
<p>作为攻击者当然要知道系统是如何纪录用户的活动的情况的原理的了，呵呵，不然ip被记下来都不知道！ </p>
<p>呵呵，其实一些人只会到/var/adm/目录里去删日志，那是很笨很笨的做法。 </p>
<p>前段时间在<a href="http://www.unixaid.net/">www.unixaid.net</a>结识了一个外地的系统管理员，谈了谈，深有心得所以我把这些写下来，呵呵。 </p>
<p>unix系统的日志其实是非常复杂和强大的，特别是Solaris系统，因为源码的不公开，所以被蒙上了一层神秘的面纱，我研究分析了一阵子得出的结论和大家分享，我的能力有限，还望大家多多指教。 </p>
<p>负责日志记帐的有两个守护进程：klogd,syslogd，我着重讲这两个进程，当然还有进程记帐进程，就不多介绍了，呵呵，因为基本上所有的系统动作都会被这两个进程监视并纪录，大家如果要编写一些系统程序的话，也会用到syslog这个接口的，呵呵，klogd主要纪录一些系统内核的动作，对攻击者最受影响的是syslogd这个进程.它可以接收访问系统的日志信息并且根据/etc/syslog.conf配置文件中的指令处理 <br>这些信息。因此，任何希望生成日志信息的程序都可向syslog接口呼叫来生成改信息。大部分内部系统工具如邮件和打印系统都是如此生成信息的，许多新增的程序如TCP_wrappers和SSH也是如此工作的。讲到这里，大家有点概念了吧？呵呵 <br>/etc/syslog.conf的格式比较复杂，大家可以参考一下有关书籍，主要是如下语句形式： <br>facility.level　 action <br>facility代表各种服务，level代表syslog的认证级别，action代表的是针对前面信息的处理。大家可以注意action字段，有时候会把信息发送到另外一台机器而不是熟悉的/var/adm/messages的，这下应该知道这个文件的重要性了吧？如果真把日志发到另外一台机器的话，就想办法把那台机器dos掉了，不是它死你是你亡啊，呵呵，有时会发送到/dev/console,/dev/tty1或/dev/lp1等等这样的设备，就是发送到终端啊，呵呵，想想如果那终端作的是系统管理员，你不是很惨？ </p>
<p>现在大家应该知道不是删删/var/adm/messages就了事的吧?呵呵 </p>
<p>好，下面介绍一下solaris的另外一个记帐，就是wtmp和utmp，说明一下大家常见到的wtmpx和utmpx是wtmp和utmp的扩展罢了，大家可以参看wtmp.h，utmp.h里的定义的数据结构，会有写概念，呵呵，在solaris里是通过utmpd，wtmpd这两个进程来进行记帐的，然后通过utmppipe这个管道文件向/var/adm/utmpx这个文件写数据，当然utmpx这个文件不是象messages一样是文本形式的，它是二进制的，只有who,finger命令可以访问，呵呵，大家知道了吧？而last命令是访问wtmpx的。utmp是纪录用户的动态会话用的，而wtmp是纪录用户的登陆与推出的活动的，这就是区别，呵呵。写这篇 </p>
<p>文章只是要提醒大家不要随便删日志，那很傻的，呵呵，最好自己编写一些删日志的小工具，很容易，大家参考一下utmp这个数据结构就可以了，也可以用一个命令来删除messages中的纪录： <br>eagle~# more /var/adm/messages|grep -v 或 &gt;/var/adm/messages <br>很简单不是么？呵呵，当然utmp,wtmp中的纪录就要用程序解决了，也有现成的程序比如： </p>
<p>wtmpdump.c,marry.c,remove.c等等，呵呵都不错的，我主页上有下载，呵呵 <br>attacker.qzone.com </p>
<p>好了，就说这么多了，重申一句，我只是为了让大家进行爱国主义行动的时候注意以下善后的工作，呵呵其中牵涉到的只是非常多，我很多没有详细说明和讲解，希望大家重视日志，参考一下有关资料。 </p>
<p>忘了，这些是solaris中的情况，呵呵，在Linux里又大不一样，呵呵，linux里没有utmpd这个进程，是通过PAM的认证模块来进行记帐的，PAM的资料大家可以参考一下书籍很复杂，说的话会近万字呢，呵呵 </p>
<p><br>=====================================================================================<br>用户登录时，Bash 首先执行全局登录脚本(由 root 建立) /etc/profile，然后在用户起始目录下依次寻找 .bash_profile、.bash_login、.profile 三个文件，执行最先找到的一个。可以用这种办法像 Netware 一样为不同的用户定制运行环境。<br></p>
<img src ="http://www.cppblog.com/elva/aggbug/43342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2008-02-27 16:52 <a href="http://www.cppblog.com/elva/archive/2008/02/27/43342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>autorun.inf完全操作手册(ZT) </title><link>http://www.cppblog.com/elva/archive/2007/12/12/38305.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 12 Dec 2007 05:47:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/12/12/38305.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/38305.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/12/12/38305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/38305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/38305.html</trackback:ping><description><![CDATA[笔者按：鉴于现在网上完全介绍autorun.inf功能的文章不多，笔者在<a href="http://www.microsoft.com/china/homepage/ms.htm" target=_blank><u><font color=#0000ff>微软</font></u></a>官网的一个犄角旮旯找到了一篇autorun.inf的英文使用说明，在翻译和笔者的亲自试验下写出此篇文章。<br><br>======我是分隔线======<br><br>一、autorun.inf是windows下操纵光盘行为的一个文件，需要放在光盘根目录下，部分操作对于硬盘也适用。<br><br>二、autorun.inf是可以被禁止的。方法如下：<br><br>点击开始-&gt;运行，在文本框中输入regedit或者regedt32。依次展开HKEY_CURRENT_USER\Software\<a href="http://www.microsoft.com/" target=_blank><u><font color=#0000ff>Microsoft</font></u></a>\Windows\CurrentVersion\Policies\Exploer，其中的NoDriveTypeAutoRun子键限制着Autorun的作用范围，默认为95（16进制）。<br><br>把禁用的设备标志相加设置为键值就可以完成设置，其中设备标志如下：<br>1:无法识别的设备(建议禁止，默认禁止)<br>2:没有根目录的设备(Drive without root directory未知含义，建议禁止，默认不禁止)<br>4:可移动的设备(U盘，建议禁止，很多病毒利用U盘的Autorun.inf进行传染，默认禁止)<br>8:固定的设备(硬盘，自己看着办，默认不禁止)<br>16:网络设备(web驱动器，建议禁止，默认禁止)<br>32:光盘驱动设备(CDROM，默认不禁止)<br>64:虚拟存储设备(RAM，建议禁止，默认不禁止)<br>128:未指定的其他驱动器(保留位，建议禁止，默认禁止)<br><br>三、autorun.inf文件分为三大部分[AutoRun] [AutoRun.Alpha] [DeviceInstall]。<br><br>[AutoRun]适用于Windows95以上系统与32位以上CD-ROM，必选。<br>[AutoRun.alpha]适用于基于RISC的计算机光驱，适用系统为Windows NT 4.0，可选。<br>[DeviceInstall]适用于Windows XP以上系统，可选。<br><br>四、[AutoRun]部分的命令及其详解。<br><br>1、DefaultIcon<br>含义：<br>指定应用程序的默认图标。<br>格式：<br>DefalutIcon=图标路径名[,序号]<br>参数：<br>图标文件名：应用程序的默认图标路径名，格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时，有时需要使用序号来指定图标。<br>序号：当文件格式为.exe和.dll时，文件可能包括多余一个图标，此时需要使用序号来指定图标，需要注意的是，序号是从0开始的。<br>备注：<br>应用程序的默认图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。<br>图标路径名的默认目录是设备根目录。<br><br>2、Icon<br>含义：<br>指定设备显示图标。<br>格式：<br>Icon=图标路径名[,序号]<br>参数：<br>图标文件名：应用程序的默认图标路径名，格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时，有时需要使用序号来指定图标。<br>序号：当文件格式为.exe和.dll时，文件可能包括多余一个图标，此时需要使用序号来指定图标，需要注意的是，序号是从0开始的。<br>备注：<br>设备显示图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。<br>图标路径名的默认目录是设备根目录。<br>当存在应用程序默认图标(DefaultIcon)时，本命令无效。<br><br>3、Label<br>含义：<br>指定设备描述<br>格式：<br>Label=描述<br>参数：<br>描述：任意文字，可以包括空格。<br>备注：<br>设备描述将在windows explorer核心的驱动显示窗口中替代设备的默认描述\卷标来显示。<br>在非windows explorer核心的驱动显示窗口中（例如右击设备选择属性）显示的仍然是设备的卷标。<br><br>4、Open<br>含义：<br>指定设备启用时运行之命令行。<br>格式：<br>Open=命令行<br>(命令行：程序路径名 [参数])<br>参数：<br>命令行：自动运行的命令行，必须是.exe、.com、.bat文件，其他格式文件可以使用start.exe打开或使用ShellExecute命令。<br>备注：<br>命令行的起始目录是设备根目录和系统的＄Path环境变量。<br><br>5、ShellExecute<br>含义：<br>指定设备启用时执行文件。（操作系统支持未知）<br>格式：<br>ShellExecute=执行文件路径名 [参数]<br>参数：<br>执行文件路径名：设备启用时执行文件路径名。可以是任意格式文件。系统会调用设置的程序执行此文件。<br>参数：参数，根据执行文件作调整<br>备注：<br>命令行的起始目录是设备根目录和系统的＄Path环境变量。<br><br>6、Shell\关键字\Command<br>含义：<br>定义设备右键菜单执行命令行。<br>格式：<br>Shell\关键字\Command=命令行<br>(命令行：程序路径名 [参数])<br>参数：<br>命令行：自动运行的命令行，必须是.exe、.com、.bat文件，其他格式文件可以使用start.exe打开。<br>备注：<br>命令行的起始目录是设备根目录和系统的＄Path环境变量。<br><br>7、Shell\关键字<br>含义：<br>定义设备右键菜单文本。<br>格式：<br>Shell\关键字=文本<br>参数：<br>关键字：用以标记菜单，可以使用任何字符表示，包括空格。<br>文本：在右键菜单中显示的文本。可以使用任何字符，不能存在空格。<br>备注：<br>在同一Autorun.inf文件中，不同右键菜单关键字不同，相同右键菜单关键字相同。<br>右键菜单文本中可以使用&amp;设定加速键，&amp;&amp;输出一个&amp;。<br>Shell\关键字\Command命令Shell\关键字两者缺一不可，顺序无所谓。<br>当不存在Open、ShellExecute与Shell命令时，设备启用时运行第一个设备右键菜单指定命令。<br><br>8、Shell<br>含义：<br>定义设备启用时运行之设备右键命令。<br>格式：<br>Shell=关键字<br>参数：<br>关键字：标记过的菜单关键字<br>备注：<br>Shell指定的关键字可以在AutoRun.inf文件的任意部分。<br>Open\ShellExecute\Shell命令后定义的优先级高。<br><br>四、[AutoRun.alpha]部分的命令简介。<br><br>[AutoRun.alpha]部分的命令与[AutoRun]部分的命令相同，只不过在基于RISC的计算机光驱中，[AutoRun.alpha]优先级高于[AutoRun]<br><br>五、[DeviceInstall]部分命令及其详解。<br><br>DriverPath<br>含义：<br>定义搜索驱动程序目录。<br>格式：<br>DriverPath=驱动程序路径<br>参数：<br>驱动程序路径：驱动程序所在路径，包括其子路径。<br>备注：<br>Windows XP以上支持。<br>仅CD-ROM支持<br>当系统监测到一个新的设备时，会提示用户寻找设备的驱动程序。当用户点选此CD-ROM时，当[DeviceInstall]部分存在时，系统会按照 DriverPath所标记的路径出寻找驱动程序。未标记的路径系统将忽略查找。当[DeviceInstall]部分不存在时，系统将进行完全查找。<br>如果不希望系统在此CD-ROM中搜索驱动程序，只加一行[DeviceInstall]不加DriverPath命令即可。 
<img src ="http://www.cppblog.com/elva/aggbug/38305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-12-12 13:47 <a href="http://www.cppblog.com/elva/archive/2007/12/12/38305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux端口映射</title><link>http://www.cppblog.com/elva/archive/2007/09/20/32527.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 20 Sep 2007 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/09/20/32527.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/32527.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/09/20/32527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/32527.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/32527.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;ssh -C -g <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#49;&#50;&#55;&#46;&#48;&#46;&#48;&#46;&#49;">root@127.0.0.1</a> -L 5000:61.235.139.123:5000<br><br>输入机器的root密码 <br><br>后台执行：ssh -C -f -N -g <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#49;&#50;&#55;&#46;&#48;&#46;&#48;&#46;&#49;">root@127.0.0.1</a> -L 5000:61.235.139.123:5000<br><br><br><br>另：<br>ssh -C -f -N -g -R remote_port:local:port user@remotehost<br>可以将远端服务器一个端口remote_port绑定到本地端口port，其中-C是进行数据压缩，-f是后台操作，只有当提示用户名密码的时候才转向前台。-N是不执行远端命令，在只是端口转发时这条命令很有用处。-g 是允许远端主机连接本地转发端口。-R表明是将远端主机端口映射到本地端口。如果是-L，则是将本地端口映射到远端主机端口。<br><br><br><br>关于ssh端口转发的深入实例
<div class=date>2007-05-13 17:02</div>
<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt>
            <p class=postdate>Thursday, 5. April 2007, 13:44:15</p>
            <br>
            <div class=content>转自geminis@http://floss.zoomquiet.org/data/20070104103806/<br><br><br>ssh的三个强大的端口转发命令：<br>
            <pre>ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
            ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
            ssh -C -f -N -g -D listen_port user@Tunnel_Host
            </pre>
            <br><br>-f Fork into background after authentication.<br>后台认证用户/密码，通常和-N连用，不用登录到远程主机。<br><br>-p port Connect to this port. Server must be on the same port.<br>被登录的ssd服务器的sshd服务端口。<br><br>-L port:host:hostport<br>将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport<br><br>-R port:host:hostport<br>将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport<br><br>-D port<br>指定一个本地机器 &#8220;动态的'&#8217; 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.<br><br>-C Enable compression.<br>压缩数据传输。<br><br>-N Do not execute a shell or command.<br>不执行脚本或命令，通常与-f连用。<br><br>-g Allow remote hosts to connect to forwarded ports.<br>在-L/-R/-D参数中，允许远程主机连接到建立的转发的端口，如果不加这个参数，只允许本地主机建立连接。注：这个参数我在实践中似乎始终不起作用，参见III)</div>
            <br><br><br><br><br>&nbsp;<strong>iptables实现端口转发的过程</strong><br>设我们有一台计算机,有两块网卡,eth0连外网,ip为1.2.3.4;eth1连内网,ip为192.168.0.1.现在需要把发往地址1.2.3.4的81端口的ip包转发到ip地址192.168.0.2的8180端口,设置如下: <br>1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180 <br>2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1 <br><br>真实的传输过程如下所示: <br>假设某客户机的ip地址为6.7.8.9,它使用本机的1080端口连接1.2.3.4的81端口,发出的ip包源地址为6.7.8.9,源端口为1080,目的地址为1.2.3.4,目的端口为81. <br>主机1.2.3.4接收到这个包后,根据nat表的第一条规则,将该ip包的目的地址更该为192.168.0.2,目的端口更该为8180,同时在连接跟踪表中创建一个条目,(可从/proc/net/ip_conntrack文件中看到),然后发送到路由模块,通过查路由表,确定该ip包应发送到eth1接口.在向eth1接口发送该ip包之前,根据nat表的第二条规则,如果该ip包来自同一子网,则将该ip包的源地址更该为192.168.0.1,同时更新该连接跟踪表中的相应条目,然后送到eth1接口发出. <br><br>此时连接跟踪表中有一项: <br><br>连接进入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81 <br>连接返回: src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080 <br>是否使用: use=1 <br><br>而从192.168.0.2发回的ip包,源端口为8180,目的地址为6.7.8.9,目的端口为1080,主机1.2.3.4的TCP/IP栈接收到该ip包后,由核心查找连接跟踪表中的连接返回栏目中是否有同样源和目的地址和端口的匹配项,找到后,根据条目中的记录将ip包的源地址由192.168.0.2更该为1.2.3.4, 源端口由8180更该为81,保持目的端口号1080不变.这样服务器的返回包就可以正确的返回发起连接的客户机,通讯就这样开始. <br><br>还有一点, 在filter表中还应该允许从eth0连接192.168.0.2地址的8180端口: <br>iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp --dport 8180 -i eth0 -j ACCEPT<br><br><br>
            <div class=postTitle><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.cppblog.com/nenlong/archive/2007/03/13/19692.html"><font color=#1a8bc8>linux上端口映射的详细步骤</font></a> </div>
            <p>&nbsp;&nbsp;&nbsp; 在网上搜索好多，对linux配置端口映射都不够详细，我在RedHat8.0上用iptables配置了端口映射，讲述详细的配置过程，供大家参考。<br>【实现功能】<br>&nbsp; PC A是<br>&nbsp; eth0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 172.18.10.212&nbsp; 内网<br>&nbsp; eth1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 219.239.xx.xx&nbsp; 外网</p>
            <p>&nbsp; PC B是&nbsp;&nbsp;&nbsp; 172.18.10.205&nbsp; 内网</p>
            <p>&nbsp; A的8080端口映射到B的80端口</p>
            <p>【步骤】<br>1、 首先应该做的是/etc/sysctl.conf配置文件的&nbsp; net.ipv4.ip_forward = 1 默认是0<br>&nbsp;&nbsp;&nbsp; 这样允许iptalbes FORWARD。<br>2、 在/etc/rc.d/init.d目录下有iptables 文件，使用格式如下<br>&nbsp;&nbsp;&nbsp; Usage: ./iptables {start|stop|restart|condrestart|status|panic|save}<br>&nbsp;&nbsp;&nbsp; 相当与service iptables {....}<br>&nbsp;&nbsp;&nbsp; 把iptables 服务停止，清除以前的规则，存盘<br>&nbsp;&nbsp;&nbsp; 到/etc/rc.d/init.d目录下，运行<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ./iptables stop<br>&nbsp;&nbsp;&nbsp; iptalbes -F<br>&nbsp;&nbsp;&nbsp; iptalbes -X<br>&nbsp;&nbsp;&nbsp; iptalbes -Z<br>&nbsp;&nbsp;&nbsp; ./iptables save<br>3、 重新配置规则<br>iptables -t nat -A PREROUTING -d 219.239.xx.xx -p tcp --dport 8080 -j DNAT --to-destination 172.18.10.205:80<br>iptables -t nat -A POSTROUTING -d 172.18.10.205 -p tcp --dport 80 -j SNAT --to 172.18.10.212<br>iptables -A FORWARD -o eth0 -d 172.18.10.205 -p tcp --dport 80 -j ACCEPT<br>iptables -A FORWARD -i eth0 -s 172.18.10.205 -p tcp --sport 80 -j ACCEPT<br>DNAT SNAT 的请参考帮助，这里不再陈述。<br>4、 新的规则存盘<br>&nbsp;&nbsp;&nbsp; ./iptables save<br>&nbsp;&nbsp;&nbsp; 规则存盘后在/etc/sysconfig/iptables这个文件里面，若你对这个文件很熟悉<br>&nbsp;&nbsp;&nbsp; 直接修改这里的内容也等于命令行方式输入规则。<br>5、 启动iptables 服务<br>&nbsp;&nbsp;&nbsp; ./iptables start<br>&nbsp;&nbsp;&nbsp; 在/proc/net/ip_conntrack文件里有包的流向，如下面<br>&nbsp;&nbsp; tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 53 TIME_WAIT src=221.122.59.2 dst=219.239.xx.xx sport=7958 dport=8080 packets=9 bytes=1753 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src=172.18.10.205 dst=172.18.10.212 sport=80 dport=7958 packets=9 bytes=5777 [ASSURED] use=1<br></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/elva/aggbug/32527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-09-20 10:30 <a href="http://www.cppblog.com/elva/archive/2007/09/20/32527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jdk1.6+Tomcat6+Apache2+MySql5 安装(Windows版)</title><link>http://www.cppblog.com/elva/archive/2007/09/13/32153.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 13 Sep 2007 10:21:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/09/13/32153.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/32153.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/09/13/32153.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/32153.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/32153.html</trackback:ping><description><![CDATA[<p><strong>Jdk1.6+Tomcat6+Apache2+MySql5 安装(Windows版)</strong></p>
<p>软件下载：<br>1, j2se jdk1.6 <br><a href="http://java.sun.com/javase/downloads/index.jsp"><u><font color=#0000ff>http://java.sun.com/javase/downloads/index.jsp</font></u></a></p>
<p>2, Tomcat 6<br><a href="http://archive.apache.org/dist/tomcat/tomcat-6/"><u><font color=#0000ff>http://archive.apache.org/dist/tomcat/tomcat-6/</font></u></a></p>
<p>3, Apache 2.2.4<br><a href="http://archive.apache.org/dist/httpd/"><u><font color=#0000ff>http://archive.apache.org/dist/httpd/</font></u></a></p>
<p>4, MySql5.0.27<br><a href="http://dev.mysql.com/downloads/mysql/"><u><font color=#0000ff>http://dev.mysql.com/downloads/mysql/</font></u></a></p>
<p>5, mysql-connector-java-5.0.5<br><a href="http://dev.mysql.com/downloads/connector/j/"><u><font color=#0000ff>http://dev.mysql.com/downloads/connector/j/</font></u></a></p>
<p>6,mod_jk-apache-2.2.4.so<br><a href="http://tomcat.apache.org/download-connectors.cgi"><u><font color=#0000ff>http://tomcat.apache.org/download-connectors.cgi</font></u></a></p>
<p>&nbsp;可以根据需要下载最新的或最稳定的版本，如果部署线上环境可以用稳定的版本，<br>&nbsp;但是如果在学习和调试，可以尝试新的版本，因为事物是向前发展的。</p>
<p>&nbsp;一般网页程序或服务，如果不是非常巨大，用Tomcat做Web server就可以了，没有必要整合apache+tomcat。<br>&nbsp;当然如果确实有必要，比如要把静态文件(html,图片等)和Java文件分别由apache和tomcat来解析，<br>&nbsp;或者为了学习、测试、以及还要运行php等等情况，可以考虑整合下apache + tomcat。</p>
<p>&nbsp;如果只需要JSP网页服务器的，只要安装JDK+Tomcat就可以了，安装过程非常简单。</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://jiarry.blogchina.com/"><u><font color=#0000ff>http://jiarry.blogchina.com/</font></u></a></p>
<p>================================================================================</p>
<p><strong><font size=3>安装过程</font></strong><br>本篇安装介绍下载文档:<br><a href="http://jarryli.googlepages.com/Jdk1.6Tomcat6Apache2MySql5Install.txt"><u><font color=#0000ff>http://jarryli.googlepages.com/Jdk1.6Tomcat6Apache2MySql5Install.txt</font></u></a> </p>
<p><br><strong>Step 1 JDK安装</strong><br>----------------------------------------------------------------------------------<br>&nbsp;1.1 点击jdk-6u1-windows-i586-p.exe文件安装Jdk，选择目录(假使E:\jdk1.6)，一路回车，安装完成<br>&nbsp;1.2 添加JAVA环境变量(我的电脑右键-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>CLASSPATH</strong>&nbsp;&nbsp; 设置变量值&nbsp; <font color=#0000ff>.;%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>JAVA_HOME</strong>&nbsp;&nbsp; 设置变量值&nbsp; <font color=#0000ff>E:/jdk1.6<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> PATH</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置变量值&nbsp; <font color=#0000ff>.;%JAVA_HOME%;%JAVA_HOME%/bin;<br></font>&nbsp;1.3 在DOS命令行状态下测试Java是否成功安装，敲入java -version可以查看版本<br>&nbsp;&nbsp;&nbsp;&nbsp; c:\&gt;java -version<br>&nbsp;&nbsp;&nbsp;&nbsp; java version "1.6.0_01"<br>&nbsp;&nbsp;&nbsp;&nbsp; Java(TM) SE Runtime Environment (build 1.6.0_01-b06)<br>&nbsp;&nbsp;&nbsp;&nbsp; Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)<br>&nbsp;1.4 测试HelloWorld，新建一个HelloWorld.java的文件，内容如下<br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>public</strong> class <strong>HelloWorld </strong>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>public</strong> static void main(String arg[]) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>&nbsp; System.out.println("Hello World!这是Java测试程序，说明你已成功安装了Java -- Jarry！");&nbsp; <br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; 在命令行输入<strong>javac</strong> HelloWorld.java，编译一下，然后再执行<strong>java</strong> HelloWorld，就能看到正常的输出了。<br>&nbsp;&nbsp;&nbsp;&nbsp; 出现错误一般是环境变量或大小写等有问题，仔细检查就没有问题了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><br><strong>Step 2 Tomcat安装<br></strong>----------------------------------------------------------------------------------<br>&nbsp;2.1 点击apache-tomcat-6.0.10.exe文件安装Tomcat，选择目录(假使E:\Tomcat6)安装完成后<br>&nbsp;2.2 添加TOMCAT环境变量(我的电脑右键-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>TOMCAT_HOME</strong>&nbsp;&nbsp; 设置变量值&nbsp; <font color=#0000ff>E:/Tomcat6</font><br>&nbsp;2.3 从程序菜单或是服务里启动Tomcat，然后你在浏览器输入<a href="http://localhost:8080/"><u><font color=#0000ff>http://localhost:8080/</font></u></a>就可以看到Tomcat欢迎页面。<br>&nbsp;&nbsp;&nbsp;&nbsp; 正常情况下都会成功，如果启动失败，请检查jakarta_service_日期.log日志，通过它一般可以解决问题。<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; 比如出现类似报错：<br>&nbsp;&nbsp;&nbsp;&nbsp; [947&nbsp; prunsrv.c] [error] Failed creating java<br>&nbsp;&nbsp;&nbsp;&nbsp; 看一下系统盘windows/system32/下是否丢失msvcr71.dll文件，如果缺失，需要从别的机器拷贝一个过来。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 打开浏览器 进入<a href="http://localhost:8080/"><u><font color=#0000ff>http://localhost:8080/</font></u></a>，当看见Tomcat小猫的图标了，这样表示安装成功。</p>
<p><strong><font color=#ff0000>&nbsp;&nbsp;&nbsp; 至此，JSP服务器就搭建完成了，用于学习和测试没有问题了，如果想要更高级的配置，可以往下面继续看。</font></strong></p>
<p>&nbsp;Tomcat 6与Tomcat 5或者之前版本不一样的就是，首页没有显示具体的版本，猫猫也变大了些。<br>&nbsp;没有admin管理页面了，admin在Tomcat 5.5来默认都没有了，不过可以下载admin包。<br>&nbsp;而Tomcat 6.0没有看见admin包，不过这并不要紧，一般情况下也不需要admin包。</p>
<p>&nbsp;Tomcat 6.0默认也没有开启servlet、禁止目录浏览。这需要去conf/下配置web.xml文件。<br>&nbsp;修改listings为true即可以目录浏览，<br><br><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;listings&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- false disable listings --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- &lt;param-value&gt;false&lt;/param-value&gt;--&gt;</font><font color=#999999>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <!--
false</param-value>
--></font></p>
<p>&nbsp; 开启servlet直接访问功能，把这两段注释打开。<br>&nbsp; <br><font color=#0000ff>&nbsp;&nbsp;&nbsp; &lt;servlet&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.catalina.servlets.InvokerServlet<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-class&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;0&lt;/param-value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;</font></p>
<p><font color=#0000ff>&nbsp; &lt;servlet-mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</font><font color=#0000ff></url-pattern /><br>&nbsp;&nbsp;&nbsp;&nbsp;</servlet-mapping /></font><br>&nbsp;<br>&nbsp;2.4 部署一个新项目testApp，去conf/下配置server.xml<br>&nbsp;<br><font color=#0000ff>&nbsp;&nbsp;&nbsp; &lt;Context path="/testApp" reloadable="true" docBase="E:/testApp"<br>&nbsp;&nbsp;&nbsp; workDir="E:\Tomcat6\webapps\testApp\work" /&gt; <br></font>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; docBase是你程序的目录，假设放在E根目录下<br>&nbsp;&nbsp;&nbsp; 这样新项目testApp就建立了，重启Tomcat，访问<a href="http://127.0.0.1:8080/testApp"><u><font color=#0000ff>http://127.0.0.1:8080/testApp</font></u></a>就可以看到你的目录了</p>
<p>&nbsp;2.5 mysql-java连接器<br>&nbsp;&nbsp;&nbsp;&nbsp; 下载mysql java连接器，可以根据需要选择3.x 或是 5.x，之前我们通用3.x，现在可以试一下5.x<br>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://dev.mysql.com/downloads/connector/j/"><u><font color=#0000ff>http://dev.mysql.com/downloads/connector/j/</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp; 将下载下来得 mysql-connector-java-5.0.5-bin.jar 文件放到 Tomcat6\commom\lib目录下<br>&nbsp;&nbsp;&nbsp;&nbsp; (Tomcat 6.0 修改了目录结构，原common/lib下的所有jar包现在统一到lib目录下，<br>&nbsp;&nbsp;&nbsp;&nbsp; 因此你需要将你原来放置在common/lib目录下的jar改到lib目录下。)</p>
<p>&nbsp;2.6 JDBC数据库连接池，假设已经安装了mysql(没安装就先安装)，并且建立了数据库test, 修改conf/下server.xml</p>
<p><font color=#0000ff>&nbsp; &lt;Context path="/testApp" docBase="E:/testApp"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="5" reloadable="true" crossContext="true"&nbsp; workDir=""&gt;<br>&nbsp; &lt;Resource&nbsp; name="jdbc/testApp"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container"<br>&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="100" maxIdle="30" maxWait="10000"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="root" password=""<br>&nbsp;&nbsp;&nbsp; driverClassName="com.mysql.jdbc.Driver"<br>&nbsp;&nbsp;&nbsp; url="jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8"/&gt;<br>&nbsp;&lt;/Context&gt;&nbsp;</context /></font><br>&nbsp;<br>&nbsp; 对应输入端口和用户名密码，还要注意&amp;要写成&amp;amp; characterEncoding和useUnicode用来解决中文乱码问题，地版本配置会略有不同。<br>&nbsp;<br>&nbsp;&nbsp; 另外，在项目文件夹/webapps/testApp/WEB-INF/下新建web.xml文件，添加下面的内容<br>&nbsp;&nbsp; <br>&nbsp;&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a>"<br>&nbsp;&nbsp;&nbsp; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance"><u><font color=#0000ff>http://www.w3.org/2001/XMLSchema-instance</font></u></a>"<br>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a><br><a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</font></u></a>"<br>&nbsp;&nbsp;&nbsp; version="2.4"&gt;<br>&nbsp; &lt;description&gt;MySQL Test App&lt;/description&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;resource-ref&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;DB Connection&lt;/description&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-ref-name&gt;jdbc/testApp&lt;/res-ref-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-auth&gt;Container&lt;/res-auth&gt;<br>&nbsp; &lt;/resource-ref&gt;<br>&nbsp; &lt;/web-app&gt; </web-app /><br>&nbsp; <br>&nbsp;2.7&nbsp; 建立JDBCtest.jsp，可以来检测JDBC连接是否成功<br><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp; <!--page <br />&nbsp;&nbsp;&nbsp;&nbsp; language="java"<br />&nbsp;&nbsp;&nbsp;&nbsp; contentType="text/html; charset=GB2312"<br />&nbsp;&nbsp;&nbsp;&nbsp; pageEncoding="GB2312"<br />&nbsp;&nbsp;&nbsp;&nbsp;--><br>&nbsp;&lt;%@ page <br>&nbsp;&nbsp;&nbsp;&nbsp; language="java"<br>&nbsp;&nbsp;&nbsp;&nbsp; contentType="text/html; charset=GB2312"<br>&nbsp;&nbsp;&nbsp;&nbsp; pageEncoding="GB2312"<br>&nbsp;&nbsp;&nbsp;&nbsp; %&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;%@ page import="java.sql.*"%&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;%@ page import="javax.sql.*"%&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;%@ page import="javax.naming.*"%&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; 数据库连接池测试结果：<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;% <br>&nbsp;&nbsp;&nbsp;&nbsp; out.println("JDBC驱动检查&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Class.forName("com.mysql.jdbc.Driver");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("检查成功！&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; } catch (ClassNotFoundException cnfe) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("JDBC驱动创建失败！&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;cnfe.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;br&gt;环境命名空间检查&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&amp;nbs;&nbsp; &nbsp;javax.naming.Context ctx = new javax.naming.InitialContext();<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;javax.naming.Context envContext =<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;(javax.naming.Context) ctx.lookup("java:/comp/env");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("检查成功！&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("&lt;br&gt;查找数据源&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;org.apache.commons.dbcp.BasicDataSource ds =<br>&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;(org.apache.commons.dbcp.BasicDataSource) envContext.lookup("jdbc/testApp");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/testApp");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("查找成功!&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; // 早期版本可以用BasicDataSource接收以获得比DataSource接口更具体的信息，便于错误查找<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("&lt;br&gt;检查数据库&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Connection conn = ds.getConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;DatabaseMetaData metaData = conn.getMetaData();<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ResultSet rs = metaData.getCatalogs();<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;while (rs.next())<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println(rs.getString(1) + "&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;rs.close();<br>&nbsp;&nbsp;&nbsp;&nbsp; } catch (javax.naming.NamingException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("环境变量上下文创建失败！&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp; } catch (SQLException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;out.println("数据库操作执行失败！&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; %&gt;<br></font><br>&nbsp; 2.7 servlet映射，如果你不想通过/servlet/com.file.web.HelloWorld来访问你的程序，添加映射是好方法,<br>&nbsp; 修改项目文件夹WEB-INFO/web.xml文件，添加<br>&nbsp; <br><font color=#0000ff>&nbsp; &lt;servlet&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.file.web.HelloWorld&lt;/servlet-class&gt;<br>&nbsp; &lt;/servlet&gt;<br>&nbsp; &lt;servlet-mapping&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/hello&lt;/url-pattern&gt;<br>&nbsp; &lt;/servlet-mapping&gt;</font><font color=#0000ff></servlet-mapping /><br></font>&nbsp; <br>&nbsp; 这样就可以通过/hello来访问servlet程序。</p>
<p><br><strong>Setp 3&nbsp; Apache安装</strong><br>----------------------------------------------------------------------------------</p>
<p>&nbsp;3.1 Apache 一路回车安装即可<br>&nbsp;&nbsp;&nbsp;&nbsp; 敲入<a href="http://127.0.0.1/"><u><font color=#0000ff>http://127.0.0.1/</font></u></a>就能看见欢迎界面。<br>&nbsp;&nbsp;&nbsp;&nbsp; 欢迎界面与2.0.x或者1.x不一样，你看见的将是 It works!, 而不再是，您能看见这个页面，说明您已经成功安装之类的。</p>
<p>&nbsp;3.2 连接apache 与 tomcat，通过apache来解析静态文件，tomcat解析java确实不错。<br>&nbsp;&nbsp;&nbsp;&nbsp; 如果你打算只用Tomcat做服务器的话，那就不用安装apache了，实际上Tomcat作为服务器也非常好。<br>&nbsp;&nbsp;&nbsp;&nbsp; 当然了，整合apahce + tomcat 也不麻烦，主要是下载mod_jk.so文件，和增加两个配置文件。<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 3.2.1 下载 mod_jk.so (<a href="http://mirrors.ibiblio.org/pub/mirrors/apache/tomcat/tomcat-connectors/"><u><font color=#0000ff>http://mirrors.ibiblio.org/pub/mirrors/apache/tomcat/tomcat-connectors/</font></u></a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参阅文章： <a href="http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html"><u><font color=#0000ff>http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://tomcat.apache.org/connectors-doc/reference/workers.html"><u><font color=#0000ff>http://tomcat.apache.org/connectors-doc/reference/workers.html</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里使用的是jk而不是jk2，下载得到的是mod_jk-apache-2.2.4.so文件，可以根据apache版本来选择合适的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将下载文件copy至Apache的modules目录下<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 3.2.2 新建workers.properties,便于管理就在apache2/conf下，加入下面内容<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkAutoAlias E:/Tomcat6/webapps</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=#666666>#tomcat绝对路径webapps目录</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkMount /*.jsp ajp13<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /*/servlet/ ajp13</font>&nbsp;&nbsp; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 3.2.3&nbsp; 新建mod_jk.conf文件，也放在apache2/conf目录下，加入下面内容<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#000000># Load mod_jk module<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff> LoadModule jk_module modules/mod_jk-apache-2.2.4.so</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#999999> </font><font color=#000000># Where to find workers.properties</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkWorkersFile conf/workers.properties<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color=#000000>#对刚新建的workers.properties文件<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Where to put jk logs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkLogFile logs/mod_jk.log<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set the jk log level [debug/error/info]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff> JkLogLevel info<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Select the log format<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # JkOptions indicate to send SSL KEY SIZE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff> JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # JkRequestLogFormat set the request format<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff> JkRequestLogFormat "%w %V %T"<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Send servlet for context /examples to worker named ajp13<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkMount /servlet/* ajp13</font>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Send JSPs for context /examples to worker named ajp13<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkMount /*.jsp ajp13 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /*.do ajp13 <br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nsp; # 增加testApp目录，把改目录下所有文件全部交给tomcat处理，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # JkMount /testApp/* ajp13<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 也可以根据需要来设定，比如只把testApp/*.jsp交给tomcat处理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>JkMount /testApp/*.jsp ajp13<br></font>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; 3.2.4&nbsp; 修改conf/httpd.conf文件，把mod_jk.conf文件include装载进来，添加如下 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>Include conf/mod_jk.conf<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #jarry add for contact to tomcat&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给apache添加testApp目录<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #添加testApp<br><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alias&nbsp; /testApp&nbsp; "e:/testApp"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory&nbsp; "e:/testApp"&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options&nbsp; Indexes&nbsp; MultiViews&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Options Indexes FollowSymLinks Includes ExecCGI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order&nbsp; allow,deny&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow&nbsp; from&nbsp; all&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </directory /><br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重启apache，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<a href="http://172.18.101.17:8080/testApp/"><u><font color=#0000ff>http://172.18.101.17:8080/testApp/</font></u></a>或<a href="http://172.18.101.17/testApp/"><u><font color=#0000ff>http://172.18.101.17/testApp/</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 都能访问Tomcat项目，说明整合成功。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也可以建立一个jsp文件来测试，如果不用8080端口能直接解析，那说明整合成功。&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果出现问题注意查看，apache/logs/下的log文件，仔细对照，一般就能解决啦。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong>Setp 4 MySql安装</strong><br>----------------------------------------------------------------------------------</p>
<p>&nbsp;MySql与Apache一样，一路回车即可。<br>&nbsp;MySql5.x 与 4.x 安装区别不大，5.x会提示配置Mysql一些属性，诸如语言啦。根据需要设定即可。<br>&nbsp;启动通过mysql/bin下键入 mysql -uroot -p或者从菜单栏MySQL Command Line Client进入到命令行。<br>&nbsp;&nbsp;&nbsp;&nbsp; 4.1 从程序菜单找到mysql命令行或在mysql/bin目录下，执行mysql -uroot -p密码就可以进入mysql<br>&nbsp;&nbsp;&nbsp;&nbsp; Enter password:<br><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp; Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br>&nbsp;&nbsp;&nbsp;&nbsp; Your MySQL connection id is 42 to server version: 5.0.27-community-nt<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt;</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 4.2 敲入 \s 可以查看MySql版本信息<br>&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; \s<br>&nbsp;&nbsp;&nbsp;&nbsp; --------------<br>&nbsp;&nbsp;&nbsp;&nbsp; <font style="BACKGROUND-COLOR: #0000ff"><font style="BACKGROUND-COLOR: #ffffff">E:\MySQL5\bin\mysql.exe&nbsp; Ver 14.12 Distrib 5.0.27, for Win32 (ia32)</font><br></font><font style="BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; Connection id:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 42<br>&nbsp;&nbsp;&nbsp;&nbsp; Current database:<br>&nbsp;&nbsp;&nbsp;&nbsp; Current user:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><a href="mailto:root@localhost"><font style="BACKGROUND-COLOR: #ffffff" color=#0000ff><u>root@localhost</u></font></a><br><font style="BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp; SSL:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Not in use<br>&nbsp;&nbsp;&nbsp;&nbsp; Using delimiter:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp;&nbsp; Server version:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.0.27-community-nt<br>&nbsp;&nbsp;&nbsp;&nbsp; Protocol version:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br>&nbsp;&nbsp;&nbsp;&nbsp; Connection:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost via TCP/IP<br>&nbsp;&nbsp;&nbsp;&nbsp; Server characterset:&nbsp;&nbsp;&nbsp; gbk<br>&nbsp;&nbsp;&nbsp;&nbsp; Db&nbsp;&nbsp;&nbsp;&nbsp; characterset:&nbsp;&nbsp;&nbsp; gbk<br>&nbsp;&nbsp;&nbsp;&nbsp; Client characterset:&nbsp;&nbsp;&nbsp; gbk<br>&nbsp;&nbsp;&nbsp;&nbsp; Conn.&nbsp; characterset:&nbsp;&nbsp;&nbsp; gbk<br>&nbsp;&nbsp;&nbsp;&nbsp; TCP port:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3306<br>&nbsp;&nbsp;&nbsp;&nbsp; Uptime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 days 4 hours 52 min 9 sec<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; Threads: 2&nbsp; Questions: 382&nbsp; Slow queries: 0&nbsp; Opens: 28&nbsp; Flush tables: 1&nbsp; Open ta<br>&nbsp;&nbsp;&nbsp;&nbsp; bles: 0&nbsp; Queries per second avg: 0.002</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; <br>================================================================================</p>
<p>总的说来，安装新版与老版本差不多，只是一时兼容性不是太好。<br>不过用来开发和学习，使用新版还是挺不错的，可以学到新的方法和东西，新版本整合更容易些<br>而如果部署对外的服务，还是采用经典或是成熟的版本吧。:)<br>安装过程要多看apache官方网站的文档，<a href="http://tomcat.apache.org/tomcat-6.0-doc/"><u><font color=#0000ff>http://tomcat.apache.org/tomcat-6.0-doc/</font></u></a><br>通过文档就可以详细了解安装步骤了，出错了也好检查，版本不同配置等难免会有一点不同，这是看官方文档就很重要了。</p>
<p>参考资料：<br><a href="http://jiarry.bokee.com/2375369.html"><u><font color=#0000ff><strong>安装Jdk+Tomcat+Apache+PHP+MySql (Windows) 详细介绍</strong> </font></u></a><a href="http://jiarry.bokee.com/2375369.html"><u><font color=#0000ff>http://jiarry.bokee.com/2375369.html</font></u></a><br><a href="http://jiarry.bokee.com/2425368.html"><u><font color=#0000ff><strong>安装Jdk+Tomcat+Apache+PHP+MySql (Linux) 详细介绍</strong> </font></u></a><a href="http://jiarry.bokee.com/2425368.html"><u><font color=#0000ff>http://jiarry.bokee.com/2425368.html</font></u></a><br><br>下载文档：<br><a href="http://jarryli.googlepages.com/Jdk1.6Tomcat6Apache2MySql5Install.txt"><u><font color=#0000ff>http://jarryli.googlepages.com/Jdk1.6Tomcat6Apache2MySql5Install.txt</font></u></a></p>
<p><u><font color=#0000ff></font></u></p>
<u><font color=#0000ff>
<hr>
</font></u>
<p>
<p><strong><font size=3><font size=2>补充一下之前的一些记录：</font><br></font><br></strong>配置apache与php与tomcat，让apache支持php与jsp,servlet，这样强壮的apache做为web server，专门来运行强大的网站，所以文件放到E:\Apache2\htdocs下即可。当然tomcat还是可以当独用的，只不过用来开发或测试还是不错的，如果作为网站来发布还是用apache这种方式好。这下，apache才发挥出功效来。呵呵。<br><br>下载并正确装apache好jdk、tomcat，开始整合apahce+tomcat<br>修改apache/conf/下的httpd.conf文件添加如下内容，以支持jsp与php</p>
<p>1，拷贝mod_jk_2.0.46.dll文件到E:\Apache2\modules目录下<br>2，修改http.conf文件，添加如下jk模块内容<br>LoadModule jk_module modules/mod_jk_2.0.46.dll <br># 或者.so文件<br>#装载mod_jk模块，用于处理Apache和Tomcat的连接<br>JkWorkersFile "E:/Apache/conf/workers.properties"<br>#指出mod_jk模块工作所需要的工作文件workers.properties的位置<br>JkMount /servlet/* ajp13 <br>JkMount /*.jsp ajp13 <br>#将所有servlet 和jsp请求通过Ajp13的协议送给Tomcat，让Tomcat来处理<br>JkLogFile "E:/Apache/logs/mod_jk2.log" <br>JkLogLevel info</p>
<p>3，支持php，根据目录修改文件。<br>#jarry added for php<br>ScriptAlias /php/ "E:/php/"<br>AddType application/x-httpd-php .php<br>Action application/x-httpd-php "/php/php-cgi.exe"<br>AddType application/x-httpd-php .php .phtml .php3 .php4 <br>AddType application/x-httpd-php-source .phps</p>
<p>4，将以下内容存成workers.properties文件至apache/conf下。<br># Created by JarryLi<br># Copyright all reserved!<br># Email:jiarry@hotmail.com</p>
<p>&nbsp;# 根据现行安装目录做修改<br>workers.tomcat_home=E:\Tomcat5<br>&nbsp;#让mod_jk模块知道Tomcat<br>workers.java_home=E:\j2sdk1.4<br>&nbsp;#让mod_jk模块知道j2sdk<br>ps=\<br>worker.list=ajp13<br>&nbsp;#模块版本,现有ajp14了,不要修改<br>worker.ajp13.port=8009<br>&nbsp;#工作端口,若没占用则不用修改<br>worker.ajp13.host=localhost<br>&nbsp;#本机,若上面的Apache主机不为localhost,作相应修改<br>worker.ajp13.type=ajp13<br>&nbsp;#类型<br>worker.ajp13.lbfactor=1<br>&nbsp;#代理数,不用修改<br>&nbsp; <br>5，访问apache下的一个目录，试试访问php文件和jsp，如果均能访问表示正确。如有问题，请仔细检查log文件，一般都能解决。<br><br>或者<br></p>
<hr>
<p><br>1、exe安装<br>2、选择目录<br>3、修改http.conf文件，增加目录<br>4、开启目录浏览，其他index文件浏览等功能<br>5、添加php </p>
<p>
<p># 加载tomcat支持 added by jarry<br># LoadModule jk2_module modules/mod_jk2.so</p>
<p># For PHP 5 do something like this:<br># LoadModule php5_module "E:/PHP/php5apache2.dll"<br># AddType application/x-httpd-php .php .php3 .phps<br># configure the path to php.ini<br># PHPIniDir "E:/php"</p>
<p># 添加php #修改为自己安装目录下的php*.exe。 added by jarry<br>ScriptAlias /php/ "E:/PHP/"<br>Action application/x-httpd-php "/php/php-cgi.exe" <br>#Action application/x-httpd-php "/php/php.exe" <br>AddType application/x-httpd-php .php .phtml .php3<br>AddType application/x-httpd-php-source .phps </p>
<p>6、整合apache+tomcat</p>
<p>[Sat Jun 23 20:01:23 2007] [error] [client 127.0.0.1] client denied by server configuration: E:/PHP/php-cgi.exe, referer: <a href="http://127.0.0.1/phpApp/"><u><font color=#0000ff>http://127.0.0.1/phpApp/</font></u></a><br>&lt;Directory /&gt;<br>&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>#&nbsp;&nbsp;&nbsp; Order deny,allow<br>#&nbsp;&nbsp;&nbsp; Deny from all<br>&nbsp;&nbsp;&nbsp; Order allow,deny<br>&nbsp;&nbsp;&nbsp; Allow from all <br>&nbsp;&nbsp;&nbsp; Satisfy all<br>&lt;/Directory&gt;</p>
<p>把配置文件改改，是apache 2.2.2的配置文件问题。</p>
<p>7、php.ini可以放在windows或者php根目录下</p>
<p>8、添加虚拟目录<br>Alias /ut&nbsp;&nbsp;&nbsp; "E:/ut"<br>&lt;Directory "E:/ut"&gt;<br>&nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>&nbsp;&nbsp;&nbsp; Order allow,deny<br>&nbsp;&nbsp;&nbsp; Allow from all<br>&lt;/Directory&gt;</p>
<p>
<p>10、整合apache2.2.2 + tomcat 5.5.16 mod_jk-apache-2.x.x.so</p>
<p>10.1<br>下载 mod_jk-apache-2.2.4.so，把so文件放到apahce modules文件夹下<br><a href="http://mirrors.ibiblio.org/pub/mirrors/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.23/"><u><font color=#0000ff>http://mirrors.ibiblio.org/pub/mirrors/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.23/</font></u></a></p>
<p>10.2<br>apahce/con/下新建 workers.properties 文件<br>添加内容<br>workers.tomcat_home=E:/Tomcat5.5&nbsp;&nbsp;&nbsp;&nbsp; #让mod_jk模块知道Tomcat的位置<br>workers.java_home=E:/Jdk1.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #让mod_jk模块知道jre的位置<br>ps=\<br>worker.list=ajp13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #模块版本<br>worker.ajp13.port=8009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #工作端口,若没占用则不用修改<br>worker.ajp13.host=localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #本机,若上面的Apache主机不为localhost,作相应修改<br>worker.ajp13.type=ajp13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #类型<br>worker.ajp13.lbfactor=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #代理数,不用修改</p>
<p>或者是</p>
<p>JkAutoAlias E:/Tomcat5.5/webapps&nbsp;&nbsp;&nbsp;&nbsp; #tomcat的绝对路径webapps目录<br>JkMount /*.jsp ajp13<br>JkMount /*/servlet/ ajp13 </p>
<p>
<p>10.3<br>修改apahce/con/httpd.conf，在末尾添加, 或者把这些放入到新建mod_jk.conf文件里，在通过httpd.conf装载进来(Include conf/mod_jk.conf)。</p>
<p>LoadModule jk_module modules/mod_jk-apache-2.2.4.so<br>#此处mod_jk的文件为你下载的文件<br>JkWorkersFile "E:/Apache2/conf/workers.properties"<br>#指定tomcat监听配置文件地址<br>JkLogFile "E:/Apache2/conf/mod_jk.log"<br># 记录日志的工作级别<br>JkLogLevel info<br># 将所有servlet 和jsp请求通过Ajp13的协议送给Tomcat，让Tomcat来处理<br>JkMount /*/servlet/* ajp13<br>JkMount /servlet/* ajp13 <br>JkMount /*.jsp ajp13</p>
<p>
<p>10.4 <br>在testApp目录下分别建立php,jsp,serlvet文件测试，如果都能解析说明成功。<br><br><br>另附：<br>Tomcat6在JDK1.6下不能启动<br>以及Tomcat5在JDK1.6下不能启动的解决：<br></p>
<p class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id=blogtitle__fks_hwtCCWU_qFQXL_3LOc9waw==>Tomcat6在JDK1.6下不能启动的解决[转]</p>
<div class=g_blog_list>
<div class="g_t_center g_c_pdin g_p_center c07 content" id=blogtext__fks_hwtCCWU_qFQXL_3LOc9waw== style="WIDTH: 760px">&nbsp;&nbsp;&nbsp; 今天在一台新的机器上, 装开发环境, 下载了新的JDK1.6和Tomcat6. 安装完毕后, Tomcat无法正常启动,<br>在Tomcat的Logs中发现有以下错误:<br><br>&nbsp;javajni.c] [error] The specified module could not be found.<br><br>到底是怎么回事呢?<br>因为是模块加载的问题, 所以拿出从systeminternals下载的FileMon来监测到底是哪个东西加载失败了.<br>启动FileMon, <br>然后, 尝试启动Tomcat, 结果当然是失败了.<br>然后在FileMon中过滤一下, 很快就找到了一个错误: MSVCR71.dll, 这个动态链接库加载失败.<br>经过搜索后发现在JDK的bin目录下有这个文件.<br>将其复制到system32目录下, 然后再启动Tomcat, 果然成功了!<br><br>这个问题可能和jakarta_servic加载动态链接库的LOAD_WITH_ALTERED_PATH选项有关. </div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/elva/aggbug/32153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-09-13 18:21 <a href="http://www.cppblog.com/elva/archive/2007/09/13/32153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ssh配置权威指南</title><link>http://www.cppblog.com/elva/archive/2007/09/06/31679.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 06 Sep 2007 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/09/06/31679.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/31679.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/09/06/31679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/31679.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/31679.html</trackback:ping><description><![CDATA[第一章 SSH简介<br>ssh(secure shell)是一种通用，功能强大的基于软件的网络安全解决方案，计算机每次向网络<br>发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行<br>解密。整个过程都是透明的。它使用了现代的安全加密算法，足以胜任大型公司的任务繁重<br>的应用程序的要求。<br><br>SSH协议内容涉及认证AUTHENTICATION,加密ENCRYPTION,和网络上传输数据的完整<br>性INTEGRITY。<br><br>SSH特性概述<br>1、远程登录<br>$ ssh -l root host.example.com<br>2、安全文件传输<br>$ scp myfile metoo@secondacount.com<br>3、安全执行远程命令，能确保传输的数据安全。<br>4、密钥和代理<br>基于密钥的认证方法不用记住多个帐号密码。<br>5、访问控制，能授权别人访问自已帐号。<br>6、端口转发<br>$ ssh -L 3002:localhost:119 xxx.xxx.com<br><br>相关安全技术<br>rsh命令族，rsh,rlogin and rcp。连接不加密，认证模型十分脆弱。<br>PGP加密程序。它是基于文件的。<br>Kerberos认证系统，用于网络可能被监视，而且计算机不是中心控制的环境。基于麻省理工<br>学院的Athena项目。它SSH不是，SSH是轻量级的，容易部署。Kerberos使用前必须构建<br>一些重要基础。<br>IPSEC，Internet安全协议。<br>SRP，安全远程密码协议，是Stanford大学开发的。是一种专用的认证协议。<br>SSL,安全套接字。<br>stunnel，是一种SSL工具，它为UNIX环境现有的基于TCP的服务（POP,IMAP等）增加<br>SSL保护，而不用修改服务器源程序。<br><br>第二章 SSH客户端的基本用法<br>最常用功能，1、经由安全连接登录到远程计算机。2、通过安全连接在计算机间拷贝文件。<br><br>当你第一次连接SSH服务器时，出现问答时要回答&#8220;yes&#8221;，把已知名主机的密钥的公共部<br>分拷贝一份存在本地。之后你每次连接这台服务器，就用这个公钥来验证远程主机。最好是<br>能在首次连接前就能获得这个公钥，否则第一次连接服务器时你可能已受到中间人攻击。<br><br>使用密钥进行认证，SSH支持公钥认证，可以使用加密密钥，密钥比密码更安全。<br>SSH证书使用一对密钥，一个私钥，一个公钥，私钥只保存你独有的一些秘密信息。SSH<br>用其向服务器证明自已的身份。公钥是公开的，可以随便将其放入SSH服务器上自已的帐<br>号中,在认证时，进行私钥和公钥协商，如果匹配，那么身份就得以证明，认证就成功。<br><br>在使用公钥认证以前，首先要进行一些设置：<br>1、需要一对密钥，还需要使用一个口令来保护自已的私钥。<br>使用ssh-keygen程序生成一对密钥。如果不存在SSH目录，程序为自动创建本地SSH目录<br>~/.ssh，并将所生成的密钥分成两个文件存储，公有部份identity.pub,私有部分identity，或<br>id_dsa_1024_a,id_dsa_1024_a.pub(ssh2)。<br>2、需要在SSH服务器上安装自已的公钥。<br>通过配置SSH目录中的一个文件实现，对于SSH1 AND OPENSSH来说该文件是<br>~/.ssh/authorized_keys。对SSH2来说是~/.ssh2/authorization。OPENSSH中的SSH-2连接自<br>3.0版本起也一同使用authorized_keys文件。3.0版本前的使用authorized_keys2。把用户本<br>地机器生成identity.pub文件内容加入其中。对SSH2来说，用户需编辑两个文件，一个客<br>户端一个在服务器端，<br>在客户端，要创建或编辑文件~/.ssh2/identification并在其中插入一行，说明自已的私钥文件<br>名： IdKey id_dsa_1024_a.<br>在服务器端，要创建或编辑文件~/.ssh2/authorization，该文件包含有公钥信息，每行一个，<br>但和SSH1的authorized_keys文件不同（authorized_keys中包含有公钥的拷贝），authorization<br>中只给出公钥文件名：Key id_dsa_1024_a.pub。最后，把这个文件从本地机器上拷贝到服务<br>器~/.ssh2中。为安全起见，要确保ssh目录的安全，只有所有者才有权写入。如果远程用户<br>的SSH配置文件的权限设置不当，服务器可能会拒绝进行认证。<br><br>公钥认证比密码认证更安全，因为：<br>1、 公钥认证需要两个加密部份（磁盘上的identify文件和用户头脑中的口令），入侵都必须<br>2、 具备两种条件才行。密码认证只需要一个部份，那就是密码，它可能更容易被窃取。<br>3、 在公钥认证中，口令和密钥都不用发给远程主机，只要把前面讨论的认证者发给远程主<br>4、 机就可以了，因此，并没有秘密信息传出客户端。<br>3、机器生成的密钥是不可能猜测出来的，而人生成的密码容易受到字典攻击。<br>通过禁用密码认证并只允许使用密钥认证能极大提高主机的安全性。<br><br>如果要修改密钥<br>如果已经生成一个密钥对，并把公钥拷贝到多个SSH服务器上了，用户有一天决定修改自<br>已的身份，因为再运行ssh-keygen。这样，就会覆盖identify and identify.pub文件，用户之<br>前的公钥就没用了，必须把新公钥再次拷贝到各个服务器上。这是很头疼的，所以建议：<br>1、 不能局限于仅仅使用一个密钥对，可随意生一此密钥对，将其保存在不同的文件中，并<br>2、 将其用作不同的用途。<br>3、 如果只是想修改口令，就不必重新生成一个密钥对，ssh-keygen有一个命令行选项可以<br>4、 替换现有的密钥口令。ssh1 and openssh是-p,对于ssh2是-e。这样，因为私钥没变，所以<br>5、 公钥依然不效，中需使用新口令对私钥进行解密就可以了。<br><br>ssh代理<br>它可以把私钥保存在内存中，为认证提供服务，不用重复输入密码。直到用户退出为止。代<br>理程序是ssh-agent。可手工运行也可编辑~/.login 或~/.xsession来自动运行。<br>$ ssh-agent $SHELL 其中SHELL是用户登录shell的环境变量。运行该命令后，打开另外<br>一个shell，在这个shell中可以访问代理。<br>接着用ssh-add命令装入私钥。这样，使用ssh and scp命令就不用再提醒输入口令了。口令<br>装入内存中。如果用户正运行x window系统，并设置了DISPLAY环境变量，而标准输入<br>不是终端，那么ssh-add就使用一个图形化X程序ssh-askpass来读取口令。要强制ssh-add<br>使用X来读取口令，请在命令行中输入ssh-add &lt; /dev/null。<br>-l 参数显示内存中的密钥<br>-d 参数从代理中删除密钥 $ ssh-add -d ~/.ssh/id_xxx.pub<br>-D 是删除所有密钥<br>-t 对加载的密钥设置超时时间，超时代理将自动卸载密钥。<br>-L -U 对代理进行加锁和解锁，当你离开计算机而不想退出登录时有用。<br><br><br>代理转发<br>可能通过代理转发功能，可以用SCP把文件从远程SSH服务器上拷贝到第三方SSH主机上。<br>条件是你在第三方SSH主机上必须有一个帐号。具体操作是这样的：<br>1、 在本地主机上运行命令：# scp pat@shell.isp.com:print-me <br>2、 psmith@other.host.net:other-print-me<br>2、这个scp进程与本地代理进行联系，并让用户和shell.isp.com进行认证。<br>3、自动在shell.isp.com上执行第二个scp，用来把文件拷贝到other.host.net主机上。<br>3、 由于启用了代理转发（SSH1 AND SSH2默认是打开的，openssh默认是关闭的），因此<br>4、 shell.isp.com上的SSH服务器就充当一个代理。<br>5、第二个scp进程通过联系shell.isp.com上的代理试图让用户和other.host.net进行认证。<br>5、 shell.isp.net上ssh服务器秘密与用户的本地代理进行通信，从而构建出一个认证者来提<br>6、 供用户的证书并将其传回服务器。<br>7、服务器为第二个scp进程验证用户的身份，other.host.net上的认证获得成功。<br>8、开始拷贝文件。<br>由于代理转发不会把私钥发送到远程主机上，而是把认证返回第一台机进行处理，因此密钥<br>是安全的。<br><br>不用密码或口令进行连接方式<br>1、使用代理的公钥认证。<br>2、可信主机认证。<br>3、Kerberos认证。<br>在后文中将会讨论这些方式的优缺点。<br><br>sftp<br>它是在SSH上的一个独立文件传输工具，操作与ftp类似，可以在一个会话中调用多个命令<br>进行文件拷贝和处理，而scp每次调用时都要打开一个会话。sftp不区分ascii and binary传<br>输模式，只使用二进制模式，因此，如果使用它在windows and unix之间拷贝ascii文件，<br>那么就不能正确转换行结束符。<br><br>第三章 SSH内幕<br>SSH协议的主要特性和优点：<br>1、 使用强加密技术来保证数据的私密性。端到端通信用随机密钥进行加密，随机密钥为会<br>话进行安全协商，会话结束后被丢弃。支持的算法有ARCFOUR,Blowfish,DES,IDEA,3DES等。<br>2、通信完整性，确保通信不会被修改。SSH-2基于MD5 AND SHA-1的加密hash算法。<br>3、认证，即发送者和接收者的身份证明。客户机和服务器双向认证。<br>4、授权，即对账号进行访问控制。<br>5、使用转发或隧道技术对其它基于tcp/ip的会话进行加密。支持三种转发，tcp端口转发，<br>X转发，代理转发。<br><br>SSH可以防止的攻击<br>1、网络窃听，SSH通信是加密的，即使截获会话内容，也不能将其解密。<br>2、名字服务和IP伪装，SSH通过加密验证服务器主机身份可避免这类风险。<br>3、连接劫持，SSH的完整性检测负责确定会话在传输过程是否被修改，如果被修改过，就<br>关闭连接。<br>4、 中间人攻击，SSH利用两种方法防止这种攻击，第一种是服务器主机认证。除非攻击者<br>已经成功攻击了服务器主机，获得服务器的私有主机密钥。第二种是限制使用容易受到<br>这种攻击的认证方法，密码认证容易受到中间人攻击，而公钥和基于主机的/RhostsRSA<br>则对中间人攻击可以免疫。<br>5、插入攻击，这种攻击可以客户和服务器之间发送的正文数据流之间插入任意数据。ssh1 <br>1.2.25后和openssh的所有版本都专门进行了设计，来检测并防止这种攻击。这种检测程序<br>增大了插入攻击的难度，但是并不能完全防止。ssh2使用强加密完整性检测手段来防止这个<br>问题。可以用3DES算法来防止这种攻击。<br><br>SSH不能防止的攻击<br>1、 密码崩溃，密码认证是一种脆弱的认证形式，尽量使用公钥认证方式。如果必须要密码<br>认证，可考虑使用S/Key之类的一次性密码机制。<br>2、 IP AND TCP攻击，由于SSH是在TCP之上进行操作的，因此容易受到针对TCP和IP<br>缺陷而发起的攻击。SYN flood,TCP不同步和TCP劫持等。只能通过更低层的防护措施<br>来保护。<br>3、流量分析。<br>4、隐秘通道。<br>5、粗心大意。安全是一个过程，而不是一个产品，不要认为装上SSH就安全了。<br><br>第四章 SSH的安装和编译时配置<br><br>第五章 服务器范围的配置<br>sshd可以在三个层次上进行配置，第一层次是上面的安装和编译时配置；第二层次是本章的<br>服务器范围配置；第三层次是每账号配置（第八章），前者是服务器编译时就指定了包含哪<br>些特定功能，不包含哪些功能，后者则是由终端用户来修改自已账号所使用的服务器的行为。<br><br>以普通用户身份运行SSH服务器<br>1、得到管理员许可。<br>2、生成一个主机密钥。<br>$ ssh-keygen -N '' -b 1024 -f ~/myserver/hostkey 生成hostkey and hostkey.pub两个文件<br>3、选择端口号。 要选择大于或等1024的端口，因为只有超级用户才有权使用小于<br>1024的端口 。<br>4、创建服务器配置文件(可选) 可创建自已的配置文件，否则，服务就使用内建的特性或使<br>用服务器范围的配置文件。<br>启动服务器方式：$ sshd -h ~/myserver/hostkey -p 2345 -f ~/myserver/config<br>由普通用户运行的服务器有一些缺点：<br>1、由于不是由root的uid下运行，因此只能连接到用户自已的账号上。<br>2、它需手工调用，不能自启动。<br>3、 日志用户没权看到，因为服务器把它写到syslog日志系统中，但可用调试模式运行服务<br>4、 器，这样信息就显示在终端机上。<br><br>服务器配置文件<br>SSH1 AND OPENSSH的配置文件通常是/etc/sshd_config,而SSH2的配置文件通常是<br>/etc/ssh2/sshd2_config。<br><br>以非缺省的配置文件来调用sshd，可以使用命令 -f 选项。$ sshd -f /usr/local/ssh/my_config。<br><br>以*号作为标号的语名都会被sshd忽略。<br><br>修改完配置后，修改不会马上影响到服务器，可重启服务器或发送SIGHUP信号。$ kill -HUP <br>`cat /etc/sshd.pid`<br><br>如果在命令行改动了配置，用SIGHUP信号重启服务器不能覆盖命令行的配置，它的优先<br>级高。<br><br>主机密钥，sshd主机密钥向SSH客户端唯一地标识SSH服务器。主机密钥保存在一对文件<br>中，一个文件包含私钥，一个文件包含公钥。对于SSH1 AND OPENSSH，它是<br>/etc/ssh_host_key。文件位置可用HostKey关键字修改 HostKey /usr/local/ssh/key。服务器的<br>公钥保存在.pub文件中。<br>OPENSSH服务器有一个SSH-2的主机密钥，缺省是在/etc/ssh_host_dsa_key。其位置可用<br>HostDsaKey /usr/local/openssh/key2修改。<br><br>对于SSH2，如果服务器是由超级用户运行，缺省私钥文件是/etc/ssh2/hostkey。如果是其它<br>用户运行，则在~/.ssh2/hostkey。可用HostKeyFile /etc/local/ssh/key修改。公钥是hostkey.pub<br>文件，可用publicHostKeyFile关键字修改。<br><br>可以用命令行选项指定私钥文件：$ sshd -h /usr/local/ssh/key。<br><br>随机数种子文件<br>如果用户的系统中有一个随机位源，如/dev/urandom，那么OPENSSH就不能创建随机数种<br>子文件。<br><br>服务器配置文件<br>通常是/etc/sshd_config /etc/ssh2/ssh2_config，可以用-f 选项重新指定其配置文件。可用于一<br>台机器运行多个sshd的情况。<br><br>每账号认证文件。~/.ssh/authorized_keys 。 <br><br><br>文件权限<br>由于配置文件的权限设置错误，会降低系统的安全性，所以可以设置StrictModes YES/NO<br>关键字，对sshd的重要文件和目录的权限进行检查，如果检查失败，服务器就拒绝对该用<br>户的SSH连接。<br><br>在多宿主主机上，使用ListenAddress xxx.xxx.xxx.xxx来限制SSH只监听一个网络接口。<br><br>空闲连接时间，IdleTimeout xx 如果是0代表什么都不做，保持连接。否则，超时就断开连<br>接，可以用s,m,h,d,w表示。<br><br>KeepAlive YES/NO 可以断开失效的连接，比如客户端崩溃。<br><br>失败的登录<br>LogingGraceTime 60 限定用户必须在60秒内成功进行认证。 0值表禁用。命令行选项用 <br>-g<br><br>PasswordGuesses 5 如果连接请求使用密码认证，那么sshd2就只允许客户端尝试五次。<br>（SSH2)<br><br>限制并发连接<br>MaxConnections 32 最大32个连接（SSH2）<br><br>逆向IP映射<br>SSH2服务器可以根据客户端地址进行逆向DNS查询，以确保客户端的地址就是这个地址。<br>如果检查失败，连接拒绝。<br>RequireReverseMapping yes (ssh2)<br><br>转发<br>AllowTcp-Forwarding yes <br>X11Forwarding yes<br><br>服务器密钥生成<br>该密钥用来对客户端/服务器之间的通信进行保护。是临时的，永远不会保存在磁盘上。服<br>务器在启动时生成这个密钥。并以固定的周期重新生成。缺省长度是768位，最小为512，<br>可以ServerKeyBits 2048 指定长度。用KeyRegenerationInterval 1200指定周期。 命令行选<br>项：-k<br><br>加密算法<br>Ciphers any 允许所有支持算法。其它算法包括<br>3des-cbc,blowfish-cbc,twofish-cbc,arcfour,none<br><br>mac算法<br>MAC关键字可以让用户选择sshd2进行完整性检测所使用的算法，称为消息认证代码。用<br>于sshd2的有hmac-sha1,hmac-md5,hmac-md5-96。<br><br>在OPENSSH中，用户可以用Protocol关键字选择支持SSH-1 AND SSH-2,1 代表SSH-1,2 代<br>表SSH-2, 1，2 代表都支持。<br><br>允许用户登录：认证和访问控制<br>1、认证负责对发起连接请求的用户的身份进行验证。<br>密码认证<br>PasswordAuthentication yes AllowedAuthentications password (ssh2)<br>公钥认证<br>RSAAuthentication yes (ssh1,openssh/1)<br>AllowedAuthentications publickey (ssh2)<br>DEAAuthentication yes (openssh/2)<br>Rhosts认证，可信主机认证通过检查远程主机名和相关用户名来实现对客户端的身份认证。<br>RhostsAuthentication yes (ssh1,openssh)<br>IgnoreRhosts yes (ssh1,ssh2,openssh)不使用系统的hosts.equiv and ~/.rhosts，使用SSH专用<br>的/etc/shosts.equiv and ~/.shosts<br>强可信主机认证。<br>RhostsRSAAuthentication yes ssh1,openssh<br>AllowedAuthentications hostbased ssh2<br>提取已知名主机的公钥<br>UserKnownHosts no ssh2<br>IgnoreUserKnownHosts yes openssh<br>PGP认证<br>Kerberos认证<br>S/key认证<br>SecurID认证<br>PAM认证<br><br>2、访问控制负责允许或禁止来自特定用户、机器在或INTERNET域的SSH连接到服务器<br>上。<br>通常，只要设置正确，任何账号都可以接收SSH连接，这种访问权限可以使用服务器关键<br>字AllowUsers and DenyUsers覆盖。<br>AllowUsers smith<br>如果配置文件中单独出现一个AllowUsers,后面没有任何内容，就表示禁止所有没提到的用<br>户连接，如果没有AllowUsers这个关键字，则所有用户都可连接。DenyUsers表示禁止连接。<br>可用通配符，<br><br>可以用组访问控制AllowGroups DenyGroups<br><br>主机名访问控制<br>AllowHosts hostname<br>DenyHosts hostname<br><br>超级用户的访问控制<br>sshd对超级用户专门使用一种特殊的访问机制，PermiRootLogin来允许或禁止使用SSH来<br>访问root账号。<br><br>显示用户的欢迎信息<br>PrintMotd yes/no default is yes<br><br>显示邮件信息<br>CheckMail yes/no default is yes<br><br>空密码<br>PermitEmptyPasswords yes/no 如果使用密码认证，并且有个账号没有设定密码，那么服务<br>器就可以拒绝访问这个账号<br><br><span style="COLOR: red">如果系统中存在/etc/nologin，那么sshd就只允许root用户登录，其它都不能登录。</span>因此，touch <br>/etc/nologin是把访问权只授给系统管理员的一种快速方法。这样并不需要重新配置ssh。也<br>不需要重启ssh。<br><br>子系统<br>定义和调用远程命令的一个抽象层，用户可以通过在客户端命令行中给出命令来调用远程命<br>令，如：ssh server.examply.com /bin/tar c /home 这个命令调用tar,远程把/home拷贝到磁带上。<br>子系统是服务器机器上预定义的一组远程命令，这样就可以方便地执行。在服务器配置文档<br>中定义：subsystem backups /bin/tar c /home，要在服务器上运行该命令，可以使用 -s 选项。<br>ssh -s backups server.example.com。缺省情况下，sshd_config中定义了一个子系统,subsystem <br>sftp 。不要删除这个子系统，这是scp2和sftp必须的。<br><br>日志<br>Fascisl Logging mode 把调试信息打印到系统日志文件中，可以使用FascistLogging关键字<br>启用。<br>调试模式 可以使用-d命令选项启用<br>安静模式 只能输出严重错误，而不能输出 普通日志，可以使用QuietMode关键字或-q<br>命令行启用。<br>openssh中的日志配置关键字是SyslogFacility and LogLevel。SyslogFacility设置syslog的<br>facility（KERN,DAEMON,USER,AUTH,MAIL等），LogLevel记录日志提供的详细程度，该<br>值从低到高顺序是：QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,使用DEBUG会侵犯用<br>户的隐私权，这个级别只能用于诊断，而不能用于普通操作。<br><br><br>第六章 密钥管理与代理<br>一个身份标识由两部份组成，分别称为私钥（Private Key）和公钥（Public Key），合称一个<br>密钥对。<br><br>SSH1,SSH2 AND OPENSSH身份标识文件的格式各不相同。<br>SSH1缺省设置中，私钥存储在文件identity中，公钥存储在文件identity.pub中。这个密钥<br>对存放在~/.ssh目录下，在使用前，把公钥拷贝到服务器上的一个认证文件里，如SSH1 AND <br>OPENSSH中的~/.ssh/authorized_keys，此后，当客户请求连接到你的服务器上的帐号时，就<br>会用一个私钥作为证明身份的标识，服务器则在authorized_keys文件中寻找与之匹配的公<br>钥。<br><br>SSH2密钥对文件的命名通常是根据该密钥使用的加密算法的性质来起的，例如一个用DSA<br>加密的1024位密钥生成时其缺省文件名是id_dsa_1024_a and id_dsa_1024_a.pub。用户必须<br>把私钥放在identification文件中，缺省是~/.ssh2/目录，一个私钥在这个文件中占一行，在公<br>钥认证中，每一行的开头都有一个关键字IdKey，后跟一个私钥文件名。如：<br>IdKey id_dsa_1024_a<br>IdKey my-other-ssh2-key<br>在服务器端的认证文件~/.ssh2/authorization中，SSH2不包含公钥的实际拷贝，只是把公钥<br>文件列出来，前面用关键字kEY标识。如：<br>Key id_dsa_1024_a.pub<br>Key something-else.pub<br>这样维护起来更容易，更方便。<br><br>OPENSSH对SSH-1连接使用的标识和授权文件与SSH1完全相同，对于SSH-2连接，缺省<br>的密钥则存储在~/.ssh/id_dsa(private key)和~/.ssh/id_dsa.pub(public key)中，服务器上的授权<br>文件是~/.ssh/authorized_keys。<br><br>创建身份标识用ssh-keygen命令。<br><br>OPENSSH的ssh-keygen可以支持SSH1中相应程序的所有功能和选项，它还新增了为SSH-2<br>连接生成DSA密钥的能力。<br>$ ssh-keygen -t dsa -b 1024<br>-e -x 选项可把OPENSSH格式的密钥存储格式转换成SSH2格式 (直接回车，按提示输入转<br>换文件名)<br>-i -X 选项把SSH2格式的密钥转换成OPENSSH格式。这样可用SSH2客户端连接<br>OPENSSH服务器。(直接回车，按提示输入转换文件名)<br>-y 如果不小心删掉了OPENSSH的公钥，可用-y恢复。<br>-l 可计算出公钥的指纹，指纹是鉴别位置不同的两个密钥是否相同的常用的一种密码学技<br>术。这项技术用于不可能逐位对比两个密钥的情况。OPENSSH AND SSH2都能计算指纹。<br>它是根据密钥计算出来一个长度较短的值，它是原理与校验和类似，用于验证一串信息（在<br>我们的例子中是密钥）的不可替换性。<br><br>启动代理<br>1、单shell方式，使用当前登录的shell. $ eval `ssh-agent`<br>2、子shell方式，派生出一个子shell，并继承父shell的某些环境变量。 $ ssh-agent $SHELL<br>不要想当然运行 $ ssh-agent，这样客户端是无法有代理联系的。删除代理用kill命令就可以<br>了。<br><br>SSH-1 与 SSH-2代理的兼容性<br>SSH-1的代理不能处理SSH-2的代理，SSH-2的代理却可以处理SSH-1的代理请求。<br><br>第七章 客户端的高级用法<br>$ ssh -a -p 220 -c blowfish -l sally -i myself server.example.com 可通过配置文件简化命令<br>输入<br><br>Host myserver<br>ForwardAgent no<br>Port 220<br>Cipher blowfish<br>User sally<br>IdentifyFile myself<br>HostName server.example.com<br>配置了该文件后，就可以在客户端简单地输入<br>$ ssh myserver<br><br>全局文件和本地文件<br>全局文件通常是由管理员创建的，用来维护整台计算机上的客户行为。该文件通常位于<br>/etc/ssh_config or /etc/ssh2/ssh2_config。每个客户也可以在自已账号中创建本地客户配置文<br>件，通常是~/.ssh/config or ~/.ssh2/ssh2_config。本地配置文件优先级高于全局配置文件。命<br>令行选项的优先级又高于本地配置文件。<br><br>scp有关命令参数<br>-r 递归拷贝目录<br>-p 保持文件权限和时间戳<br>-u 拷贝完成后删除源文件<br>-d 防止覆盖文件<br>-n 描述操作<br>-q 不显示统计信息<br><br><br>第八章 每账号服务器配置<br>这种配置可以让SSH服务器区分每个服务器上的各个用户。利用服务器目标账号的认证文<br>件（authorized_keys）配置。局限有两点，它不能覆盖编译时配置和服务器范围配置所采用<br>的安全措施，第二，如果使用公钥认证，每账号配置是十分灵活的，如果采用可信主机和密<br>码认证，提供的选择范围就很小。<br><br>基于公钥的配置<br>1、认证文件的完全格式 依次包含三项内容，一些选项，公钥和注释。多个选项用逗号分<br>开。<br>2、用于限制客户端可以在服务器上调用的程序的强制命令。如客户端请求执行/bin/ls命令，<br>而服务器端强制命令却运行/bin/who命令，它十分有用，可用于加强安全性，了为授权提供<br>方便。如要让你的助手每次连接上来都运行email命令程序pine，则可以这样：<br>command= "/usr/local/bin/pine" ...key...。最多可给每个密钥关联一个强制命令，要关联多个命<br>令可把这些命令放入远程主机的一个脚本中，并将该脚本作为强制命令运行。如果强制命令<br>有shell出口，那会存在安全问题，等于没有强制，客户可以运行任何程序。以下规则可以<br>用来判断一个程序是否适合用作强制命令。<br>a、 避免使用具有shell出口的程序（如：文件编辑器vi,Emacs; 分页程序 more,less;调用分<br>b、 页的man,新闻阅读程序rn，邮件阅读程序pine以及调试程序adb，非交互的程序find,xargs<br>c、 等）。<br>b、避免使用编译器，解释器或其它可以让用户生成并运行任意执行代码的程序。<br>c、可创建或删除文件的程序，如cp,mv,rm,scp,ftp等。<br>d、避免使用setuid or setgid的程序，特别是setuid 是root的程序。<br>d、 如果使用脚本作为强制命令，就要遵循编写安全脚本的传统规则，在一个脚本之内，要<br>限制使用相对路径作为搜索路径，应该使用绝对路径来调用所有的程序；不要盲目地把<br>用户提供的字符串作为命令来执行；不要让脚本执行任何setuid的工作。不要调用具有<br>shell出口的程序。<br>e、考虑使用受限shell。<br>f. 为一个单独的、专用的SSH密钥（不要用你登录的那个密钥）关联一个强制命令。这样<br>不会影响你的登录能力就可以方便地禁用该密钥。<br>g、禁用不必要的SSH特性。如no-port-forwarding,no-agent-forwarding,no-pty(禁用tty分配)。<br>几个常用的强制命令介绍：<br>使用定制消息拒绝连接：command="/bin/echo Sorry,buddy,but you've terminated!" ...key... 千万<br>不要用more and less之类的分页程序<br>显示命令菜单：利用脚本<br>检查客户端的原始程序：command="/bin/echo you tried to invoke <br>$SSH_ORIGINAL_COMMAND" ...key... $SSH_ORIGINAL_COMMAND环境变量保存着<br>客户连接时运行的原始命令。<br>限制客户端的原始命令，创建一个脚本，该脚本根据$SSH_ORIGINAL_COMMAND内容选<br>择不同的操作。<br>把客户端的原始命令记录在日志中：也是根据$SSH_ORIGINAL_COMMAND变量来做的一<br>个脚本。脚本内容如一：<br>#!/bin/sh<br>if [ -n "$SSH_ORIGINAL_COMMAND" ]<br>then<br>echo "`/bin/date`: $SSH_ORIGINAL_COMMAND" &gt;&gt; $HOME/ssh-command-log<br>exec $SSH_ORIGINAL_COMMAND<br>fi<br><br>3、限制来自特定主机的连接。由from选项完成。from="client.example.com" ...key...。强制<br>连接必须来自client.example.com。否则断开。from="!client.example.com" ...key...表示拒绝该<br>地址的连接。支持通配符。SSH2不支持该功能。但可以通过$SSH2_CLIENT变量提取客户<br>ip，编写强制命令脚本达到同样效果。<br>4、为远程程序设置环境变量。environment="EDITOR=emacs" ...key...,为每个连接修改默认的<br>环境变量。<br>5、设置空闲超时时间，这样如果客户端用户不再发送数据就强制将其断开。idle-timeout=5m,<br>该选项会覆盖服务器范围配置。<br>6、对到达的SSH连接禁用某些特性，例如端口转发和tty分配。禁用tty分配会使客户端没<br>有交互会话的能力。$SSH_TTY变量可显示tty情况。<br><br>用户的rc文件<br>ssh服务器会在每个连接到达时调用shell脚本/etc/sshrc，用户可把一些登录后想运行的脚本<br>写到这个文件中。用户可以在自已的目录下定义类似的脚本，如果有自定义的~/.ssh/rc则<br>/etc/sshrc则不会执行。<br><br>第九章 端口转发与X转发<br>使用SSH对其它应用程序在别的TCP端口上建立的TCP/IP传输进行加密和解密，这一过<br>程称为端口转发，其绝大多数操作都是透明的，功能非常强大。TELNET,SMTP,NNTP,IMAP<br>和一些基于TCP的不安全协议都可变得安全，只要将其连接通过SSH转发即可。端口转发<br>有时又叫做隧道传输。<br>例子：一个运行IMAP的服务器S，在家里的主机H上运行一个email程序，现在想用ssh<br>保护IMAP连接。<br>$ ssh -L2001:localhost:143 S<br>-L 表明是本地转发，，上面这命令可完成登录到S的功能，现在的这个SSH会话同时将H<br>的2001端口转发到S的143端口，在退出会话之前一直有效。并告知email程序使用被转<br>发的端口，通常邮件程序连接服务器的143端口，即套接字 （S，143）。现在要令其连接<br>本地主机H自已的2001端口，也就是套接字（localhost,2001）。创建本地转发时可以不用-L<br>选项，而在客户端配置文件中用LocalForward关键字。<br>LocalForward 2001 localhost:143 ssh1 openssh<br>LocalForward "2001:localhost:143" ssh2<br><br>-g 选项和GatewayPorts yes/no关键字可以配置除本地主机外的机器是否能使用本地的端口<br>转发功能。出于安全问题，该禁止这个功能。<br><br>远程转发端口与本地转发几乎完全相同，只是方向相反。此时服务器在本地，转发连接由远<br>程主机发起。假设你已登录进服务器S。则<br>$ ssh -R2001:localhost:143 H<br>-R代表远程转发。命令执行后，一条从远程主机H的2001端口到服务器S的143端口的安<br>全隧道就建立起来了。H上的任何程序都可以通过连接（localhost,2001）来使用此安全隧道。<br>而在客户端配置文件中用RemoteForward关键字.<br>RemoteForward 2001 S:143 ssh openssh<br>RemoteForward "2001:S:143" ssh2<br><br>$ ssh -o ClearAllForwardings=yes server.example.com 阻止第二条命令建立隧道 <br><br>本地转发与远程转发<br>在本地转发中，应用程序客户端与监听端同SSH客户端在一起，应用程序服务器与连接端<br>同SSH服务器在一起。<br>在远程转发中，应用程序客户端与监听端同SSH服务器在一起，应用程序服务器与连接端<br>同SSH客户端在一起。<br><br>无远程登录的端口转发，连接时带-f参数。一次性转发用-fo，ssh1与openssh不支持这个功<br>能，但可用以下语句实现：<br>$ ssh -f -L2001:localhost:143 server sleep 10<br><br>终止<br>如果一个SSH会话现在还在活动当中，终止会出错。在SSH2中，如果退出有活动转发连<br>接的会话，该会话会依然打开，但会转到后台运行。直到转发连接终止。ssh1 and openssh<br>与此相反，如果要断开还在活动的会话，会出现警告，仍然在前台运行。<br><br>TIME_WAIT问题。在某些情况下，TCP连接断连时，其一端的套接字在很短一段时间内变<br>得不可用，所以在断连过程结束前不能把该端口用于TCP转发。<br><br><br><br><br><br><br>第十章 推荐配置<br>服务器范围配置<br>1、禁用其它访问方式。<br>关掉r-命令，方法如下：删除/etc/hosts.equiv文件，或改为只读空文件。禁用rshd,rlogind and <br>rexecd，通过修改inetd.conf文件。<br>2、/etc/sshd_config配置<br>HostKey /etc/ssh_host_key<br>PidFile /etc/sshd.pid<br>RandomSeed /etc/ssh_random_seed<br><br>StrictModes yes 要求用户保护其与SSH有关的文件及目录<br>Umask 0077 保证所有SSHD1创建是文件和目录都只能由其所有者（SSHD 运行的<br>UID）读取<br><br>port 22 <br>ListenAddress 0.0.0.0<br>IdleTimeout 15m 15分钟空闲超时<br>KeepAlive yes 客户机死机时连接将会终止，而不会长期挂起。<br><br>LoginGraceTime 30 登录时成功认证的时限为30秒。<br><br>ServerKeyBits 768 服务器密钥长度<br>KeyRegenerationInterval 3600 服务器密钥一小时重新生成一次<br><br>PasswordAuthentication no 禁用密码认证<br>RhostsAuthentication no 禁用可信主机认证<br>RhostsRSAAuthentication no 禁用增强可信主机认证<br>RSAAuthentication yes 启用公钥认证<br><br>IgnoreRhosts yes 完全禁止SSHD使用.rhosts文件<br>IgnoreRootRhosts yes <br><br>UseLogin no 禁用UseLogin，防止万一使用了其它登录程序<br><br>AllowHosts xxx 根据需要设置<br>SilentDeny yes 任何被DenyHosts拒绝的连接都不会向用户返回消息，不必告诉攻击<br>者发生了什么，可以增加了排错的难度。<br><br>PermitRootLogin nopwd 允许超级用户通过SSH连接，但不能用密码认证<br><br>FascistLogging no 禁用FascistLogging日志方式，因为它会在日志中记录用户特定信息，对<br>攻击者有用。<br>QuietMode no 禁用QuietMode日志方式，使用日志更详细，敏感度更低<br><br>AllowTcpForwarding yes 允许tcp端口转发和X转发，保护其它的tcp连接<br>X11Forwarding yes<br><br>3、/etc/ssh2/sshd2_config配置<br>HostKeyFile /etc/ssh2/hostkey<br>PublicHostKeyFile /etc/ssh2/hostkey.pub<br>RandmoSeedFile /etc/ssh2/random_seed<br><br>UserConfigDirectory<br>IdentityFile<br>AuthorizstionFile<br><br>StrictModes yes<br><br>port 22<br>listenAddress 0.0.0.0<br>KeepAlive yes<br>RequireReverseMapping no<br><br>LoginGraceTime 30<br><br>由于sshd2没有设置服务器密钥的位数的关键字，用户得在启动时使用 -b 选项 $ sshd2 -b <br>1024 ....<br><br>AllowedAuthentications publickey<br>RequiredAuthentications publickey<br><br>IgnoreRhosts yes<br>UserKnownHosts no 禁用该项可防止用户给未知主机提供信任权限。<br><br>PermitRootLogin nopwd<br><br><br>Ciphers any 不能选none<br><br><br>QuietMode no<br>VerboseMode yes<br><br>Ssh1Compatibility no 禁用SSH-1兼容模式<br>#Ssh1Path /usr/local/ssh1/sshd1 出于实用原因，也可以启用此模式，之前要指明ssh1服<br>务器可执行文件位置<br><br>4、每账号配置<br>对于SSH1 AND OPENSSH，~/.ssh/authorized_keys中的每一个密钥都必须用适当的选项进<br>行限制，from选项限制只能从特定的主机访问特定的密钥。例如，假设文件中包含你家那<br>台pc（myhome.isp.net）的公钥,而其它机器根本不可能用那个密钥来认证，我们就可以明确<br>限定这一关系：from = "myhome.isp.net" ...key...。还要对适当的密钥设置空闲超时时间：from <br>= "myhome.isp.net" ，idle-timeout=5m ...key...。<br>最后，考虑每一个密钥是否需要对到达的连接使用端口转发，代理转发以及分配tty等，如<br>果不需要，就可以分别用no-port-forwarding,no-agent-forwarding and no-pty禁用这些特性。<br><br>5、密钥管理<br>至少创建1024位长的用户密钥，并用好的口令对密钥进行保护。<br><br>6、客户端配置<br>离开正在运行的ssh客户端时，一定要用密码保护。<br>在客户端配置文件中启用某些安全功能，并将其设置为最强<br>Host *<br>FallBackToRsh no 禁止使用不安全的r-命令（ssh2）没有这个问题。<br>UseRsh no<br>GatewayPorts no 禁止远程客户端连接本地的转发端口<br>StrictHostKeyChecking ask 在主机密钥发生变化时提醒你。请求你的处理意见。<br>配置&#8220;/etc/ssh/ssh_config&#8221;文件　<br>&#8220;/etc/ssh/ssh_config&#8221;文件是OpenSSH系统范围的配置文件，允许你通过设置不同的选项<br>来改变客户端程序的运行方式。这个文件的每一行包含&#8220;关键词－值&#8221;的匹配，其中&#8220;关键<br>词&#8221;是忽略大小写的。下面列出来的是最重要的关键词，用man命令查看帮助页（ssh　(1)）<br>可以得到详细的列表。　<br><br>编辑&#8220;ssh_config&#8221;文件（vi　/etc/ssh/ssh_config），添加或改变下面的参数：　<br><br>#　Site-wide　defaults　for　various　options　<br>Host　*　<br>ForwardAgent　no　<br>ForwardX11　no　<br>RhostsAuthentication　no　<br>RhostsRSAAuthentication　no　<br>RSAAuthentication　yes　<br>PasswordAuthentication　yes　<br>FallBackToRsh　no　<br>UseRsh　no　<br>BatchMode　no　<br>CheckHostIP　yes　<br>StrictHostKeyChecking　no　<br>IdentityFile　~/.ssh/identity　<br>Port　22　<br>Cipher　blowfish　<br>EscapeChar　~　<br><br>下面逐行说明上面的选项设置：　<br><br>Host　*　<br>选项&#8220;Host&#8221;只对能够匹配后面字串的计算机有效。&#8220;*&#8221;表示所有的计算机。　<br><br>ForwardAgent　no　<br>&#8220;ForwardAgent&#8221;设置连接是否经过验证代理（如果存在）转发给远程计算机。　<br><br>ForwardX11　no　<br>&#8220;ForwardX11&#8221;设置X11连接是否被自动重定向到安全的通道和显示集（DISPLAY　set）。　<br><br>RhostsAuthentication　no　<br>&#8220;RhostsAuthentication&#8221;设置是否使用基于rhosts的安全验证。　<br><br>RhostsRSAAuthentication　no　<br>&#8220;RhostsRSAAuthentication&#8221;设置是否使用用RSA算法的基于rhosts的安全验证。　<br><br>RSAAuthentication　yes　<br>&#8220;RSAAuthentication&#8221;设置是否使用RSA算法进行安全验证。　<br><br>PasswordAuthentication　yes　<br>&#8220;PasswordAuthentication&#8221;设置是否使用口令验证。　<br><br>FallBackToRsh　no　<br>&#8220;FallBackToRsh&#8221;设置如果用ssh连接出现错误是否自动使用rsh。　<br><br>UseRsh　no　<br>&#8220;UseRsh&#8221;设置是否在这台计算机上使用&#8220;rlogin/rsh&#8221;。　<br><br>BatchMode　no　<br>&#8220;BatchMode&#8221;如果设为&#8220;yes&#8221;，passphrase/password（交互式输入口令）的提示将被禁止。<br>当不能交互式输入口令的时候，这个选项对脚本文件和批处理任务十分有用。　<br><br>CheckHostIP　yes　<br><br>&#8220;CheckHostIP&#8221;设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设<br>置为&#8220;yes&#8221;。　<br><br>StrictHostKeyChecking　no　<br>&#8220;StrictHostKeyChecking&#8221;如果设置成&#8220;yes&#8221;，ssh就不会自动把计算机的密匙加入<br>&#8220;$HOME/.ssh/known_hosts&#8221;文件，并且一旦计算机的密匙发生了变化，就拒绝连接。　<br><br>IdentityFile　~/.ssh/identity　<br>&#8220;IdentityFile&#8221;设置从哪个文件读取用户的RSA安全验证标识。　<br><br>Port　22　<br>&#8220;Port&#8221;设置连接到远程主机的端口。　<br><br>Cipher　blowfish　<br>&#8220;Cipher&#8221;设置加密用的密码。　<br><br>EscapeChar　~　<br>&#8220;EscapeChar&#8221;设置escape字符。　<br><br>配置&#8220;/etc/ssh/sshd_config&#8221;文件　<br>&#8220;/etc/ssh/sshd_config&#8221;是OpenSSH的配置文件，允许设置选项改变这个daemon的运行。<br>这个文件的每一行包含&#8220;关键词－值&#8221;的匹配，其中&#8220;关键词&#8221;是忽略大小写的。下面列出<br>来的是最重要的关键词，用man命令查看帮助页（sshd　(8)）可以得到详细的列表。　<br><br>编辑&#8220;sshd_config&#8221;文件（vi　/etc/ssh/sshd_config），加入或改变下面的参数：　<br><br>#　This　is　ssh　server　systemwide　configuration　file.　<br>Port　22　<br>ListenAddress　192.168.1.1　<br>HostKey　/etc/ssh/ssh_host_key　<br>ServerKeyBits　1024　<br>LoginGraceTime　600　<br>KeyRegenerationInterval　3600　<br>PermitRootLogin　no　<br>IgnoreRhosts　yes　<br>IgnoreUserKnownHosts　yes　<br>StrictModes　yes　<br>X11Forwarding　no　<br>PrintMotd　yes　<br>SyslogFacility　AUTH　<br>LogLevel　INFO　<br>RhostsAuthentication　no　<br>RhostsRSAAuthentication　no　<br>RSAAuthentication　yes　<br>PasswordAuthentication　yes　<br>PermitEmptyPasswords　no　<br>AllowUsers　admin　<br><br>下面逐行说明上面的选项设置：　<br><br>Port　22　<br>&#8220;Port&#8221;设置sshd监听的端口号。　<br><br>ListenAddress　192.168.1.1　<br>&#8220;ListenAddress&#8221;设置sshd服务器绑定的IP地址。　<br><br>HostKey　/etc/ssh/ssh_host_key　<br><br>&#8220;HostKey&#8221;设置包含计算机私人密匙的文件。　<br><br>ServerKeyBits　1024　<br>&#8220;ServerKeyBits&#8221;定义服务器密匙的位数。　<br><br>LoginGraceTime　600　<br>&#8220;LoginGraceTime&#8221;设置如果用户不能成功登录，在切断连接之前服务器需要等待的时间（以<br>秒为单位）。　<br><br>KeyRegenerationInterval　3600　<br>&#8220;KeyRegenerationInterval&#8221;设置在多少秒之后自动重新生成服务器的密匙（如果使用密匙）。<br>重新生成密匙是为了防止用盗用的密匙解密被截获的信息。　<br><br>PermitRootLogin　no　<br>&#8220;PermitRootLogin&#8221;设置root能不能用ssh登录。这个选项一定不要设成&#8220;yes&#8221;。　<br><br>IgnoreRhosts　yes　<br>&#8220;IgnoreRhosts&#8221;设置验证的时候是否使用&#8220;rhosts&#8221;和&#8220;shosts&#8221;文件。　<br><br>IgnoreUserKnownHosts　yes　<br>&#8220;IgnoreUserKnownHosts&#8221;设置ssh　daemon是否在进行RhostsRSAAuthentication安全验证<br>的时候忽略用户的&#8220;$HOME/.ssh/known_hosts&#8221;　<br><br>StrictModes　yes　<br>&#8220;StrictModes&#8221;设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所<br>有权。这通常是必要的，因为新手经常会把自己的目录和文件设成任何人都有写权限。　<br><br>X11Forwarding　no　<br>&#8220;X11Forwarding&#8221;设置是否允许X11转发。　<br><br>PrintMotd　yes　<br>&#8220;PrintMotd&#8221;设置sshd是否在用户登录的时候显示&#8220;/etc/motd&#8221;中的信息。　<br><br>SyslogFacility　AUTH　<br>&#8220;SyslogFacility&#8221;设置在记录来自sshd的消息的时候，是否给出&#8220;facility　code&#8221;。　<br><br>LogLevel　INFO　<br>&#8220;LogLevel&#8221;设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮<br>助页，已获取更多的信息。　<br><br>RhostsAuthentication　no　<br>&#8220;RhostsAuthentication&#8221;设置只用rhosts或&#8220;/etc/hosts.equiv&#8221;进行安全验证是否已经足够了。　<br><br>RhostsRSAAuthentication　no　<br>&#8220;RhostsRSA&#8221;设置是否允许用rhosts或&#8220;/etc/hosts.equiv&#8221;加上RSA进行安全验证。　<br><br>RSAAuthentication　yes　<br>&#8220;RSAAuthentication&#8221;设置是否允许只有RSA安全验证。　<br><br>PasswordAuthentication　yes　<br>&#8220;PasswordAuthentication&#8221;设置是否允许口令验证。　<br><br>PermitEmptyPasswords　no　<br>&#8220;PermitEmptyPasswords&#8221;设置是否允许用口令为空的帐号登录。　<br><br>AllowUsers　admin　<br>&#8220;AllowUsers&#8221;的后面可以跟着任意的数量的用户名的匹配串（patterns）或user@host这样<br>的匹配串，这些字符串用空格隔开。主机名可以是DNS名或IP地址。
<img src ="http://www.cppblog.com/elva/aggbug/31679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-09-06 10:48 <a href="http://www.cppblog.com/elva/archive/2007/09/06/31679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下mysql的安装和使用 </title><link>http://www.cppblog.com/elva/archive/2007/06/18/26566.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Mon, 18 Jun 2007 07:58:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/06/18/26566.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/26566.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/06/18/26566.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/26566.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/26566.html</trackback:ping><description><![CDATA[<h1><span>安装与使用</span><span><font face="Times New Roman">MySQL
<p>&#160;</p>
</font></span></h1>
<p><span><span><font face=宋体>一</font></span></span><span><span> </span></span><span><span><font face=宋体>、下载</font></span></span><span><span>MySQL</span></span><span><span><font face=宋体>的安装文件</font></span></span><span><br></span><font size=3><span>　　</span><span>安装</span><span><font face="Times New Roman">MySQL</font></span><span>需要下面两个文件：</span></font><span><br></span><span><font size=3>　　</font></span><font size=3><span><font face="Times New Roman">MySQL-server-4.0.16-0.i386.rpm<br></font></span><span>　　</span></font><font size=3><span><font face="Times New Roman">MySQL-client-4.0.16-0.i386.rpm<br></font></span><span>　　下载地址为：</span><span><a href="http://www.mysql.com/downloads/mysql-4.0.html"><span><font face="Times New Roman">http://www.mysql.com/downloads/mysql-4.0.html</font></span></a></span><span>，</span><font face="Times New Roman"> </font><span>打开此网页，下拉网页找到</span><span><font face="Times New Roman">&#8220;Linux x86 RPM downloads&#8221;</font></span><span>项，找到</span><span><font face="Times New Roman">&#8220;Server&#8221;</font></span><span>和</span><span><font face="Times New Roman">&#8220;Client programs&#8221;</font></span><span>项，下载需要的上述两个</span><span><font face="Times New Roman">rpm</font></span><span>文件。</span><span>
<p>&#160;</p>
</span></font>
<p>&#160;</p>
<p><span><span><font face=宋体>二</font></span></span><span><span> </span></span><span><span><font face=宋体>、安装</font></span></span><span><span>MySQL</span></span><span><br></span><font size=3><span>　　</span><span><font face="Times New Roman">rpm</font></span><span>文件是</span><span><font face="Times New Roman">Red Hat</font></span><span>公司开发的软件安装包，</span><span><font face="Times New Roman">rpm</font></span><span>可让</span><span><font face="Times New Roman">Linux</font></span><span>在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是</span><span><font face="Times New Roman"> &#8211;ivh ,</font></span><span>其中</span><span><font face="Times New Roman">i</font></span><span>表示将安装指定的</span><span><font face="Times New Roman">rmp</font></span><span>软件包，</span><span><font face="Times New Roman">V</font></span><span>表示安装时的详细信息，</span><span><font face="Times New Roman">h</font></span><span>表示在安装期间</span><span>
<p>&#160;</p>
</span></font>
<p>&#160;</p>
<p><span><font face=宋体>出现</font><span><font face=宋体>&#8220;#&#8221;符号来显示目前的安装过程。这个符号将持续到安装完成后才停止。<br>　　1）安装服务器端<br>　　在有两个rmp文件的目录下运行如下命令：<br>　　[root@test1 local]# rpm -ivh MySQL-server-4.0.16-0.i386.rpm<br>　　显示如下信息。<br>　　　 warning: MySQL-server-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5<br>　　Preparing...　　　　　　　########################################### [100%]<br>　　1:MySQL-server　　　　　########################################### [100%]<br>　　　。。。。。。（省略显示）<br>　　/usr/bin/mysqladmin -u root password 'new-password'<br>　　/usr/bin/mysqladmin -u root -h test1 password 'new-password'<br>　　　。。。。。。（省略显示）<br>　　Starting mysqld daemon with databases from /var/lib/mysql<br>　　如出现如上信息，服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开，如打开表示服务已经启动，安装成功。Mysql默认的端口是3306。<br>　　[root@test1 local]# netstat -nat<br>　　Active Internet connections (servers and established)<br>　　Proto Recv-Q Send-Q Local Address　　　　　 Foreign Address　　　　 State　　　<br>　　tcp　　0　　0 0.0.0.0:3306　　　　 0.0.0.0:*　　　　　 LISTEN　　　<br>　　上面显示可以看出MySQL服务已经启动。<br>　　2）安装客户端<br>　　运行如下命令：<br>　　[root@test1 local]# rpm -ivh MySQL-client-4.0.16-0.i386.rpm<br>　　warning: MySQL-client-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5<br>　　Preparing...　　　　########################################### [100%]<br>　　1:MySQL-client　 ########################################### [100%]<br>　　显示安装完毕。<br>　　用下面的命令连接mysql,测试是否成功。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>三、登录<span>MySQL
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　登录</font><span><font face=宋体>MySQL的命令是mysql， mysql 的使用语法如下： <br>　　mysql [-u username] [-h host] [-p[password]] [dbname] <br>　　username 与 password 分别是 MySQL 的用户名与密码，mysql的初始管理帐号是root，没有密码，注意：这个root用户不是Linux的系统用户。MySQL默认用户是root，由于初始没有密码，第一次进时只需键入mysql即可。 <br>　　[root@test1 local]# mysql<br>　　Welcome to the MySQL monitor.　Commands end with ; or \g.<br>　　Your MySQL connection id is 1 to server version: 4.0.16-standard<br>　　Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br>　　mysql&gt;<br>　　出现了&#8220;mysql&gt;&#8221;提示符，恭喜你，安装成功！<br>　　增加了密码后的登录格式如下：<br>　　mysql -u root -p <br>　　Enter password: (输入密码)<br>　　其中-u后跟的是用户名，-p要求输入密码，回车后在输入密码处输入密码。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　注意：这个<span>mysql文件在/usr/bin目录下，与后面讲的启动文件/etc/init.d/mysql不是一个文件。
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>四、<span>MySQL的几个重要目录
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>MySQL安装完成后不象SQL Server默认安装在一个目录，它的数据库文件、配置文件和命令文件分别在不同的目录，了解这些目录非常重要，尤其对于Linux的初学者，因为Linux本身的目录结构就比较复杂，如果搞不清楚MySQL的安装目录那就无从谈起深入学习。
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　下面就介绍一下这几个目录。<span>
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>1、数据库目录<br>　　/var/lib/mysql/
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>2、配置文件<br>　　/usr/share/mysql（mysql.server命令及配置文件）
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>3、相关命令<br>　　/usr/bin(mysqladmin mysqldump等命令)
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>4、启动脚本<br>　　/etc/rc.d/init.d/（启动脚本文件mysql的目录）
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>五、修改登录密码<span>
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>MySQL默认没有密码，安装完毕增加密码的重要性是不言而喻的。
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>1、命令<br>　　usr/bin/mysqladmin -u root password 'new-password'<br>　　格式：mysqladmin -u用户名 -p旧密码 password 新密码
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>2、例子<br>　　例1：给root加个密码123456。<br>　　键入以下命令 ：<br>　　[root@test1 local]# /usr/bin/mysqladmin -u root password 123456<br>　　注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>3、测试是否修改成功<br>　　 1）不用密码登录<br>　　[root@test1 local]# mysql<br>　　ERROR 1045: Access denied for user: </font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#114;&#111;&#111;&#116;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;&#39;"><font face=宋体 color=#000088>'root@localhost'</font></a><font face=宋体> (Using password: NO)<br>　　显示错误，说明密码已经修改。<br>　　2）用修改后的密码登录<br>　　[root@test1 local]# mysql -u root -p <br>　　Enter password: (输入修改后的密码123456)<br>　　Welcome to the MySQL monitor.　Commands end with ; or \g.<br>　　Your MySQL connection id is 4 to server version: 4.0.16-standard<br>　　Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br>　　mysql&gt;<br>　　成功！<br>　　这是通过mysqladmin命令修改口令，也可通过修改库来更改口令。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>六、启动与停止<span>
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>1、启动<br>　　MySQL安装完成后启动文件mysql在/etc/init.d目录下，在需要启动时运行下面命令即可。<br>　　[root@test1 init.d]# /etc/init.d/mysql start
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>2、停止<br>　　/usr/bin/mysqladmin -u root -p shutdown
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>3、自动启动<br>　　1）察看mysql是否在自动启动列表中<br>　　[root@test1 local]#　/sbin/chkconfig &#8211;list<br>　　2）把MySQL添加到你系统的启动服务组里面去<br>　　[root@test1 local]#　/sbin/chkconfig　&#8211; add　mysql<br>　　3）把MySQL从启动服务组里面删除。<br>　　[root@test1 local]#　/sbin/chkconfig　&#8211; del　mysql
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>七、更改<span>MySQL目录
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步：
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>1、home目录下建立data目录<br>　　cd /home<br>　　mkdir data
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>2、把MySQL服务进程停掉： <br>　　mysqladmin -u root -p shutdown
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>3、把/var/lib/mysql整个目录移到/home/data<br>　　mv /var/lib/mysql　/home/data/<br>　　这样就把MySQL的数据文件移动到了/home/data/mysql下
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>4、找到my.cnf配置文件<br>　　如果/etc/目录下没有my.cnf配置文件，请到/usr/share/mysql/下找到*.cnf文件，拷贝其中一个到/etc/
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>并改名为</font><span><font face=宋体>my.cnf。命令如下：<br>　　 [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf　/etc/my.cnf
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>5、编辑MySQL的配置文件/etc/my.cnf<br>　　为保证MySQL能够正常工作，需要指明mysql.sock文件的产生位置。 修改
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>socket=/var/lib/mysql/mysql.sock一行中等号右边的值为：/home/mysql/mysql.sock 。操作如下：<br>　　 vi　 my.cnf　　　 (用vi工具编辑my.cnf文件，找到下列数据修改之)<br>　　 # The MySQL server<br>　　　 [mysqld]<br>　　　 port　　　= 3306<br>　　　#socket　 = /var/lib/mysql/mysql.sock（原内容，为了更稳妥用&#8220;#&#8221;注释此行）<br>　　　 socket　 = /home/data/mysql/mysql.sock　　　（加上此行）
<p>&#160;</p>
</font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>6、修改MySQL启动脚本/etc/rc.d/init.d/mysql<br>　　最后，需要修改MySQL启动脚本/etc/rc.d/init.d/mysql，把其中datadir=/var/lib/mysql一行中，等号右
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>边的路径改成你现在的实际存放路径：</font><span><font face=宋体>home/data/mysql。<br>　　[root@test1 etc]# vi　/etc/rc.d/init.d/mysql<br>　　#datadir=/var/lib/mysql　　　　（注释此行）<br>　　datadir=/home/data/mysql　　 （加上此行）
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>7、重新启动MySQL服务<br>　　/etc/rc.d/init.d/mysql　start<br>　　或用reboot命令重启Linux<br>　　如果工作正常移动就成功了，否则对照前面的7步再检查一下。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>八、<span>MySQL的常用操作
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　注意：<span>MySQL中每个命令后都要以分号；结尾。
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>1、显示数据库<br>　　mysql&gt; show databases;<br>　　+----------+<br>　　| Database |<br>　　+----------+<br>　　| mysql　　|<br>　　| test　　 |<br>　　+----------+<br>　　2 rows in set (0.04 sec)<br>　　Mysql刚安装完有两个数据库：mysql和test。mysql库非常重要，它里面有MySQL的系统信息，我们改密码和新增用户，实际上就是用这个库中的相关表进行操作。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>2、显示数据库中的表<br>　　mysql&gt; use mysql; （打开库，对每个库进行操作就要打开此库，类似于foxpro ）<br>　　Database changed
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>mysql&gt; show tables;<br>　　+-----------------+<br>　　| Tables_in_mysql |<br>　　+-----------------+<br>　　| columns_priv　　|<br>　　| db　　　　　　　|<br>　　| func　　　　　　|<br>　　| host　　　　　　|<br>　　| tables_priv　　 |<br>　　| user　　　　　　|<br>　　+-----------------+<br>　　6 rows in set (0.01 sec)
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>3、显示数据表的结构： <br>　　describe 表名;
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>4、显示表中的记录： <br>　　select * from 表名;<br>　　例如：显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。<br>　　Select * from user;
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>5、建库： <br>　　create database 库名; <br>　　例如：创建一个名字位aaa的库<br>　　mysql&gt; create database aaa;<br>　　6、建表： <br>　　use 库名； <br>　　create table 表名 (字段设定列表)；<br>　　例如：在刚创建的aaa库中建立表name,表中有id(序号，自动增长)，xm（姓名）,xb（性别）,csny（出身年月）四个字段<br>　　use aaa;<br>　　mysql&gt; create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);<br>　　可以用describe命令察看刚建立的表结构。<br>　　mysql&gt; describe name;
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>+-------+---------+------+-----+---------+----------------+<br>　　| Field | Type　　| Null | Key | Default | Extra　　　　　|<br>　　+-------+---------+------+-----+---------+----------------+<br>　　| id　　| int(3)　|　　　| PRI | NULL　　| auto_increment |<br>　　| xm　　| char(8) | YES　|　　 | NULL　　|　　　　　　　　|<br>　　| xb　　| char(2) | YES　|　　 | NULL　　|　　　　　　　　|<br>　　| csny　| date　　| YES　|　　 | NULL　　|　　　　　　　　|<br>　　+-------+---------+------+-----+---------+----------------+
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>7、增加记录<br>　　例如：增加几条相关纪录。<br>　　mysql&gt; insert into name values('','张三','男','1971-10-01');<br>　　mysql&gt; insert into name values('','白云','女','1972-05-20');<br>　　可用select命令来验证结果。<br>　　mysql&gt; select * from name;<br>　　+----+------+------+------------+<br>　　| id | xm　 | xb　 | csny　　　 |<br>　　+----+------+------+------------+<br>　　|　1 | 张三 | 男　 | 1971-10-01 |<br>　　|　2 | 白云 | 女　 | 1972-05-20 |<br>　　+----+------+------+------------+
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>8、修改纪录<br>　　例如：将张三的出生年月改为1971-01-10<br>　　mysql&gt; update name set csny='1971-01-10' where xm='张三';
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>9、删除纪录<br>　　例如：删除张三的纪录。<br>　　mysql&gt; delete from name where xm='张三';
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>10、删库和删表 <br>　　drop database 库名; <br>　　drop table 表名；
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>九、增加<span>MySQL用户
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　格式：</font><span><font face=宋体>grant select on 数据库.* to 用户名@登录主机 identified by "密码" <br>例1、增加一个用户user_1密码为123，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL，然后键入以下命令：
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>mysql&gt; grant select,insert,update,delete on *.* to </font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#95;&#49;&#64;&#37;&#50;&#50;"><font face=宋体 color=#000088>mailto:user_1@"</font></a><font face=宋体>" Identified by "123"; <br>例1增加的用户是十分危险的，如果知道了user_1的密码，那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了，解决办法见例2。
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　例<span>2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录，并可以对数据库aaa进行查询、插入、修改、删除的操作（localhost指本地主机，即MySQL数据库所在的那台主机），这样用户即使用知道user_2的密码，他也无法从网上直接访问数据库，只能通过MYSQL主机来操作aaa库。
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>mysql&gt;grant select,insert,update,delete on aaa.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#95;&#50;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;"><font color=#000088>user_2@localhost</font></a> identified by "123";
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　用新增的用户如果登录不了<span>MySQL，在登录时用如下命令：
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>mysql -u user_1 -p　-h 192.168.113.50　（-h后跟的是要登录主机的ip地址）
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>十、备份与恢复<span>
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>1、备份
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　例如：将上例创建的<span>aaa库备份到文件back_aaa中
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　</font><span><font face=宋体>[root@test1 root]# cd　/home/data/mysql　(进入到库目录，本例库已由val/lib/mysql转到/home/data/mysql，见上述第七部分内容)<br>　　[root@test1 mysql]# mysqldump -u root -p --opt aaa &gt; back_aaa
<p>&#160;</p>
</font></span></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>2、恢复
<p>&#160;</p>
</span></font></span>
<p>&#160;</p>
<p><span><font face=宋体>　　<span>[root@test mysql]# mysql -u root -p ccc &lt; back_aaa
<p>&#160;</p>
</span></font></span>
<img src ="http://www.cppblog.com/elva/aggbug/26566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-06-18 15:58 <a href="http://www.cppblog.com/elva/archive/2007/06/18/26566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>盗版XP的解决办法</title><link>http://www.cppblog.com/elva/archive/2007/06/01/25295.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 01 Jun 2007 11:06:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/06/01/25295.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/25295.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/06/01/25295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/25295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/25295.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/06/01/25295.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/25295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-06-01 19:06 <a href="http://www.cppblog.com/elva/archive/2007/06/01/25295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让win2000自动登录</title><link>http://www.cppblog.com/elva/archive/2007/05/11/23905.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 11 May 2007 08:19:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/11/23905.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23905.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/11/23905.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23905.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23905.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/11/23905.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-11 16:19 <a href="http://www.cppblog.com/elva/archive/2007/05/11/23905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vi命令详解 </title><link>http://www.cppblog.com/elva/archive/2007/05/06/23516.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 06 May 2007 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/06/23516.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23516.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/06/23516.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23516.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23516.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: vi命令是unix下常用而重要命令，可在全屏幕方式下编辑一个或多个文件。若在vi执行时 <br>没有指定一个文件，那么vi命令会自动产生一个无名的空的工作文件。若指定的文件不存在， <br>那么就按指定的文件名创建一个新的文件。若对文件的修改不保存的话，v i命令并不改变原 <br>来文件的内容。&nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/06/23516.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-06 15:37 <a href="http://www.cppblog.com/elva/archive/2007/05/06/23516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>