﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-我的ITblog我作主　　关注→　『伊波拉』→　测试　SzDlinXie- ITblog　　  　　   -随笔分类-Linux基础杂志</title><link>http://www.cnitblog.com/szdlinxie/category/4487.html</link><description>·√·  本ITblog站点记录相关的软件技术文档、网络技术杂志、测试技术杂谈等技术文档的管理站点.联系方式：MSN：dowling@sunlike.cn   QQ:94595885</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 08:55:29 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 08:55:29 GMT</pubDate><ttl>60</ttl><item><title>Linux下常用压缩格式的压缩与解压方法</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/09/12/49059.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Fri, 12 Sep 2008 15:40:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/09/12/49059.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/49059.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/09/12/49059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/49059.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/49059.html</trackback:ping><description><![CDATA[<div id=article_detail>
<h1 class=bigTitle>Linux下常用压缩格式的压缩与解压方法</h1>
</div>
<div id=content>
<p>.tar<br>解包： tar xvf FileName.tar<br>打包：tar cvf FileName.tar DirName<br>（注：tar是打包，不是压缩！）<br>---------------------------------------------<br>.gz<br>解压1：gunzip FileName.gz<br>解压2：gzip -d FileName.gz<br>压缩：gzip FileName<br>.tar.gz<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>.tgz<br>解压：tar zxvf FileName.tgz<br>压缩：未知<br>.tar.tgz<br>解压：tar zxvf FileName.tar.tgz<br>压缩：tar zcvf FileName.tar.tgz FileName<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</p>
<p><br>---------------------------------------------<br>.lha<br>解压：lha -e FileName.lha<br>压缩：lha -a FileName.lha FileName</p>
<p>.rpm<br>解包：rpm2cpio FileName.rpm | cpio -div<br>---------------------------------------------<br>.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh&nbsp;<br>.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea<br>解压：sEx x FileName.*<br>压缩：sEx a FileName.* FileName</p>
</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/49059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-09-12 23:40 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/09/12/49059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux双网卡bonding举例</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48495.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Thu, 28 Aug 2008 14:25:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48495.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/48495.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48495.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/48495.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/48495.html</trackback:ping><description><![CDATA[<div>所谓bonding，就是将多块网卡绑定同一IP地址对外提供服务，可以实现高可用或者负载均衡。当然，直接给两块网卡设置同一IP地址是不可能的。通过bonding，虚拟一块网卡对外提供连接，物理网卡的被修改为相同的MAC地址。Kernels 2.4.12及以后的版本均提供bonding模块，以前的版本可以通过patch实现。<br><br>1.确认你目前使用的网卡，检查/etc/sysconfig/network-scripts目录下以ifcfg-开头的文件，应该为eth0, eth1...<br><br>2. 配置虚拟网卡bond0<br>可以使用DHCP，也可以配置static IP，最好通过vi编辑配置文件<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content>[root@server1 ~]# cd /etc/sysconfig/network-scripts<br>[root@server1 network-scripts]# cat ifcfg-bond0<br>DEVICE=bond0<br>BOOTPROTO=none<br>ONBOOT=yes<br>NETWORK=192.168.0.0<br>NETMASK=255.255.255.0<br>IPADDR=192.168.0.10<br>USERCTL=no<br>GATEWAY=192.168.0.254<br>TYPE=Ethernet</div>
</div>
<br><br>3. 修改eth0, eth1配置文件<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content>[root@server1 network-scripts]# ifcfg-eth0<br>DEVICE=eth0<br>BOOTPROTO=none<br>ONBOOT=yes<br>MASTER=bond0<br>SLAVE=yes<br>USERCTL=yes<br>[root@server1 network-scripts]# ifcfg-eth1<br>DEVICE=eth1<br>BOOTPROTO=none<br>ONBOOT=yes<br>MASTER=bond0<br>SLAVE=yes<br>USERCTL=yes</div>
</div>
<br><br>4. 将新添加的bond0设备加入modprobe.conf中，以便kernel识别。加入设置参数，miimon值表示两块网卡相互监测的时间，以ms为单位。mode值为工作模式，可设置为高可<a name=entrymore></a>用还是负载均衡，0为高可用（默认值），1为负载均衡，另外还有一种XOR模式。<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content>alias bond0 bonding<br>options bond0 miimon=100 mode=1</div>
</div>
<br><br>关于Linux使用bonding的详细信息可以参考官方文档http://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/Documentation/networking/bonding.txt </div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/48495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-08-28 22:25 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下软件安装详解</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48493.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Thu, 28 Aug 2008 14:06:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48493.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/48493.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/48493.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/48493.html</trackback:ping><description><![CDATA[<span>在</span><span>Windows</span><span>下安装软件时，只需用鼠标双击软件的安装程序，</span>
<p><span>或者用</span><span>Zip</span><span>等解压缩软件解压缩即可安装。</span></p>
<p><span>在</span><span>Linux</span><span>下安装软件对初学者来说，难度高于</span><span>Windows</span><span>下软件安装。</span><span> </span></p>
<p><span>下面我就详细讲解</span><span>Linux</span><span>下如何安装软件。</span><span> <br></span><span>　　先来看看</span><span>Linux</span><span>软件扩展名。</span></p>
<p><span>软件后缀为</span><span>.rpm</span><span>最初是</span><span>Red Hat Linux</span><span>提供的一种包封装格式，</span></p>
<p><span>现在许多</span><span>Linux</span><span>发行版本都使用；后缀为</span><span>.deb</span><span>是</span><span>Debain Linux</span><span>提供的一种包封装格式；</span></p>
<p><span>后缀为</span><span>.tar.gz</span><span>、</span><span>tar.Z</span><span>、</span><span>tar.bz2</span><span>或</span><span>.tgz</span><span>是使用</span><span>Unix</span><span>系统打包工具</span><span>tar</span><span>打包的；</span></p>
<p><span>后缀为</span><span>.bin</span><span>的一般是一些商业软件。通过扩展名可以了解软件格式，进而了解软件安装。</span><span> <br></span><span>　　</span><span>RPM</span><span>格式软件包的安装</span><span> <br></span><span>　　</span><span>1.</span><span>简介</span><span><br></span><span>　　几乎所有的</span><span>Linux</span><span>发行版本都使用某种形式的软件包管理安装、更新和卸载软件。与直接从源代码安装相比，软件包管理易于安装和卸载；易于更新已安装的软件包；易于保护配置文件；易于跟踪已安装文件。</span><span> <br></span><span>　　</span><span>RPM</span><span>全称是</span><span>Red Hat Package Manager</span><span>（</span><span>Red Hat</span><span>包管理器）。</span><span>RPM</span><span>本质上就是一个包，包含可以立即在特定机器体系结构上安装和运行的</span><span>Linux</span><span>软件。</span><span>RPM</span><span>示意图见图</span><span>1</span><span>。</span><span> <br><br></span><span>　　大多数</span><span>Linux RPM</span><span>软件包的命名有一定的规律，它遵循名称</span><span>-</span><span>版本</span><span>-</span><span>修正版</span><span>-</span><span>类型－</span><span>MYsoftware-1.2 -1.i386.rpm </span><span>。</span><span> <br><br></span><span>　　</span><span>2.</span><span>安装</span><span>RPM</span><span>包软件</span><span> <br></span><span>　　＃　</span><span>rpm -ivh MYsoftware-1.2 -1.i386.rpm <br><br></span><span>　　</span><span>RPM</span><span>命令主要参数：</span><span> <br><br></span><span>　　</span><span>-i </span><span>安装软件。</span><span><br></span><span>　　</span><span>-t </span><span>测试安装，不是真的安装。</span><span> <br></span><span>　　</span><span>-p </span><span>显示安装进度。</span><span><br></span><span>　　</span><span>-f </span><span>忽略任何错误。</span><span><br></span><span>　　</span><span>-U </span><span>升级安装。</span><span><br></span><span>　　</span><span>-v </span><span>检测套件是否正确安装。</span><span><br></span><span>　　　　这些参数可以同时采用。更多的内容可以参考</span><span>RPM</span><span>的命令帮助。</span><span> <br></span><span>　　</span><span>3.</span><span>卸载软件</span><span> <br></span><span>　　＃　</span><span>rpm -e </span><span>软件名</span><span> <br></span><span>　　需要说明的是，上面代码中使用的是软件名，而不是软件包名。例如，要卸载</span><span>software-1.2.-1.i386.rpm</span><span>这个包时，应执行：</span><span><br></span><span>　　＃</span><span>rpm -e software <br>4.</span><span>强行卸载</span><span>RPM</span><span>包</span><span><br></span><span>　　有时除去一个</span><span>RPM</span><span>是不行的，尤其是系统上有别的程序依赖于它的时候。如果执行命令会显示如下错误信息：</span><span> <br></span><span>　　＃</span><span># rpm -e xsnow<br></span><span>　　</span><span>error: removing these packages would break dependencies:<br></span><span>　　</span><span>/usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1<br></span><span>　　在这种情况下，可以用</span><span>--force</span><span>选项重新安装</span><span>xsnow</span><span>：</span><span> <br></span><span>　　＃</span><span># rpm -ivh --force xsnow-1.41-1.i386.rpm<br></span><span>　　</span><span>xsnow<br></span><span>　这里推荐使用工具软件</span><span>Kleandisk</span><span>，用它可以安全彻底清理掉不再使用的</span><span>RPM</span><span>包。</span><span><br></span><span>　　</span><span>5.</span><span>安装</span><span>.src.rpm</span><span>类型的文件</span><span><br></span><span>　　目前</span><span>RPM</span><span>有两种模式，一种是已经过编码的（</span><span>i386.rpm</span><span>），一种是未经编码的（</span><span>src.rpm</span><span>）。</span><span><br></span><span>　　</span><span>rpm --rebuild Filename.src.rpm <br></span><span>　　这时系统会建立一个文件</span><span>Filenamr.rpm</span><span>，在</span><span>/usr/src/redflag/RPMS/</span><span>子目录下，一般是</span><span>i386</span><span>，具体情况和</span><span>Linux</span><span>发行版本有关。然后执行下面代码即可：</span><span><br></span><span>　　</span><span>rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm <br></span><span>　　使用</span><span>deb</span><span>打包的软件安装</span><span> <br></span><span>　　</span><span>deb</span><span>是</span><span>Debian Linux</span><span>提供的一个包管理器，它与</span><span>RPM</span><span>十分类似。但由于</span><span>RPM</span><span>出现得早，并且应用广泛，所以在各种版本的</span><span>Linux</span><span>中都常见到，而</span><span>Debian</span><span>的包管理器</span><span>dpkg</span><span>只出现在</span><span>Debina Linux</span><span>中。它的优点是不用被严格的依赖性检查所困扰，缺点是只在</span><span>Debian Linux</span><span>发行版中才能见到这个包管理工具。</span><span> <br></span><span>　　</span><span>1. </span><span>安装</span><span><br></span><span>　　＃　</span><span>dpkg -i MYsoftware-1.2.-1.deb <br></span><span>　　</span><span>2. </span><span>卸载</span><span><br></span><span>　　＃　</span><span>dpkg -e MYsoftware <br></span><span>　　使用源代码进行软件安装</span><span> <br></span><span>　　和</span><span>RPM</span><span>安装方式相比，使用源代码进行软件安装会复杂一些，但是用源代码安装软件是</span><span>Linux</span><span>下进行软件安装的重要手段，也是运行</span><span>Linux</span><span>的最主要的优势之一。使用源代码安装软件，能按照用户的需要选择定制的安装方式进行安装，而不是仅仅依靠那些在安装包中的预配置的参数选择安装。另外，仍然有一些软件程序只能从源代码处进行安装。</span><span> <br></span><span>　　现在有很多地方都提供源代码包，到底在什么地方获得取决于软件的特殊需要。对于那些使用比较普遍的软件，如</span><span>Sendmail</span><span>，可以从商业网站处下载源代码软件包（如</span><span>http://www.sendmail.org </span><span>）。一般的软件包，可从开发者的</span><span>Web</span><span>站点下载。下面介绍一下安装步骤：</span><span> <br></span><span>　　</span><span>1.</span><span>解压数据包</span><span><br></span><span>　　源代码软件通常以</span><span>.tar.gz</span><span>做为扩展名</span><span>,</span><span>也有</span><span>tar.Z</span><span>、</span><span>tar.bz2</span><span>或</span><span>.tgz</span><span>为扩展名的。不同扩展名解压缩命令也不相同，见表</span><span>1</span><span>。</span><span>
<table cellSpacing=1 cellPadding=1 width=301 border=1>
    <tbody>
        <tr>
            <td>&nbsp;压缩包类型</td>
            <td>&nbsp;解压缩命令</td>
        </tr>
        <tr>
            <td>&nbsp;.gz</td>
            <td>&nbsp;gunzip</td>
        </tr>
        <tr>
            <td>&nbsp;.z</td>
            <td>&nbsp;uncompress</td>
        </tr>
        <tr>
            <td>&nbsp;.zip</td>
            <td>&nbsp;unzip</td>
        </tr>
        <tr>
            <td>&nbsp;.bz2</td>
            <td>&nbsp;bunzip2</td>
        </tr>
    </tbody>
</table>
<br></span><span>　　</span><span><br></span><span>　　</span><span>2.</span><span>编译软件</span><span><br></span><span>　　成功解压缩源代码文件后，进入解包的目录。在安装前阅读</span><span>Readme</span><span>文件和</span><span>Install</span><span>文件。尽管许多源代码文件包都使用基本相同的命令，但是有时在阅读这些文件时能发现一些重要的区别。例如，有些软件包含一个可以安装的安装脚本程序（</span><span>.sh</span><span>）。在安装前阅读这些说明文件，有助于安装成功和节约时间。</span><span> <br></span><span>　　在安装软件以前要成为</span><span>root</span><span>用户。实现这一点通常有两种方式：在另一台终端以</span><span>root</span><span>用户登录，或者输入</span><span>&#8220;su&#8221;</span><span>，此时系统会提示输入</span><span>root</span><span>用户的密码。输入密码以后，就将一直拥有</span><span>root</span><span>用户的权限。如果已经是</span><span>root</span><span>用户，那就可以进行下一步。</span><span> <br></span><span>通常的安装方法是从安装包的目录执行以下命令：</span><span> <br></span><span>　　</span><span>gunzip soft1.tar.gz<br></span><span>　　</span><span>cd soft1<br></span><span>　　＃</span><span>. /configure </span><span>＃配置＃</span><span><br></span><span>　　</span><span>make </span><span>＃调用</span><span>make</span><span>＃</span><span><br></span><span>　　</span><span>make install </span><span>＃安装源代码＃</span><span><br></span><span>　　删除安装时产生的临时文件：</span><span><br></span><span>　　＃</span><span>make clean <br></span><span>　　卸载软件：</span><span><br></span><span>　　＃</span><span>make uninstall <br></span><span>　　有些软件包的源代码编译安装后可以用</span><span>make uninstall</span><span>命令卸载。如果不提供此功能，则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中，往往很难把它删除干净，应该在编译前进行配置。</span><span> <br></span><span>　　</span><span>.bin</span><span>文件安装</span><span> <br></span><span>　　扩展名为</span><span>.bin</span><span>文件是二进制的，它也是源程序经编译后得到的机器语言。有一些软件可以发布为以</span><span>.bin</span><span>为后缀的安装包，例如，流媒体播放器</span><span>RealONE</span><span>。如果安装过</span><span>RealONE</span><span>的</span><span>Windows</span><span>版的话，那么安装</span><span>RealONE for Linux</span><span>版本</span><span>(</span><span>文件名：</span><span>r1p1_linux22_libc6_i386_a1.bin)</span><span>就非常简单了：</span><span><br></span><span>　　＃</span><span>chmod +x r1p1_linux22_libc6_i386_a1.bin<br></span><span>　　</span><span>./ r1p1_linux22_libc6_i386_a1.bin <br></span><span>　　接下来选择安装方式，有普通安装和高级安装两种。如果不想改动安装目录，就可选择普通安装，整个安装过程几乎和在</span><span>Windwos</span><span>下一样。</span><span> <br></span><span>　</span><span>.bin</span><span>文件的卸载，以</span><span>RealONE for Linux</span><span>为例，如果采用普通安装方式的话，在用户主目录下会有</span><span>Real</span><span>和</span><span>Realplayer9</span><span>两个文件夹，把它们删除即可。</span><span> <br></span><span>　　</span><span>Linux</span><span>绿色软件</span><span> <br></span><span>　　</span><span>Linux</span><span>也有一些绿色软件，不过不是很多。</span><span>Linux</span><span>系统提供一种机制：自动响应软件运行进程的要求</span><span>,</span><span>为它设定好可以马上运行的环境。这种机制可以是一种接口，或者是中间件。程序员编写的程序可以直接拷贝分发，不用安装，只要点击程序的图标，访问操作系统提供的接口，设定好就可以工作。若要删除软件，直接删除就可以</span><span>,</span><span>不用链接文件。这是最简单的软件安装、卸载方式。</span><span> <br></span><span>　　上面介绍了</span><span>Linux</span><span>软件安装的方法，对于</span><span>Linux</span><span>初学者来说，</span><span>RPM</span><span>安装是一个不错的选择。如果想真正掌握</span><span>Linux</span><span>系统，源代码安装仍然是</span><span>Linux</span><span>下软件安装的重要手段</span></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/48493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-08-28 22:06 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux inittab详解</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48492.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Thu, 28 Aug 2008 14:03:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48492.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/48492.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/48492.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/48492.html</trackback:ping><description><![CDATA[一、什么是init<br><br>　　init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。<br><br>　　内核启动（已经被载入内存，开始运行，并已初始化所有的设备驱动程序和数据结构等）之后，就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以，init始终是第一个进程（其PID始终为1）。<br><br>　　内核会在过去曾使用过init的几个地方查找它，它的正确位置（对Linux系统来说）是/sbin/init.如果内核找不到init，它就会试着运行/bin/sh，如果运行失败，系统的启动也会失败。<br><br>二、运行级别<br><br>　　运行级就是操作系统当前正在运行的功能级别。这个级别从1到6，具有不同的功能。其功能级别如下：# 0 - 停机（千万不能把initdefault 设置为0 ）<br><br>本贴相关代码：<br><br>　　# 1 - 单用户模式# 2 - 多用户，没有 NFS # 3 - 完全多用户模式（标准的运行级）<br><br>　　# 4 - 没有用到# 5 - X11 （xwindow）<br><br>　　# 6 - 重新启动 （千万不要把initdefault 设置为6——把被你黑掉的linux的initdefault设置为0或6也算是拒绝服务攻击噢！）<br><br><br>　　除此之外还有ABC三个运行级别，但在RHLinux中都没有意义。<br><br>　　这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件，最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中，启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。（这里的n 就是运行级0-6）<br><br>三、运行级别的配置<br><br>　　运行级别的配置是在 /etc/inittab行内进行的，如下所示：12 ： 2 ： wait： /etc/init.d/rc2各字段解释如下：id：runlevels：action：process id：是一个任意指定的四个字符以内的序列标号，在本文件内必须唯一；使用老版本的libc5（低于5.2.18）或a.out库编译出来的 sysvinit限制为2字符。注意：像getty之类的登陆进程必须使id字段与tty编号一致，如tty1需要id=1，许多老版本的登陆进程都遵循这种规则。<br><br>　　runlevels：表示这一行适用于运行那个/些级别（这里是2，可以有多个，表示在相应的运行级均需要运行）；另外sysinit、boot、bootwait这三个进程会忽略这个设置值。<br><br>　　action：表示进入对应的runlevels时，init应该运行process字段的命令的方式，常用的字段值及解释在附录内。例子中的wait表示需要运行这个进程一次并等待其结束。<br><br>　　process：具体应该执行的命令。例子中的/etc/init.d/rc命令启动运行级别2中应该运行的进程/命令，并负责在退出运行级时将其终止（当然在进入的runlevel中仍要运行的程序除外。）<br><br>　　当运行级别改变，并且正在运行的程序并没有在新的运行级别中指定需要运行，那么init会先发送一个SIGTERM 信号终止，然后是SIGKILL.<br><br>　　有效的action值如下：respawn：表示init应该监视这个进程，即使其结束后也应该被重新启动。<br><br>　　wait：init应该运行这个进程一次，并等待其结束后再进行下一步操作。<br><br>　　once：init需要运行这个进程一次。<br><br>　　boot：随系统启动运行，所以runlevel值对其无效。<br><br>　　bootwait：随系统启动运行，并且init应该等待其结束。<br><br>　　off：没有任何意义。<br><br>　　initdefault：系统启动后的默认运行级别；由于进入相应的运行级别会激活对应级别的进程，所以对其指定process字段没有任何意义。如果inittab文件内不存在这一条记录，系统启动时在控制台上询问进入的运行级。<br><br>　　sysinit：系统启动时准备运行的命令。比如说，这个命令将清除/tmp.可以查看/etc/rc.d/rc.sysinit脚本了解其运行了那些操作。<br><br>　　powerwait：允许init在电源被切断时，关闭系统。当然前提是有U P S和监视U P S并通知init电源已被切断的软件。RH linux默认没有列出该选项。<br><br>　　powerfail：同powerwait，但init不会等待正在运行的进程结束。RH linux默认没有列出该选项。<br><br>　　powerokwait：当电源监视软件报告&#8220;电源恢复&#8221;时，init要执行的操作。<br><br>　　powerfailnow：检测到ups电源即将耗尽时，init要执行的操作，和powerwait/powerfail不同的哟。<br><br>　　ctrlaltdel：允许init在用户于控制台键盘上按下Ctrl + Alt + Del组合键时，重新启动系统。注意，如果该系统放在一个公共场所，系统管理员可将Ctrl + Alt + Del组合键配置为别的行为，比如忽略等。我是设置成打印一句骂人的话了^o^. kbrequest：监视到特定的键盘组合键被按下时采取的动作，现在还不完善。<br><br>　　ondemand：A process marked with an ondemand runlevel will be executed whenever the specified ondemand runlevel is called. However， no runlevel change will occur （ondemand runlevels are &#8216;a&#8217;， &#8216;b&#8217;，and &#8216;c&#8217;），（英语太菜，那个however不知道该怎么翻译才好。惭愧！）<br><br>　　补充：<br>　　<br>　　1、关于进入单用户模式，一般都是采用设置initdefault为1或者在grub/lilo中指定一个&#8220;single&#8221;或&#8220;emergency&#8221; 命令行参数来实现。其实另外还有一个更干净的方法，编辑：kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh，这样init就直接启动一个shell，其他任何进程都没有启动哦，够干净吧！<br><br>　　2、系统正在运行时，telinit命令可更改运行级别。运行级别发生变化时， init 就会从/etc/inittab运行相应的命令 
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/48492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-08-28 22:03 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RedHat SELinux系统简介及案例分析</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48491.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Thu, 28 Aug 2008 13:57:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48491.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/48491.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/48491.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/48491.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">一、SELinux简介 </p>
<p style="TEXT-INDENT: 2em">RedHat Enterprise Linux AS 3.0/4.0中安全方面的最大变化就在于集成了SELinux的支持。 </p>
<p style="TEXT-INDENT: 2em">SELinux的全称是Security-Enhanced Linux，是由美国国家安全局NSA开发的访问控制体制。 </p>
<p style="TEXT-INDENT: 2em">SELinux可以最大限度地保证Linux系统的安全。至于它的作用到底有多大，举一个简单的例子可以证明： </p>
<p style="TEXT-INDENT: 2em">没有SELinux保护的Linux的安全级别和Windows一样，是C2级，但经过保护SELinux保护的Linux，安全级别 </p>
<p style="TEXT-INDENT: 2em">则可以达到B1级。如：我们把/tmp目录下的所有文件和目录权限设置为0777，这样在没有SELinux保护的情 </p>
<p style="TEXT-INDENT: 2em">况下，任何人都可以访问/tmp 下的内容。而在SELinux环境下，尽管目录权限允许你访问/tmp下的内容， </p>
<p style="TEXT-INDENT: 2em">但SELinux的安全策略会继续检查你是否可以访问。 </p>
<p style="TEXT-INDENT: 2em">NSA推出的SELinux安全体系结构称为 Flask，在这一结构中，安全性策略的逻辑和通用接口一起封装在与 </p>
<p style="TEXT-INDENT: 2em">操作系统独立的组件中，这个单独的组件称为安全服务器。SELinux的安全服务器定义了一种混合的安全性 </p>
<p style="TEXT-INDENT: 2em">策略，由类型实施 (TE)、基于角色的访问控制 (RBAC) 和多级安全(MLS) 组成。通过替换安全服务器，可 </p>
<p style="TEXT-INDENT: 2em">以支持不同的安全策略。SELinux使用策略配置语言定义安全策略，然后通过checkpolicy 编译成二进制形 </p>
<p style="TEXT-INDENT: 2em">式，存储在文件(如目标策略/etc/selinux/targeted/policy/policy.18)中，在内核引导时读到内核空间 </p>
<p style="TEXT-INDENT: 2em">。这意味着安全性策略在每次系统引导时都会有所不同。 </p>
<p style="TEXT-INDENT: 2em">SELinux的策略分为两种，一个是目标(targeted)策略，另一个是严格(strict)策略。有限策略仅针对部分 </p>
<p style="TEXT-INDENT: 2em">系统网络服务和进程执行SELinux策略，而严厉策略是执行全局的NSA默认策略。有限策略模式下，9个（可 </p>
<p style="TEXT-INDENT: 2em">能更多）系统服务受SELinux监控，几乎所有的网络服务都受控。 </p>
<p style="TEXT-INDENT: 2em">配置文件是/etc/selinux/config，一般测试过程中使用&#8220;permissive&#8221;模式，这样仅会在违反SELinux规 </p>
<p style="TEXT-INDENT: 2em">则时发出警告，然后修改规则，最后由用户觉得是否执行严格&#8220;enforcing&#8221;的策略，禁止违反规则策略的 </p>
<p style="TEXT-INDENT: 2em">行为。 </p>
<p style="TEXT-INDENT: 2em">规则决定SELinux的工作行为和方式，策略决定具体的安全细节如文件系统，文件一致性。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">在安装过程中，可以选择&#8220;激活&#8221;、&#8220;警告&#8221;或者&#8220;关闭&#8221;SELinux。默认设置为&#8220;激活&#8221;。 </p>
<p style="TEXT-INDENT: 2em">安装之后，可以在&#8220;应用程序&#8221;--&gt;&#8220;系统设置&#8221;--&gt;&#8220;安全级别&#8221;，或者直接在控制台窗口输入&#8220;system </p>
<p style="TEXT-INDENT: 2em">-config- securitylevel&#8221;来打开&#8220;安全级别&#8221;设置窗口。在&#8220;SELinux&#8221;选项页中，我们不但可以设置&#8220; </p>
<p style="TEXT-INDENT: 2em">启用&#8221;或者&#8220;禁用&#8221;SELinux，而且还可以对已经内置的SELinux策略进行修改。 </p>
<p style="TEXT-INDENT: 2em">SELinux相关命令： </p>
<p style="TEXT-INDENT: 2em">ls -Z </p>
<p style="TEXT-INDENT: 2em">ps -Z </p>
<p style="TEXT-INDENT: 2em">id -Z </p>
<p style="TEXT-INDENT: 2em">分别可以看到文件,进程和用户的SELinux属性。 </p>
<p style="TEXT-INDENT: 2em">chcon 改变文件的SELinux属性。 </p>
<p style="TEXT-INDENT: 2em">getenforce/setenforce查看和设置SELinux的当前工作模式。 </p>
<p style="TEXT-INDENT: 2em">修改配置文件/etc/selinux/config后，需要重启系统来启动SELinux新的工作模式。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">二、案例分析 </p>
<p style="TEXT-INDENT: 2em">Apache - "Document root must be a directory" 问题？ </p>
<p style="TEXT-INDENT: 2em">有可能和这个问题并发的问题还有 403 Forbidden　禁止访问的问题。 </p>
<p style="TEXT-INDENT: 2em">现象描述： </p>
<p style="TEXT-INDENT: 2em">不使用系统默认的 /var/www/html作为系统的Document Root，自己新建一个目录后修改 </p>
<p style="TEXT-INDENT: 2em">/etc/httpd/conf/httpd.conf 中的配置，然后重起Apache的Daemon，发现Apache无法起动，系统报错： </p>
<p style="TEXT-INDENT: 2em">　　Document root must be a directory </p>
<p style="TEXT-INDENT: 2em">但是，我们设置的DocumentRoot 的确是一个目录，而且apache用户具有可读权限。 </p>
<p style="TEXT-INDENT: 2em">另一种情况：新建一个虚拟目录或文件后，无法访问，显示 Forbidden, 403 Error，但文件或目录有可读 </p>
<p style="TEXT-INDENT: 2em">权限。 </p>
<p style="TEXT-INDENT: 2em">问题产生的原因： </p>
<p style="TEXT-INDENT: 2em">一开始想来想去想不出为什么，但是给我感觉是权限的问题，用传统的Linux的思维方式来看，权限绝对没 </p>
<p style="TEXT-INDENT: 2em">有问题。但是仔细一想，SELinux是不是会有其他安全的设定？ </p>
<p style="TEXT-INDENT: 2em">检查 avcmessage，查看 /var/log/messages文件，发现有类似以下内容的这样一段： </p>
<p style="TEXT-INDENT: 2em">Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc: </p>
<p style="TEXT-INDENT: 2em">denied{ getattr } forpid=19029 exe=/usr/sbin/httpd </p>
<p style="TEXT-INDENT: 2em">path=/var/www/html/about.html dev=dm-0 ino=373900 </p>
<p style="TEXT-INDENT: 2em">scontext=root:system_r:httpd_t tcontext=user_u:object_r:user_home_t </p>
<p style="TEXT-INDENT: 2em">tclass=file </p>
<p style="TEXT-INDENT: 2em">嘿嘿，问题找到了，果然是SELinux的新特性搞的鬼。我把目录或文件设成了user_home_t类型，因此 </p>
<p style="TEXT-INDENT: 2em">apache的进程没有权限，无法访问。针对Apache的进程所使用的SELinux target policy规定了apache的进 </p>
<p style="TEXT-INDENT: 2em">程只能访问httpd_sys_content_t类型的目录或文件。 </p>
<p style="TEXT-INDENT: 2em">解决办法： </p>
<p style="TEXT-INDENT: 2em">很简单，把目录或文件的策略类型改成 httpd_sys_content_t 就可以了。 </p>
<p style="TEXT-INDENT: 2em"># chcon -t httpd_sys_content_t [file_name | dir_name] </p>
<p style="TEXT-INDENT: 2em">然后可以用 ls -laZ 命令查看文件目录的策略类型</p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/48491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-08-28 21:57 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在linux下配置一个网卡多个IP的方法</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48490.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Thu, 28 Aug 2008 13:51:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48490.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/48490.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/48490.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/48490.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12pt">第一种方法:<br>ifconfig eth0:1 192.168.5.129 netmask 255.255.255.0<br>然后,你用ifconfig,就会发现多了一个ip,但这个ip是暂时的,重启以后就不存在了<br><br>第二种方法<br></span><span style="FONT-SIZE: 12pt">cp /etc/sysconfig/network-script..s/ifcfg-eth0 /etc/sysconfig/network-script..s/ifcfg-eth0:2<br>vi </span><span style="FONT-SIZE: 12pt">/etc/sysconfig/network-script..s/ifcfg-eth0:2<br>将DEVICE=eth0&nbsp; 更改为DEVICE=eth0:2<br>更改一下ip<br>保存退出并重启网络就ok了.这条新加的ip是永久的,只要你不删掉它.<br><br><br></span><span style="FONT-SIZE: 12pt">在linux下配置多个网卡的方法:<br></span><span style="FONT-SIZE: 12pt">cp /etc/sysconfig/network-script..s/ifcfg-eth0 /etc/sysconfig/network-script..s/ifcfg-eth1<br>vi </span><span style="FONT-SIZE: 12pt">/etc/sysconfig/network-script..s/ifcfg-eth1<br>将DEVICE=eth0&nbsp; 更改为DEVICE=eth1<br>更改一下ip 等<br>保存退出并重启网络就ok了.<br></span>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/48490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-08-28 21:51 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/08/28/48490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux服务器性能数据收集-Sysstat介绍</title><link>http://www.cnitblog.com/szdlinxie/archive/2008/05/06/43396.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 06 May 2008 03:12:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2008/05/06/43396.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/43396.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2008/05/06/43396.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/43396.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/43396.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>Linux</span></strong><strong><span>服务器性能数据收集</span></strong></p>
<p align=center><strong><span>Sysstat</span></strong><strong><span>介绍</span></strong></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp; <strong><u><span>Linux</span></u></strong></span><span>中的<span>top,free</span>等命令不能完全满足我们性能数据收集的要求，我们需要一个更加强大的工具来收集性能数据。经过考察和对比，发现<span>Sysstat</span>是一个非常强大的工具，因此下载了试了下，效果不错。<span>Sysstat</span>是一个工具集，包括<span>sar</span>、<span>pidstat</span>、<span>iostat</span>、<span>mpstat</span>、<span>sadf</span>、<span>sadc</span>。其中<span>sar</span>是其中最强大，也是最能符合我们<strong><u><span>测试</span></u></strong>要求的工具，同时<span>pidstat</span>也是非常有用的东东，因此本文结合<strong><u><span>性能测试</span></u></strong>重点介绍这两个工具。<span> </span></span></p>
<p align=left><strong><span>Sysstat</span></strong><strong><span>的安装</span></strong></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>从<span>http://pagesperso-orange.fr/sebastien.godard/download.html</span>下载最新版本，解压，安装<span> </span></span></p>
<ul type=disc>
    <li><span>&nbsp;wget&nbsp;http://pagesperso-orange.fr/sebastien.godard/sysstat-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">8.1.2</st1:chsdate>.tar.gz<br>&nbsp;tar&nbsp;zxvf&nbsp;sysstat-8.1.2.tar.gz<br>&nbsp;cd&nbsp;sysstat-8.1.2<br>&nbsp;./configure<br>&nbsp;make<br>&nbsp;su<br>&nbsp;&lt;enter&nbsp;root&nbsp;password&gt;<br>&nbsp;make&nbsp;install</span></li>
</ul>
<p align=left><strong><span>监视某个进程</span></strong></p>
<p align=left><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>通过<span>ps</span>命令找到相应进程的<span>PID</span>：<span> </span></span></p>
<p align=left><span><img src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1040"><span>ps&nbsp;-e</span></span></p>
<p align=left><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>使用<span>pidstat</span>命令监视进程，详细用法见：<u><span>http://pagesperso-orange.fr/sebastien.godard/man_pidstat.html</span></u><span> </span></span></p>
<p align=left><span>pidstat&nbsp;</span><span>2</span>&nbsp;<span>5</span><span>&nbsp;<br></span><span>//</span><span>每隔<span>2</span>秒，显示<span>5</span>次，所有活动进程的<span>CPU</span>使用情况<span><br></span></span><span>pidstat&nbsp;-p&nbsp;</span><span>3132</span>&nbsp;<span>2</span>&nbsp;<span>5</span><span>&nbsp;<br></span><span>//</span><span>每隔<span>2</span>秒，显示<span>5</span>次，<span>PID</span>为<span>1643</span>的进程的<span>CPU</span>使用情况显示<span><br></span></span><span>pidstat&nbsp;-p&nbsp;</span><span>3132</span>&nbsp;<span>2</span>&nbsp;<span>5</span><span>&nbsp;-r<br></span><span>//</span><span>每隔<span>2</span>秒，显示<span>5</span>次，<span>PID</span>为<span>1643</span>的进程的内存使用情况显示</span></p>
<p align=left><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>很可惜的是，<span>pidstat</span>命令没有保存性能数据的功能。<span> </span></span></p>
<p align=left><strong><span>查看性能数据</span></strong></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>在<span>sysstat</span>工具包中，<span>sar</span>是最强大的了，通过<span>sar</span>几乎可以监视所有的性能数据，同时，<span>sar</span>还支持将性能数据保存起来。<span><br>sar</span>详细用法请见：<span><a href="http://pagesperso-orange.fr/sebastien.godard/man_sar.html">http://pagesperso-orange.fr/sebastien.godard/man_sar.html</a> </span></span></p>
<p align=left><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>查看<span>CPU</span>使用情况<span> </span></span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1041"><span>sar&nbsp;</span><span>2</span>&nbsp;<span>5</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1042"></span><span>//</span></span><span>每隔<span>2</span>秒，显示<span>5</span>次，<span>CPU</span>使用的情况</span></p>
<p align=left><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>查看内存使用情况<span> </span></span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1043"><span>sar&nbsp;-r&nbsp;</span><span>2</span>&nbsp;<span>5</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1044"></span><span>//</span></span><span>每隔<span>2</span>秒，显示<span>5</span>次，内存使用的情况</span></p>
<p align=left><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>查看网络吞吐量<span> </span></span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1045"><span>sar&nbsp;-n&nbsp;DEV&nbsp;</span><span>2</span>&nbsp;<span>5</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1046"></span><span>//</span></span><span>每隔<span>2</span>秒，显示<span>5</span>次，网络吞吐量情况</span></p>
<p align=left><strong><span>保存性能数据</span></strong></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sar</span><span>支持保存成两种格式的文件，一种是文本文件，一种是二进制文件（只有通过<span>sar</span>自己的命令才能查看）。<span> </span></span></p>
<p align=left><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><strong><span>保存为文本文件</span></strong><span><br><br></span><span>结合上面的查看命令，加入<span> &gt; filename </span>参数即可保存文本文件，下面列出几个有用的命令：<span> </span></span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1047"><span>sar&nbsp;</span><span>1</span>&nbsp;<span>10</span><span>&nbsp;&gt;&nbsp;data.txt<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1048"></span><span>//</span></span><span>每隔<span>1</span>秒，写入<span>10</span>次，把<span>CPU</span>使用数据保存到<span>data.txt</span>文件中。<span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1049"></span></span><span>sar&nbsp;</span><span>1</span>&nbsp;<span>0</span><span>&nbsp;-e&nbsp;</span><span>15</span><span>:</span><span>00</span><span>:</span><span>00</span><span>&nbsp;&gt;&nbsp;data.txt<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1050"></span><span>//</span><span>每隔<span>1</span>秒记录<span>CPU</span>的使用情况，直到<span>15</span>点，数据将保存到<span>data.txt</span>文件中。<span>(-e&nbsp;</span>参数表示结束时间，注意时间格式：必须为<span>hh:mm:ss</span>格式<span>)<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1051"></span></span><span>sar&nbsp;</span><span>1</span>&nbsp;<span>0</span><span>&nbsp;-r&nbsp;-e&nbsp;</span><span>15</span><span>:</span><span>00</span><span>:</span><span>00</span><span>&nbsp;&gt;&nbsp;data.txt<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1052"></span><span>//</span><span>每隔<span>1</span>秒记录内存使用情况，直到<span>15</span>点，数据将保存到<span>data.txt</span>文件中。<span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1053"></span></span><span>sar&nbsp;</span><span>1</span>&nbsp;<span>0</span><span>&nbsp;-n&nbsp;DEV&nbsp;-e&nbsp;</span><span>15</span><span>:</span><span>00</span><span>:</span><span>00</span><span>&nbsp;&gt;&nbsp;data.txt<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1054"></span><span>//</span><span>每隔<span>1</span>秒记录网络使用情况，直到<span>15</span>点，数据将保存到<span>data.txt</span>文件中。</span></p>
<p align=left><span>用<span>WinSCP</span>工具从<span>Linux</span>服务器上取下<span>data.txt</span>文件，内容如下：</span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1055"><span>Linux&nbsp;</span><st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899"><span>2.6</span><span>.</span><span>18</span></st1:chsdate><span>-</span><span>53</span><span>.el5&nbsp;(Performancesvr5)&nbsp;&nbsp;<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="05" Month="05" Year="2008">2008<span><span>年05</span></span><span><span>月05</span></span><span><span>日</span></span></st1:chsdate>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_x86_64_<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1056"><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1057">&nbsp;11</span></span><span>时<span>04</span>分<span>05</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%nice&nbsp;&nbsp;&nbsp;%system&nbsp;&nbsp;&nbsp;%iowait&nbsp;&nbsp;&nbsp;&nbsp;%steal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%idle<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1058">&nbsp;11</span>时<span>04</span>分<span>06</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.75</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1030">&nbsp;11</span><span>时<span>04</span>分<span>07</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.75</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1031">&nbsp;11</span><span>时<span>04</span>分<span>08</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>1.50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>98.00</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1032">&nbsp;11</span><span>时<span>04</span>分<span>09</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.25</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1033">&nbsp;11</span><span>时<span>04</span>分<span>10</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>100.00</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1034">&nbsp;11</span><span>时<span>04</span>分<span>11</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.50</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1035">&nbsp;11</span><span>时<span>04</span>分<span>12</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.75</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1036">&nbsp;11</span><span>时<span>04</span>分<span>13</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.99</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>98.01</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1037">&nbsp;11</span><span>时<span>04</span>分<span>14</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>1.25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>98.75</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1038">&nbsp;11</span><span>时<span>04</span>分<span>15</span>秒<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.50</span><span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1039">&nbsp;</span><span>平均时间<span>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>0.20</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.15</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.42</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>0.00</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>99.23</span></p>
<p align=left><span>有了这份数据，就可以轻松的使用<span>WPS</span>表格来统计<span>CPU</span>的使用情况了。<span> </span></span></p>
<p align=center><span><img border=0 alt=111 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image002.jpg" width=529 height=278 v:shapes="_x0000_i1025"></span></p>
<p align=left><strong><span>保存为二进制文件</span></strong><span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>由于保存的二进制文件只有<span>sar</span>通过<span>-f</span>参数才能打开，不利于我们分析和统计数据，因此不推荐使用这个方法。保存二进制文件的参数是<span>-o</span>，如：<span> </span></span></p>
<p align=left><span><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1026"><span>sar&nbsp;</span><span>1</span>&nbsp;<span>5</span><span>&nbsp;-r&nbsp;-o&nbsp;data<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1027"></span><span>//</span></span><span>每隔<span>1</span>秒，写入<span>5</span>次，将内存使用的数据写入二进制文件<span>data</span>中。<span><br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1028"></span></span><span>sar&nbsp;-f&nbsp;data<br><img border=0 src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_image001.gif" width=11 height=16 v:shapes="_x0000_i1029"></span><span>//</span><span>查看<span>data</span>文件</span></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/43396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2008-05-06 11:12 <a href="http://www.cnitblog.com/szdlinxie/archive/2008/05/06/43396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发项目过程中的风险管理研究</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32146.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 21 Aug 2007 07:20:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32146.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32146.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32146.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32146.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32146.html</trackback:ping><description><![CDATA[&nbsp;
<table cellSpacing=0 cellPadding=0 width=535 border=0>
    <tbody>
        <tr>
            <td>
            <p align=center><strong><span>软件开发项目过程中的风险管理研究<span>[1]</span></span></strong></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=center>&nbsp;</p>
            <p align=left><span>软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。软件项目风险会影响项目计划的实现，如果项目风险变成现实，就有可能影响项目的进度，增加项目的成本，甚至使软件项目不能实现。如果对项目进行风险管理，就可以最大限度的减少风险的发生。但是，目前国内的软件企业不太关心软件项目的风险管理，结果造成软件项目经常性的延期、超过预算，甚至失败。成功的项目管理一般都对项目风险进行了良好的管理。因此任何一个系统开发项目都应将风险管理作为软件项目管理的重要内容。<span> </span></span></p>
            <p align=left><span>　　在项目风险管理中，存在多种风险管理方法与工具，软件项目管理只有找出最适合自己的方法与工具并应用到风险管理中，才能尽量减少软件项目风险，促进项目的成功。</span></p>
            <p align=left><span>　　项目风险管理</span></p>
            <p align=left><span>　　项目风险管理是指为了最好的达到项目的目标，识别、分配、应对项目生命周期内风险的科学与艺术。项目风险管理的目标是使潜在机会或回报最大化，使潜在风险最小化。风险管理涉及的主要过程包括：风险识别，风险量化，风险应对计划制定和风险监控，如图<span>1</span>所示。风险识别在项目的开始时就要进行，并在项目执行中不断进行。就是说，在项目的整个生<span>?</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><span>（<span>1</span>）需求风险<span> </span></span></p>
<p><span>　　<span>①</span>需求已经成为项目基准，但需求还在继续变化；</span></p>
<p><span>　　<span>②</span>需求定义欠佳，而进一步的定义会扩展项目范畴；</span></p>
<p><span>　　<span>③</span>添加额外的需求；</span></p>
<p><span>　　<span>④</span>产品定义含混的部分比预期需要更多的时间；</span></p>
<p><span>　　<span>⑤</span>在做需求中客户参与不够；</span></p>
<p><span>　　<span>⑥</span>缺少有效的需求变化管理过程。</span></p>
<p><span>　　（<span>2</span>）计划编制风险</span></p>
<p><span>　　<span>①</span>计划、资源和产品定义全凭客户或上层领导口头指令，并且不完全一致；</span></p>
<p><span>　　<span>②</span>计划是优化的，是<span>"</span>最佳状态<span>"</span>，但计划不现实，只能算是<span>"</span>期望状态<span>"</span>；</span></p>
<p><span>　　<span>③</span>计划基于使用特定的小组成员，而那个特定的小组成员其实指望不上；</span></p>
<p><span>　　<span>④</span>产品规模<span>(</span>代码行数、功能点、与前一产品规模的百分比<span>)</span>比估计的要大；</span></p>
<p><span>　　<span>⑤</span>完成目标日期提前，但没有相应地调整产品范围或可用资源；</span></p>
<p><span>　　<span>⑥</span>涉足不熟悉的产品领域，花费在设计和实现上的时间比预期的要多。</span></p>
<p><span>　　（<span>3</span>）组织和管理风险</span></p>
<p><span>　　<span>①</span>仅由管理层或市场人员进行技术决策，导致计划进度缓慢，计划时间延长；</span></p>
<p><span>　　<span>②</span>低效的项目组结构降低生产率；</span></p>
<p><span>　　<span>③</span>管理层审查决策的周期比预期的时间长；</span></p>
<p><span>　　<span>④</span>预算削减，打乱项目计划；</span></p>
<p><span>　　<span>⑤</span>管理层作出了打击项目组织积极性的决定；</span></p>
<p><span>　　<span>⑥</span>缺乏必要的规范，导致工作失误与重复工作；</span></p>
<p><span>　　<span>⑦</span>非技术的第三方的工作<span>(</span>预算批准、设备采购批准、法律方面的审查、安全保证等<span>)</span>时间比预期的延长。</span></p>
<p><span>　　（<span>4</span>）人员风险</span></p>
<p><span>　　<span>①</span>作为先决条件的任务<span>(</span>如培训及其他项目<span>)</span>不能按时完成；</span></p>
<p><span>　　<span>②</span>开发人员和管理层之间关系不佳，导致决策缓慢，影响全局；</span></p>
<p><span>　　<span>③</span>缺乏激励措施，士气低下，降低了生产能力；</span></p>
<p><span>　　<span>④</span>某些人员需要更多的时间适应还不熟悉的软件工具和环境；</span></p>
<p><span>　　<span>⑤</span>项目后期加入新的开发人员，需进行培训并逐渐与现有成员沟通，从而使现有成员的工作效率降低；</span></p>
<p><span>　　<span>⑥</span>由于项目组成员之间发生冲突，导致沟通不畅、设计欠佳、接口出现错误和额外的重复工作；</span></p>
<p><span>　　<span>⑦</span>不适应工作的成员没有调离项目组，影响了项目组其他成员的积极性；</span></p>
<p><span>　　<span>⑧</span>没有找到项目急需的具有特定技能的人。</span></p>
<p>&nbsp;</p>
<p><span>（<span>5</span>）开发环境风险<span> </span></span></p>
<p><span>　　<span>①</span>设施未及时到位；</span></p>
<p><span>　　<span>②</span>设施虽到位，但不配套，如没有电话、网线、办公用品等；</span></p>
<p><span>　　<span>③</span>设施拥挤、杂乱或者破损；</span></p>
<p><span>　　<span>④</span>开发工具未及时到位；</span></p>
<p><span>　　<span>⑤</span>开发工具不如期望的那样有效，开发人员需要时间创建工作环境或者切换新的工具；</span></p>
<p><span>　　<span>⑥</span>新的开发工具的学习期比预期的长，内容繁多。</span></p>
<p><span>　　（<span>6</span>）客户风险</span></p>
<p><span>　　<span>①</span>客户对于最后交付的产品不满意，要求重新设计和重做；</span></p>
<p><span>　　<span>②</span>客户的意见未被采纳，造成产品最终无法满足用户要求，因而必须重做；</span></p>
<p><span>　　<span>③</span>客户对规划、原型和规格的审核决策周期比预期的要长；</span></p>
<p><span>　　<span>④</span>客户没有或不能参与规划、原型和规格阶段的审核，导致需求不稳定和产品生产周期的变更；</span></p>
<p><span>　　<span>⑤</span>客户答复的时间<span>(</span>如回答或澄清与需求相关问题的时间<span>)</span>比预期长；</span></p>
<p><span>　　<span>⑥</span>客户提供的组件质量欠佳，导致额外的测试、设计和集成工作，以及额外的客户关系管理工作。</span></p>
<p><span>　　（<span>7</span>）产品风险</span></p>
<p><span>　　<span>①</span>矫正质量低下的不可接受的产品，需要比预期更多的测试、设计和实现工作；</span></p>
<p><span>　　<span>②</span>开发额外的不需要的功能<span>(</span>镀金<span>)</span>，延长了计划进度；</span></p>
<p><span>　　<span>③</span>严格要求与现有系统兼容，需要进行比预期更多的测试、设计和实现工作；</span></p>
<p><span>　　<span>④</span>要求与其他系统或不受本项目组控制的系统相连，导致无法预料的设计、实现和测试工作；</span></p>
<p><span>　　<span>⑤</span>在不熟悉或未经检验的软件和硬件环境中运行所产生的未预料到的问题；</span></p>
<p><span>　　<span>⑥</span>开发一种全新的模块将比预期花费更长的时间；</span></p>
<p><span>　　<span>⑦</span>依赖正在开发中的技术将延长计划进度。<span> </span></span></p>
<p><span>　　（<span>8</span>）设计和实现风险</span></p>
<p><span>　　<span>①</span>设计质量低下，导致重复设计；</span></p>
<span>　　</span><span>②</span><span>一些必要的功能无法使用现有的代码和库实现，开发人员必须使用新的库或者自行开发新的功能</span>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 15:20 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux与Windows CVS服务器配置与使用</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/05/21/27371.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Mon, 21 May 2007 06:12:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/05/21/27371.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/27371.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/05/21/27371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/27371.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/27371.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><strong><span>Linux</span></strong><strong><span>与<span>Windows CVS</span>服务器配置与使用<span>1</span></span></strong></p>
<p align=left><strong><span>第一部分<span> CVS</span>服务器的配置<span>(</span>以<span>1.10</span>版<span>)</span></span></strong><span> </span></p>
<p align=left><strong><span>1</span></strong><strong><span>、<span> CVS</span>简述与<span>CVS</span>服务器的安装：</span></strong><span> </span></p>
<p align=left><span>CVS</span><span>是目前比较流行与优秀的版本管理与控制工具，它深受大多数开发人员与系统管理的喜爱，同时也是用来管理其它日常文档（如<span>word</span>工作文档之类）的一个强有力的工具。这一部分将对<span>CVS</span>服务器的安装、配置与使用方法进行简单、扼要的介绍，以帮助大家尽快的使用<span>CVS</span>来进行一些版本的管理与控制<span><a href="javascript:;" target=_self><strong><span><span>工作</span></span></strong></a></span>。 </span></p>
<p align=left><strong><span>2</span></strong><strong><span>、<span> CVS</span>服务器的安装</span></strong><span> </span></p>
<p align=left><span>CVS</span><span>服务器版可以从网上的很多地方下载到，也可以到<span>CVS</span>的官方网站进行下载。根据你所使用的系统，下载相应的版本，然后进行安装。因为当前大部分人是在<span><a href="javascript:;" target=_self><strong><span>Linux</span></strong></a></span>下使用<span>CVS</span>服务器进行版本管理，并且<span>Redhat Linux</span>是目前最流行的一个<span>Linux</span>发行版之一，所以本文将主要基于<span>Redhat Linux</span>进行介绍。首先下载<span>CVS</span>服务器的<span>rpm</span>包，当然也可以下载其它方式的包如源程序包，这也就是<span>Linux</span>的一个优点之一。然后采用以下命令进行安装： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　<span>rpm -ivh cvs-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.10.8</st1:chsdate>-3.i386.rpm</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><strong><span>3</span></strong><strong><span>、配置<span>/etc/services</span>文件：</span></strong><span> </span></p>
<p align=left><span>安装完之后的第一件事就是要配置<span>CVS</span>服务器的配置文件，使其能正常的工作。首先在<span>services</span>文件中添加<span>cvspserver</span>，使其成为<span>Linux</span>的一种服务也就是<span>cvs</span>服务器例程的入口，配置如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>cvspserver 2401/tcp # cvs client/server operations </span></p>
            <p align=left><span>　　<span>cvspserver 2401/udp # cvs client/server operations</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><strong><span>4</span></strong><strong><span>、配置<span>xinetd</span>，用<span>xinetd</span>来启动<span>CVS</span>服务器：</span></strong><span> </span></p>
<p align=left><span>进入到<span>/etc/xinetd.d/</span>目录，然后编辑一个文本文件，名字一定要与<span>/etc/services</span>中的入口名字<span>cvspserver</span>一致，所以这里用<span>cvspserver</span>作为文件名，文件的内容如下所示： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>service cvspserver</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>disable = no</span></span></p>
            <p align=left><span>　　<span>socket_type = stream</span></span></p>
            <p align=left><span>　　<span>wait = no</span></span></p>
            <p align=left><span>　　<span>user = root</span></span></p>
            <p align=left><span>　　<span>env = HOME=</span></span></p>
            <p align=left><span>　　<span>server = /usr/bin/cvs</span></span></p>
            <p align=left><span>　　<span>server_args = -f --allow -root=/home/cvsroot pserver</span></span></p>
            <p align=left><span>&nbsp;//</span><span>指定认证方式为<span>pserver</span>，注意：<span>-f</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>注意：<span>a</span>、<span>service</span>后面的名称一定要和你在<span>/etc/service</span>文件中的<span>cvs</span>服务名称一样。 </span></p>
<p align=left><span>b</span><span>、<span>env = HOME=</span>这一行的目的就是为了解决在执行一些<span>cvs</span>操作时产生的读取<span>/root/.cvsignore</span>文件的错误，上面<span>env</span>那行的意思就是在运行<span>cvs</span>服务的时候将环境变量<span>HOME</span>置空，这样虽然执行<span>cvs</span>的用户是<span>root</span>，但是由于没有了<span>HOME</span>这个环境变量，所以<span>cvs</span>就不会在去读取<span>/root/.cvsignore</span>文件了。 </span></p>
<p align=left>&nbsp;</p>
<p align=left><strong><span>Linux</span></strong><strong><span>与<span>Windows CVS</span>服务器配置与使用<span>2</span></span></strong></p>
<p align=left><strong><span>5</span></strong><strong><span>、配置<span>CVS</span>用户与<span>cvsroot</span>的属主与属组：</span></strong><span> </span></p>
<p align=left><span>首先建立一个用户组<span>cvs</span>，可以使用<span>groupadd</span>或者<span>addgroup</span>命名，也可以直接编辑<span>/etc/group</span>文件添加这个组，然后添加一个用户<span>cvsroot</span>， 然后修改<span>/etc/passwd</span>文件使<span>cvsroot</span>用户的缺省组是<span>cvs</span>组，而不是<span>cvsroot</span>组（也就是修改）。在<span>/home</span>目录下建立<span>cvsroot</span>目录（也可以在其它你喜欢的目录下建），然后修改<span>/home/cvsroot</span>的属主及属性： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>#chown cvsroot.cvs /home/cvsroot </span></p>
            <p align=left><span>　　<span>#chmod 771 /home/cvsroot</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><strong><span>6</span></strong><strong><span>、<span> vs</span>进行初始化：</span></strong><span> </span></p>
<p align=left><span>安装完<span>CVS</span>服务器之后的另一件重要的事情就是要初始化<span>CVS</span>服务器的根目录，以后创建的<span>CVS</span>项目都将建立在这个目录下，采用的命令如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　＃<span>cvs -d /home/cvsroot init</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>这样目录<span>/home/cvsroot</span>就成为<span>CVS</span>服务器的根目录，以后创建的目录都将默认的存放在这个目录下。 </span></p>
<p align=left><strong><span>7</span></strong><strong><span>、登录<span>cvs</span>服务器（在<span>Linux</span>或其它<span>Unix</span>系统下进行登录的情况）：</span></strong><span> </span></p>
<p align=left><span>a</span><span>、如果是远程登录，采用以下语法： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　<span>#cvs -d :pserver:cvsroot@host:/home/cvsroot login </span></span></p>
            <p align=left><span>CVS password</span><span>：<span>//</span>输入用户<span>cvsroot</span>的口令；</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>如果没有出现其它的任何提示就表示登录成功了，否则要根据提示进行相应的修改。 下面对登录命令的语法进行说明： </span></p>
<p align=left><span>其中，<span>:pserver</span>表示采用<span>pserver</span>方式进行用户登录认证，一般的<span>CVS</span>服务器都采用这种方式，当然也可以采用其它方式，具体参考相应的资料；<span>:cvsroot</span>表示要登录的用户名，只要是<span>cvs</span>组的成员都可以，如：<span>cather</span>；<span>@host</span>表示要登录的服务器，可以是<span>DNS</span>名，也可以是<span>IP</span>地址，如：<span>10.104.1.204</span>；<span>:/home/cvsroot</span>表示<span>CVS</span>在服务器上的目录，也可以是其它目录（由第<span>6</span>中你所指定的用来做<span>init</span>初始化的目录决定）；提示：也可以把<span>export CVSROOT=:pserver:jchuang@192.168.0.8:/home/cvsroot</span>这一句直接写在用户的初始化文件中（如：<span>.bash_profile</span>），这样用户每次登录时，只需输入： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　＃<span>cvs login</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>然后输入相应的口令就可以登录到<span>cvs</span>服务器上。 </span></p>
<p align=left><span>b</span><span>、如果是本地登录，可以直接把<span>export CVSROOT=/home/cvsroot</span>这一句写在用户的初始化文件如：<span>.bash_profile</span>中；然后直接 </span></p>
<p align=left><strong><span>8</span></strong><strong><span>、向<span>CVS</span>添加新的项目模块</span></strong><span> </span></p>
<p align=left><span>一般我们都已经有一个或多个项目了，这样我们可以用下面步骤生成一个新的<span>CVS</span>项目。将一个工程文件置于<span>CVs</span>中进行版本控制，在<span>CVS </span>术语中称作导入<span>(import)</span>。从名字上就可以看出，在导入前需要为此作些准备工作。 </span></p>
<p align=left><span>输入操作的基本要求是有个<span>"</span>干净<span>"</span>的目录结构。<span>"</span>干净<span>"</span>的意思是不需要版本控制的文件都被移走了（如编译生成的文件，备份文件等等）。如果工程已经开始一段时间了，这就显得很重要。在目录中也许有些是不打算将其置于版本控制下的文件，但是又想将他们放在这里，这种情况下，你要在输入之前将它们移走，然后再移回来。 </span></p>
<p align=left><span>注意的是<span>CVS </span>认为空目录是不存在的。如果想增加一个既不包含文件又不包含子目录的目录，需要在其下创建一个哑文件。建议你创建一个名为<span> README.txt </span>的文件，其内容为对目录的简要说明。 </span></p>
<p align=left><span>进入到已有项目的目录，比如叫<span> cvstest</span>： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　　　<span>$cd cvstest</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>运行命令将项目文件导入到<span>cvs</span>仓库中： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　　　<span>$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>说明：<span>import </span>是<span>cvs</span>的命令之一，表示向<span>cvs</span>仓库输入项目文件。 </span></p>
<p align=left><span>-m</span><span>参数后面的字串是描述文本，对项目进行描述，如果不加<span> -m </span>参数，那么<span>cvs</span>会自动运行一个编辑器（一般是<span>vi</span>，但是可以通过修改环境变量<span>EDITOR</span>来改成你喜欢用的编辑器）让你输入信息，<span>cvstest </span>是项目名称（实际上是仓库名，在<span>CVS</span>服务器上会存储在以这个名字命名的仓库里）<span> v_0_0_1</span>是这个分支的总标记．没啥用（或曰不常用）。<span>start </span>是每次<span> import </span>标识文件的输入层次的标记，没啥用。这样我们就在用户指定进行初始化的目录<span>/home/cvsroot</span>下建立了一个名字叫<span>cvstest</span>的<span>CVS</span>模块了，然后，我们可以把这个测试项目的文件删除，试验如何从仓库获取文件这会在后面的客户端文章进行说明。<span>(</span>注：本小节主要引用自<span>http://linuxaid.com.cn</span>何伟平的<span>&#8220;CVS</span>服务器快速指南<span>&#8221;) </span></span></p>
<p align=left><strong><span>9</span></strong><strong><span>、从<span>cvs</span>本地服务器上<span>checkout</span>相应的模块：</span></strong><span> </span></p>
<p align=left><span>a</span><span>、如果是在<span>CVS</span>服务器所在计算机上，可以直接采用如下命令： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　　<span>#cvs checkout stw</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>这样将把<span>stw</span>项目模块<span>checkout</span>到当前目录下。 </span></p>
<p align=left><span>b</span><span>、如果是在远程运行<span>Linux</span>或其它<span>Unix</span>系统上，在第<span>7</span>中登录之后也可以用上边的命令把相应的项目模块<span>checkout</span>到当前目录下。另外，如果是在<span>windows</span>端进行<span>checkout</span>，可以采用<span>WinCVS</span>，那么还要对<span>WinCVS</span>进行其它的一些配置，下一部分将具体介绍它的配置方法。 </span></p>
<p align=left><strong><span>Linux</span></strong><strong><span>与<span>Windows CVS</span>服务器配置与使用<span>3</span></span></strong></p>
<p align=left><strong><span>第二部分<span> WinCVS</span>的配置与使用方法</span></strong><span> </span></p>
<p align=left><strong><span>1</span></strong><strong><span>、<span> WinCVS</span>简介：</span></strong><span> </span></p>
<p align=left><span>WinCVS</span><span>是<span>CVS</span>的一个客户端软件，它运行在<span>Windows</span>上，用来在<span>Windows</span>上登录<span>CVS</span>服务器，然后进行一些<span>CVS</span>相关的操作与管理。由于当前很多的企业内部都采用<span>Linux/Unix</span>做服务器，而用<span>Windows</span>做客户端，所以，<span>WinCVS</span>与<span>CVS</span>服务器配合使用将组成最强有力的版本控制与管理的系统之一。 </span></p>
<p align=left><strong><span>2</span></strong><strong><span>、<span> WinCVS</span>的下载与安装；</span></strong><span> </span></p>
<p align=left><span>最新的<span>WinCVS</span>可以从<span>http://sourceforge.net/project/showfiles.php?group_id=10072</span>地址下载到，也可以在<span>http://sourceforge.net/project </span>上下载到最新的或其它版本的<span>WinCVS</span>。 </span></p>
<p align=left><span>下载到相应的版本后根据向导进行安装，已经要使用<span>CVS</span>的用户，安装这个<span>WinCVS</span>应该没什么问题吧！ </span></p>
<p align=left><strong><span>3</span></strong><strong><span>、 配置<span>WinCVS</span>：</span></strong><span> </span></p>
<p align=left><span>第一、<span> Authentication</span>：用来配置<span>cvs</span>服务器的认证方式，可以从下拉框中选择其它的认证方式，不过一般只要选择默认的<span>pserver</span>方式就可以，要注意的是必须与<span>cvs</span>服务器配置时所指定的认证方式一致。 </span></p>
<p align=left><span>第二、<span> Path</span>：用来配置<span>cvs</span>在服务器上的主目录路径，也就是服务器上用进行<span>cvs</span>初始化的目录，如：<span>/home/cvsroot</span>。 </span></p>
<p align=left><span>第三、<span> Host Address</span>：用来配置<span>cvs</span>服务器所在服务器的地址，可以是<span>IP</span>地址，也可以是<span>DNS</span>名，如：<span>10.104.1.204</span>。 </span></p>
<p align=left><span>第四、<span> User name</span>：用来配置要使用些<span>WinCVS</span>来登录<span>CVS</span>服务器的用户名，如：<span>cvsyxwu</span>，用户的登录必须由管理员把其添加<span>cvs</span>用户组中； </span></p>
<p align=left><span>第五、<span> CVSROOT</span>：此项一般都不需要用户进行修改，用户在输入上边的几个选项时，系统将自动根据用户的输入生成此项的相应内容。 </span></p>
<p align=left><span>b</span><span>、 全局选项的设置，在上一个界面上选择<span>&#8220;Globals&#8221;</span>此项的配置主要是要注意这几选项： </span></p>
<p align=left><span>第一，<span>Checkout read-only</span>不要选上，否则，<span>checkout</span>出来的源代码将不允许用户进行修改，并且此选项默认是选中的。 </span></p>
<p align=left><span>第二，<span>Prune (remove) empty directories</span>也不要选上，否则，会自动删除空目录。 </span></p>
<p align=left><span>第三，对一般配置没有特殊要求的，把<span>Dirty files support</span>、<span>Supply control when adding</span>与<span>TCP/IP compression</span>选项选中。 </span></p>
<p align=left><strong><span>4</span></strong><strong><span>、 登录服务器：</span></strong><span> </span></p>
<p align=left><span>选择<span>Admin-&gt;login</span>，将出现如下对话框要求用户输入登录口令<span>,</span>输入口令后，选择<span>&#8220;OK&#8221;</span>按钮，如果<span>CVS</span>服务器与<span>WinCVS</span>的配置都没出错的话，将在<span>CVS</span>的状态栏中提示： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　<span>cvs -z9 -d :pserver:cvsyxwu@10.104.1.204:/home/cvsroot login </span></span></p>
            <p align=left><span>　　<span>Logging in to :pserver:cvsyxwu@10.104.1.204:2401/home/cvsroot</span></span></p>
            <p align=left><span>　　<span>***** CVS exited normally with code 0 *****</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>code 0</span><span>表示正确的登录；而如果出错的话，将是<span>code 1</span>，那么要根据错误的提示进行相应的修改。 </span></p>
<p align=left><strong><span>5</span></strong><strong><span>、 从<span>CVS</span>服务器上<span>check out</span>相应的模块：</span></strong><span> </span></p>
<p align=left><span>第一， 在<span>workspace</span>中的<span>Modules</span>选中要存放<span>checkout</span>模块的目录。 </span></p>
<p align=left><span>第二， 选择<span>Create-&gt;Checkout Modeles</span>，将出现如下对话框。 </span></p>
<p align=left><span>其中，<span>Module name and path on the server</span>就是要存放<span>checkout </span>内容的目录，由用户输入；而<span>Local folder to checkout to</span>就是第一中用户所选择的目录。 </span></p>
<p align=left><strong><span>Linux</span></strong><strong><span>与<span>Windows CVS</span>服务器配置与使用<span>4</span></span></strong></p>
<p align=left><strong><span>6</span></strong><strong><span>、 修改之后把文件提交到<span>CVS</span>服务器</span></strong><span> </span></p>
<p align=left><span>a)</span><span>、只有一个用户对文件进行修改的情况 </span></p>
<p align=left><span>用自己喜欢的编辑器对<span>checkout</span>出来的文件进行修改，修改之后的文件在没有提交之前会是红色的，如下图<span>example.h</span>文件<span>. </span></span></p>
<p align=left><span>选中红色的文件<span>example.h</span>后右击选择<span>&#8220;Commit Selection&#8221;</span>选项，如果没有其它用户也对其进行修改并已经提交到<span>CVS</span>服务器上，一切正常的话将把<span>example.h</span>文件提交到<span>CVS</span>服务器并把图标恢复成原来的颜色。 </span></p>
<p align=left><span>b)</span><span>、两个或两个以上的用户对同一文件的不同部分进行修改的情况 </span></p>
<p align=left><span>这种情况就是如用户<span>A</span>与用户<span>B</span>都<span>checkout</span>了文件<span>example.h</span>，内容如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>int callby (int count)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("ExcelStor!\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>void main(int argv,char *argc)</span></span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>//added by my cvs</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>int mainexample()</span></span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("OK\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>然后用户<span>A</span>修改成如下，并提交到<span>CVS</span>服务器（一般将正常提交）： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>int callby (int count)</span></p>
            <p align=left><span>　　<span>{//add</span></span></p>
            <p align=left><span>　　<span>printf("ExcelStor!\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>void main(int argv,char *argc)</span></span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>//added by my cvs</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>int mainexample()</span></span></p>
            <p align=left><span>　　<span>{//add</span></span></p>
            <p align=left><span>　　<span>printf("OK\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>接着用户<span>B</span>修改成如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　<span>int callby (int count)</span></span></p>
            <p align=left><span>　　<span>{//add</span></span></p>
            <p align=left><span>　　<span>printf("ExcelStor!\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>void main(int argv,char *argc)</span></span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>//modified</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            <p align=left><span>　　<span>int mainexample()</span></span></p>
            <p align=left><span>　　<span>{//add</span></span></p>
            <p align=left><span>　　<span>printf("OK\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>当用户<span>B</span>选择<span>&#8220;Commit Selection&#8221;</span>时将提示： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>cvs server: Up-to-date check failed for `example.h'</span></p>
            <p align=left><span>　　<span>cvs [server aborted]: correct above errors first!</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>此时表明已经有用户对同一个文件<span>example.h</span>进行修改并提交到<span>CVS</span>服务器，这时要先选择<span>&#8220;Update Selection&#8221;</span>对本地<span>example.h</span>与<span>CVS</span>服务器上的<span>example.h</span>文件进行同步与合并，不用选中出现的任何选项，直接选择<span>&#8220;OK&#8221;</span>，这时将显示如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>cvs -z9 update example.h (in directory C:\my cvs\STW\src\)</span></p>
            <p align=left><span>　　<span>RCS file: /home/cvsroot/STW/src/example.h,v</span></span></p>
            <p align=left><span>　　<span>retrieving revision 1.5</span></span></p>
            <p align=left><span>　　<span>retrieving revision 1.6</span></span></p>
            <p align=left><span>　　<span>Merging differences between 1.5 and 1.6 into example.h</span></span></p>
            <p align=left><span>　　<span>M example.h </span></span></p>
            <p align=left><span>　　</span></p>
            <p align=left><span>　　<span>***** CVS exited normally with code 0 *****</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>表明用户<span>B</span>与用户<span>A</span>的修改已经合并成功，同时文件<span>example.h</span>的图标也将变成红色，合并后的文件是存放在用户<span>B</span>的本地机上，为了更新到<span>CVS</span>服务器还必须选中<span>example.h</span>并右击选择<span>&#8220;Commit Selection&#8221;</span>才能把用户<span>A</span>与用户<span>B</span>的修改合并后的结果提交到<span>CVS</span>服务器上。注：<span>M</span>表示此文件已经被修改过。 </span></p>
<p align=left><span>c)</span><span>、两个或两个以上的用户对同一个文件的相同部分进行修改的情况 </span></p>
<p align=left><span>这种情况就是如用户<span>A</span>与用户<span>B</span>都下载了文件<span>example.h</span>，内容如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>void main(int argv,char *argc)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>然后用户<span>A</span>把文件修改成如下，并提交到<span>CVS</span>服务器（一般将正常提交）： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>void main(int argv,char *argc)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>printf("I am Pat\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>接着用户<span>B</span>又把文件修改成如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>void main(int argv,char *argc)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>printf("I love you Cather\n");</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>如果用户<span>B</span>这时选择<span>&#8220;Commit Selection&#8221;</span>准备把修改结果提交到<span>CVS</span>服务器，此时将显示如下的错误提示： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)</span></p>
            <p align=left><span>　　<span>cvs server: Up-to-date check failed for `example.h'</span></span></p>
            <p align=left><span>　　<span>cvs [server aborted]: correct above errors first!</span></span></p>
            <p align=left><span>　　</span></p>
            <p align=left><span>　　<span>***** CVS exited normally with code 1 *****</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>表明用户<span>B</span>的修改与其它用户的修改冲突，这时要先选择<span>&#8220;Update Selection&#8221;</span>，将显示如下提示： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>　<span>cvs -z9 update example.h (in directory C:\my cvs\STW\src\)</span></span></p>
            <p align=left><span>　　<span>RCS file: /home/cvsroot/STW/src/example.h,v</span></span></p>
            <p align=left><span>　　<span>retrieving revision 1.9</span></span></p>
            <p align=left><span>　　<span>retrieving revision 1.10</span></span></p>
            <p align=left><span>　　<span>Merging differences between 1.9 and 1.10 into example.h</span></span></p>
            <p align=left><span>　　<span>rcsmerge: warning: conflicts during merge</span></span></p>
            <p align=left><span>　　<span>cvs server: conflicts found in example.h</span></span></p>
            <p align=left><span>　　<span>C example.h</span></span></p>
            <p align=left><span>　　</span></p>
            <p align=left><span>　　<span>***** CVS exited normally with code 0 *****</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>example.h</span><span>前面的<span>C</span>表示与其它用户的修改有冲突，并且文件的图标会加显示一个<span>&#8220;C&#8221;</span>，双击<span>example.h</span>将显示<span>example.h</span>的内容，如下： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>void main(int argv,char *argc)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("I am Yanxi\n");</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>&lt;&lt;&lt;&lt;&lt;&lt;&lt; example.h</span></span></p>
            <p align=left><span>　　<span>printf("I love you Yanxi,too!\n"); //</span>这部分为你的修改</span></p>
            <p align=left><span>　　<span>=======</span></span></p>
            <p align=left><span>　　<span>printf("I love you Cather!\n"); //</span>这部分为其它用户的修改</span></p>
            <p align=left><span>　　<span>&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.10</span></span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>这时你应该与用户<span>A</span>进行协商以决定最终要怎样修改。比如，可以修改成： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>void main(int argv,char *argc)</span></p>
            <p align=left><span>　　<span>{</span></span></p>
            <p align=left><span>　　<span>printf("I am Yanxi\n");</span></span></p>
            <p align=left><span>　　<span>printf("I am Cather\n");</span></span></p>
            <p align=left><span>　　<span>printf("I love you Yanxi,too!\n"); //</span>这部分为你的修改</span></p>
            <p align=left><span>　　<span>printf("I love you Cather!\n"); //</span>这部分为其它用户的修改</span></p>
            <p align=left><span>　　<span>}</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>然后选择<span>&#8220;Commit Selection&#8221;</span>进行提交，将显示如下的提示信息： </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><span>cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)</span></p>
            <p align=left><span>　　<span>Checking in example.h;</span></span></p>
            <p align=left><span>　　<span>/home/cvsroot/STW/src/example.h,v &lt;-- example.h</span></span></p>
            <p align=left><span>　　<span>new revision: 1.11; previous revision: 1.10</span></span></p>
            <p align=left><span>　　<span>done</span></span></p>
            <p align=left><span>　　</span></p>
            <p align=left><span>　　<span>***** CVS exited normally with code 0 *****</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>表明用户<span>A</span>与用户的修改已经合并成功。这样，向<span>CVS</span>服务器提交文件所会遇到的问题也基本上就是这些，用户要根据所遇到的实际问题进行修改。 </span></p>
<p align=left><strong><span>7</span></strong><strong><span>、 向<span>CVS</span>服务器添加新文件</span></strong><span> </span></p>
<p align=left><span>在本地添加文件后，要提交到服务端。先选中文件，然后点击<span>&#8220;</span>添加按钮<span>&#8221;</span>，添加文件后，再在右键菜单中选择提交命令<span>&#8220;Commit Selection&#8221;</span>即可。选中文件<span>example.h.bak</span>，因为<span>example.h.bak</span>当前不是<span>CVS</span>的文件，此时<span>&#8220;</span>添加按钮<span>&#8221;</span>将由不可选状态变成可选状态，所以<span>Status</span>中显示为<span>&#8220;NonCvs file&#8221;</span>，选择<span>&#8220;</span>添加按钮<span>&#8221;</span>之后<span>example.h.bak</span>图标将变成红色并增加了一个<span>A</span>字母，如下： </span></p>
<p align=left><span>然后选中<span>example.h.bak</span>，右击，选择<span>&#8220;Commit Selection&#8221;</span>把文件<span>example.h.bak</span>提交到<span>CVS</span>服务器上而成为<span>CVS</span>的一个文件。 </span></p>
<p align=left><strong><span>8</span></strong><strong><span>、 结束语</span></strong><span> </span></p>
<p align=left><span>来到这里，你基本上已经能为自己或公司配置一个实用的<span>CVS</span>服务器与<span>WinCVS</span>客户端，配合使用<span>CVS</span>进行系统开发或其它文档的版本管理与控制。 </span></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/27371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-05-21 14:12 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/05/21/27371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux常用基本操作</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20631.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Sat, 16 Dec 2006 11:32:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20631.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20631.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20631.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20631.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20631.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 软件的安装																																																								 								　　				Linux				下软件的安装主要有两种不同的形式。第一种安装文件名为				xxx.tar.gz				；另一种安装文件名为				xxx.i386.rpm				。...&nbsp;&nbsp;<a href='http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20631.html'>阅读全文</a><img src ="http://www.cnitblog.com/szdlinxie/aggbug/20631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-16 19:32 <a href="http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux指令大全</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20630.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Sat, 16 Dec 2006 11:29:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20630.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20630.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20630.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20630.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Linux指令大全																																						（														1																																						）																																																																								...&nbsp;&nbsp;<a href='http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20630.html'>阅读全文</a><img src ="http://www.cnitblog.com/szdlinxie/aggbug/20630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-16 19:29 <a href="http://www.cnitblog.com/szdlinxie/archive/2006/12/16/20630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>