<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Doctor's WebLog]]></title> 
<link>http://www.gaobo.info/index.php</link> 
<description><![CDATA[博乐的自留地]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Doctor's WebLog]]></copyright>
<item>
<link>http://www.gaobo.info/read.php/698.htm</link>
<title><![CDATA[C# ASP.Net连接MySQL遇到的奇怪问题]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Tue, 09 Mar 2010 02:49:44 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/698.htm</guid> 
<description>
<![CDATA[ 
	根据之前的测试，现在学校的DNS架构为CentOS 5.4+Bind 9.7+MySQL 5.1.44，Bind与MySQL在一台机器上，管理程序是用.Net写的一个Web管理界面。之前在用IBM服务器的时候运行正常，但在昨晚更替到新的Dell服务器上后发现新写入MySQL的汉字全部变成了&ldquo;??&rdquo;&hellip;&hellip;无论怎么修改数据库或表的字符集都无效。<br/>经查看，发现原IBM服务器和Dell服务器上MySQL的配置完全相同，而.Net程序也没有做关于字符集的更改，上网搜了下，使用以下方法解决了这个问题：<br/>修改my.cnf，添加以下内容：<br/><div class="code">&#91;mysqld&#93;<br/>default-character-set=utf8<br/><br/>&#91;client&#93;<br/>default-character-set=utf8<br/>init_connect=&#039;SET NAMES utf8&#039;</div><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/c%2523/" rel="tag">c#</a> , <a href="http://www.gaobo.info/go.php/tags/asp.net/" rel="tag">asp.net</a> , <a href="http://www.gaobo.info/go.php/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.gaobo.info/go.php/tags/charset/" rel="tag">charset</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%25AD%2597%25E7%25AC%25A6%25E9%259B%2586/" rel="tag">字符集</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/697.htm</link>
<title><![CDATA[Linux下常用配置文件及常用命令介绍]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 05 Mar 2010 03:02:04 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/697.htm</guid> 
<description>
<![CDATA[ 
	<p>/etc/sysconfig/network 包括主机基本网络信息，用于系统启动<br />/etc/sysconfig/network-script/ 此目录下是系统启动最初始化网络的信息<br />/etc/sysconfig/network-script/ifcfg-eth0 网络配置信息<br />/etc/xinetd.conf 定义了由超级进程XINETD启动的网络服务<br />/etc/protocols 设定了主机使用的协议以及各个协议的协议号<br />/etc/services 设定了主机的不同端口的网络服务<br />// 网络配置工具<br /># redhat-config-network <br />/* 使用ifconfig命令配置并查看网络接口情况 */<br />//配置eth0的IP，同时激活设备<br /># ifconfig eth0 192.168.168.119 netmask 255.255.255.0 up<br />//配置eth0别名设备 eth0:1 的IP，并添加路由<br /># ifconfig eth0:1 192.168.168.110<br /># route add &ndash;host 192.168.168.110 dev eth0:1<br />//激活（禁用）设备<br /># ifconfig eth0:1 up(down)<br />//查看所有（指定）网络接口配置<br /># ifconfig (eth0)<br />/* 使用route 命令配置路由表 */<br />//添加到主机路由<br /># route add &ndash;host 192.168.168.110 dev eth0:1<br /># route add &ndash;host 192.168.168.119 gw 192.168.168.1<br />//添加到网络的路由<br /># route add &ndash;net IP netmask MASK eth0<br /># route add &ndash;net IP netmask MASK gw IP<br /># route add &ndash;net IP/24 eth1<br />//添加默认网关<br /># route add default gw IP<br />//删除路由<br /># route del &ndash;host 192.168.168.110 dev eth0:1<br />/* 常用命令 */<br /># traceroute <a href="http://www.pconline.com.cn/"><a href="http://www.pconline.com.cn" target="_blank">www.pconline.com.cn</a></a><br /># ping <a href="http://www.pconline.com.cn/"><a href="http://www.pconline.com.cn" target="_blank">www.pconline.com.cn</a></a><br />//显示网络接口状态信息<br /># netstat &ndash;I<br />//显示所有监控的服务器的Socket和正在使用Socket的程序信息<br /># netstat &ndash;lpe<br />//显示内核路由表信息<br /># netstat &ndash;r<br /># netstat &ndash;nr<br />//显示TCP/UDP传输协议的连接状态<br /># netstat &ndash;t<br /># netstat &ndash;u<br />//更改主机名<br /># hostname myhost<br />//查看ARP缓存<br /># arp<br />//添加<br /># arp &ndash;s IP MAC<br />//删除<br /># arp &ndash;d IP<br />/* 运行级别与网络服务 */<br />//查看当前运行级别<br /># runlevel<br />//运行级别的切换<br /># init<br /># telinit<br /></p><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/config/" rel="tag">config</a> , <a href="http://www.gaobo.info/go.php/tags/network/" rel="tag">network</a> , <a href="http://www.gaobo.info/go.php/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%2591%25BD%25E4%25BB%25A4/" rel="tag">命令</a> , <a href="http://www.gaobo.info/go.php/tags/route/" rel="tag">route</a> , <a href="http://www.gaobo.info/go.php/tags/%25E8%25B7%25AF%25E7%2594%25B1/" rel="tag">路由</a> , <a href="http://www.gaobo.info/go.php/tags/%25E7%25BD%2591%25E7%25BB%259C/" rel="tag">网络</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/602.htm</link>
<title><![CDATA[在Linux下安装Telnet服务器]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Tue, 21 Apr 2009 05:41:09 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/602.htm</guid> 
<description>
<![CDATA[ 
	今天因为工作原因，给某邮件系统的网关服务器安装RedHat Linux Advanced Server 4 Update 7，安装完毕后发现居然没有自动安装Telnet服务……囧，于是从网上下载了<a href="http://www.gaobo.info/telnet-server-0.17-25.i386.rpm" target="_blank">telnet-server-0.17-25.i386.rpm</a>，手动安装并启动服务，步骤如下：<br/><div class="code">wget http://......<br/>rpm -i telnet-server-0.17-25.i386.rpm<br/>chkconfig telnet on<br/>service xinetd restart</div><br/>其实很简单，呵呵<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/telnet/" rel="tag">telnet</a> , <a href="http://www.gaobo.info/go.php/tags/server/" rel="tag">server</a> , <a href="http://www.gaobo.info/go.php/tags/redhat/" rel="tag">redhat</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">服务器</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/601.htm</link>
<title><![CDATA[10个你也许不知道的Ubuntu技巧]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Wed, 15 Apr 2009 15:00:03 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/601.htm</guid> 
<description>
<![CDATA[ 
	这些技巧并不一定仅仅是在Ubuntu上才可以使用，只是在Ubuntu这种Linux发行版下经过验证的。<br /><br /><p><strong>1.打开超级用户权限的运行程序对话框 </strong><br /><br />你也许已经知道用Alt+F2来打开&rdquo;运行程序&rdquo;对话框，然后可以输入任何命令行运行之。如果你在终端窗口中输入gksu命令，则会弹出一个类似的对话框，但是运行的程序都是在root级权限。你可以通过System-&gt;Preferences-&gt; Keyboard Shortcuts,，将这个命令与键盘快捷键（如Shift+Alt+F2）绑定，可以更加方便的使用这一功能。<br /><br /><strong>2. 使用GDebi来安装包</strong><br /><br />笔者很长一段时间都没注意到GDebi这个程序，这是一个用于安装你自己手动下载的包的GUI程序。它会根据软件仓库这一实用的特性，来解算依赖关系。很多人也许和笔者一样，用传统的dpkg命令来实现。有一天笔者发现，GDebi也可以命令行模式运行（sudo gdebi package.deb），其功能和GUI模式下完全一样。尝试一下这个命令，也许你再也不想用dpkg &ndash;i了。<br /><br /><strong>3. CD命令技巧 </strong><br /><br />笔者确信甚至很多命令行专家也会偶尔发现一些自己以前没意识到的技巧。最近笔者发现了两个以前被忽略的CD命令的技巧，输入cd命令而不带任何参数，可以直接切换到/home目录（等效于cd ~），输入cd &ndash;则可以切换到你浏览的上一个目录。<br /><br /><strong>4. 使用PUSHD将目录添加到目录栈 </strong><br /><br />首先来说明一下目录栈是什么，很简单，就是bash存储的一个目录列表。当前浏览的目录总是在列表的顶端，但如果你不通过PUSHD往其中添加目录，这个列表则是空的。举例说明，使用 pushd /usr/bin命令会添加/usr/bin目录到列表，同时会切换到这个目录（加上-n参数可以停留在当前目录不跳转）。使用popd则会删除最顶端的目录，然后跳转到列表中的下一个目录。尝试一下这个命令，当你在管理系统时需要在不同目录之间跳转时或者容易忘记重要东西的位置时，它可能会相当有用。<br /><br /><strong>5. 使用PKILL快速杀掉进程 </strong><br /><br />笔者经常使用top、kill或killall进程加上ps &#124; aux查找进程号/进程名来杀掉进程。但是pkill命令则可去掉大量的工作，pkill firefox就可以杀掉进程列表中所有与firefox符合的incheng。Pstree也是一个很酷的命令，它会根据所有关系以家庭树的方式显示所有进程。<br /><br /><strong>6.使用Gnome中心自定义Gnome </strong><br /><br />对于那些难于放弃窗口界面，希望能获得类似控制面板界面体验的用户，可以考虑使用gnome-control-center来实现系统配置。在桌面上添加快捷方式，可以使新手获得类似Windows的体验，避免迷失在复杂的系统菜单中。<br /><br /><strong>7. 加速OpenOffice.org的启动 </strong><br /><br />如果你经常使用OpenOffice.org，你可能会被它漫长的启动时间所囧到。要解决这个问题，打开会话程序（在Jaunty中被称为启动项管理，反正你总能在System-&gt;Preferences-&gt;Startup Applications中找到），然后新增一项。在命令行中输入openoffice -nodefault &ndash;nologo，重启后，OpenOffice会在Gnome桌面启动的时候缓存，再次启动任何OpenOffice程序时就会很快完成。<br /><br /><strong>8.快速清理磁盘垃圾 </strong><br /><br />磁盘空间又不够用了？尝试在终端窗口中输入sudo apt-get autoremove然后输入sudo apt-get clean，前一个命令会卸载系统中所有未被使用的依赖关系，后一个命令会清除所有缓存的包文件，两者都是无害的。在一个升级过多次的系统上，你也许能通过这个方法清理出若干GB的空间。<br /><br /><strong>9. 找出丢失的文件扩展名 </strong><br /><br />如果你收到一个没有扩展名的email附件，不知道是什么类型时（苹果用户经常把文件扩展名忽略），试一下file命令，直接加上文件名。同时也可以试一下strings命令，会显示出二进制文件中任何可显示的字符串，文件的类型通常就会在前面几行，所以用管道把这个命令和head连接起来是个好办法。<br /><br /><strong>10.不要忘了这些手册页面 </strong><br /><br />看一下这些有趣的但是不是广为人知的手册页面：intro 初学者的命令行指导； hier 文件系统的介绍； built-ins 各种没有自带说明的命令的迷你手册。</p><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/ubuntu/" rel="tag">ubuntu</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%258A%2580%25E5%25B7%25A7/" rel="tag">技巧</a> , <a href="http://www.gaobo.info/go.php/tags/shell/" rel="tag">shell</a> , <a href="http://www.gaobo.info/go.php/tags/skill/" rel="tag">skill</a> , <a href="http://www.gaobo.info/go.php/tags/tips/" rel="tag">tips</a> , <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/594.htm</link>
<title><![CDATA[使用rsync建立cygwin镜像]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Mon, 16 Mar 2009 13:14:27 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/594.htm</guid> 
<description>
<![CDATA[ 
	<p>刚刚又完成一件工作&mdash;&mdash;在Windows Server 2003下建立cygwin镜像<br />这个事情本身不是什么难事，麻烦的是网上基本没有教程或经验可以参考，郁闷的是cygwin官方不提供建立镜像的方法，也没有技术支持。。。。囧<br />只找到零星的一些东西，我东拼西凑了下居然搞定了。忍不住夸下自己，我真是太有才了<img src="images/emot/grin.gif" border="0" width="24" height="24" /><br />步骤其实很简单，这里只列出参考的一些内容：<br /><a href="http://sourceware.org/cygwin-apps/package-server.html"><a href="http://sourceware.org/cygwin-apps/package-server.html" target="_blank">http://sourceware.org/cygwin-apps/package-server.html</a></a><br /><a href="http://www.blogjava.net/haha1903/archive/2007/05/20/118683.html"><a href="http://www.blogjava.net/haha1903/archive/2007/05/20/118683.html" target="_blank">http://www.blogjava.net/haha1903/archive/2007/05/20/118683.html</a></a><br /><a href="http://sourceforge.net/project/showfiles.php?group_id=69227&amp;package_id=68081"><a href="http://sourceforge.net/project/showfiles.php?group_id=69227&amp;package_id=68081" target="_blank">http://sourceforge.net/project/showfiles.php?group_id=69227&amp;package_id=68081</a></a><br /><a href="http://cygwin.com/mirrors.html"><a href="http://cygwin.com/mirrors.html" target="_blank">http://cygwin.com/mirrors.html</a></a><br /><br />关键是：<br />1、path = /cygdrive/c/work<br />2、rsync -vaz rsync://<em>example.com/pub/cygwin/ /var/www/</em>cygwin<br /><br />镜像地址：<a href="http://cygwin.cqit.edu.cn/"><a href="http://cygwin.mirrors.cqit.edu.cn/" target="_blank">http://cygwin.mirrors.cqit.edu.cn/</a></a>，仅限教育网内使用。</p><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/rsync/" rel="tag">rsync</a> , <a href="http://www.gaobo.info/go.php/tags/windows/" rel="tag">windows</a> , <a href="http://www.gaobo.info/go.php/tags/cygwin/" rel="tag">cygwin</a> , <a href="http://www.gaobo.info/go.php/tags/mirror/" rel="tag">mirror</a> , <a href="http://www.gaobo.info/go.php/tags/%25E9%2595%259C%25E5%2583%258F/" rel="tag">镜像</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/589.htm</link>
<title><![CDATA[在VMWare的Linux客户系统中安装VMWare Tools]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 06 Mar 2009 08:57:37 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/589.htm</guid> 
<description>
<![CDATA[ 
	长期以来一直使用没安装VMWare Tools的Linux guest os，倒也觉得没什么。但是如果是远程过去到Host os上，然后又用这样的Linux的话，说实话还是比较!@#%$#*&amp;(%，所以&hellip;&hellip;<br />其实过程很简单：<br />1、单击菜单&ldquo;Install VMWare Tools&rdquo;<br />2、解压光盘上的那个tar.bz文件，放在哪里都行，呵呵<br />3、进到解压出来的目录中，运行那个pl文件，按提示操作（基本上就是回车、回车、再回车&hellip;&hellip;），然后重启系统<br />4、打完收工，^_^<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/vmware/" rel="tag">vmware</a> , <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/tools/" rel="tag">tools</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%2593%258D%25E4%25BD%259C%25E7%25B3%25BB%25E7%25BB%259F/" rel="tag">操作系统</a> , <a href="http://www.gaobo.info/go.php/tags/os/" rel="tag">os</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/588.htm</link>
<title><![CDATA[发现yum的确比rpm好用]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 06 Mar 2009 03:56:40 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/588.htm</guid> 
<description>
<![CDATA[ 
	RT，呵呵<br />比如在CentOS 5.2下更新Firefox到最新版，只需要<br /><div class="code">yum update -y firefox</div><br />然后能做的就是等待完成了，呵呵。<br />安装的话把update换成install即可。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/centos/" rel="tag">centos</a> , <a href="http://www.gaobo.info/go.php/tags/yum/" rel="tag">yum</a> , <a href="http://www.gaobo.info/go.php/tags/rpm/" rel="tag">rpm</a> , <a href="http://www.gaobo.info/go.php/tags/update/" rel="tag">update</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/584.htm</link>
<title><![CDATA[FreeBSD安装Zend Optimizer成功却不工作的原因]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Sun, 22 Feb 2009 14:01:44 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/584.htm</guid> 
<description>
<![CDATA[ 
	<p>由于FreeBSD系统的安全性和稳定性以及该系统下PHP运行的良好口碑，越来越多的人开始选择他做为自己的服务器系统平台。</p><p>Zend Optimizer（下简称ZO）是PHP官方推荐的PHP代码优化工具，在FreeBSD下安装ZO时，一个常见的问题是明明提示安装成功，但是在查看phpinfo()时，却发现ZO并没有正常加载，或者加载了也不工作，本文介绍的就是这一问题的解决办法。</p><p>Zend Optimizer安装文档中的说明：<br /><div class="quote"><div class="quote-title">引用</div><div class="quote-content">The Zend Optimizer will not run if the following PHP settings are enabled:</p><p>Debug Mode - Check that your PHP was compiled in non-debug mode -<br />This can be checked by looking at the top part of the phpinfo() function<br />output and checking &quot;Debug Build&quot; row (ZEND_DEBUG in older PHP<br />versions) - it should say &quot;no&quot;.</div></div></p><p>意思是如果PHP运行在debug模式，ZendOptimizer将不会正常运行。解决这一问题需要：</p><p>（1）如果是编译安装PHP，那需要在编译选项里面加上&ldquo;--disable-debug&rdquo;</p><p>（2）如果是ports安装，在安装选项中去掉DEBUG项。</p><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/php/" rel="tag">php</a> , <a href="http://www.gaobo.info/go.php/tags/zend/" rel="tag">zend</a> , <a href="http://www.gaobo.info/go.php/tags/optimizer/" rel="tag">optimizer</a> , <a href="http://www.gaobo.info/go.php/tags/freebsd/" rel="tag">freebsd</a> , <a href="http://www.gaobo.info/go.php/tags/debug/" rel="tag">debug</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">服务器</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/574.htm</link>
<title><![CDATA[网易提供的开源镜像站]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Sat, 07 Feb 2009 07:52:02 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/574.htm</guid> 
<description>
<![CDATA[ 
	貌似隐藏很久了，最近才被人挖出来，哇哈哈：<br /><a href="http://mirrors.163.com/"><a href="http://mirrors.163.com" target="_blank">http://mirrors.163.com</a></a><br />速度应该还凑合吧<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/%25E7%25BD%2591%25E6%2598%2593/" rel="tag">网易</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%25BC%2580%25E6%25BA%2590/" rel="tag">开源</a> , <a href="http://www.gaobo.info/go.php/tags/opensource/" rel="tag">opensource</a> , <a href="http://www.gaobo.info/go.php/tags/%25E9%2595%259C%25E5%2583%258F/" rel="tag">镜像</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/445.htm</link>
<title><![CDATA[CentOS安装GD库的超简单方法]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Wed, 24 Oct 2007 06:50:38 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/445.htm</guid> 
<description>
<![CDATA[ 
	默认CentOS服务器装好后运行的网站并不支持GD库，网上有很多教程非常复杂的讲述了一些安装GD库的方法。<br/>其实完全不必如此复杂。<br/><br/>由于CentOS将支持GD库的PHP作为另外一个版本的PHP来发布，如果需要服务器支持GD库，只需要直接安装带GD库的php版本即可。<br/><br/>下面是最简便的安装GD库的方法：<br/><br/>具体操作只有2个命令如下：<br/><br/>运行在线安装带GD库的PHP的命令：<br/><div class="code">yum -y install php-gd</div><br/><br/>重新启动apachce服务以使安装后的GD库生效<br/><div class="code">service httpd restart</div><br/><br/>打完收工，^_^～～<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/centos/" rel="tag">centos</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%25AE%2589%25E8%25A3%2585/" rel="tag">安装</a> , <a href="http://www.gaobo.info/go.php/tags/gd/" rel="tag">gd</a> , <a href="http://www.gaobo.info/go.php/tags/%25E7%25AE%2580%25E5%258D%2595/" rel="tag">简单</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%2596%25B9%25E6%25B3%2595/" rel="tag">方法</a> , <a href="http://www.gaobo.info/go.php/tags/yum/" rel="tag">yum</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/261.htm</link>
<title><![CDATA[在RedHat内核的Linux下使用ISO文件做虚拟光驱]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Sat, 14 Oct 2006 15:02:52 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/261.htm</guid> 
<description>
<![CDATA[ 
	Windows下的虚拟光驱非常好用，在Linux下是不是也可以有类似的虚拟光驱软件呢？<br/>其实，在以RedHat为内核的Linux系统（例如RHEL、CentOS）下，无需任何软件，就可以直接自制一个虚拟光驱。步骤如下： <br/>1.把 /dev/cdrom 删除，然后在Shell中运行：ln -s /dev/loop7 /dev/cdrom <br/>2.这里假设你的iso文件放在/root目录，运行： <br/>losetup /dev/loop7 /root/cd1.iso <br/>最后再运行mount /mnt/cdrom，现在看看，ISO文件是不是也变成了虚拟光驱了？ <br/>怎样换盘或者取消这个虚拟光驱呢？在Shell中运行：“losetup -d /dev/loop7”，就可以取消这个设备；要换盘的话只要把ISO文件关联到/dev/loop 7设备文件，运行“losetup /dev/loop7 /root/cd2.iso”就可以换成另外一张盘了！Windows下的虚拟光驱非常好用，在Linux下是不是也可以有类似的虚拟光驱软件呢 ？其实，在Linux下，无需任何软件，就可以直接自制一个虚拟光驱。步骤如下： <br/>1.把 /dev/cdrom 删除，然后在Shell中运行：ln -s /dev/loop7 /dev/cdrom <br/>2.这里假设你的iso文件放在/root目录，运行： <br/>losetup /dev/loop7 /root/cd1.iso <br/>最后再运行mount /mnt/cdrom，现在看看，ISO文件是不是也变成了虚拟光驱了？ <br/>怎样换盘或者取消这个虚拟光驱呢？在Shell中运行：“losetup -d /dev/loop7”，就可以取消这个设备；要换盘的话只要把ISO文件关联到/dev/loop 7设备文件，运行“losetup /dev/loop7 /root/cd2.iso”就可以换成另外一张盘了！<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/red/" rel="tag">red</a> , <a href="http://www.gaobo.info/go.php/tags/hat/" rel="tag">hat</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%2586%2585%25E6%25A0%25B8/" rel="tag">内核</a> , <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/iso/" rel="tag">iso</a> , <a href="http://www.gaobo.info/go.php/tags/%25E8%2599%259A%25E6%258B%259F%25E5%2585%2589%25E9%25A9%25B1/" rel="tag">虚拟光驱</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/250.htm</link>
<title><![CDATA[在Linux下挂载U盘的方法]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 06 Oct 2006 11:44:00 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/250.htm</guid> 
<description>
<![CDATA[ 
	一、插入U盘到计算机，如果目前只插入了一个U盘而且你的硬盘不是SCSI的硬盘接口的话，那它的硬件名称为:sda1。<br/>二、在mnt目录下先建立一个u的目录<br/>三、然后命令提示符#后输入：mount -t vfat /dev/sda1 /mnt/u<br/>四、卸载时用umount /mnt/u<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%258C%2582%25E8%25BD%25BD/" rel="tag">挂载</a> , <a href="http://www.gaobo.info/go.php/tags/u%25E7%259B%2598/" rel="tag">u盘</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/236.htm</link>
<title><![CDATA[Linux资料备份]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Tue, 19 Sep 2006 02:41:30 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/236.htm</guid> 
<description>
<![CDATA[ 
	安装基本的X：<br/>apt-get install x-window-system-core kde-core kde-i18n-zhcn kdm fcitx<br/>添加中文输入：<br/>nano /etc/X11/Xsession.d/95im-lauch<br/>export XMODIFIERS=@im=fcitx;<br/>fcitx<br/><br/>在Debian中安装RPM:<br/>apt-get insatll alien<br/>aline -d *.rpm----把rpm转换为deb<br/>dpkg -i *.deb<br/><br/>显示开机信息：dmesg<br/><br/>重设显卡键盘鼠标：<br/>dpkg -reconfigure xserver-xfree86<br/>或修改/etc/X11/XF86Config-4<br/><br/>重设locale:dpkg -reconfigure locales;<br/><br/>开机自动加载分区：nano /etc/fstab 加入/dev/hda1 /mnt/c ntfs defaults,user,nls=utf8 umask=000<br/><br/>ADSL拔号的命令：<br/>配置：pppoeconf/adsl-setup<br/>拔号：pon dsl-provider<br/>断线：poff<br/>记录：plog<br/>查看网卡信息：iconfig eth0/iconfig ppp0<br/><br/>解压：<br/>tar -zxvf *.tar<br/>tar -jxvf *.ta2<br/><br/>可执行文件在：<br/>/bin<br/>/sbin<br/>/usr/bin<br/>/usr/sbin<br/>/usr/local/sbin<br/><br/>环境文件：<br/>/etc/profile<br/>/home/username/.bash_profile<br/><br/>启动进入图形界面：<br/>nano /etc/inittab<br/>"id:X:initdefault":其中X表示启动方式，３为终端，５为图形界面<br/><br/>开机自动打开数字键盘：<br/>nano /etc/console-tools/config<br/>#Turn on numlock by default<br/>LEDS=+num<br/><br/>修改GRUB启动顺序:<br/>nano /boot/grub/menu.lst<br/>设置shell的分辨率：<br/>在kernel /boot.....后边加上vga=791<br/>640*480 800*600 1024*768 1280*1024<br/>256: 769 771 773 775<br/>32K: 784 787 790 793<br/>64K: 785 788 791 794<br/>16M: 786 789 792 795<br/>＃若重启黑屏，可在GRUB菜单出现时选择e，再选择kernel项，再按e进入编辑，删除最后的vga=***,保存，重启<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/%25E5%25A4%2587%25E4%25BB%25BD/" rel="tag">备份</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/235.htm</link>
<title><![CDATA[APT and Dpkg 快速参考表]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Tue, 19 Sep 2006 02:19:29 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/235.htm</guid> 
<description>
<![CDATA[ 
	普通 APT 用法<br/><br/>apt-get install <package><br/>下载 <package> 以及所有倚赖的包裹,同时进行包裹的安装或升级.如果某个包裹被设置了 hold (停止标志,就会被搁在一边(即不会被升级).更多 hold 细节请看下面.<br/><br/>apt-get remove [--purge] <package><br/>移除 <package> 以及任何倚赖这个包裹的其它包裹.<br/>--purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P .<br/><br/>apt-get update<br/>升级来自 Debian 镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了<br/>/etc/apt/sources.list 后,必须执行.<br/><br/>apt-get upgrade [-u]<br/>升级所以已经安装的包裹为最新可用版本.不会安装新的或移除老的包裹.如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为hold .apt-get update 不会升级被标志为 hold 的包裹 (这个也就是 hold 的意思).请看下文如何手动设置包裹为 hold .我建议同时使用 '-u' 选项,因为这样你就能看到哪些包裹将会被升级.<br/><br/>apt-get dist-upgrade [-u]<br/>和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系.因此具有一定的危险性.<br/><br/>apt-cache search <pattern><br/>搜索满足 <pattern> 的包裹和描述.<br/><br/>apt-cache show <package><br/>显示 <package> 的完整的描述.<br/><br/>apt-cache showpkg <package><br/>显示 <package> 许多细节,以及和其它包裹的关系.<br/><br/>dselect<br/>console-apt<br/>aptitude<br/>gnome-apt<br/>APT 的几个图形前端(其中一些在使用前得先安装).这里 dselect 无疑是最强大的,也是最古老,最难驾驭.<br/><br/>普通 Dpkg 用法<br/>dpkg -i <package.deb><br/>安装一个 Debian 包裹文件;如你手动下载的文件.<br/><br/>dpkg -c <package.deb><br/>列出 <package.deb> 的内容.<br/><br/>dpkg -I <package.deb><br/>从 <package.deb> 中提取包裹信息.<br/><br/>dpkg -r <package><br/>移除一个已安装的包裹.<br/><br/>dpkg -P <package><br/>完全清除一个已安装的包裹.和 remove 不同的是, remove 只是删掉数据和可执行文件, purge 另外还删除所有的配制文件.<br/><br/>dpkg -L <package><br/>列出 <package> 安装的所有文件清单.同时请看 dpkg -c 来检查一个 .deb 文件的内容.<br/><br/>dpkg -s <package><br/>显示已安装包裹的信息.同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个<br/>.deb 文件中提取的包裹信息.<br/><br/>dpkg-reconfigure <package><br/>重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面).你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权.例如,重新配制 debconf ,使用一个 dialog 前端,简单运行:<br/><br/>dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟<br/><br/>echo "<package> hold" &#124; dpkg --set-selections<br/>设置 <package> 的状态为 hlod (命令行方式)<br/><br/>dpkg --get-selections "<package>"<br/>取的 <package> 的当前状态 (命令行方式)<br/><br/>支持通配符,如:<br/>Debian:~# dpkg --get-selections *wine*<br/>libwine hold<br/>libwine-alsa hold<br/>libwine-arts hold<br/>libwine-dev hold<br/>libwine-nas hold<br/>libwine-print hold<br/>libwine-twain hold<br/>wine hold<br/>wine+ hold<br/>wine-doc hold<br/>wine-utils hold<br/><br/>例如:<br/>大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:<br/><br/>方法一:<br/>Debian:~# echo "gaim hold" &#124; dpkg --set-selections<br/>然后用下面命令检查一下:<br/>Debian:~# dpkg --get-selections "gaim"<br/>gaim hold<br/>现在的状态标志是 hold,就不能被升级了.<br/><br/>如果想恢复怎么办呢?<br/>Debian:~# echo "gaim install" &#124; dpkg --set-selections<br/>Debian:~# dpkg --get-selections "gaim"<br/>gaim install<br/>这时状态标志又被重置为 install,可以继续升级了.<br/><br/>同志们会问,哪个这些状态标志都写在哪个文件中呢?<br/>在 /var/lib/dpkg/status 里,你也可以通过修改这个文件实现 hold.<br/><br/>有时你会发现有的软件状态标志是 purge,不要奇怪.<br/>如:事先已经安装了 amsn, 然后把它卸了.<br/>apt-get remove --purge amsn<br/>那么状态标志就从 install 变成 purge.<br/><br/>方法二:<br/>在/etc/apt 下手动建一个 preferences 文件<br/>内容：<br/>Package: gaim<br/>Pin: version 0.58*<br/>保存<br/>更详细内容请看:<br/><a href="http://linuxsir.com/bbs/showthread.p...threadid=22601" target="_blank">http://linuxsir.com/bbs/showthread.p...threadid=22601</a><br/><br/>dpkg -S <file><br/>在包裹数据库中查找 <file>,并告诉你哪个包裹包含了这个文件.(注:查找的是事先已经安装的包裹)<br/><br/>从源码建立deb packages<br/><br/>apt-get source [-b] <package> <br/>下载一个源码的包并解开。<br/>你必须在你的/etc/apt/sources.list文件里写入一条 deb-src 的记录才能完成这项工作。<br/>如果你输入了一个-b参数，并且是以root的身份，deb包会被自动的创建。<br/><br/>apt-get build-dep <package> <br/>自动下载并安装通过源码创建 <package> 时需要的包。<br/>只有apt 0.5以上版本才支持这个功能。<br/>现在woody和以上版本包含了这个功能。<br/>如果你使有一个旧版本的apt，查找依赖性最简单的方法是查看源码包中 debian/control 这个文件，<br/>注意这个路径是相对的，是包内的路径。<br/><br/>普通的用法，结合 apt-get source -b,例子 (as root)：<br/><br/>apt-get build-dep <package><br/>apt-get source -b <package><br/><br/>会下载源码包，建立依赖性，然后尝试编译源码。<br/><br/>dpkg-source -x <package.dsc><br/>如果你手工下载了一个程序的源码包，其中包含了几个类似 .orig.tar.gz , .dsc ,<br/>以及 .diff.gz 之类的文件，<br/>那么你就可以对 .dsc 文件使用这个命令来 unpack 源码包。<br/><br/>dpkg-buildpackage<br/>从 Debian 源码树建立一个deb包。你必须在source tree的主目录才能生效。例如：<br/><br/>dpkg-buildpackage -rfakeroot -uc -b<br/><br/>这里 '-rfakeroot' 指定命令使用 fakeroot 程序来模仿 root 权限 (来实现所有者(ownership)目的)，<br/>'-uc' 表示 "Don't cryptographically sign the changelog", '-b' 代表只建立二进制包.<br/><br/>debuild<br/>一个快速打包脚本类似 dpkg-buildpackage ,能自动的识别是否使用 fakeroot,<br/>同时为你运行 lintian 和 gpg <br/><br/>修正倚赖关系<br/><br/>dpkg --configure --pending<br/>如果dpkg在apt-get install upgrade dist-uptradeing 的时候出错退出，<br/>尝试使用此命令来配置已经unpack的包。<br/>然后再用 apt-get install ，upgrade, or dist-upgrade -f ，<br/>然后再用 apt-get install, upgrade, or dist-upgrade.<br/><br/>可能会重复多次，这样通常可以解决大多数的依赖性问题。<br/>(同时,如果提示由于某种原因需要某个特定的包裹,你可以常识安装或卸载这个包)<br/><br/>apt-get install -f<br/>apt-get upgrade -f<br/>apt-get dist-upgrade -f <br/>尝试修正上述过程中出现依赖性关系<br/>注意 apt-get install -f 不需要 <package> 作为参数。<br/><br/>BTW:论坛很难提供htm效果,故提供下载<br/>感谢pye quanliking的辛苦劳动<br/>__________________<br/>Debian的知识库：<a href="http://debian.linuxsir.org" target="_blank">http://debian.linuxsir.org</a><br/>Tags - <a href="http://www.gaobo.info/go.php/tags/debian/" rel="tag">debian</a> , <a href="http://www.gaobo.info/go.php/tags/apt/" rel="tag">apt</a> , <a href="http://www.gaobo.info/go.php/tags/dpkg/" rel="tag">dpkg</a> , <a href="http://www.gaobo.info/go.php/tags/%25E4%25BD%25BF%25E7%2594%25A8/" rel="tag">使用</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/234.htm</link>
<title><![CDATA[VI编辑器的基本使用方法]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Mon, 18 Sep 2006 13:46:08 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/234.htm</guid> 
<description>
<![CDATA[ 
	　　vi编辑器是所有Unix及Linux系统下标准的编辑器，它的强大不逊色于任何最新的文本编辑器，这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本，vi编辑器是完全相同的，因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器，学会它后，您将在Linux的世界里畅行无阻。<br/>　　<br/>　　1、vi的基本概念 <br/>　　　　基本上vi可以分为三种状态，分别是命令模式（command mode）、插入模式（Insert mode）和底行模式（last line mode），各模式的功能区分如下： <br/>　　<br/>　　1) 命令行模式command mode） <br/>　　<br/>　　　　控制屏幕光标的移动，字符、字或行的删除，移动复制某区段及进入Insert mode下，或者到 last line mode。 <br/>　　<br/>　　2) 插入模式（Insert mode） <br/>　　<br/>　　　　只有在Insert mode下，才可以做文字输入，按「ESC」键可回到命令行模式。 <br/>　　<br/>　　3) 底行模式（last line mode） <br/>　　<br/>　　　　将文件保存或退出vi，也可以设置编辑环境，如寻找字符串、列出行号……等。 <br/>　　<br/>　　不过一般我们在使用时把vi简化成两个模式，就是将底行模式（last line mode）也算入命令行模式command mode）。 <br/><br/>　　2、vi的基本操作 <br/>　　a) 进入vi <br/>　　<br/>　　　　在系统提示符号输入vi及文件名称后，就进入vi全屏幕编辑画面： <br/>　　<br/>　　　　　$ vi myfile <br/>　　　　<br/>　　　　不过有一点要特别注意，就是您进入vi之后，是处于「命令行模式（command mode）」，您要切换到「插入模式（Insert mode）」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标，结果电脑一直哔哔叫，把自己气个半死，所以进入vi后，先不要乱动，转换到「插入模式（Insert mode）」再说吧！ <br/>　　<br/>　　b) 切换至插入模式（Insert mode）编辑文件 <br/>　　<br/>　　　　在「命令行模式（command mode）」下按一下字母「i」就可以进入「插入模式（Insert mode）」，这时候你就可以开始输入文字了。 <br/>　　<br/>　　c) Insert 的切换 <br/>　　<br/>　　　　您目前处于「插入模式（Insert mode）」，您就只能一直输入文字，如果您发现输错了字！想用光标键往回移动，将该字删除，就要先按一下「ESC」键转到「命令行模式（command mode）」再删除文字。 <br/>　　<br/>　　d) 退出vi及保存文件 <br/>　　<br/>　　　　在「命令行模式（command mode）」下，按一下「：」冒号键进入「Last line mode」，例如： <br/>　　<br/>　　: w filename （输入 「w filename」将文章以指定的文件名filename保存） 　　<br/>　　: wq (输入「wq」，存盘并退出vi) <br/>　　: q! (输入q!， 不存盘强制退出vi) <br/>　　<br/>　　3、命令行模式（command mode）功能键 <br/>　　1）. 插入模式 <br/>　　<br/>　　　　按「i」切换进入插入模式「insert mode」，按“i”进入插入模式后是从光标当前位置开始输入文件； 　　<br/>　　　　按「a」进入插入模式后，是从目前光标所在位置的下一个位置开始输入文字； 　　<br/>　　　　按「o」进入插入模式后，是插入新的一行，从行首开始输入文字。 <br/>　　<br/>　　2）. 从插入模式切换为命令行模式 <br/>　　<br/>　　　　按「ESC」键。 <br/>　　<br/>　　3）. 移动光标 <br/>　　<br/>　　　　vi可以直接用键盘上的光标来上下左右移动，但正规的vi是用小写英文字母「h」、「j」、「k」、「l」，分别控制光标左、下、上、右移一格。 <br/>　　<br/>　　　　按「ctrl」+「b」：屏幕往“后”移动一页。 　　<br/>　　　　按「ctrl」+「f」：屏幕往“前”移动一页。 　　<br/>　　　　按「ctrl」+「u」：屏幕往“后”移动半页。 　　<br/>　　　　按「ctrl」+「d」：屏幕往“前”移动半页。 　<br/>　　　　按数字「0」：移到文章的开头。 　　<br/>　　　　按「G」：移动到文章的最后。<br/>　　　　按「$」：移动到光标所在行的“行尾”。 　　<br/>　　　　按「^」：移动到光标所在行的“行首” <br/>　　　　按「w」：光标跳到下个字的开头 <br/>　　　　按「e」：光标跳到下个字的字尾 <br/>　　　　按「b」：光标回到上个字的开头 <br/>　　　　按「#l」：光标移到该行的第#个位置，如：5l,56l。 <br/><br/>　　4）. 删除文字 <br/>　　<br/>　　　　「x」：每按一次，删除光标所在位置的“后面”一个字符。　　<br/>　　　　「#x」：例如，「6x」表示删除光标所在位置的“后面”6个字符。 　　<br/>　　　　「X」：大写的X，每按一次，删除光标所在位置的“前面”一个字符。 　　<br/>　　　　「#X」：例如，「20X」表示删除光标所在位置的“前面”20个字符。 　　<br/>　　　　「dd」：删除光标所在行。 　　<br/>　　　　「#dd」：从光标所在行开始删除#行 　　<br/>　　5）. 复制 <br/>　　<br/>　　　　「yw」：将光标所在之处到字尾的字符复制到缓冲区中。 　<br/>　　　　「#yw」：复制#个字到缓冲区 　　<br/>　　　　「yy」：复制光标所在行到缓冲区。 　　<br/>　　　　「#yy」：例如，「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 　<br/>　　　　「p」：将缓冲区内的字符贴到光标所在位置。注意：所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。 <br/>　　<br/>　　6）. 替换 <br/>　　<br/>　　　　「r」：替换光标所在处的字符。 　　<br/>　　　　「R」：替换光标所到之处的字符，直到按下「ESC」键为止。 <br/>　　<br/>　　7）. 回复上一次操作 <br/>　　<br/>　　　　「u」：如果您误执行一个命令，可以马上按下「u」，回到上一个操作。按多次“u”可以执行多次回复。 <br/><br/>　　8）. 更改 <br/>　　<br/>　　　　「cw」：更改光标所在处的字到字尾处 　　<br/>　　　　「c#w」：例如，「c3w」表示更改3个字 <br/>　　<br/>　　9）. 跳至指定的行 <br/>　　<br/>　　　　「ctrl」+「g」列出光标所在行的行号。 　　<br/>　　　　「#G」：例如，「15G」，表示移动光标至文章的第15行行首。 <br/>　　<br/>　　4、Last line mode下命令简介 <br/>　　　　在使用「last line mode」之前，请记住先按「ESC」键确定您已经处于「command mode」下后，再按「：」冒号即可进入「last line mode」。 <br/>　　<br/>　　A) 列出行号 <br/>　　<br/>　　　「set nu」：输入「set nu」后，会在文件中的每一行前面列出行号。 <br/>　　<br/>　　B) 跳到文件中的某一行 <br/>　　<br/>　　　「#」：「#」号表示一个数字，在冒号后输入一个数字，再按回车键就会跳到该行了，如输入数字15，再回车，就会跳到文章的第15行。 <br/>　　<br/>　　C) 查找字符 <br/>　　<br/>　　　「/关键字」：先按「/」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往后寻找到您要的关键字为止。 　　<br/>　　　「?关键字」：先按「?」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往前寻找到您要的关键字为止。 <br/>　　<br/>　　D) 保存文件 <br/>　　<br/>　　　「w」：在冒号输入字母「w」就可以将文件保存起来。 <br/><br/>　　E) 离开vi <br/>　　<br/>　　　「q」：按「q」就是退出，如果无法离开vi，可以在「q」后跟一个「!」强制离开vi。 <br/>　　<br/>　　　「qw」：一般建议离开时，搭配「w」一起使用，这样在退出的时候还可以保存文件。 <br/>　　<br/>　　5、vi命令列表 <br/>　　1、下表列出命令模式下的一些键的功能： <br/>　　<br/>　　h <br/>　　左移光标一个字符 　　<br/>　　l <br/>　　右移光标一个字符 　　<br/>　　k <br/>　　光标上移一行 　　<br/>　　j <br/>　　光标下移一行 　　<br/>　　^ <br/>　　光标移动至行首 <br/>　　0 <br/>　　数字“0”，光标移至文章的开头 <br/>　　G <br/>　　光标移至文章的最后 <br/>　　$ <br/>　　光标移动至行尾 　　<br/>　　Ctrl+f <br/>　　向前翻屏 　　<br/>　　Ctrl+b <br/>　　向后翻屏 　　<br/>　　Ctrl+d <br/>　　向前翻半屏 <br/><br/>　　Ctrl+u <br/>　　向后翻半屏 　　<br/>　　i <br/>　　在光标位置前插入字符 　　<br/>　　a <br/>　　在光标所在位置的后一个字符开始增加 　　<br/>　　o <br/>　　插入新的一行，从行首开始输入 　　<br/>　　ESC <br/>　　从输入状态退至命令状态 　　<br/>　　x <br/>　　删除光标后面的字符 　　<br/>　　#x <br/>　　删除光标后的＃个字符 　　<br/>　　X <br/>　　(大写X)，删除光标前面的字符 　<br/>　　#X <br/>　　删除光标前面的#个字符 　　<br/>　　dd <br/>　　删除光标所在的行 　　<br/>　　#dd <br/>　　删除从光标所在行数的#行 　　<br/>　　yw <br/>　　复制光标所在位置的一个字 　<br/>　　#yw <br/>　　复制光标所在位置的#个字 <br/><br/>　　yy <br/>　　复制光标所在位置的一行 　　<br/>　　#yy <br/>　　复制从光标所在行数的#行 　　<br/>　　p <br/>　　粘贴 　　<br/>　　u <br/>　　取消操作 　　<br/>　　cw <br/>　　更改光标所在位置的一个字 　　<br/>　　#cw <br/>　　更改光标所在位置的#个字 <br/><br/>　　2、下表列出行命令模式下的一些指令 <br/>　　w filename <br/>　　储存正在编辑的文件为filename 　<br/>　　wq filename <br/>　　储存正在编辑的文件为filename，并退出vi <br/>　　q! <br/>　　放弃所有修改，退出vi <br/>　　set nu <br/>　　显示行号 　<br/>　　/或? <br/>　　查找，在/后输入要查找的内容 　　<br/>　　n <br/>　　与/或?一起使用，如果查找的内容不是想要<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/vi/" rel="tag">vi</a> , <a href="http://www.gaobo.info/go.php/tags/%25E4%25BD%25BF%25E7%2594%25A8/" rel="tag">使用</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/229.htm</link>
<title><![CDATA[配置SAMBA实例]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 14 Sep 2006 14:35:07 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/229.htm</guid> 
<description>
<![CDATA[ 
	SAMBA简单应用<br/><br/>首先： 做一个共享目录public ,使匿名用户可读，可写。<br/> &nbsp; &nbsp;第一步 编辑samba配置文件　/etc/samba/smb.conf<br/><div class="code"> &nbsp; &nbsp;&#91;global&#93; 全局配置<br/> &nbsp; &nbsp;workgroup = MYHOME &nbsp; &nbsp; －－－－ 指定工作组<br/> &nbsp; &nbsp;server string = File Server －－－－ 服务器的说明　<br/> &nbsp; &nbsp;security = share &nbsp; －－－－安全级别: 共分四种 <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.share (任何用户都不需要密码，直接可以访问)<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.user &nbsp; 要提供用户名和密码才能访问<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.server 将用户和密码提交到另一服务器验证，如果递交失败，就退到user安全级。 要求网络上存在一台Windows的主域控制器，samba把用户名和密码递交给它去验证。<br/> &nbsp; &nbsp; &nbsp; &nbsp;<br/> &nbsp; &nbsp;&#91;public&#93; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp;comment = Public Stuff &nbsp; &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp;path = /home/public &nbsp; &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp;public = yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp;browseable = yes &nbsp; &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp;writeable = yes</div><br/>常用参数:<br/> &nbsp; &nbsp;comment : &nbsp; &nbsp; &nbsp; &nbsp; 目录说明 <br/> &nbsp; &nbsp;path : &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 目录路径<br/> &nbsp; &nbsp;public &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 开放共享　默认为no ,　如果＝yes 表示无需身份验证<br/> &nbsp; &nbsp;browseable: &nbsp; &nbsp; &nbsp; 显示共享名称。<br/> &nbsp; &nbsp;valid users: &nbsp; &nbsp; &nbsp; 允许列表中的用户访问<br/> &nbsp; &nbsp;read only: &nbsp; &nbsp; &nbsp; &nbsp; 默认为yes，共享目录只读 。<br/> &nbsp; &nbsp;write able: &nbsp; &nbsp; &nbsp; &nbsp; write able =no 与read only = yes　一样的效果<br/> &nbsp; &nbsp;wire list: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果前面只读，只有在此里面的用户才有写的权利<br/> &nbsp; &nbsp;creat mask: &nbsp; &nbsp; &nbsp; 指定在共享目录里面建立文件的权限, 权限最高只能为 766<br/> &nbsp; &nbsp;directory mask: &nbsp; 指定建立目录的权限<br/> &nbsp; &nbsp;force user: &nbsp; &nbsp; &nbsp; &nbsp; 指定存取的用户张号<br/> &nbsp; &nbsp;force group： &nbsp; &nbsp; 指定用户存取组<br/><br/> &nbsp;然后 建立共享目录，并设定目录的权限<br/><div class="code"> &nbsp; # mkdir /home/public<br/> &nbsp; &nbsp;# chmod 777 /home/public</div><br/>实例：公司有三个部门分别是: 业务 财务 经理<br/>每个部门假设有2个人员,分别为 yewu01,yewu02 caiwu01,caiwu02 jingli01 jingli02<br/>1.每个用户可以访问自己的宿主目录，并且只有该用户能访问宿主目录，并具有完全的权限，而其他人不能看到你的宿主目录。<br/>2.建立一个caiwu 的文件夹，要求对财务组和领导组的可看到，只有caiwu01有写入的权限，其他的不能访问。<br/>3.建立一个yewu的文件夹，要求对业务组可读写，经理组的可查看。<br/>4.建立一个公司文件共享目录，要求全部人可查看，但每个人只能删除自己的文件，不能删除别人。<br/><br/> &nbsp;第一步 先建立用户的帐号与所属工作组, 建立对应的目录并给目录777的权限<br/><div class="code"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# groupadd caiwu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# groupadd yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# groupadd jinli<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd caiwu01 -g caiwu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd caiwu02 -g caiwu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# userdel yewu01 -g yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd yewu01 -g yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd yewu02 -g yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd jinli01 -g jinli<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# useradd jinli02 -g jinli<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# mkdir -p /home/samba/caiwu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# mkdir -p /home/samba/yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# mkdir -p /home/samba/public<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# chmod 777 -R /home/samba<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;这里给777的权限,避免后面的因为权限而产生的麻烦.<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;使用smbpasswd -a caiwu01(caiwu02...)将6个用户加到samba用户中.</div><br/><br/>第二步 设定samba配置文件.<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;一般主要修改下面几个选项就可以了<br/><div class="code">#======================= Global Settings=====================================<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;global&#93;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;workgroup = MYHOME<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hosts allow = 192.168.1. &nbsp; (安全设定允许访问的网段, 注释掉意思不加限制允许任意网络访问) <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;security = user<br/>#============================ Share Definitions ==============================<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;homes&#93;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;comment = Home Directories<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;browseable = no<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writable = yes<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;上面是设定每个用户的宿主目录, 一般samba是设定好的,无需更改.<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;caiwu&#93;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;comment = caiwu directory<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;path = /home/samba/caiwu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public = no<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;write list = caiwu01<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;valid users = @caiwu,@jinli<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;yewu&#93;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;comment = yewu directory<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;path = /home/samba/yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public = no<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;write list = @yewu<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;valid users = @jinli<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;public&#93;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;comment = Public Stuff<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;path = /home/samba/public<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public = yes<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;browseable = yes<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writeable = yes<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;完成后记得重起samba<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# service smb restart</div><br/><br/>第三步 设定public的权限，因为samba的不能做到每个人只能删除自己的文件，不能删除别人的功能，linux设置目录Sticky bit权限。目录设定了Sticky的权限，在这个目录下的文件只有root与文件的所有者才能删除，这样可以实现我们上面第四个要求。<br/><div class="code"># chmod 1777 /home/samba/public</div><br/>五 &nbsp; 测试<br/> &nbsp; &nbsp;用windows或samba client测试你所做的是否正确。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/samba/" rel="tag">samba</a> , <a href="http://www.gaobo.info/go.php/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/227.htm</link>
<title><![CDATA[Vsftp快速架设]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 14 Sep 2006 14:28:41 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/227.htm</guid> 
<description>
<![CDATA[ 
	 &nbsp; &nbsp;Vsftpd是一款十分不错的ftp服务器软件，用它可以很快地部署一个功能强大的ftp服务器。<br/>依照下面的步骤一步步完成架设：<br/>1.下载软件vsftpd-2.0.1.tar.gz。这可避免rpm包出现依赖这样的麻烦。<br/>2.解压文件vsftpd-2.0.1.tar.gz 。<br/><div class="code"># tar zxvf vsftpd-2.0.1.tar.gz</div><br/>3.进入目录vsftpd-2.0.1。<br/><div class="code"># cd vsftpd-2.0.1</div><br/>4.编译。<br/><div class="code"># make</div><br/>5.创建目录<br/><div class="code"># mkdir /var/ftp</div><br/>6.添加用户<br/><div class="code"># useradd –d /var/ftp ftp</div><br/>7.更改目录属组和权限<br/><div class="code"># chown root.root /var/ftp ; chmod og-w /var/ftp</div><br/>8.安装软件<br/><div class="code"># make install<br/>9.拷贝文件<br/>&#91;code&#93;# cp vsftpd.conf /etc/vsftpd.conf ; cp RedHat/vsftpd.pam /etc/pam.d/ftp</div><br/>10.修改配置文件<br/><div class="code"># vi /etc/vsftpd.conf</div><br/>把 local_enable=YES write_enable=YES和local_umask=022前面的注释取消，然后加上一行 listen=YES 。<br/>11.修改文件/etc/rc.local , 把行/usr/local/sbin/vsftpd& 插入文件中，以实现开机自动启动。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/vsftp/" rel="tag">vsftp</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%259E%25B6%25E8%25AE%25BE/" rel="tag">架设</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/226.htm</link>
<title><![CDATA[Mysql数据库快速配置]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 14 Sep 2006 14:24:05 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/226.htm</guid> 
<description>
<![CDATA[ 
	MySQL最简单的安装过程如下：<br/>1.下载：mysql-4.1.20.tar.gz（<a href="http://www.mysql.org" target="_blank">www.mysql.org</a>）<br/>2.//创建用户与组<br/><div class="code">&#91;root@localhost root&#93;#groupadd mysql<br/>&#91;root@localhost root&#93;#useradd -g mysql mysql</div>&nbsp; &nbsp; &nbsp; <br/>3.//解压<br/><div class="code">&#91;root@localhost root&#93;#tar zxvf mysql-4.1.20.tar.gz</div>&nbsp;<br/>4.//安装<br/><div class="code">&#91;root@localhost root&#93;#cd mysql-4.1.20<br/>&#91;root@localhost mysql-4.1.20&#93;# mkdir /opt/mysq<br/>&#91;root@localhost mysql-4.1.20&#93;# ./configure --prefix=/opt/mysql<br/>&#91;root@localhost mysql-4.1.20&#93;# make<br/>&#91;root@localhost mysql-4.1.20&#93;# make install</div><br/><br/>5.//配置<br/><div class="code">&#91;root@localhost mysql-4.1.20&#93;# cd support-files/<br/>&#91;root@localhost support-files&#93;# cp my-medium.cnf /etc/my.cnf<br/>&#91;root@localhost support-files&#93;# cd /opt/mysql/bin<br/>&#91;root@localhost bin&#93;# ./mysql_install_db --user=mysql<br/>&#91;root@localhost bin&#93;# cd ..<br/>&#91;root@localhost mysql&#93;# chown -R root .<br/>&#91;root@localhost mysql&#93;# chown -R mysql var<br/>&#91;root@localhost mysql&#93;# chgrp -R mysql .<br/>&#91;root@localhost mysql&#93;# cd bin<br/>&#91;root@localhost bin&#93;# ./mysqladmin -u root password 123456</div><br/>6.//启动与登陆<br/><div class="code">&#91;root@localhost bin&#93;# ./mysqld_safe --user=mysql &amp;<br/>&#91;root@localhost bin&#93;# ./mysql -u root -p</div><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">Enter password: <br/>Welcome to the MySQL monitor. Commands end with ; or &#92;g.<br/>Your MySQL connection id is 15 to server version: 4.1.20-log<br/><br/>Type 'help;' or '&#92;h' for help. Type '&#92;c' to clear the buffer.<br/><br/>mysql> show databases;<br/>+----------+<br/>&#124; Database &#124;<br/>+----------+<br/>&#124; mysql &nbsp; &#124;<br/>&#124; test &nbsp; &#124;<br/>&#124; test1 &nbsp; &#124;<br/>+----------+<br/>3 rows in set (0.00 sec)<br/><br/>mysql> exit<br/>Bye</div></div><br/>7.开机启动<br/> &nbsp;方法是将"/opt/mysql/bin/mysqld_safe --user=mysql &"加入到"/etc/rc.local"文件中来实现随机启动。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a> , <a href="http://www.gaobo.info/go.php/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/225.htm</link>
<title><![CDATA[Apache快速构建]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 14 Sep 2006 14:22:07 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/225.htm</guid> 
<description>
<![CDATA[ 
	平时做的多的就是WEB服务器的构建，其中以Apache应用最为广泛，下面我们以最快的速度架设基于Apache的WEB服务器：<br/>1.下载软件包httpd-2.2.0.tar.gz ，可在<a href="http://www.apache.org" target="_blank">www.apache.org</a>（官网）获取该软件包；<br/>2.<br/><div class="code"># tar zxvf httpd-2.2.0.tar.gz &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //解压文件<br/># cd httpd-2.2.0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //转换到解开的文件目录<br/># ./configure --prefix=/opt/apache &nbsp; &nbsp; &nbsp; //配置，指定路径<br/># make<br/># make install</div><br/>3.此为源码安装方式，其配置是/opt/apache/conf/httpd.conf文件。<br/>4.让服务随机启动，最简便的方法是/etc/rc.local内，加入：/opt/apache/bin/httpd &<br/>5.注意：在httpd-2.2.0版本里部分配置文件是以包含的形式出现在httpd.conf里的，详细配置要在/opt/apache/include目录下进行。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/apache/" rel="tag">apache</a> , <a href="http://www.gaobo.info/go.php/tags/%25E6%259E%2584%25E5%25BB%25BA/" rel="tag">构建</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/224.htm</link>
<title><![CDATA[用Linux构建路由器]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 14 Sep 2006 14:20:20 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/224.htm</guid> 
<description>
<![CDATA[ 
	 &nbsp;网络结构如图，Linux路由器这台计算机标识为A，它与三个网段相连，192.168.1.0/24，10.0.0.0/8，172.16.0.0/16。<br/><a href="http://www.gaobo.info/attachment/1158243423_0.png" target="_blank"><img src="http://www.gaobo.info/attachment/1158243423_0.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>A计算机必须拥有三块网卡，分别与三个网段相连。<br/><br/>假设：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">eth0与172.16.0.0相连，<br/>eth1与10.0.0.0相连，<br/>eth2与192.168.1.0相连。</div></div><br/>首先来配置eth0。给这个网络接口分配地址172.16.1.1，运行下列命令： <br/><div class="code"># ifconfig eth0 172.16.1.1 netmask 255.255.0.0</div><br/>为了使这个地址不再计算机重新启动后消失，<br/>编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件，修改为如下格式：<br/><div class="code">DEVICE = eth0<br/>ONBOOT = yes <br/>BROADCAST = 172.16.255.255 <br/>NETWORK = 172.16.0.0 <br/>NETMASK = 255.255.0.0 <br/>IPADDR = 172.16.1.1</div><br/><br/>增加一条静态路由：<br/><div class="code"># route add -net 172.16.0.0 netmask 255.255.0.0</div><br/>这样系统中就增加了一条静态路由：<br/><div class="code"># route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface <br/>172.16.0.0 * 255.255.0.0 U 0 0 0 eth0</div><br/>接下来，配置eth1，eth1与10.0.0.0网段相连，分配给它的地址是10.254.254.254，使用ifconfig命令为它配置参数：<br/><div class="code"># ifconfig eth1 10.254.254.254 netmask 255.0.0.0</div><br/><br/>同样编辑/etc/sysconfig/network-scripts目录下的ifcfg-eth1文件，内容如下：<br/><div class="code">DEVICE = eth1 <br/>ONBOOT = yes <br/>BROADCAST = 10.255.255.255<br/>NETWORK = 10.0.0.0<br/>NETMASK = 255.0.0.0<br/>IPADDR = 10.254.254.254</div><br/>再增加一条静态路由： <br/><div class="code"># route add -net 10.0.0.0 netmask 255.0.0.0</div><br/><br/>网络中当前的路由表为<br/><div class="code"># route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface<br/>172.16.0.0 * 255.255.0.0 U 0 0 0 eth0<br/>10.0.0.0 * 255.0.0.0 U 0 0 0 eth1</div><br/>最后配置eth3，它连接192.168.1.0网段，分配的IP地址是192.168.1.254，执行下列命令：<br/><div class="code"># ifconfig eth2 192.168.1.254 netmask 255.255.255.0</div><br/>编辑/etc/sysconfig/network-scripts目录下的ifcfg-eth2文件，内容如下：<br/><div class="code">DEVICE = eth2<br/>ONBOOT = yes <br/>BROADCAST = 192.168.1.255<br/>NETWORK = 192.168.1.0<br/>NETMASK = 255.255.255.0<br/>IPADDR = 192.168.1.254</div><br/>再增加一条静态路由： <br/><div class="code"># route add -net 192.168.1.0 netmask 255.255.255.0</div><br/>这样网络中就有三条静态路由记录了：<br/><div class="code"># route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface<br/>172.16.0.0 * 255.255.0.0 U 0 0 0 eth0<br/>10.0.0.0 * 255.0.0.0 U 0 0 0 eth1<br/>192.168.1.0 * 255.255.255.0 U 0 0 0 eth2</div><br/>还要为系统增加一条缺省路由，因为缺省的路由是把所有的数据包都发往它的上一级网关（假设地址是172.16.1.100，这个地址依赖于使用的网络而定，由网络管理员分配），因此增加如下的缺省路由记录：<br/><div class="code"># route add default gw 172.16.1.100</div><br/>这样系统的静态路由表建立完成，它的内容是<br/><div class="code"># route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface<br/>172.16.0.0 * 255.255.0.0 U 0 0 0 eth0<br/>10.0.0.0 * 255.0.0.0 U 0 0 0 eth1<br/>192.168.1.0 * 255.255.255.0 U 0 0 0 eth2<br/>default 172.16.1.100 0.0.0.0 UG 0 0 0 eth0</div><br/>最后一步，要增加系统的IP转发功能。这个功能由/proc/sys/net/ipv4目录下的ip_forward文件控制，执行如下命令打开ip转发功能：<br/><div class="code">echo 1 &gt; /proc/sys/net/ipv4/ip_forward</div><br/>这样我们的路由器基本上是配置好了<br/><br/>测试路由器的工作情况。<br/>在linux路由器上测试：<br/><br/>第一步，测试自身网络是否工作正常，执行如下命令<br/><div class="code">ping 172.16.1.1 <br/>ping 192.168.1.254 <br/>ping 10.254.254.254</div><br/>如果这些地址都能ping通，则第一步通过，否则查找原因，排除错误。<br/><br/>第二步，测试与上一级网关之间是否连通<br/><div class="code">ping 172.16.1.100</div><br/>如果通畅，则正常；否则查找错误原因。<br/><br/>在192.168.1.0网络内测试，假设它的地址是192.168.1.1，<br/>第一步，测试自身是否工作正常， ping 192.168.1.1<br/>第二步，测试与网关是否连通， ping 192.168.1.254<br/>第三步，测试与10.254.254.99是否连通，这是10.0.0.0网段内的一台计算机 ping 10.254.254.99<br/>第四步，测试与外网地址是否连通 ping 172.16.1.100 如果连通了，表示路由器配置正确，否则，查找原因，并排除之。<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/%25E8%25B7%25AF%25E7%2594%25B1/" rel="tag">路由</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/228.htm</link>
<title><![CDATA[Linux下怎么解压]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Mon, 11 Sep 2006 14:30:15 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/228.htm</guid> 
<description>
<![CDATA[ 
	Linux下怎么解压后缀名是gzip的文件？ <br/>1.以.a为扩展名的文件: <br/>#tar xv file.a <br/>2.以.z为扩展名的文件: <br/>#uncompress file.Z <br/>3.以.gz为扩展名的文件: <br/>#gunzip file.gz <br/>4.以.bz2为扩展名的文件: <br/>#bunzip2 file.bz2 <br/>5.以.tar.Z为扩展名的文件: <br/>#tar xvZf file.tar.Z <br/>或 #compress -dc file.tar.Z &#124; tar xvf - <br/>6.以.tar.gz/.tgz为扩展名的文件: <br/>#tar xvzf file.tar.gz <br/>或 gzip -dc file.tar.gz &#124; tar xvf - <br/>7.以.tar.bz2为扩展名的文件: <br/>#tar xvIf file.tar.bz2 <br/>或 bzip2 -dc file.tar.bz2 &#124; xvf - <br/>8.以.cpio.gz/.cgz为扩展名的文件: <br/>#gzip -dc file.cgz &#124; cpio -div <br/>9.以.cpio/cpio为扩展名的文件: <br/>#cpio -div file.cpio <br/>或cpio -divc file.cpio <br/>10.以.rpm为扩展名的文件安装: <br/>#rpm -i file.rpm <br/>11.以.rpm为扩展名的文件解压缩： <br/>#rpm2cpio file.rpm &#124; cpio -div <br/>12.以.deb为扩展名的文件安装： <br/>#dpkg -i file.deb <br/>13.以.deb为扩展名的文件解压缩: <br/>#dpkg-deb --fsys-tarfile file.deb &#124; tar xvf - ar p <br/>file.deb data.tar.gz &#124; tar xvzf - <br/>14.以.zip为扩展名的文件: <br/>#unzip file.zip<br/><br/>在linux下解压Winzip格式的文件 <br/>　　要是装了jdk的话，可以用jar命令；还可以使用unzip命令。 <br/>直接解压.tar.gz文件 <br/>　　xxxx.tar.gz文件使用tar带zxvf参数，可以一次解压开。XXXX为文件名。 例如： <br/>$tar zxvf xxxx.tar.gz 各种压缩文件的解压（安装方法） <br/><br/>文件扩展名 解压（安装方法） <br/><br/>.a ar xv file.a <br/>.Z uncompress file.Z <br/>.gz gunzip file.gz <br/>.bz2 bunzip2 file.bz2 <br/>.tar.Z tar xvZf file.tar.Z <br/>compress -dc file.tar.Z &#124; tar xvf - <br/>.tar.gz/.tgz tar xvzf file.tar.gz <br/>gzip -dc file.tar.gz &#124; tar xvf - <br/>.tar.bz2 tar xvIf file.tar.bz2 <br/>bzip2 -dc file.tar.bz2 &#124; xvf - <br/>.cpio.gz/.cgz gzip -dc file.cgz &#124; cpio -div <br/>.cpio/cpio cpio -div file.cpio <br/>cpio -divc file.cpio <br/>.rpm/install rpm -i file.rpm <br/>.rpm/extract rpm2cpio file.rpm &#124; cpio -div <br/>.deb/install dpkg -i file.deb <br/>.deb/exrtact dpkg-deb --fsys-tarfile file.deb &#124; tar xvf - <br/>ar p file.deb data.tar.gz &#124; tar xvzf - <br/>.zip unzip file.zip <br/>bzip2 -d myfile.tar.bz2 &#124; tar xvf <br/>tar xvfz myfile.tar.bz2 <br/><br/>x 是解压 <br/>v 是复杂输出 <br/>f 是指定文件 <br/>z gz格式 <br/><br/>gzip <br/>gzip[选项]要压缩（或解压缩）的文件名 <br/>-c将输出写到标准输出上，并保留原有文件。 <br/>-d将压缩文件压缩。 <br/>-l对每个压缩文件，显示下列字段：压缩文件的大小，未压缩文件的大小、压缩比、未压缩文件的名字 <br/>-r递归式地查找指定目录并压缩或压缩其中的所有文件。 <br/>-t测试压缩文件是正完整。 <br/>-v对每一个压缩和解压缩的文件，显示其文件名和压缩比。 <br/>-num-用指定的数字调整压缩的速度。 <br/>举例： <br/>把/usr目录并包括它的子目录在内的全部文件做一备份，备份文件名为usr.tar <br/>tar cvf usr.tar /home <br/>把/usr 目录并包括它的子目录在内的全部文件做一备份并进行压缩，备份文件名是usr.tar.gz <br/>tar czvf usr.tar.gz /usr <br/>压缩一组文件，文件的后缀为tar.gz <br/>#tar cvf back.tar /back/ <br/>#gzip -q back.tar <br/>or <br/>#tar cvfz back.tar.gz /back/ <br/>释放一个后缀为tar.gz的文件。 <br/>#tar zxvf back.tar.gz <br/>#gzip back.tar.gz <br/>#tar xvf back.tar<br/>Tags - <a href="http://www.gaobo.info/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.gaobo.info/go.php/tags/%25E8%25A7%25A3%25E5%258E%258B/" rel="tag">解压</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/156.htm</link>
<title><![CDATA[drcomsuite使用指南]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Mon, 03 Jul 2006 05:14:39 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/156.htm</guid> 
<description>
<![CDATA[ 
	Dr.com是城市热点公司开发的宽带计费系统，在全国高校，企业，政府机关广泛使用，但是遗憾的是这么大的企业居然没有开发Linux下的客户端，虽然Dr.com可以在web浏览器下完成登陆验证注销等工作，但是很多学校和ISP取消了这样的功能，而取而代之是windows下专用的客户端。<br/><a href="http://www.gaobo.info/attachment/1156925906_0.png" target="_blank"><img src="http://www.gaobo.info/attachment/1156925906_0.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>在redhat 9下的安装<br/>首先从drcom-client的项目主页<a href="http://sourceforge.net/projects/drcom-client" target="_blank">http://sourceforge.net/projects/drcom-client</a>上下载libdrcom-0.0-20050423-2.tar.bz2和drcomsuite-0.1.12.tar.bz2两个文件, 记得要先安装libdrcom，解压缩： <br/><div class="code"> &nbsp;tar -xjvf libdrcom*.bz2<br/> &nbsp;tar -xjvf drcomsuite*.bz2</div><br/>转换到root用户完成编译和安装： <br/><div class="code"> &nbsp;su<br/> &nbsp;#输入你的root用户密码</div><br/>进入libdrcom的目录<br/><div class="code"> &nbsp;cd &nbsp;libdrcom*</div><br/>redhat9会由于默认的gcc版本的原因，需要稍微修改Makefile文件，用你喜欢的编辑器打开Makefile <br/><div class="code"> &nbsp;vi &nbsp;Makefile</div><br/>注意到其中有这样的一行，第三行 WARN = -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -pedantic 把-Wextra改成 -W 然后运行make和make install编译 <br/><div class="code"> &nbsp;make</div><br/>等待，你应该可以编译成功，然后安装 <br/><div class="code"> &nbsp;make install</div><br/>按照同样的作法，进入到drcomsuite的目录，然后make ，make install编译安装drcomsuite，所不同的是 drcomsuite中的Makefile 本来就是带的-W,所以不需要改。如果这都没有出现错误的话，那么恭喜你，你已经成功了一半了，现在我们来看配置文件。<br/><br/>drcom的配置文件是/etc/drcom.conf,安装drcomsuite时已经把一个叫做drcom.conf.new的文件拷贝到你的/etc目录下，所以你需要把它改名为drcom.conf,然后完成相应的配置，里面有简单的英文提示，应该不成问题，有下面是一个示例配置文件：<br/><div class="code">username=cyi_02 #用户名<br/>password=*******# 你的密码<br/>mac= &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#mac地址，可以通过运行ifconfig命令查得本机的mac地址，类似如 00:00:E8:18:07:69的形式<br/>nic0=10.1.43.190 #你的IP地址，一般都是单网卡用户，后面的空白<br/>nic1=<br/>nic2=<br/>nic3=<br/>dnsp=202.113.32.6 &nbsp; #主dns<br/>dnss=211.94.193.129 #次dns，这个必须填，不填程序会出错，如果没有次dns，填一个合法的ip地址<br/>dhcp= &nbsp; &nbsp; #一般都不是由dhcp指配的ip，所以这里也留空<br/><br/>hostip=<br/>servip=192.168.100.251 #输入你用drcom时打开浏览器被自动引导如提示你登陆的那个地址就可以了，这个是我们学校的登陆地址，其他的留空默认<br/>hostport=<br/>servport=</div><br/>#后面的四项是用来假冒windows xp主机的，不填就可以了。<br/><div class="code">hostname=<br/>winver=<br/>winbuild=<br/>servicepack=</div><br/>这样配置文件就好了，接下来就可以来上网了,下面的命令都需要你用root用户来运行 su切换到root用户，因为你是以普通用户运行的，所以你的搜索目录里面可能没有/sbin，所以你运行source来读取root的环境变量设置<br/><div class="code"> &nbsp;source /etc/profile<br/> &nbsp; modprobe drcom<br/> &nbsp; drcomcd #运行drcom的守护进程</div><br/>如果提示类似于下面的这样的信息，那么就表示启动成功了，如果不是，你需要检查你的配置文件drcom.conf是否有语法错误： <br/><div class="code">1139480048 DEBUG drcomcd: Redirecting stderr to /var/log/drcomcd...</div><br/>登陆，在终端输入命令:<br/><div class="code"> &nbsp;drcomc login</div><br/>提示这样的信息： <br/><div class="code"> &nbsp;1139480181 DEBUG drcomc: Creating socket...<br/> &nbsp;1139480181 DEBUG drcomc: Connecting...<br/> &nbsp;1139480181 DEBUG drcomc: Sending login command...<br/> &nbsp;1139480181 DEBUG drcomc: Receiving reply (login)...<br/> &nbsp;Login succeeded</div><br/>表示你登陆成功了，这样你就可以上网了！<br/><a href="attachment/1151903667.rar">点击这里下载文件</a>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/146.htm</link>
<title><![CDATA[Linux下修改MAC地址]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Mon, 26 Jun 2006 03:01:38 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/146.htm</guid> 
<description>
<![CDATA[ 
	方法一：<br/>1.关闭网卡设备<br/><div class="code">ifconfig eth0 down</div><br/>2.修改MAC地址<br/><div class="code">ifconfig eth0 hw ether MAC地址</div><br/>3.重启网卡<br/><div class="code">ifconfig eth0 up</div><br/><br/>方法二：<br/>以上方法一修改后linux重启后MAC又恢复为原来的，为了下次启动时修改后的MAC仍有效，我们可以修改文件file:/etc/rc.d/rc.sysinit(RedFlag Linux为这个文件，其他版本的linux应该不同)的内容，在该文件末尾加以下内容：<br/><div class="code">ifconfig eth0 down<br/>ifconfig eth0 hw ether MAC地址<br/>ifconfig eth0 up</div><br/><br/>方法三：<br/>很简单的，只是在./etc/sysconfig/network-scripts/ifcfg-eth0中加入下面一句话： <br/><div class="code">MACADDR=00:AA:BB:CC:DD:EE</div>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/121.htm</link>
<title><![CDATA[搞定了CentOS 4.3，^_^]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Wed, 17 May 2006 07:25:47 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/121.htm</guid> 
<description>
<![CDATA[ 
	在参考了相当多前辈的经验文章之后，我完成了在CentOS下配置Zeus 4.3+PHP 4.4.2+MySQL 4.1.12+Zend Optimizer 3.0的配置，又一台论坛专用Web服务器出炉啦，<br/><br/>之前在搞RHEL4的时候觉得很方便，有RPM可以用，但是总觉得全部打包好了的东西自由度就是不高。现在换CentOS，RPM仍然可以用，但是为了得到最高的效率，我仍然选择了使用tar.gz的二进制包安装。我发现，这也很简单，^_^～～<br/><br/>以后就可以放心的使用CentOS了，呵呵，感觉真好！～～
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/9.htm</link>
<title><![CDATA[Windows用户入门Linux八问]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 07 Oct 2005 00:10:22 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/9.htm</guid> 
<description>
<![CDATA[ 
	用惯了Windows操作系统的用户，就像Matrix中那些舍不得拔掉插头的人们一样，一旦接触Linux这样的操作系统，总是以Windows的思维方式和眼光来使用和看待Linux，往往闹出很多有趣的笑话。下面我们就来看一看Windows用户入门Linux都会遇到哪些问题，如何解决这些问题。 <br/><br/>cd到哪里去了 <br/><br/>接触Linux/Unix较少的人，进入Linux的某个目录，常常会敲入cd命令查看当前路径。结果当再次运行某个命令时，才发现自己已经换了地点，用了ls/dir后才回到主目录。 <br/><br/>在Linux下，用pwd命令可以查看当前绝对路径，没有任何参数的cd会返回用户目录。还有“～”符号也是指向用户目录的快捷方式。例如，在任何位置运行“～myapp”都会执行用户目录下的myapp文件。 <br/><br/>当前目录下的文件找不到 <br/><br/>大概很多Linux新手都碰到过这样的问题：明明这个执行文件就在当前目录下，可敲入文件名称系统却提示找不到该命令？ <br/><br/>在Linux下，系统只依据环境变量$PATH来搜索可执行命令，即便该命令就在当前目录也不例外。在执行当前目录下的文件时，需要在前面加上“./”，如./myapp。另外一种解决办法是，在/etc/profile中修改$PATH变量，在最后加上“ :. ”。这样，系统就多了一个搜索执行文件的位置，就是“.”，也就是当前目录。该变量生效后，就可以如Windows一样随意执行当前文件了。 <br/><br/>下载的程序不能执行 <br/><br/>一些下载文件通常做成可执行文件，如J2sdk的bin文件。可下载之后执行该程序，系统却提示没有该命令或访问拒绝。难道是下载文件有问题？ <br/><br/>这是Windows用户入门Linux最易受到困扰的地方。Linux并不像Windows那样以文件后缀名来判断该文件是否可执行，而是根据文件权限设置。若当前用户拥有相对应的x权限，那么该文件就是可执行的。例如文件a，所有者是root，权限是rwxr--r--，那么就只有root有x权限，可以执行它。对其它用户来说，该文件是不可执行的。所以如果执行某些文件失败，应当首先检查它的权限，可以使用chmod +x 文件名，然后再执行。 <br/><br/>没有deltree命令 <br/><br/>如何将整个目录删除，是Windows用户在Linux中碰到的又一大问题。根据说明，Linux下删除文件就是rm命令，可是键入rm 目录名后，提示目录不能删除。 <br/><br/>Linux中，rm可以执行能想到的任何删除操作。以至于有经验的Linux用户反而害怕rm命令的强大，通常会在环境配置文件/etc/bashrc中加上alias rm rm -i，用rm -i参数取代默认的rm命令，这样在删除文件之前会让用户确认一次。删除子目录可以用“rm -rf 目录名”，它不管有多少子目录、多少文件一下子都可删得干干净净。 <br/><br/>在哪里设置文件的隐含属性 <br/><br/>在Linux为何不能设置隐含属性的文件？ <br/><br/>其实在Linux中只要是以.开头的文件，都是自动隐藏的。不信可用ls -a查看主目录下是不是多了很多诸如.bashrc、.profile之类的文件，它们早就在那里，只是没发现而已。 <br/><br/>找不到动态连接库 <br/><br/>在运行某些程序的时候，会提示libxx.xx.so无法找到。so文件就是Windows下的dll动态链接库，是不是因为vbrun之类的库没有安装？ <br/><br/>这样解释基本上正确，但也不尽然。在使用源代码编译安装的时候，可能未指定lib安装目录，那么默认就会安装到$PREFIX/lib下，也就是软件安装目录下的lib目录。如果一些其它软件试图调用这个目录下的某个libiray，就可能出现上述情况，因为系统默认存放so文件的地方是/usr/lib。 <br/><br/>解决的办法有两个，第一种是创建软连结的方式，在/usr/lib下生成一个指向该文件的连接，如ln -s /usr/myapp/lib/my.so/usr/lib/my.so。这样，当软件在/usr/lib下找到my.so调用时，它实际是调用了/usr/myapp/lib/my.so文件。第二种方法是修改系统寻找so文件的路径，编辑/etc/ldconf加入相应的路径。也可以运行命令“ldconfig 路径名”。 <br/><br/>怎样查找包含指定字符串的文件 <br/><br/>Linux中的find命令很强大，可为什么不支持查找含有某些字符串的文件？ <br/><br/>Linux中的find是不支持这种查找方式。但Linux下可以很方便地用grep配合实现这样的功能。例如，想要查找系统中所有包含“linux”字样的文件，可以使用下面命令： <br/><br/>find / -name "*" -exec grep -l "linux" &#123;&#125; <br/><br/><br/><br/>系统引导出了问题不能使用 <br/><br/>fdisk /mbr和sys c:<br/><br/><br/><br/>Linux可以从任何环境启动，只要它自身的系统文件没有受到破坏。如果制作了一张GRUB启动盘，这张盘就可以在任何地方启动任何类型的Linux。例如，如果位于硬盘第二个分区的Linux无法引导，可以使用GRUB启动，输入下面代码： <br/><br/>root (hd0,1) <br/>kernel /boot/vmlinuz-2.4.x ro root=/dev/hda1<br/>initrd /boot/initrd-2.4.x.img<br/>boot<br/><br/><br/><br/>其中一些内核文件依据系统而有所差别，不清楚的时候可以按Tab键查看所有可能的项目。 <br/><br/>链接 <br/><br/>Linux小辞典(3) <br/><br/>X-Window <br/><br/>Unix的图形窗口环境，它又被称作X11或X，是许多用户界面都需要的底层编程环境。 <br/><br/>KDE <br/><br/>KDE（K Desktop Environment）是Linux最主要的用户界面（窗口管理器）之一，是用Qt构建的。其网址为<a href="http://www.kde.org" target="_blank">http://www.kde.org</a>，最新版本为3.3。 <br/><br/>GNOME <br/><br/>GNOME（GNU Network Object Model Environment）是一种用于Linux的用户界面（窗口管理器），是用Gtk构建的。其网址为<a href="http://www.gnome.org" target="_blank">http://www.gnome.org</a>，最新版本为2.0。 <br/><br/>XFree86 X+Free +Intel x86 <br/><br/>XFree86是Linux的一个X-Window系统版本。被GNOME、KDE和其它Linux用户界面／窗口管理器所使用。其网址为<a href="http://www.xfree86.org" target="_blank">http://www.xfree86.org</a>，最新版本是4.3。 <br/><br/>Virtual Desktop <br/><br/>虚拟桌面是一种将用户的工作区扩展到计算机屏幕边界以外的方法。该桌面可以上下左右滚动，就好像一个更大的桌面放置在玻璃屏幕后面，并且可以四处移动以显示图标、窗口及其它一些“在幕后”或视野以外的对象。 <br/><br/>Window Manager <br/><br/>窗口管理器，一个图形用户界面（GUI）。它运行于X-Window之上，以便为用户提供窗口、图标、任务栏和其它桌面对象。 <br/><br/>Kernel <br/><br/>内核是操作系统的核心，其它所有组件都依赖于它。内核管理诸如底层硬件交互及资源共享之类的任务，包括内存分配、输入／输出、安全性和用户访问。内核的版本序列使用三个数字表示，例如2.4.10。版本号分为两种，一种是产品序列用偶数表示；另一种是测试版用奇数表示。版本号越高表示功能越多。目前Linux主要发行版本使用的是2.4.xx内核。 <br/><br/>LILO <br/><br/>LILO（LInux LOader）是Linux装载程序。它是一种使用最多的分区引导管理器实用程序，能够引导到Linux以外的操作系统。 <br/><br/>GURB <br/><br/>GURB（Grand Unified bootload）是一个多重启动管理器。它可以在多个操作系统共存时选择引导哪个系统。和LILO相比，GRUB可以引导根分区在8.4GB以外的操作系统，不需要打补丁。GURB被认为是LILO替代者。
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/8.htm</link>
<title><![CDATA[Linux软件安装通用思路]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 07 Oct 2005 00:07:47 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/8.htm</guid> 
<description>
<![CDATA[ 
	在Linux系统中，软件安装程序比较纷繁复杂，不过最常见的有两种：<br/>　　1）一种是软件的源代码，您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包（后缀为.tar.gz）。<br/>　　2）另一种是软件的可执行程序，你只要安装它就可以了。这种软件安装包通常被是一个RPM包（Redhat Linux Packet Manager，就是Redhat的包管理器），后缀是.rpm。<br/>　　当然，也有用rpm格式打包的源代码，用gzip压缩过的可执行程序包。只要您理解了以下的思路，这两种形式的安装包也不在话下了。<br/>　　下面，我们就分成两个部分来说明软件安装思路：<br/><br/>第一部分：搞定.tar.gz<br/>　　1.首先，使用tar -xzvf来解开这个包，如：<br/>　　#tar -xzvf apache_1_3_6_tar.gz<br/>　　这样就会在当前目录中创建了一个新目录(目录名与.tat.gz包的文件名类似），用来存放解压了的内容。如本例中就是apache_1.3.6<br/><br/>　　2.进入这个目录，再用ls命令查看一下所包含的文件，如：<br/>　　#cd apache_1.3.6<br/>　　#ls<br/>　　你观察一下这个目录中包含了以下哪一个文件：configure、Makefile还是Imake。<br/><br/>　　1）如果是configure文件,就执行：<br/>　　#./configure <br/>　　#make<br/>　　#make install<br/>　　2）如果是Makefile文件,就执行：<br/>　　#make<br/>　　#make install<br/>　　3）如果是Imake文件,就执行：<br/>　　#xmkmf<br/>　　#make<br/>　　#make install<br/><br/>　　3.如果没有出现什么错误提示的话，就搞定了。至于软件安装到什么地方，通常会在安装时出现。否则就只能查阅一下README，或者问问我，:-)<br/>　　如果遇到错误提示，也别急，通常是十分简单的问题：<br/>　　1）没有安装C或C++编译器；<br/>　　确诊方法：执行命令gcc（C++则为g++），提示找不到这个命令。<br/>　　解决方法：将Linux安装光盘mount上来，然后进入RPMS目录，执行命令：<br/>　　#rpm -ivh gcc* （哈哈，我们用到了第二种安装方式）<br/>　　2）没有安装make工具；<br/>　　确诊方法：执行命令make，提示找不到这个命令。<br/>　　解决方法：将Linux安装光盘mount上来，然后进入RPMS目录，执行命令：<br/>　　#rpm -ivh make* <br/>　　3）没有安装autoconf工具；<br/>　　确诊方法：执行命令make，提示找不到这个命令。<br/>　　解决方法：将Linux安装光盘mount上来，然后进入RPMS目录，执行命令：<br/>　　#rpm -ivh autoconf* <br/>　　4）缺少某些链接库；<br/>　　确诊方法：在make时，提示需要某些文件。<br/>　　解决方法：安装包含这个文件的包，这就需要积累了。 <br/><br/>第二部分：搞定.rpm<br/>　　RPM是Red Hat公司随Redhat Linux推出了一个软件包管理器，通过它能够更加轻松容易地实现软件的安装。<br/>　　1.安装软件：执行rpm -ivh rpm包名，如：<br/>　　#rpm -ivh apache-1.3.6.i386.rpm <br/>　　2.升级软件：执行rpm -Uvh rpm包名。<br/>　　3.反安装：执行rpm -e rpm包名。<br/>　　4.查询软件包的详细信息：执行rpm -qpi rpm包名<br/>　　5.查询某个文件是属于那个rpm包的：执行rpm -qf rpm包名<br/>　　6.查该软件包会向系统里面写入哪些文件：执行 rpm -qpl rpm包名
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/7.htm</link>
<title><![CDATA[Linux下常见文件格式的压缩、解压小结]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Fri, 29 Apr 2005 07:37:57 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/7.htm</guid> 
<description>
<![CDATA[ 
	大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到，也就不全，希望大家帮我补充，我们将随时修改完善，谢谢！<br/>.tar<br/>解包： tar xvf FileName.tar<br/>打包：tar cvf FileName.tar DirName<br/>（注：tar是打包，不是压缩！）<br/>---------------------------------------------<br/><br/>.gz<br/>解压1：gunzip FileName.gz<br/>解压2：gzip -d FileName.gz<br/>压缩：gzip FileName<br/>.tar.gz 和 .tgz<br/>解压：tar zxvf FileName.tar.gz<br/>压缩：tar zcvf FileName.tar.gz DirName<br/>---------------------------------------------<br/>.bz2<br/>解压1：bzip2 -d FileName.bz2<br/>解压2：bunzip2 FileName.bz2<br/>压缩： bzip2 -z FileName<br/>.tar.bz2<br/>解压：tar jxvf FileName.tar.bz2<br/>压缩：tar jcvf FileName.tar.bz2 DirName<br/>---------------------------------------------<br/>.bz<br/>解压1：bzip2 -d FileName.bz<br/>解压2：bunzip2 FileName.bz<br/>压缩：未知<br/>.tar.bz<br/>解压：tar jxvf FileName.tar.bz<br/>压缩：未知<br/>---------------------------------------------<br/>.Z<br/>解压：uncompress FileName.Z<br/>压缩：compress FileName<br/>.tar.Z<br/>解压：tar Zxvf FileName.tar.Z<br/>压缩：tar Zcvf FileName.tar.Z DirName<br/>---------------------------------------------<br/>.zip<br/>解压：unzip FileName.zip<br/>压缩：zip FileName.zip DirName<br/>---------------------------------------------<br/>.rar<br/>解压：rar a FileName.rar<br/>压缩：r ar e FileName.rar<br/><br/><br/>rar请到：<a href="http://www.rarsoft.com/download.htm" target="_blank">http://www.rarsoft.com/download.htm</a> 下载！<br/>解压后请将rar_static拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：<br/>[root@www2 tmp]# cp rar_static /usr/bin/rar<br/>---------------------------------------------<br/>.lha<br/>解压：lha -e FileName.lha<br/>压缩：lha -a FileName.lha FileName<br/><br/>lha请到：<a href="http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/" target="_blank">http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/</a>下载！<br/>>解压后请将lha拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：<br/>[root@www2 tmp]# cp lha /usr/bin/<br/>---------------------------------------------<br/>.rpm<br/>解包：rpm2cpio FileName.rpm &#124; cpio -div<br/>---------------------------------------------<br/>.deb<br/>解包：ar p FileName.deb data.tar.gz &#124; tar zxf -<br/>---------------------------------------------
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/6.htm</link>
<title><![CDATA[FreeBSD Qmail 安装]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Wed, 16 Mar 2005 11:24:52 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/6.htm</guid> 
<description>
<![CDATA[ 
	原文出处<a href="http://bsd.huangdong.com/server/mail/qmail.html" target="_blank">http://bsd.huangdong.com/server/mail/qmail.html</a> <br/>请大家多多测试，有任何问题请告诉我(hd@huangdong.com)。 <br/><br/>前言 &nbsp;<br/>这个文章其实我很早前就应该写了，因为以前做过的Qmail的东东非常的多了，但是一直很懒惰， 导致的最大的问题就是每次做FreeBSD下的Qmail系统都是重新看文章来过。今天终于决定边装边写了。 &nbsp;<br/><br/>安装Qmail &nbsp;<br/>安装Qmail很简单的，使用ports中的qmail来安装就好了： &nbsp;<br/><br/>cd /usr/ports/mail/qmail <br/>make -DWITH_BIG_TODO_PATCH install clean <br/>make disable-sendmail <br/>make enable-qmail <br/>这里第三步和第四步是将sendmail的缺省mail变更成为Qmail。需要注意的是这样设置必须要在 /etc/rc.conf 中加入： &nbsp;<br/><br/>sendmail_enable="NONE" <br/>sendmail_submit_enable="NO" <br/>sendmail_outbound_enable="NO" <br/>sendmail_msp_queue_enable="NO" <br/>这些将彻底在系统启动时禁止sendmail的任何动做。 &nbsp;<br/><br/>一般的情况下我们会使用Qmail的MailDir方式来启动Qmail，所以我们需要将maildir启动脚本激活，但是我们为后面的svscan要做一些准备，所以将以下脚本： &nbsp;<br/><br/>env env - PATH="/var/qmail/bin:/usr/local/bin" &nbsp;<br/>qmail-start ./Maildir/ <br/>放入 /var/qmail 中的 rc 文件中。并使用 chmod +x /var/qmail/rc 命令给rc加上执行权限。 &nbsp;<br/><br/>注意：如果你在安装qmail时如果发现它不能正确找到你的域名解析时安装的配置文件不会安装全，这里你需要自己手工进行一次配置： &nbsp;<br/><br/>cd /var/qmail/configure <br/>./config-fast $HOSTNAME <br/>请使用你这台机器的主机名代替$HOSTNAME。这样操作后，Qmail的缺省配置文件都会自动生成。 &nbsp;<br/><br/>安装和设置MySQL &nbsp;<br/>安装MySQL需要的是时间而不是技巧： &nbsp;<br/><br/>cd /usr/ports/databases/mysql40-server <br/>make -DWITH_CHARSET=gbk install <br/>make clean <br/>我们要为vpopmail提前准备好MySQL的库和用户： &nbsp;<br/><br/>mysqladmin create vpopmail <br/>mysql -u root -p <br/>mysql>use mysql <br/>mysql>GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , FILE , INDEX , ALTER , SHOW DATABASES , <br/>CREATE TEMPORARY TABLES , LOCK TABLES ON * . * TO "vpopmail"@ "localhost"<br/>IDENTIFIED BY "vpopmail"WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ; <br/>mysql>FLUSH PRIVILEGES; <br/>这里创建了一个用户名为vpopmail，同时设置其密码为vpopmail。 &nbsp;<br/><br/>安装vpopmail &nbsp;<br/>安装vpopmail更多的是参数要注意，其它的都会很简单： &nbsp;<br/><br/>cd /usr/ports/mail/vpopmail <br/>make WITH_MYSQL=yes WITH_MYSQL_SERVER=localhost WITH_MYSQL_USER=vpopmail <br/>WITH_MYSQL_PASSWD=vpopmail WITH_MYSQL_DB=vpopmail WITH_MYSQL_LIMITS=yes <br/>make install <br/>make clean <br/>安装好和vpopmail后我们当然需要测试一下它是否能正常的运行，包括连接MySQL数据库和正常的操作Qmail的数据文件： &nbsp;<br/><br/>cd /usr/local/vpopmail/bin <br/>./vadddomain test.com <br/>./vadduser hd@test.com <br/>第二步是向系统加入一个域名，第三步是向该域名中加入一个用户。在输入命令后它都会提示你输入密码，<br/>域名的密码是用来维护该域中用户的mast用户的密码。如果没有任何的错误提示，哪么恭喜你，你走过了大多数的艰苦步骤，已经走上了光明大道了。 &nbsp;<br/><br/>安装QmailAdmin &nbsp;<br/>我很痛苦每次增加一个用户就ssh到服务器上，su成vpopmail，再输入命令。也许这只是痛苦的开始，<br/>你还要面对改密码、增加邮箱转发等等'高级'或是'额外'的用户要求。 于是，一个可爱的管理系统前来将大家于水火中解救出来：QmailAdmin。<br/>上面所有的一切，它都能帮你做到。我们来使用万能的ports罢 ： &nbsp;<br/><br/>cd /usr/ports/mail/qmailadmin <br/>make -DWITH_MODIFY_QUOTA <br/>make install clean <br/>它将qmailadmin的cgi-bin安装到了 /usr/local/www/cgi-bin.default 的 qmailadmin 目录中。将这个目录用 ln -s 命令连接到你的cgi-bin目录中去。<br/>启动你的浏览器试试罢，一个域的管理帐号是postmaster，用域的密码登录进去好了。 &nbsp;<br/><br/>安装和配置daemontools &nbsp;<br/>安装 &nbsp;<br/>我很讨厌daemontools的配置，而且非常烦它哪种启动和监视daemon的目录结构，但是好象Qmail的作者很是推崇自己的这个小作品。 <br/>再加上谁都担心Qmail哪一小撮进程有一个完蛋后没有人能知道而重新启动，所以我们还是来配置一下这个丑陋的小东西罢。先安装它： &nbsp;<br/><br/>cd /usr/ports/sysutils/daemontools <br/>make install clean <br/>这个工具最大的特点就在于安装容易到了极限，而配置复杂到了极限！先来建立Qmail的服务日志目录，并给Qmail加上权限： &nbsp;<br/><br/>mkdir -p /var/log/qmail/qmail-smtpd <br/>mkdir -p /var/log/qmail/qmail-pop3d <br/>mkdir -p /var/log/qmail/qmail-send <br/><br/>chmod -R 755 /var/log/qmail <br/>chown -R qmaill:wheel /var/log/qmail <br/>配置svscan &nbsp;<br/>最好建立以下内容的一个脚本，执行它： &nbsp;<br/><br/>#!/bin/sh <br/>mkdir /service <br/>chmod 755 /service <br/>mkdir /var/qmail/supervise <br/>chmod 755 /var/qmail/supervise <br/><br/>mkdir /var/qmail/supervise/qmail-smtpd <br/>mkdir /var/qmail/supervise/qmail-smtpd/log <br/>chmod +t /var/qmail/supervise/qmail-smtpd <br/><br/>mkdir /var/qmail/supervise/qmail-send <br/>mkdir /var/qmail/supervise/qmail-send/log <br/>chmod +t /var/qmail/supervise/qmail-send <br/><br/>mkdir /var/qmail/supervise/qmail-pop3d <br/>mkdir /var/qmail/supervise/qmail-pop3d/log <br/>chmod +t /var/qmail/supervise/qmail-pop3d <br/><br/>ln -s /var/qmail/supervise/* /service/ <br/>下面是pop3d的启动脚本： &nbsp;<br/><br/>#!/bin/sh <br/>exec /usr/local/bin/tcpserver -H -R -v -c100 0 110 /var/qmail/bin/qmail-popup host.domain.de /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 &nbsp;<br/>将这个脚本放入 /var/qmail/supervise/qmail-pop3d/ 的 run 文件中，然后： &nbsp;<br/><br/>再将pop3d的log启动脚本： &nbsp;<br/><br/>#!/bin/sh <br/>exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1 <br/>放入 /var/qmail/supervise/qmail-pop3d/log 中的 run 文件中，之后执行： &nbsp;<br/><br/>chmod 755 /var/qmail/supervise/qmail-pop3d/run <br/>chmod 755 /var/qmail/supervise/qmail-pop3d/log <br/>chmod 755 /var/qmail/supervise/qmail-pop3d/log/run <br/>将smtpd的启动脚本： &nbsp;<br/><br/>#!/bin/sh <br/>QMAILDUID=`/usr/bin/id -u qmaild` &nbsp;<br/>NOFILESGID=`/usr/bin/id -g qmaild` <br/>exec /usr/local/bin/tcpserver -p -R -x /usr/local/vpopmail/etc/tcp.smtp.cdb -u"$QMAILDUID" -g"$NOFILESGID" -v -c100 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2>&1 <br/>放入 /var/qmail/supervise/qmail-smtpd 的 run 文件中。 &nbsp;<br/><br/>配对的还有smtpd的log启动脚本： &nbsp;<br/><br/>#!/bin/sh <br/>exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1 <br/>放入 /var/qmail/supervise/qmail-smtpd/log/ 中的 run 文件中。之后执行： &nbsp;<br/><br/>chmod 755 /var/qmail/supervise/qmail-smtpd/run <br/>chmod 755 /var/log/qmail/qmail-smtpd/log <br/>chmod 755 /var/log/qmail/qmail-smtpd/log/run <br/>无尽的长夜呀，还有一个qmail send要搞！将这个脚本： &nbsp;<br/><br/>#!/bin/sh <br/>exec /var/qmail/rc <br/>放入 /var/qmail/supervise/qmail-send/ 中的 run 文件里。并将以下配对的log启动脚本： &nbsp;<br/><br/>#!/bin/sh <br/>exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1 <br/>放入 /var/qmail/supervise/qmail-send/log 中的 run 文件，最终曙光来到了，我们执行以下命令： &nbsp;<br/><br/>chmod 755 /var/qmail/supervise/qmail-send/run <br/>chmod R 755 /var/log/qmail/qmail-send/log <br/>chmod R 755 /var/log/qmail/qmail-send/log/run <br/>不知你的指头是不是酸了呢？总之，这时候去唱个卡拉OK罢，让你的指头休息一下罢，无聊的svscan就像是我们要去唱的哪英的歌一样，被我们“征服”了！ &nbsp;<br/><br/>设置系统启动脚本 &nbsp;<br/>在系统安装时 /usr/local/etc/rc.d 中的 qmail.sh 文件是连接到了 /var/qmail/rc 文件上的，但是我们需要用svscan来启动，<br/>所以我们先要将原有的启动脚本删除，再vi一个新的启动脚本： &nbsp;<br/><br/>cd /usr/local/etc/rc.d <br/>rm qmail.sh <br/>vi qmail.sh <br/>脚本的内容HD已经辛苦的帮大家抄来了： &nbsp;<br/><br/>#!/bin/sh <br/>case "$1" in <br/>start) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo -n "Starting qmail: svscan" <br/> &nbsp; &nbsp; &nbsp; &nbsp;if cd /var/qmail/supervise; then <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" svscan & <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;echo $! > /var/run/svscan.pid <br/> &nbsp; &nbsp; &nbsp; &nbsp;fi <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "." <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>stop) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo -n "Stopping qmail: svscan" <br/> &nbsp; &nbsp; &nbsp; &nbsp;kill `cat /var/run/svscan.pid` <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo -n " qmail" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -dx /var/qmail/supervise/* <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo -n " logging" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -dx /var/qmail/supervise/*/log <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "." <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>stat) <br/> &nbsp; &nbsp; &nbsp; &nbsp;cd /var/qmail/supervise <br/> &nbsp; &nbsp; &nbsp; &nbsp;svstat * */log <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>doqueue&#124;alrm) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Sending ALRM signal to qmail-send." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -a /var/qmail/supervise/qmail-send <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>queue) <br/> &nbsp; &nbsp; &nbsp; &nbsp;/var/qmail/bin/qmail-qstat <br/> &nbsp; &nbsp; &nbsp; &nbsp;/var/qmail/bin/qmail-qread <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>reload&#124;hup) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Sending HUP signal to qmail-send." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -h /var/qmail/supervise/qmail-send <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Sending HUP signal to qmail-pop3d." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -h /var/qmail/supervise/qmail-pop3d <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>pause) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Pausing qmail-send" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -p /var/qmail/supervise/qmail-send <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Pausing qmail-smtpd" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -p /var/qmail/supervise/qmail-smtpd <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Pausing qmail-pop3d" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -p /var/qmail/supervise/qmail-pop3d <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>cont) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Continuing qmail-send" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -c /var/qmail/supervise/qmail-send <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Continuing qmail-smtpd" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -c /var/qmail/supervise/qmail-smtpd <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Continuing qmail-pop3d" <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -c /var/qmail/supervise/qmail-pop3d <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>restart) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Restarting qmail:" <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "* Stopping qmail-smtpd." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -d /var/qmail/supervise/qmail-smtpd <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "* Sending qmail-send SIGTERM and restarting." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -t /var/qmail/supervise/qmail-send <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "* Restarting qmail-smtpd." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -u /var/qmail/supervise/qmail-smtpd <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "* Sending qmail-pop3d SIGTERM and restarting." <br/> &nbsp; &nbsp; &nbsp; &nbsp;svc -t /var/qmail/supervise/qmail-pop3d <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>cdb) <br/> &nbsp; &nbsp; &nbsp; &nbsp;tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb /usr/local/vpopmail/etc/tcp.smtp.tmp < <br/> /usr/local/vpopmail/etc/tcp.smtp <br/> &nbsp; &nbsp; &nbsp; &nbsp;chmod 644 /usr/local/vpopmail/etc/tcp.smtp* <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Reloaded /usr/local/vpopmail/etc/tcp.smtp." <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>*) <br/> &nbsp; &nbsp; &nbsp; &nbsp;echo "Usage: $0 &#123;start&#124;stop&#124;restart&#124;doqueue&#124;reload&#124;stat&#124;pause&#124;cont&#124;cdb&#124;queue&#125;" <br/> &nbsp; &nbsp; &nbsp; &nbsp;exit 1 <br/> &nbsp; &nbsp; &nbsp; &nbsp;;; <br/>esac <br/>exit 0 <br/>在你快乐之余不要忘记要给启动脚本执行权限： &nbsp;<br/><br/>chmod +x /usr/local/etc/rc.d/qmail.sh <br/>如果你现在还在清醒状态，哪么请启动我们伟大的Qmail罢。它已经在我们的系统中安静的存在到了你同意它站立起来了： &nbsp;<br/><br/>/usr/local/etc/rc.d/qmail.sh start <br/>如果启动后发现了问题请首先查看系统中的sendmail是否还能通过 ps -ax 命令看到，如果还能看到，<br/>建议你确定已经向上面所说更新过/etc/rc.conf中的配置后，输入让世界重见光明的命令： reboot 罢！要知道轮回是必然的，皇帝明天就能到我家！
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/5.htm</link>
<title><![CDATA[CVS完全手册]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Sun, 16 Jan 2005 11:27:12 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/5.htm</guid> 
<description>
<![CDATA[ 
	内容 <br/>概述 <br/>CVS环境设置 <br/>登录CVS服务器：　 <br/>cvs命令格式 <br/>CVS的日常使用 <br/>其他常用命令 <br/>CVS宏/keyword <br/>CVS分支管理 <br/>CVS服务器的安装和配置 <br/>Watchers <br/>WinCVS的安装和配置 <br/>CVSWEB的安装<br/><br/>概述 <br/>================================== <br/><br/>CVS是一个并行版本控制系统，它采用C/S模式，它的复杂度和功能性属于中等，是当今最流行的版本控制系统。它有两个基本的特点： <br/>*保存修改记录：保存了所有文件的修改历史，并可以建立分支 <br/>*协作与并行：cvs不推荐使用lock-modify-unlock的串行的工作模式，而采用多人可以并行地修改同一个文件，而在提交时merge conflict；它更适合于大型的工作团体。 <br/>使用CVS的好处： <br/>*文件集中管理，大家都可以方便的看到所有人员的最新文件,规范化了文件的管理 <br/>*可以查看以前任何的一个版本或修改历史 <br/>*可以同时维护多个版本和分支 <br/><br/><br/>CVS环境设置 <br/>================================== <br/><br/>先不要管CVS服务器的配置，我们先假设已经有一台配置好的服务器，要访问CVS，必需先设置环境变量CVSROOT <br/>CVSROOT=:pserver:user@server#port:/path/to/cvsroot <br/><br/>*pserver是访问方式，口令认证的意思，这是最常用的方式，其他还有gserver,kserver,ext <br/>*user是CVS服务器的用户名， <br/>*server是CVS服务器的名称或者IP地址 <br/>*/path/to/cvsroot是你的CVS服务器的CVSROOT目录，根据你的CVS服务器设置做修改或者询问管理员 <br/>你可以把设置放到你的shell的profile里（.bash_profile，.profile等）这样就不用每次敲一长串命令了 <br/><br/>高级功能：现在比较流行是使用ssh来加密口令和数据流 <br/>CVSROOT=:ext:user@server#port:/path/to/cvsroot <br/>CVS_RSH=ssh <br/>hints: <br/>实际上没有CVSROOT也可以，你可以每次用cvs -d :pserver:user@server#port:/path/to/cvsroot来访问，而且它将忽略CVSROOT环境变量 ，也许你会笑我只有疯子才这么用，不过，cvs可以把每次使用的命令参数放到一个文件中，所以在~/.cvsrc中加入 <br/>cvs -d :pserver:user@server#port:/path/to/cvsroot <br/>即可，它最大的好处是修改了立刻生效，而且它的优先级高于CVSROOT环境变量，到时候不要傻乎乎地来问我，我的环境变量真么不起作用了。 <br/><br/><br/>登录CVS服务器：　 <br/>================================== <br/>$cvs　login，这时候cvs会问你口令，请把你在CVS服务器上的口令敲进去 <br/>如果没有任何错误信息，恭喜你，成功了！ <br/>成功登录后将建立一个~/.cvspass文件，保存你的口令，以后就不用输入口令了． <br/><br/>cvs命令格式 <br/>================================== <br/>cvs [global_opts] command [command_opts] [command_args] <br/>Global options 属于左边cvs的，是全局的 <br/>command_opts &nbsp; 属于左边command的，是局部的 <br/>cvs --help-commands查看命令列表 <br/>cvs -H command/cvs -help command 查看该命令的选项 <br/>hints:如果你每次使用一些命令都带同样的参数的话，可以把它们放到~/.cvsrc文件中去 <br/>update -c <br/>diff -c <br/>add -kb <br/>cvs -Q <br/><br/><br/>cvs global-option comand comand-option arguments <br/><br/>CVS的日常使用 <br/>================================== <br/>CVS使用流程 <br/> &nbsp; a checkout 尽当本地没有working copy时使用 <br/> &nbsp; b staus 检查服务器上是否有新版本 <br/> &nbsp; c update 如果有,则用update同步文件 <br/> &nbsp; d 做你自己的修改，并保证正确 <br/> &nbsp; e update 看是否有人修改了你的文件 <br/> &nbsp; f 如果有冲突，合并冲突 <br/> &nbsp; g commit 提交你的修改，如果因为又有人提交修改而失败，回到e步 <br/> &nbsp; h 回到b步 <br/><br/>1 cvs checkout module_name <br/>------------------------------------- <br/>module_name可以暂时理解为目录名，它会在本地但前目录下建立module_name目录，在把服务器上说有module_name目录下的文件copy到本地module_name目录下。 <br/>注意：第一次checkout后，就不是通过cvs checkout来同步文件了，而是要进入该目录下进行具体文件的版本同步（添加，修改，删除）操作。 <br/><br/>2 cvs update filename <br/>------------------------------------- <br/>将文件同步到最新的版本：不指定文件名，cvs将同步所有子目录下的文件。 <br/>最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次，并养成"先同步 后修改"的习惯，和Virvual SourceSafe不同，CVS里没有文件锁定的概念，所有的冲突是在commit之前解决，如果你修改过程中，有其他人修改并commit到了CVS库中，CVS会通知你文件冲突 <br/><<<<<<< filename <br/> 你文件上的内容 <br/>======= <br/> &nbsp;服务器上文件的内容 <br/>>>>>>>> latest revision number in the repository <br/><br/>由你确认冲突内容的取舍。也可以多人协商解决，修改完成后去掉文件中的冲突标志 <br/><br/>conflict:多人修改同一文件的同一区域这就叫冲突，它必须由人来解决，CVS不处理冲突，它只是告诉你存才冲突 <br/><br/><br/>3 cvs commit -m "write some comments here" file_name <br/>------------------------------------ <br/>确认修改写入到CVS库里。 <br/>注意：CVS的很多动作都是通过cvs commit进行最后确认并修改的，最好每次只修改一个文件。在确认的前，还需要用户填写修改注释，以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话，cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。 <br/>注释的质量很重要：所以不仅必须要写，而且必须写一些比较有意义的内容：以方便其他开发人员能够很好的理解 <br/>不好的注释，很难让其他的开发人员快速的理解：比如： -m "bug fixed" 甚至 -m "" <br/>好的注释，甚至可以用中文: -m "在用户注册过程中加入了Email地址校验" <br/><br/>修改某个版本注释：每次只确认一个文件到CVS库里是一个很好的习惯，但难免有时候忘了指定文件名，把多个文件以同样注释commit到CVS库里了，以下命令可以允许你修改某个文件某个版本的注释： <br/>cvs admin -m 1.3:"write some comments here" file_name <br/><br/>4 查看状态 <br/>------------------------------------ <br/>cvs　status filename <br/>状态报告，类似这样：　 <br/>File:　foo.c　　　　　　　　　　　　　Status:　Up-to-date　 <br/>　　　Working　revision:　　　　1.1.1.1　'Some　Date'　 <br/>　　　Repository　revision:　1.2　　　　　/home/cvsroot/cvstest/foo.c,v　 <br/>　　　Sticky　Tag:　　　　　　　　　　(none)　 <br/>　　　Sticky　Date:　　　　　　　　　(none)　 <br/>　　　Sticky　Options:　　　　　　(none)　 <br/><br/>这里最重要的就是Status栏，这里总共可能有四种状态：　 <br/>Up-to-date： 表明你要到的文件是最新的．　 <br/>Locally　Modified： 表明你曾经修改过该文件，但还没有提交，你的版本比仓库里的新．　 <br/>Needing　Patch： 表明有个哥们已经修改过该文件并且已经提交了！你的版本比仓库里的旧．　 <br/>Needs　Merge： 表明你曾经修改该文件，但是偏偏有个不识相的也修改了这个文件，而且还提交了! <br/><br/>5 查看修改历史和注释信息 <br/>------------------------------------ <br/>cvs log file_name <br/><br/><br/>其他常用命令 <br/>================================== <br/>1 添加文件和目录 <br/>------------------------------------ <br/>cvs add new_file_name <br/>cvs add -kb new_file_name <br/>cvs add dir_name <br/><br/>CVS一般只处理文本文件，它会扩展keyword(宏)并转换行结束符 <br/>对于图片，Word文档等非纯文本的项目，需要使用cvs add -kb选项，否则有可能出现文件被破坏的情况 <br/>然后确认修改并注释 <br/>cvs ci -m "write some comments here" &nbsp;new_file_name <br/><br/>2 删除文件 <br/>------------------------------------ <br/>将某个源文件物理删除后 <br/>cvs remove file_name <br/>然后确认修改并注释 <br/>cvs ci -m "write some comments here" file_name <br/><br/>注意：很多cvs命令都有缩写形式：commit=>ci; update=>up; checkout=>co; remove=>rm; <br/><br/>3.修改文件名 <br/>------------------------------------ <br/>移动文件：文件重命名 <br/>cvs里没有cvs move或cvs rename，因为这两个操作是先cvs remove old_file_name，然后cvs add new_file_name实现的。 <br/><br/>4 目录结构同步 <br/>------------------------------------ <br/>如果在你checkout后，有人添加了新的文件或目录，你需要把他们取出来 <br/>cvs update -d <br/><br/>5 放弃本地的修改(undo) <br/>------------------------------------ <br/>如果修改来了本地文件，不想提交，想重新取新文件 <br/>cvs update -C filename <br/>它会先把你的本地文件改名 <br/><br/>建议：建议大家把checkout的文件缺省为readonly,把"cvs -r"添加到~/.cvsrc文件中 <br/> &nbsp; &nbsp; 这样，你每次修改一个文件前，先cvs edit filename,提交后文件又变成readonly, <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果你想放弃本地的修改，则cvs unedit filename,它会undo,而且文件又变成readonly <br/><br/><br/>6 恢复到旧版本 <br/>------------------------------------ <br/>cvs update -j1.20 -j1.15 filenames <br/>1.20时当前版本号，注意顺序不要反了，记住要commit,为了保证是但前版本号，最好先lock <br/>注意：cvs update -r1.15 file.name，这里的-r不是版本号的意思，是给文件加了一个叫1.15的sticky tag <br/>如果不小心已经加成STICK TAG的话：用cvs update -A 解决 <br/><br/>7 文件比较 <br/>------------------------------------ <br/>cvs diff -c filename <br/>cvs diff -c -r1.8 -r 1.5 filename <br/><br/>8 锁定与解锁文件 <br/>------------------------------------ <br/>为保证串行的修改文件，或修改二 <br/>cvs admin -l files <br/>cvs admin -u files <br/><br/><br/>========================================================================== <br/>如果你只是一般性的使用cvs，到此为止就足够了。一个系统20%的功能往往能够满足80%的需求，CVS也不例外，以下是CVS最常用的功能，可能用到的还不到它全部命令选项的10%，更多的功能请在实际应用过程中体会，学习过程中应该是用多少，学多少，用到了再学也不迟。 <br/>========================================================================== <br/><br/>CVS宏/keyword <br/>================================== <br/>CVS缺省会对文件进行keyword(宏)替换,在文件中加入这些关键字是个良好的工作习惯 <br/>$Id$ 关键字是用文件名、版本、时间、作者 及代码性质替换，如果使用-l选项取出，在Exp后 <br/>面会加上登录用户的名称。除了$Id$关键字，RCS还支持下面常用的关键字： <br/>$Log$ : 你所提供的修改日志信息。 <br/>$Author$ ：存入该版本的作者。 <br/>$Locker$ : 该版本的加锁者 <br/>$State$ : 该版本的状态 Exp（试验版）, Stabe（稳定版）, Rel（发行版）.缺省是Exp <br/>$Date$ : 该版本存入的时间，使用UTC时间格式。 <br/>$Revision$ : 该版本的版本号 <br/>$RCSfile$ : RCS文件名 <br/>$Source$ : RCS全路径名 <br/>$Name$ : 取回该版本的符号名 <br/>$Header$ : 相当于$ Source $$ Revision$$Date$$Author $$State$$Locker$的组合 <br/><br/><br/>Sticky Tag <br/>================================== <br/>tag的作用是对多个连续变化的文件做一个快照来表示某一时刻的所有不停内部版本的文件，一般是项目到一定阶段，可以给所有文件统一指定一个阶段里程碑版本号,需要的时候可以一次导出这些版本不一的文件.标记的另外一个非常重要的作用是生成分支和合并分支. <br/>1 cvs tag release_name &nbsp;module_name <br/>------------------------------------ <br/>release_name要简洁而含义丰富，由字母开头，加字母，数字，下划线和连字号组成，特别是不能含"." <br/>2 cvs checkout -r release_name module_name <br/>------------------------------------ <br/>取出tag_name标志的文件 <br/>3 cvs update -A <br/>------------------------------------ <br/>tag标识的文件是历史文件，不能修改，这样可在本地去除这个限制，让它和当前版本合并 <br/><br/><br/><br/><br/>CVS分支管理 <br/>============================= <br/>CVS可以将历史划分成多个独立，并行和互不影响的分支，并去修改历史 <br/>1 标定里程碑 <br/>------------------------------------ <br/>cvs tag release_1_0 prj_dir_name <br/><br/>2 开始一个新的里程碑： <br/>------------------------------------ <br/>cvs commit -r 2 <br/>标记所有文件开始进入2.x的开发 <br/>注意：CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。 <br/><br/>3 建立分支 <br/>------------------------------------ <br/>在开发项目的2.x版本的时候发现1.x有问题，但2.x又不敢用，则从先前标记的里程碑：release_1_0导出一个分支release_1_0_b2 <br/>cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name <br/>-r修饰的是release_1_0,-b 修饰的是release_1_0_bugfixes，cvs的版本号将变为4位，以后每分一次支，版本号增加2位 <br/><br/>4 分支并行开发 <br/>------------------------------------ <br/>一些人先在另外一个目录下导出release_1_0_bugfixes这个分支：解决1.0中的紧急问题， <br/>cvs checkout -r release_1_0_bugfixes <br/>分支是可以修改的，并自动提交到分支上去 <br/>而其他人员仍旧在项目的主干分支2.x上开发 <br/><br/>5 tag分支 <br/>------------------------------------ <br/>在release_1_0_bugfixes上修正错误后，标记一个1.0的错误修正版本号 <br/>cvs tag release_1_0_bugfixes_p1 <br/><br/>6 合并分支 <br/>------------------------------------ <br/>如果2.0认为这些错误修改在2.0里也需要，也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中： <br/>cvs update -j release_1_0_bugfixes <br/><br/>7 再次合并分支 <br/>------------------------------------ <br/>如果又发现1.x新的bug,我在分支已经修改了，并标定了release_1_0_patch_2,我们同样希望把它合并到主干上来 <br/>cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes <br/>它的意思是把release_1_0_bugfixes_p1(tag)到release_1_0_bugfixes(分支)变化了的部分合并到当前文件(主干) <br/>否则用6步的方法，则以前合并的内容会重新合并 <br/>注意：此时我们使用第5步的结果 <br/>教训：尽早频繁的tag,但同时不能导致tag泛滥，tag在不同的分支里可以同名 <br/><br/>8 锁定分支 <br/>------------------------------------ <br/>cvs admin -l r_0_2 锁定r_0_2分支 <br/>cvs admin -l &nbsp; &nbsp;锁定主分支 <br/><br/>9 设置缺省分支 <br/>------------------------------------ <br/>cvs admin -b r_0_2 设定r_0_2为缺省分支 <br/>cvs admin -b &nbsp; &nbsp;设定主分支 <br/><br/>10 删除历史记录 <br/> &nbsp;如果历史文件过多，或确定有几个阶段的稳定版本，我们可以删除一些历史文件，以保证cvs的性能 <br/>cvs admin -o rev1:rev2 filename 删除rev1到rev2的版本，含这两个版本 <br/>cvs admin -o rev1::rev2 filename 删除rev1到rev2的版本，不含这两个版本 <br/>如果省略rev1,表示删除本分支rev2之前的所有版本 <br/>如果省略rev2,表示删除本分支rev1之后的所有版本 <br/>cvs admin -o rev filename 删除rev这个版本的文件 <br/>注意：有tag的版本不能被删除，所以tag很重要，而且只能删单个文件 <br/><br/><br/>CVS服务器的安装和配置 <br/>============================= <br/>1 下载源码 <br/>------------------------------------ <br/> &nbsp;可从很多地方下载cvs,也可从官方<a href="ftp://ftp.gnu.org/gnu/cvs/" target="_blank">ftp://ftp.gnu.org/gnu/cvs/</a>下载 <br/><br/>2 安装，同很多源码安装一样 <br/>------------------------------------ <br/> &nbsp;gunzip cvs-1.10.6.tar.gz <br/> &nbsp;tar xvf cvs-1.10.6.tar <br/> &nbsp;cd cvs-1.10.6 <br/> &nbsp;./configure <br/> &nbsp;make <br/> &nbsp;make install <br/><br/>3 包的安装，如果找到具体操作系统的安装包，则见此操作系统的使用说明，比如linux为 <br/>------------------------------------ <br/> &nbsp;rpm -ivh cvs-1.10.8-3.i386.rpm即可 <br/><br/>4 建立Repository <br/>------------------------------------ <br/> &nbsp;groupadd cvs(要访问cvs的用户加入此组) <br/> &nbsp;useradd cvsroot <br/> &nbsp;mkdir /home/cvsroot <br/> &nbsp;cvs -d /home/cvsroot init <br/> &nbsp;chown -R cvsroot.cvs /home/cvsroot <br/> &nbsp;chmod -R ug+rwx /homecvsroot <br/><br/>5 配置/etc/services文件 <br/>------------------------------------ <br/> 添加cvspserver,如果有就不要加了 <br/>cvspserver 2401/tcp # cvs client/server operations <br/>cvspserver 2401/udp # cvs client/server operations <br/><br/>6 配置inetd <br/>------------------------------------ <br/> &nbsp;编辑/etc/inetd.conf，加入 <br/>cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver <br/> &nbsp;如果使用tcpwrappers <br/>cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/usr/local/newrepos pserver <br/> &nbsp;如果使用xinetd，编辑/etc/xinetd.d/cvspserver <br/> &nbsp;service cvspserver <br/> &#123; <br/>disable = no <br/>socket_type = stream <br/>wait = no <br/>user = root <br/>env = HOME= <br/>server = /usr/bin/cvs <br/>server_args = -f --allow-root=/home/cvsroot pserver <br/> &nbsp;&#125; <br/>pserver表示是口令认证,如果要用ssh方式则应该是server <br/>--allow-root是Repository的目录，可以有多个此选项来建立多个Repository <br/><br/>7 验证配置成功 <br/> &nbsp;cvs login看时候能成功登录，有几个可能失败的地方 <br/> &nbsp;用户是否属于cvs组和目录权限 <br/> &nbsp;inetd是否正常配置和启动，--allow-root是否写对 <br/>8 导入项目 <br/> &nbsp;把你的所有项目文件放入prj_dir <br/> &nbsp;cd prj_dir <br/>　cvs import -m "this is a cvstest project" prj_dir v_0_0_1 start <br/> &nbsp;v_0_0_1是这个分支的总标记．没啥用（或曰不常用） <br/>　start 是每次 import 标识文件的输入层次的标记，没啥用。 <br/><br/><br/>Watchers <br/>============================= <br/>cvs提供了watch的功能，来帮助大家了解谁在干什么，谁在对文件做什么操作，它发email通知,以协调大家的工作。 <br/>1 开启watch功能 <br/> &nbsp;在CVSROOT/notify文件中加入下面行 <br/> &nbsp;ALL mail %s -s "CVS notification" <br/>2 设定外部email地址 <br/> &nbsp;缺省是把通知信息发给本机的email,要发给别的地址，在CVSROOT/users加入如下内容 <br/> &nbsp;hwz:kerlion@netease.com <br/>3 watch文件的修改 <br/> &nbsp;cvs watch add filename <br/> &nbsp;cvs watch remove filename <br/>4 watch文件的修改 <br/> &nbsp;watch功能是个大家协调的功能，大家必须按一个统一的工作流程来做,如果不cvs edit，cvs没有办法通知修改情况 <br/> &nbsp;cvs edit filename <br/> &nbsp;修改文件 <br/> &nbsp;cvs unedit filename <br/>5 提醒大家使用watch功能 <br/> &nbsp;cvs没有强制使用watch的功能，只有这个功能在用户提交完后自动把文件变为只读的，再使用cvs edit filename就可以修改它了 <br/> &nbsp;cvs watch on <br/>6 查看那人人再watch <br/> &nbsp;cvs watchers <br/><br/><br/>WinCVS的安装和配置 <br/>============================= <br/>1、WinCVS简介： <br/>WinCVS是CVS的一个客户端软件，它运行在Windows上，用来在Windows上登录CVS服务器，然后进行一些CVS相关的操作与管理。由于当前很多的企业内部都采用Linux/Unix做服务器，而用Windows做客户端，所以，WinCVS与CVS服务器配合使用将组成最强有力的版本控制与管理的系统之一。 <br/>2、WinCVS的下载与安装； <br/> &nbsp;最新的WinCVS可以从<a href="http://sourceforge.net/project/showfiles.php?group_id=10072" target="_blank">http://sourceforge.net/project/showfiles.php?group_id=10072</a>地址下载到，也可以在<a href="http://sourceforge.net/project" target="_blank">http://sourceforge.net/project</a> 上下载到最新的或其它版本的WinCVS。 <br/> &nbsp;下载到相应的版本后根据向导进行安装，已经要使用CVS的用户，安装这个WinCVS应该没什么问题吧！ <br/>3、配置WinCVS： <br/>a、Admin->Preferences.../general <br/> &nbsp; CVSROOT 按cvsroot格式填写 <br/> &nbsp; Authentication：用来配置cvs服务器的认证方式一般只要选择默认的pserver方式就可以 <br/> &nbsp; &nbsp; &nbsp; 要注意的是必须与cvs服务器配置时所指定的认证方式一致 <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果要用ssh server,确认在windows中安装了openssl,openssh <br/>a、Admin->Preferences.../Globals <br/> &nbsp;此项的配置主要是要注意这几选项： <br/> &nbsp;Checkout read-only：默认是选中的,建议不要修改，只是修改文件前需要先edit selection,提交后又自动变为只读 <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这样有两个好处： <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;一个是可以通过unedit selection来undo你做的修改 <br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;二是可以符合watch功能的使用规范 <br/> &nbsp;Prune empty directories: 不要选上，否则，会自动删除空目录； <br/>4、登录服务器： <br/> &nbsp; 选择Admin->login，将出现如下对话框要求用户输入登录口令 <br/> &nbsp; wincvs中命令的exit code 0表示正确执行,否则是失败，一般成功显示为 <br/> &nbsp; *****CVS exited normally with code 0***** <br/>5、winCVS的使用都有菜单，大家熟悉cvs的使用的话，用起来是很容易的,我就不多说了 <br/><br/><br/>CVSWEB的安装 <br/>============================= <br/>CVSWEB就是CVS的WEB界面，可以大大提高程序员定位修改的效率: <br/>使用的样例可以看：<a href="http://www.freebsd.org/cgi/cvsweb.cgi" target="_blank">http://www.freebsd.org/cgi/cvsweb.cgi</a> <br/><br/>CVSWEB的下载：CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本，这个是个人感觉觉得安装设置比较方便的： <br/><a href="http://www.spaghetti-code.de/software/linux/cvsweb/" target="_blank">http://www.spaghetti-code.de/software/linux/cvsweb/</a> <br/><br/>1 下载解包： <br/>tar zxf cvsweb.tgz <br/><br/>2 把配置文件cvsweb.conf复制到apache的配置目录下 <br/> cp cvsweb.conf /path/to/apache/conf <br/>转到/path/to/apache/conf下并修改cvsweb.conf： <br/>修改CVSROOT路径设置： <br/>%CVSROOT = ( <br/>'Development' => '/path/to/cvsroot/dev', #<==修改指向本地的CVSROOT <br/>'test' => '/path/to/cvsroot/test', #<==修改指向本地的CVSROOT <br/>); <br/>如果有多个cvsroot,这定缺省的cvsroot <br/>$cvstreedefault = 'test'; <br/><br/>3 其它个性化设置 <br/> cvsweb.conf还有许多其它个性化设置，常见的有这些变量： <br/> $logo 图标设置 <br/> $defaulttitle 标题设施 <br/> $address 管理员email地址设置 <br/> $long_intro 介绍文字 <br/> $short_instruction &nbsp;说明文字 <br/><br/>4 把文件cvsweb.cgi复制到apache的cgi目录 <br/> cp cvsweb.cgi /path/to/apache/cgi-bin <br/> 转到/path/to/apache/cgi-bin修改cvsweb.cgi <br/>修改cvsweb.cgi让CGI找到配置文件： <br/>$config = $ENV&#123;'CVSWEB_CONFIG'&#125; &#124;&#124; '/path/to/apache/conf/cvsweb.conf'; <br/><br/>5 中文支持 <br/> 让cvsweb正确显示中文，找到sub html_header($)函数， <br/> 然后在<html>和<title>之间插入一行，修改如下 <br/> <html> <br/> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <br/> <title>$title</title> <br/>6 复制所有的gif,png文件到apache的icons目录 <br/>7 增加访问控制 <br/>CVSWEB可不能随便开放给所有用户，因此需要使用WEB用户认证： <br/>先生成 passwd: <br/>/path/to/apache/bin/htpasswd -c cvsweb.passwd user <br/><br/>修改httpd.conf: 增加 <br/><Directory "/path/to/apache/cgi-bin/cvsweb/"> <br/>AuthName "CVS Authorization" <br/>AuthType Basic <br/>AuthUserFile /path/to/cvsweb.passwd <br/>require valid-user <br/></Directory>
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/4.htm</link>
<title><![CDATA[CVS使用手册]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Sun, 16 Jan 2005 11:08:04 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/4.htm</guid> 
<description>
<![CDATA[ 
	内容摘要： <br/><br/>CVS是一个C/S系统，多个开发人员通过一个中心版本控制系统来记录文件版本，从而达到保证文件同步的目的。工作模式如下： <br/><br/> &nbsp; &nbsp; &nbsp; CVS服务器（文件版本库）<br/> &nbsp; &nbsp; &nbsp;/ &nbsp; &nbsp; &#124; &nbsp; &nbsp; <br/> &nbsp; &nbsp; &nbsp;（版 本 同 步）<br/> &nbsp; &nbsp;/ &nbsp; &nbsp; &nbsp; &nbsp;&#124; <br/>开发者1 &nbsp;开发者2 &nbsp; 开发者3<br/><br/>作为一般开发人员挑选2,6看就可以了，CVS的管理员则更需要懂的更多一些，最后还简单介绍了一些Windows下的cvs客户端使用，CVS远程用户认证的选择及与BUG跟踪系统等开发环境的集成问题。<br/><br/><br/><br/>CVS环境初始化：CVS环境的搭建 管理员 <br/>CVS的日常使用：日常开发中最常用的CVS命令， 开发人员 管理员 <br/>CVS的分支开发：项目按照不同进度和目标并发进行 管理员 <br/>CVS的用户认证：通过SSH的远程用户认证，安全，简单 管理员 <br/>CVSWEB：CVS的WEB访问界面大大提高代码版本比较的效率 管理员 <br/>CVS TAG：将$Id$ 加入代码注释中，方便开发过程的跟踪开发人员 <br/>CVS vs VSS: CVS和Virsual SourceSafe的比较 开发人员 管理员 <br/>WinCVS: 通过SSH认证的WinCVS认证设置 <br/>基于CVSTrac的小组开发环境搭建：通过CVSTrac实现web界面的CVS用户管理,集成的BUG跟踪和WIKI交流 <br/>CVS中的用户权限管理：基于系统用户的CVS权限管理和基于CVSROOT/passwd的虚拟用户管理<br/><br/>一个系统20%的功能往往能够满足80%的需求，CVS也不例外，以下是CVS最常用的功能，可能还不到它全部命令选项的20%，作为一般开发人员平时会用cvs update和cvs commit就够了，更多的需求在实际应用过程中自然会出现，不时回头看看相关文档经常有意外的收获。<br/><br/><br/><br/><br/>CVS环境初始化<br/>环境设置：指定CVS库的路径CVSROOT <br/>tcsh<br/>setenv CVSROOT /path/to/cvsroot<br/>bash<br/>CVSROOT=/path/to/cvsroot ; export CVSROOT<br/><br/>后面还提到远程CVS服务器的设置：<br/>CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH<br/><br/>初始化：CVS版本库的初始化。<br/>cvs init<br/><br/>一个项目的首次导入<br/>cvs import -m "write some comments here" project_name vendor_tag release_tag<br/>执行后：会将所有源文件及目录导入到/path/to/cvsroot/project_name目录下<br/>vender_tag: 开发商标记<br/>release_tag: 版本发布标记<br/><br/>项目导出：将代码从CVS库里导出<br/>cvs checkout project_name<br/>cvs 将创建project_name目录，并将最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念，相对于Virvual SourceSafe的check out是cvs update， check in是cvs commit。<br/><br/><br/><br/>CVS的日常使用 <br/><br/>注意：第一次导出以后，就不是通过cvs checkout来同步文件了，而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步（添加，修改，删除）操作。<br/><br/>将文件同步到最新的版本<br/>cvs update<br/>不制定文件名，cvs将同步所有子目录下的文件，也可以制定某个文件名/目录进行同步<br/>cvs update file_name<br/>最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次，并养成“先同步 后修改”的习惯，和Virvual SourceSafe不同，CVS里没有文件锁定的概念，所有的冲突是在commit之前解决，如果你修改过程中，有其他人修改并commit到了CVS 库中，CVS会通知你文件冲突，并自动将冲突部分用<br/>>>>>>><br/>content on cvs server<br/><<<<<<<br/>content in your file<br/>>>>>>><br/>标记出来，由你确认冲突内容的取舍。<br/>版本冲突一般是在多个人修改一个文件造成的，但这种项目管理上的问题不应该指望由CVS来解决。<br/><br/>确认修改写入到CVS库里<br/>cvs commit -m "write some comments here" file_name<br/><br/>注意：CVS的很多动作都是通过cvs commit进行最后确认并修改的，最好每次只修改一个文件。在确认的前，还需要用户填写修改注释，以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话，cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。<br/>注释的质量很重要：所以不仅必须要写，而且必须写一些比较有意义的内容：以方便其他开发人员能够很好的理解<br/>不好的注释，很难让其他的开发人员快速的理解：比如： -m "bug fixed" 甚至 -m ""<br/>好的注释，甚至可以用中文: -m "在用户注册过程中加入了Email地址校验" <br/><br/>修改某个版本注释：每次只确认一个文件到CVS库里是一个很好的习惯，但难免有时候忘了指定文件名，把多个文件以同样注释commit到CVS库里了，以下命令可以允许你修改某个文件某个版本的注释：<br/>cvs admin -m 1.3:"write some comments here" file_name<br/><br/>添加文件<br/>创建好新文件后，比如：touch new_file<br/>cvs add new_file<br/>注意：对于图片，Word文档等非纯文本的项目，需要使用cvs add -kb选项按2进制文件方式导入(k表示扩展选项，b表示binary)，否则有可能出现文件被破坏的情况<br/>比如：<br/>cvs add -kb new_file.gif<br/>cvs add -kb readme.doc<br/><br/>如果关键词替换属性在首次导入时设置错了怎么办？<br/>cvs admin -kkv new_file.css <br/><br/>然后确认修改并注释<br/>cvs ci -m "write some comments here"<br/><br/>删除文件<br/>将某个源文件物理删除后，比如：rm file_name<br/>cvs rm file_name<br/>然后确认修改并注释<br/>cvs ci -m "write some comments here"<br/>以上面前2步合并的方法为：<br/>cvs rm -f file_name<br/>cvs ci -m "why delete file"<br/>注意：很多cvs命令都有缩写形式：commit=>ci; update=>up; checkout=>co/get; remove=>rm; <br/><br/>添加目录<br/>cvs add dir_name<br/><br/>查看修改历史<br/>cvs log file_name<br/>cvs history file_name<br/><br/>查看当前文件不同版本的区别<br/>cvs diff -r1.3 -r1.5 file_name<br/>查看当前文件（可能已经修改了）和库中相应文件的区别<br/>cvs diff file_name<br/>cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法，具体安装设置请看后面的cvsweb使用<br/><br/>正确的通过CVS恢复旧版本的方法：<br/>如果用cvs update -r1.2 file.name<br/>这个命令是给file.name加一个STICK TAG： "1.2" ，虽然你的本意只是想将它恢复到1.2版本<br/>正确的恢复版本的方法是：cvs update -p -r1.2 file_name >file_name<br/>如果不小心已经加成STICK TAG的话：用cvs update -A 解决<br/><br/>移动文件/文件重命名<br/>cvs里没有cvs move或cvs rename，因为这两个操作是可以由先cvs remove old_file_name，然后cvs add new_file_name实现的。<br/><br/>删除/移动目录<br/>最方便的方法是让管理员直接移动，删除CVSROOT里相应目录（因为CVS一个项目下的子目录都是独立的，移动到$CVSROOT目录下都可以作为新的独立项目：好比一颗树，其实砍下任意一枝都能独立存活），对目录进行了修改后，要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。<br/><br/>项目发布导出不带CVS目录的源文件<br/>做开发的时候你可能注意到了，每个开发目录下，CVS都创建了一个CVS/目录。里面有文件用于记录当前目录和CVS库之间的对应信息。但项目发布的时候你一般不希望把文件目录还带着含有CVS信息的CVS目录吧，这个一次性的导出过程使用cvs export命令，不过export只能针对一个TAG或者日期导出，比如：<br/>cvs export -r release1 project_name <br/>cvs export -D 20021023 project_name<br/>cvs export -D now project_name<br/><br/>CVS Branch：项目多分支同步开发<br/>确认版本里程碑：多个文件各自版本号不一样，项目到一定阶段，可以给所有文件统一指定一个阶段里程碑版本号，方便以后按照这个阶段里程碑版本号导出项目，同时也是项目的多个分支开发的基础。<br/><br/>cvs tag release_1_0<br/><br/>开始一个新的里程碑：<br/>cvs commit -r 2 标记所有文件开始进入2.x的开发<br/><br/>注意：CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。<br/><br/>版本分支的建立<br/>在开发项目的2.x版本的时候发现1.x有问题，但2.x又不敢用，则从先前标记的里程碑：release_1_0导出一个分支 release_1_0_patch<br/>cvs rtag -b -r release_1_0 release_1_0_patch proj_dir<br/><br/>一些人先在另外一个目录下导出release_1_0_patch这个分支：解决1.0中的紧急问题，<br/>cvs checkout -r release_1_0_patch<br/>而其他人员仍旧在项目的主干分支2.x上开发<br/><br/>在release_1_0_patch上修正错误后，标记一个1.0的错误修正版本号<br/>cvs tag release_1_0_patch_1<br/><br/>如果2.0认为这些错误修改在2.0里也需要，也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中：<br/>cvs update -j release_1_0_patch_1<br/><br/>CVS的远程认证通过SSH远程访问CVS<br/>使用cvs本身基于pserver的远程认证很麻烦,需要定义服务器和用户组，用户名，设置密码等，<br/><br/>常见的登陆格式如下：<br/>cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login<br/>例子：<br/>cvs -d :pserver:cvs@samba.org:/cvsroot login<br/><br/>不是很安全，因此一般是作为匿名只读CVS访问的方式。从安全考虑，通过系统本地帐号认证并通过SSH传输是比较好的办法，通过在客户机的 /etc/profile里设置一下内容：<br/>CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH<br/>所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。<br/><br/>比如:<br/><br/>CVS服务器是192.168.0.3，上面CVSROOT路径是/home/cvsroot，另外一台开发客户机是192.168.0.4，如果 tom在2台机器上都有同名的帐号，那么从192.168.0.4上设置了：<br/>export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot<br/>export CVS_RSH=ssh<br/>tom就可以直接在192.168.0.4上对192.168.0.3的cvsroot进行访问了（如果有权限的话）<br/>cvs checkout project_name<br/>cd project_name<br/>cvs update<br/>...<br/>cvs commit <br/><br/><br/>如果CVS所在服务器的SSH端口不在缺省的22，或者和客户端与CVS服务器端SSH缺省端口不一致，有时候设置了：<br/>:ext:$USER@test.server.address#port:/path/to/cvsroot <br/><br/>仍然不行，比如有以下错误信息：<br/>ssh: test.server.address#port: Name or service not known<br/>cvs [checkout aborted]: end of file from server (consult above messages if any)<br/><br/>解决的方法是做一个脚本指定端口转向（不能使用alias，会出找不到文件错误）：<br/>创建一个/usr/bin/ssh_cvs文件，假设远程服务器的SSH端口是非缺省端口：34567<br/>#!/bin/sh<br/>/usr/bin/ssh -p 34567 "$@"<br/>然后：chmod +x /usr/bin/ssh_cvs<br/>并CVS_RSH=ssh_cvs; export CVS_RSH<br/><br/>注意：port是指相应服务器SSH的端口，不是指cvs专用的pserver的端口<br/><br/><br/><br/>CVSWEB：提高文件浏览效率<br/>CVSWEB就是CVS的WEB界面，可以大大提高程序员定位修改的效率:<br/><br/>使用的样例可以看：<a href="http://www.freebsd.org/cgi/cvsweb.cgi" target="_blank">http://www.freebsd.org/cgi/cvsweb.cgi</a><br/><br/>CVSWEB的下载：CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本，这个是我个人感觉安装设置比较方便的：<br/>原先在：<a href="http://www.spaghetti-code.de/software/linux/cvsweb/" target="_blank">http://www.spaghetti-code.de/software/linux/cvsweb/</a>，但目前已经删除，目前仍可以在本站下载CVSWEB，其实最近2年FreeBSD的CVSWeb项目已经有了更好的发展吧，而当初没有用FreeBSD那个版本主要就是因为没有彩色的文件Diff功能。 <br/>下载解包：<br/>tar zxf cvsweb.tgz<br/>把配置文件cvsweb.conf放到安全的地方（比如和apache的配置放在同一个目录下），<br/>修改：cvsweb.cgi让CGI找到配置文件：<br/>$config = $ENV&#123;'CVSWEB_CONFIG'&#125; &#124;&#124; '/path/to/apache/conf/cvsweb.conf';<br/><br/>转到/path/to/apache/conf下并修改cvsweb.conf：<br/><br/>修改CVSROOT路径设置：<br/>%CVSROOT = (<br/>'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT<br/>); <br/>缺省不显示已经删除的文档：<br/>"hideattic" => "1",#<==缺省不显示已经删除的文档 <br/>在配置文件cvsweb.conf中还可以定制页头的描述信息，你可以修改$long_intro成你需要的文字 <br/>CVSWEB可不能随便开放给所有用户，因此需要使用WEB用户认证：<br/>先生成 passwd:<br/>/path/to/apache/bin/htpasswd -c cvsweb.passwd user<br/><br/>修改httpd.conf: 增加<br/><Directory "/path/to/apache/cgi-bin/cvsweb/"><br/>AuthName "CVS Authorization"<br/>AuthType Basic<br/>AuthUserFile /path/to/cvsweb.passwd<br/>require valid-user<br/></Directory><br/><br/><br/><br/>CVS TAGS: $Id: cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $<br/>将$Id: cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $ 加在程序文件开头的注释里是一个很好的习惯，cvs能够自动解释更新其中的内容成：file_name version time user_name 的格式，比如：cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp，可以这些信息了解文件的最后修改人和修改时间<br/><br/><br/><br/><br/>几个常用的缺省文件：default.php<?php/* * Copyright (c) 2002 Company Name. * $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $ */?>====================================Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别/* * Copyright (c) 2002 MyCompany Name. * $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $ */package com.mycompany;import java.;/** * comments here */public class Default &#123; &nbsp; &nbsp;/** &nbsp; &nbsp; * Comments here &nbsp; &nbsp; * @param &nbsp; &nbsp; * @return &nbsp; &nbsp; */ &nbsp; &nbsp;public toString() &#123; &nbsp; &nbsp;&#125;&#125;====================================default.pl:#!/usr/bin/perl -w# Copyright (c) 2002 Company Name.# $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $# file comments hereuse strict;CVS vs VSS<br/>CVS没有文件锁定模式，VSS在check out同时，同时记录了文件被导出者锁定。 <br/><br/>CVS的update和commit， VSS是get_lastest_version和check in <br/><br/>对应VSS的check out/undo check out的CVS里是edit和unedit <br/><br/>在CVS中，标记自动更新功能缺省是打开的，这样也带来一个潜在的问题，就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。<br/><br/>$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $ $Date: 2003/11/09 07:57:11 $这样的标记在Virsual SourceSafe中称之为Keyword Explaination，缺省是关闭的，需要通过OPITION打开，并指定需要进行源文件关键词扫描的文件类型：*.txt,*.java, *.html...<br/><br/>对于Virsual SourceSafe和CVS都通用的TAG有：<br/>$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $<br/>$Author: chedong $<br/>$Date: 2003/11/09 07:57:11 $ <br/>$Revision: 1.9 $ <br/><br/>我建议尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。 <br/><br/>WinCVS<br/>下载：<br/><br/>cvs Windows客户端：目前稳定版本为1.2<br/><a href="http://cvsgui.sourceforge.net" target="_blank">http://cvsgui.sourceforge.net</a><br/>ssh Windows客户端<br/><a href="http://www.networksimplicity.com/openssh/" target="_blank">http://www.networksimplicity.com/openssh/</a><br/><br/>安装好以上2个软件以后：<br/>WinCVS客户端的admin==>preference设置<br/>1 在general选单里<br/>设置CVSROOT： username@192.168.0.123:/home/cvsroot<br/>设置Authorization: 选择SSH server<br/><br/>2 Port选单里<br/>钩上：check for alternate rsh name<br/>并设置ssh.exe的路径，缺省是装在 C:Program FilesNetworkSimplicitysshssh.exe <br/><br/>然后就可以使用WinCVS进行cvs操作了，所有操作都会跳出命令行窗口要求你输入服务器端的认证密码。 <br/><br/>当然，如果你觉得这样很烦的话，还有一个办法就是生成一个没有密码的公钥/私钥对，并设置CVS使用基于公钥/私钥的SSH认证（在general 选单里）。<br/><br/>可以选择的diff工具：examdiff<br/>下载：<br/><a href="http://www.prestosoft.com/examdiff/examdiff.htm" target="_blank">http://www.prestosoft.com/examdiff/examdiff.htm</a><br/>还是在WinCVS菜单admin==>preference的WinCVS选单里<br/>选上：Externel diff program<br/>并设置diff工具的路径，比如：C:Program Filesed16iExamDiff.exe<br/>在对文件进行版本diff时，第一次需要将窗口右下角的use externel diff选上。 <br/><br/>基于CVSTrac的小组开发环境搭建<br/>作为一个小组级的开发环境，版本控制系统和BUG跟踪系统等都涉及到用户认证部分。如何方便的将这些系统集成起来是一个非常困难的事情，毕竟我们不能指望 Linux下有像Source Offsite那样集成度很高的版本控制/BUG跟踪集成系统。<br/><br/>我个人是很反对使用pserver模式的远程用户认证的，但如果大部分组员使用WINDOWS客户端进行开发的话，总体来说使用 CVSROOT/passwd认证还是很难避免的，但CVS本身用户的管理比较麻烦。本来我打算自己用perl写一个管理界面的，直到我发现了 CVSTrac：一个基于WEB界面的BUG跟踪系统，它外挂在CVS系统上的BUG跟踪系统，其中就包括了WEB界面的CVSROOT/passwd文件的管理，甚至还集成了WIKIWIKI讨论组功能。 <br/>这里首先说一下CVS的pserver模式下的用户认证，CVS的用户认证服务是基于inetd中的：<br/>cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver<br/>一般在2401端口（这个端口号很好记：49的平方）<br/><br/>CVS用户数据库是基于CVSROOT/passwd文件，文件格式：<br/>[username]:[crypt_password]:[mapping_system_user]<br/>由于密码都用的是UNIX标准的CRYPT加密，这个passwd文件的格式基本上是apache的htpasswd格式的扩展（比APACHE的 PASSWD文件多一个系统用户映射字段），所以这个文件最简单的方法可以用<br/>apache/bin/htpasswd -b myname mypassword <br/>创建。注意：通过htpasswd创建出来的文件会没有映射系统用户的字段<br/>例如：<br/>new:geBvosup/zKl2<br/>setup:aISQuNAAoY3qw<br/>test:hwEpz/BX.rEDU <br/><br/>映射系统用户的目的在于：你可以创建一个专门的CVS服务帐号，比如用apache的运行用户apache，并将/home/cvsroot目录下的所有权限赋予这个用户，然后在passwd文件里创建不同的开发用户帐号，但开发用户帐号最后的文件读写权限都映射为apache用户，在SSH模式下多个系统开发用户需要在同一个组中才可以相互读写CVS库中的文件。<br/><br/>进一步的，你可以将用户分别映射到apache这个系统用户上。<br/>new:geBvosup/zKl2:apache<br/>setup:aISQuNAAoY3qw:apache<br/>test:hwEpz/BX.rEDU:apache <br/><br/>CVSTrac很好的解决了CVSROOT/passwd的管理问题，而且包含了BUG跟踪报告系统和集成WIKIWIKI交流功能等，使用的 CGI方式的安装，并且基于GNU Public License：<br/><br/><br/>在inetd里加入cvspserver服务：<br/>cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver<br/><br/>xietd的配置文件：%cat cvspserver <br/>service cvspserver<br/>&#123;<br/>disable = no<br/>socket_type = stream<br/>wait = no<br/>user = apache<br/>server = /usr/bin/cvs<br/>server_args = -f --allow-root=/home/cvsroot pserver<br/>log_on_failure += USERID<br/>&#125;<br/><br/>注意：这里的用户设置成apache目的是和/home/cvsroot的所有用户一致，并且必须让这个这个用户对/home/cvsroot/下的 CVSROOT/passwd和cvstrac初始化生成的myproj.db有读取权限。<br/><br/><br/>安装过程 <br/><br/>下载：可以从<a href="http://www.cvstrac.org" target="_blank">http://www.cvstrac.org</a> 下载<br/>我用的是已经在Linux上编译好的应用程序包：cvstrac-1.1.2.bin.gz，<br/>%gzip -d cvstrac-1.1.2.bin.gz<br/>%chmod +x cvstrac-1.1.2.bin<br/>#mv cvstarc-1.1.1.bin /usr/bin/cvstrac <br/>如果是从源代码编译：<br/>从 <a href="http://www.sqlite.org/download.html" target="_blank">http://www.sqlite.org/download.html</a> 下载SQLITE的rpm包：<br/>rpm -i sqlite-devel-2.8.6-1.i386.rpm<br/>从 <a href="ftp://ftp.cvstrac.org/cvstrac/" target="_blank">ftp://ftp.cvstrac.org/cvstrac/</a> 下载软件包<br/>解包，假设解包到/home/chedong/cvstrac-1.1.2下，并规划将cvstrac安装到/usr/local/bin目录下， cd /home/chedong/cvstrac-1.1.2 编辑linux-gcc.mk:<br/>修改：<br/>SRCDIR = /home/chedong/cvstrac-1.1.2<br/>INSTALLDIR = /usr/local/bin<br/>然后<br/>mv linux-gcc.mk Makefile<br/>make<br/>#make install<br/><br/><br/>初始化cvstrac数据库：假设数据库名是 myproj<br/>在已经装好的CVS服务器上（CVS库这时候应该已经是初始化好了，比如：cvs init初始化在/home/cvsroot里），运行一下<br/>%cvstrac init /home/cvsroot myproj<br/>运行后，/home/cvsroot里会有一个的myproj.db库，使用CVSTRAC服务，/home/cvsroot/myproj.db /home/cvsroot/CVSROOT/readers /home/cvsroot/CVSROOT/writers /home/cvsroot/CVSROOT/passwd这几个文件对于web服务的运行用户应该是可写的，在RedHat8上，缺省就有一个叫 apache用户和一个apache组，所以在httpd.conf文件中设置了用apache用户运行web服务：<br/>User apache<br/>Group apache，<br/>然后设置属于apache用户和apache组<br/>#chown -R apache:apache /home/cvsroot<br/>-rw-r--r-- 1 apache apache 55296 Jan 5 19:40 myproj.db<br/>drwxrwxr-x 3 apache apache 4096 Oct 24 13:04 CVSROOT/<br/>drwxrwxr-x 2 apache apache 4096 Aug 30 19:47 some_proj/<br/>此外还在/home/cvsroot/CVSROOT中设置了：<br/>chmod 664 readers writers passwd<br/><br/>在apche/cgi-bin目录中创建脚本cvstrac:<br/>#!/bin/sh<br/>/usr/bin/cvstrac cgi /home/cvsroot<br/>设置脚本可执行：<br/>chmod +x /home/apache/cgi-bin/cvstrac<br/><br/>从 <a href="http://cvs.server.address/cgi-bin/cvstrac/myproj" target="_blank">http://cvs.server.address/cgi-bin/cvstrac/myproj</a> 进入管理界面<br/>缺省登录名：setup 密码 setup<br/>对于一般用户可以从：<br/><a href="http://cvs.server.address/cgi-bin/cvstrac/myproj" target="_blank">http://cvs.server.address/cgi-bin/cvstrac/myproj</a> <br/>在setup中重新设置了CVSROOT的路径后，/home/cvsroot<br/>如果是初次使用需要在/home/cvsroot/CVSROOT下创建passwd, readers, writers文件<br/>touch passwd readers writers<br/>然后设置属于apache用户，<br/>chown apache.apache passwd readers writers<br/>这样使用setup用户创建新用户后会同步更新CVSROOT/passwd下的帐号<br/><br/>修改登录密码，进行BUG报告等，<br/>更多使用细节可以在使用中慢慢了解。<br/><br/><br/>对于前面提到的WinCVS在perference里设置：<br/>CVSROOT栏输入：username@ip.address.of.cvs:/home/cvsroot<br/>Authenitication选择：use passwd file on server side <br/>就可以了从服务器上进行CVS操作了。<br/><br/><br/>CVS的用户权限管理<br/>CVS的权限管理分2种策略：<br/><br/><br/>基于系统文件权限的系统用户管理：适合多个在Linux上使用系统帐号的开发人员进行开发。 <br/>基于CVSROOT/passwd的虚拟用户管理：适合多个在Windows平台上的开发人员将帐号映射成系统帐号使用。 <br/>为什么使用apache/apache用户？首先RedHat8中缺省就有了，而且使用这个用户可以方便通过cvstrac进行WEB管理。<br/>chown -R apache.apache /home/cvsroot<br/>chmod 775 /home/cvsroot<br/><br/>Linux上通过ssh连接CVS服务器的多个开发人员：通过都属于apache组实现文件的共享读写<br/>开发人员有开发服务器上的系统帐号：sysuser1 sysuser2，设置让他们都属于apache组，因为通过cvs新导入的项目都是对组开放的：664权限的，这样无论那个系统用户导入的项目文件，只要文件的组宿主是apache，所有其他同组系统开发用户就都可以读写；基于ssh远程认证的也是一样。<br/><br/><br/> &nbsp; apache(system group)<br/>/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#124; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>sysuser1 &nbsp; sysuser2 &nbsp; &nbsp; sysuser3<br/><br/><br/>Windows上通过cvspserver连接CVS服务器的多个开发人员：通过在passwd文件种映射成 apache用户实现文件的共享读写<br/>他们的帐号通过CVSROOT/passwd和readers writers这几个文件管理；通过cvstrac设置所有虚拟用户都映射到apache用户上即可。<br/><br/><br/> &nbsp; apache(system user)<br/>/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#124; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>windev1 &nbsp; &nbsp; windev2 &nbsp; &nbsp; &nbsp;windev3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/><br/><br/><br/>利用cvs + (WinCVS/cvsweb/cvstrac)，构成了一个相对完善的跨平台工作组开发版本控制环境。<br/><br/>相关资源： <br/><br/>CVS HOME：<br/><a href="http://www.cvshome.org" target="_blank">http://www.cvshome.org</a><br/><br/>CVS FAQ：<br/><a href="http://www.loria.fr/~molli/cvs-index.html" target="_blank">http://www.loria.fr/~molli/cvs-index.html</a><br/><br/>相关网站:<br/><a href="http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/" target="_blank">http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/</a><br/><br/><br/>CVS--并行版本系统<br/><a href="http://www.soforge.com/cvsdoc/zh_CN/book1.html" target="_blank">http://www.soforge.com/cvsdoc/zh_CN/book1.html</a><br/><br/>CVS 免费书:<br/><a href="http://cvsbook.red-bean.com/" target="_blank">http://cvsbook.red-bean.com/</a><br/><br/>CVS 命令的速查卡片：<br/><a href="http://www.refcards.com/about/cvs.html" target="_blank">http://www.refcards.com/about/cvs.html</a><br/><br/>WinCVS:<br/><a href="http://cvsgui.sourceforge.net/" target="_blank">http://cvsgui.sourceforge.net/</a><br/><br/>CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS<br/><a href="http://www.cvstrac.org" target="_blank">http://www.cvstrac.org</a> <br/><br/>StatCVS：基于CVS的代码统计工具：按代码量，按开发者的统计表等<br/><a href="http://sourceforge.net/projects/statcvs" target="_blank">http://sourceforge.net/projects/statcvs</a><br/><br/><br/>如何在WEB开发中规划CVS上：在Google上查 "cvs web development"<br/><a href="http://ccm.redhat.com/bboard-archive/cvs_for_web_development/index.html" target="_blank">http://ccm.redhat.com/bboard-archive/cvs_for_web_development/index.html</a><br/><br/>一些集成了CVS的IDE环境： <br/>Eclipse<br/>Magic C++
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/3.htm</link>
<title><![CDATA[LAMP 架构服务器性能优化建议]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Wed, 12 Jan 2005 12:32:01 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/3.htm</guid> 
<description>
<![CDATA[ 
	LAMP 架构服务器性能优化建议<br/> &nbsp; &nbsp; &nbsp; &nbsp;（03/11/2004，R1版）<br/><br/>　　出处：<a href="http://www.paulgao.com.cn" target="_blank">http://www.paulgao.com.cn</a>，欢迎转载。<br/><br/>　　维护“手机之家”（<a href="http://www.imobile.com.cn)" target="_blank">http://www.imobile.com.cn)</a>的服务器有快两年了，也有些经验心得，写在这里给大家分享。<br/><br/>　　服务器配置如下：redhat linux 9.0、apache 1.3.29、php 4.3.4、mysql 3.23.58，以下建议均在以上平台上跑的很好，当然也跟你的应用有关系，具体实施要根据实际效果来进行。<br/>　　1、众所周知的方法就是使用 Zend Optimizer（简称 ZO，最新版本为 2.5.1） 或者 Zend Performance Suite（简称 ZPS，其中包含 ZO，最新版本为 3.6.0）对 PHP 进行加速。相关软件可到张微波的主页来下载哦，地址为：<a href="http://www.5ilinux.com/blog/archives/000093.html" target="_blank">http://www.5ilinux.com/blog/archives/000093.html</a>。<br/><br/>　　2、apache配置优化（httpd.conf）<br/> &nbsp; &nbsp; &nbsp; &nbsp;1)修改“Timeout”的值为 30-60，如果你得程序没有执行时间需要很长的话，可以修改到 10-15；<br/> &nbsp; &nbsp; &nbsp; &nbsp;2)修改“KeepAlive”的值为“Off”，这个很有效果，也很有争议，我自己的看法是很有效果，而且并没有影响速度，大家可以自行试验；<br/> &nbsp; &nbsp; &nbsp; &nbsp;3)修改“MaxRequestsPerChild”的值为“2048”，这个还在试验中，一是因为怕有内存泄漏，二是因为 apache 进程会因为随着服务时间的延长，会变得越来越胖（我这里的实际情况是某些 apache 进程会狂吃内存到18MB，晕啊：），不过这设置有没有效果，还在试验中；<br/> &nbsp; &nbsp; &nbsp; &nbsp;4)在不使用 .htaccess 的情况下，将其“<Files .htaccess>”部分设置为“None”方式，如果你使用 PHPMYADMIN 进行管理的话，可以使用 PHPMYADMIN 的 COOKIE 权限控制方式。<br/><br/>　　3、卸载不必要的模块，不管是静态编译还是 DSO 模式，以便节省内存占用。具体模块可以参照 apache 的手册，这里就不多说了。PHP 也是同样，我基本上已经把不用的模块都卸载了：）<br/><br/>　　4、使用 mod_gzip 进行加速，很简单，就不多说了。<br/><br/>　　5、如果你的服务器还是负载很高的话，更极端的方式就是在 httpd.conf 里面将日志停掉了，不过一般要保留 errorlog 才好，以便排错，而且要记得，不是把“CustomLog”注释掉就行了，而要使用“CustomLog /dev/null common”这样的方式才好。<br/><br/>　　6、如果你的 PHP 程序使用 Session 对话的话，可以在 php.ini 里面将“session.save_path”设置为“session.save_path = /dev/shm”，因为 /dev/shm 是 linux 系统独有的 TMPFS 文件系统，是以内存为主要存储方式的文件系统，比 RAMDISK 要好，因为可以使用 DISKSWAP 作为补充，而且是系统自带，不需要另行配置，想想吧，从磁盘IO操作到内存操作，速度会快多少？：）你也可以把你所需要的临时文件都写在 /dev/shm 下，只是别忘了，重启就没有啦，我是只存放目标文件的，呵呵。额外的说明资料请看“使用虚拟内存（virtual memory，VM）文件系统和绑定安装”（<a href="http://www-900.ibm.com/developer" target="_blank">http://www-900.ibm.com/developer</a> ... m/l-fs3/index.shtml）。<br/><br/>　　7、MYSQL 的优化（/etc/my.cnf）<br/> &nbsp; &nbsp; &nbsp; &nbsp;1)确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数；<br/> &nbsp; &nbsp; &nbsp; &nbsp;2)确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数；<br/> &nbsp; &nbsp; &nbsp; &nbsp;3)如果不需要的话，可以将二进制日志（binlog）停掉，方法是将“log-bin”注释掉；<br/> &nbsp; &nbsp; &nbsp; &nbsp;4)在内存允许的情况下，对一些参数进行重新配置，目标在于将大部分操作集中于内存中，尽量不进行磁盘操作，对于我的 MYSQL 服务器我是如下修改的，基于 2G 内存情况：<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp;[mysqld]<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= key_buffer=512M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= max_allowed_packet=4M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= table_cache=1024<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= thread_cache=64<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= join_buffer_size=32M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= sort_buffer=32M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= record_buffer=32M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= max_connections=512<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= wait_timeout=120<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= interactive_timeout=120<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= max_connect_errors=30000<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= long_query_time=1<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= max_heap_table_size=256M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= tmp_table_size=128M<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= thread_concurrency=8<br/> &nbsp; &nbsp; &nbsp; &nbsp;set-variable &nbsp; &nbsp;= myisam_sort_buffer_size=128M<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp;你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值，越小越好，最好为零：）<br/> &nbsp; &nbsp; &nbsp; &nbsp;Created_tmp_disk_tables<br/> &nbsp; &nbsp; &nbsp; &nbsp;Created_tmp_tables<br/> &nbsp; &nbsp; &nbsp; &nbsp;Created_tmp_files<br/> &nbsp; &nbsp; &nbsp; &nbsp;Slow_queries<br/><br/>　　8、在启动脚本中使用“--log-slow-queries=/home/logs/mysql_slow.log”参数，以便进行 SQL 语句的优化工作，这个其实是很很重要的工作。记得一定要在 my.cnf 中设置“set-variable = long_query_time=1”才行。<br/><br/>　　9、另外可以使用 4.0.xx 版本的 MYSQL，4.0.xx 版本除了一些性能提升以外，还有 QueryCache 方法，就是在 SQL 语句查询结果没有变动之前，将其结果进行缓存，下次再进行同样的 SQL 语句查询就可以直接反回结果，当然也是以牺牲内存为前提：）<br/><br/>　　10、额外的，对于 LINUX EXT3 文件系统还有一个小技巧可用，就是在修改 /etc/fstab 中的参数，比如“/dev/sdb2 /home ext3 defaults 1 2”改为“/dev/sdb2 /home ext3 noatime 1 2”，“noatime”的意思就是不修改 accesstime，对于磁盘文件读写频繁的服务器也应该可以降低一些效果。不过最好不要远程操作，不然因为修改失误，服务器不能启动了，可别怪我：）<br/><br/>　　好了，基本上我用过的方法已经说过一遍了，有些方法是取自于一些很好的文章，由于未作保留，所以无法写出出处，只能泛泛的表示感谢了。其中有些方法也适用于 Windows 平台，大家可以根据自己的服务器、应用情况去进行应用，大家也可一说说自己的办法，比如改用 ZEUS 来做 webserver，我也在找更多的办法来提升服务器性能，比如基于 LINUX KERNEL v2.4 以上内核的一些性能优化方法，从 network 到 swap（因为内核升级，所以一些老版本内核的方法已经不能再使用了：）。我也会进一步更新这篇文章，让大家能够更好的进行服务器的性能提升工作～
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/2.htm</link>
<title><![CDATA[Linux配置为代理防火墙]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 21 Oct 2004 12:25:26 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/2.htm</guid> 
<description>
<![CDATA[ 
	　　 Linux本身可以通过添加插件软件包起到代理防火墙的作用，而且这一切都是免费的。<br/> 　　什么是代理防火墙 <br/> 　　代理防火墙不让任何直接的网络流通过，而由它作为互联网和内部网络计算机之间的中间媒介。防火墙自己处理各种网络服务而不是只让它们直接通过。例如，登录到网络上的计算机请求一个网页。计算机不直接链接到网络服务提供的网页，而是连到自己网络的代理服务器上，代理服务器识别代理请求，然后以合适的方式传递给相应的网络服务器。远程网络服务器视为来自防火墙服务器的正常网络请求，发送合适的网页，防火墙服务器再把网页返送给计算机。 <br/> &nbsp;　　这样，防火墙就对Internet隐蔽了你的计算机存在的事实，减少外界对内部网络的可见性。 <br/><br/> &nbsp;　　安装 <br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　1.在<A href="http://www.socks.nec.com/cgi-bin/download.pl" target="_blank" ><a href="http://www.socks.nec.com/cgi-bin/download.pl" target="_blank">http://www.socks.nec.com/cgi-bin/download.pl</a></A>站点找到Socks软件包，在下载前要填写有关的用户信息，然后单击[Submit]按钮，此后登录到具有下载链接的页面，单击链接来下载插座软件包。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　2.在存储下载的Socks软件包的目录中，使用Tar命令解开该软件包。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　Tar - xzvf sock5-vl. 0r11.tar.gz<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　此命令创建一个sock5-vl. 0r11目录，把软件包解压到该目录中，使用CD命令变成该目录。该目录中有一个编辑和安装软件包的配置脚本。使用Su命令变成根用户，然后在命令提示下运行脚本。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　3.输入Make命令编译Socks包，完成以后，通过输入Make Install命令安装软件包。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　注意：在使用之前，必须在/etc目录下创建一个Socks5.conf文件，Socks5检查/etc/socks5.conf文件得知将代理什么协议和服务，以及哪个计算机将能够使用此代理服务。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　创建Socks5.conf文件<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　Socks5.conf文件被分成6部分。每一部分控制Socks5守护进程处理特定链接的一个特别项，当一个客户计算机连到代理服务器上，Socks5连续搜索每一部分的每一行，并根据遇到的规则决定采取什么行动，当找到与处理的链接相匹配的规则行时停止，所以规则的顺序很重要。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　1.主机地址标志。主机地址可以是完整的主机名或IP地址，例如：gzdd .sjsgz .net或10.88.56.4，它也可能是一个部分主机名或地址，例如：. sjsgz .net或10 .88.56.4。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　注意：部分主机名以点(.)字符开始就允许Socks识别部分主机名用它匹配Sjsgz .net域的任何主机。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　2.禁止主机部分。禁止主机部分用于禁止对指定主机和协议的代理服务。一个禁止主机行总是以关键词Ban开始，后跟源主机参数和一个源端口参数。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　命令格式：Ban source-host sour-ce-port<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　例如：Ban gzdd.sjsgz.net http，表明主机gzdd被禁止访问系统上的网络服务；Ban 199.170.176.-，表明199.170.176.x网上主机都不可访问系统上任何代理服务；Ban - -，表明任何主机不可访问此系统的任何代理服务。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　3.访问控制部分。这是Socks5.conf文件最有用的部分，访问控制部分用于允许或禁止基于源和目的机器的主机地址或端口号的代理连接，访问控制行总以关键词Permit或关键词Deny开头。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　命令格式：Permit auth cmd src-host dest-host src-port dest-port或Deny auth cmd src-host dest-host src-port dest-port<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　例如：Permit - - 10.88.56. - 1880 http，表明允许在10.88.56. x网段的主机通过端口1880访问网络；Deny - - - - - -，表明拒绝所有连接。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　当一个客户机连到代理服务器上时，Socks扫描控制行列表，若找不到匹配的Socks拒绝连接。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　启动Socks5服务<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　可以用手工启动守护进程，只需以根用户登录，在命令提示符下输入Socks5，Socks5守护进程被放到背景执行并返回提示符。也可以把Socks5命令放入/etc/rc.d下的Rc.local启动脚本中，以使下次启动机器时自动启动Socks5。尽管仍以根用户登录，但还需要把/etc/rc.d/rc.local文件调入文本编辑器并在文件末加入以下几行：<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　# Start socks5 proxy services<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　/usr/local/bin/socks5<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　完成后存贮文件并退出编辑器。<br/> &nbsp;<br/> &nbsp;<br/> &nbsp;　　这样通过在Linux中安装软件包，创建Socks5文件，使得Linux起到代理防火墙的作用，保证校园网络的安全。
]]>
</description>
</item><item>
<link>http://www.gaobo.info/read.php/1.htm</link>
<title><![CDATA[Linux下双网卡绑定技术实现负载均衡和失效保护]]></title> 
<author>Doctor &lt;gregry@cqut.edu.cn&gt;</author>
<category><![CDATA[xNix]]></category>
<pubDate>Thu, 21 Oct 2004 12:23:38 +0000</pubDate> 
<guid>http://www.gaobo.info/read.php/1.htm</guid> 
<description>
<![CDATA[ 
	保持服务器的高可用性是企业级 IT 环境的重要因素。其中最重要的一点是服务器网络连接的高可用性。网卡（NIC）绑定技术有助于保证高可用性特性并提供其它优势以提高网络性能。 <br/>我们在这介绍的Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡，这个聚合起来的设备看起来是一个单独的以太网接口设备，通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已存在，被称为Trunking和Etherchannel技术，在Linux的2.4.x的内核中也采用这这种技术，被称为bonding。bonding技术的最早应用是在集群——beowulf上，为了提高集群节点间的数据传输而设计的。下面我们讨论一下bonding 的原理,什么是bonding需要从网卡的混杂(promisc)模式说起。我们知道，在正常情况下，网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧，对于别的数据帧都滤掉，以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式，可以接收网络上所有的帧，比如说tcpdump，就是运行在这个模式下。bonding也运行在这个模式下，而且修改了驱动程序中的mac地址，将两块网卡的Mac地址改成相同，可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。 <br/>说了半天理论，其实配置很简单，一共四个步骤： <br/>实验的操作系统是Redhat Linux Enterprise 3.0 <br/>绑定的前提条件：芯片组型号相同，而且网卡应该具备自己独立的BIOS芯片 <br/><br/>双网卡邦定的拓朴图(见下图) <br/><a href="http://www.gaobo.info/attachment/1142324967.gif" target="_blank"><img src="http://www.gaobo.info/attachment/1142324967.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>1.编辑虚拟网络接口配置文件,指定网卡IP <br/>vi /etc/sysconfig/ network-scripts/ ifcfg-bond0 <br/>[root@rhas-13 root]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0 <br/>2 #vi ifcfg-bond0 <br/>将第一行改成 DEVICE=bond0 <br/># cat ifcfg-bond0 <br/>DEVICE=bond0 <br/>BOOTPROTO=static <br/>IPADDR=172.31.0.13 <br/>NETMASK=255.255.252.0 <br/>BROADCAST=172.31.3.254 <br/>ONBOOT=yes <br/>TYPE=Ethernet <br/>这里要主意，不要指定单个网卡的IP 地址、子网掩码或网卡 ID。将上述信息指定到虚拟适配器(bonding)中即可。 <br/>[root@rhas-13 network-scripts]# cat ifcfg-eth0 <br/>DEVICE=eth0 <br/>ONBOOT=yes <br/>BOOTPROTO=dhcp <br/>[root@rhas-13 network-scripts]# cat ifcfg-eth1 <br/>DEVICE=eth0 <br/>ONBOOT=yes <br/>BOOTPROTO=dhcp <br/><br/>3 # vi /etc/modules.conf <br/>编辑 /etc/modules.conf 文件，加入如下一行内容，以使系统在启动时加载bonding模块，对外虚拟网络接口设备为 bond0 <br/>　 <br/>加入下列两行 <br/>alias bond0 bonding <br/>options bond0 miimon=100 mode=1 <br/>说明：miimon是用来进行链路监测的。 比如:miimon=100，那么系统每100ms监测一次链路连接状态，如果有一条线路不通就转入另一条线路；mode的值表示工作模式，他共有0，1,2,3四种模式，常用的为0,1两种。 <br/>mode=0表示load balancing (round-robin)为负载均衡方式，两块网卡都工作。 <br/>mode=1表示fault-tolerance (active-backup)提供冗余功能，工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. <br/>bonding只能提供链路监测，即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了，而交换机本身并没有故障，那么bonding会认为链路没有问题而继续使用 <br/>4 # vi /etc/rc.d/rc.local <br/>加入两行 <br/>ifenslave bond0 eth0 eth1 <br/>route add -net 172.31.3.254 netmask 255.255.255.0 bond0 <br/><br/>到这时已经配置完毕重新启动机器. <br/>重启会看见以下信息就表示配置成功了 <br/>................ <br/>Bringing up interface bond0 OK <br/>Bringing up interface eth0 OK <br/>Bringing up interface eth1 OK <br/>................ <br/><br/>下面我们讨论以下mode分别为0,1时的情况 <br/><br/>mode=1工作在主备模式下,这时eth1作为备份网卡是no arp的 <br/>[root@rhas-13 network-scripts]# ifconfig 验证网卡的配置信息 <br/>bond0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 <br/>RX packets:18495 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:480 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:0 <br/>RX bytes:1587253 (1.5 Mb) TX bytes:89642 (87.5 Kb) <br/><br/>eth0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 <br/>RX packets:9572 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:480 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:1000 <br/>RX bytes:833514 (813.9 Kb) TX bytes:89642 (87.5 Kb) <br/>Interrupt:11 <br/><br/>eth1 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1 <br/>RX packets:8923 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:1000 <br/>RX bytes:753739 (736.0 Kb) TX bytes:0 (0.0 b) <br/>Interrupt:15 <br/>那也就是说在主备模式下,当一个网络接口失效时(例如主交换机掉电等),不回出现网络中断,系统会按照cat /etc/rc.d/rc.local里指定网卡的顺序工作,机器仍能对外服务,起到了失效保护的功能. <br/><br/>在mode=0 负载均衡工作模式,他能提供两倍的带宽,下我们来看一下网卡的配置信息 <br/>[root@rhas-13 root]# ifconfig <br/>bond0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 <br/>RX packets:2817 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:95 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:0 <br/>RX bytes:226957 (221.6 Kb) TX bytes:15266 (14.9 Kb) <br/><br/>eth0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 <br/>RX packets:1406 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:48 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:1000 <br/>RX bytes:113967 (111.2 Kb) TX bytes:7268 (7.0 Kb) <br/>Interrupt:11 <br/><br/>eth1 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B <br/>inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0 <br/>UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 <br/>RX packets:1411 errors:0 dropped:0 overruns:0 frame:0 <br/>TX packets:47 errors:0 dropped:0 overruns:0 carrier:0 <br/>collisions:0 txqueuelen:1000 <br/>RX bytes:112990 (110.3 Kb) TX bytes:7998 (7.8 Kb) <br/>Interrupt:15 <br/><br/>在这种情况下出现一块网卡失效,仅仅会是服务器出口带宽下降,也不会影响网络使用. <br/><br/><br/><br/><br/>通过查看bond0的工作状态查询能详细的掌握bonding的工作状态 <br/>[root@rhas-13 bonding]# cat /proc/net/bonding/bond0 <br/>bonding.c:v2.4.1 (September 15, 2003) <br/><br/>Bonding Mode: load balancing (round-robin) <br/>MII Status: up <br/>MII Polling Interval (ms): 0 <br/>Up Delay (ms): 0 <br/>Down Delay (ms): 0 <br/>Multicast Mode: all slaves <br/><br/>Slave Interface: eth1 <br/>MII Status: up <br/>Link Failure Count: 0 <br/>Permanent HW addr: 00:0e:7f:25:d9:8a <br/><br/>Slave Interface: eth0 <br/>MII Status: up <br/>Link Failure Count: 0 <br/>Permanent HW addr: 00:0e:7f:25:d9:8b <br/><br/>Linux下通过网卡邦定技术既增加了服务器的可靠性,又增加了可用网络带宽,为用户提供不间断的关键服务。用以上方法均在redhat的多个版本测试成功,而且效果良好
]]>
</description>
</item>
</channel>
</rss>