﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-westwin的blog</title><link>http://www.blogjava.net/westwin/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:52:51 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:52:51 GMT</pubDate><ttl>60</ttl><item><title>(转贴)走近交换机</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8702.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8702.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8702.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8702.html</trackback:ping><description><![CDATA[<p><font color="#c00000">一、交换机基础</font></p>

<p>　　集线器作为第一类广泛应用的网络集线设备，当时在各大局域网中应用非常广泛。但随着网络传输媒体类型的日益丰富，图形、图像及各种流媒体等多媒
体内容的出现，人们对高网络数据传输速度和传输性能的要求日益提高。集线器由于它的共享介质传输、单工数据操作和广播数据发送方式等都先天决定了很难满足
用户的上述速度和性能要求。在用户的需求下、在全球各大网络设备开发商的努力下，一种更新、更实用的集线设备－－交换机出现了。交换机完全克服了集线器的
上述种种不足之处，所以在短时间内得到业界广泛的认可和应用。交换机技术也得到了飞速发展，数据传输速度的发展也是一日千里。目前最快的以太网交换机端口
带宽可达到10Gbps，千兆（G位）级的交换机在各企业骨干网络中早已得到广泛应用。</p>

<p>　　交换机的英文名称之为“Switch”，它是集线器的升级换代产品，从外观上来看的话，它与集线器基本上没有多大区别，都是带有多个端口的长方
形盒状体。交换机是按照通信两端传输信息的需要，用人工或设备自动完成的方法把要传输的信息送到符合要求的相应路由上的技术统称。广义的交换机就是一种在
通信系统中完成信息交换功能的设备。</p>

<p>　　“交换”和“交换机”最早起源于电话通讯系统（PSTN）。我们以前经常在电影或电视中看到一些老的影片时常看到有人在电话机旁狂摇几下（注意
不是拨号），然后就说：跟我接XXX，话务接线员接到要求后就会把相应端线头插在要接端子上，即可通话。其实这就是最原始的电话交换机系统，只不过它是一
种人工电话交换系统，不是自动的，也不是我们今天要谈的计算机交换机，但是我们现在要讲的计算机交换机也就是在这个电话交换机技术上发展而来。</p>

<p>　　在计算机网络系统中，交换概念的提出是相对于共享工作模式的改进。我们知道集线器（HUB）是一种共享介质的网络设备，而且HUB本身不能识别
目的地址，是采用广播方式向所有节点发送。即当同一局域网内的A主机给B主机传输数据时，数据包在以HUB为架构的网络上是以广播方式传输的，对网络上所
有节点同时发送同一信息，然后再由每一台终端通过验证数据包头的地址信息来确定是否接收。在这种方式下我们知道很容易造成网络堵塞，因为其实接收数据的一
般来说只有一个终端节点，而现在对所有节点都发送，那么绝大部分数据流量是无效的，这样就造成整个网络数据传输效率相当低。另一方面由于所发送的数据包每
个节点都能侦听到，那显然就不会很安全了，容易出现一些不安全因素。</p>

<p>　　交换机拥有一条很高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上。控制电路收到数据包以后，处理端口会查找内存中
的MAC地址（网卡的硬件地址）对照表以确定目的MAC的NIC（网卡）挂接在哪个端口上，通过内部交换矩阵直接将数据迅速包传送到目的节点，而不是所有
节点，目的MAC若不存在才广播到所有的端口。这种方式我们可以明显地看出一方面效率高，不会浪费网络资源，只是对目的地址发送数据，一般来说不易产生网
络堵塞；另一个方面数据传输安全，因为它不是对所有节点都同时发送，发送数据时其它节点很难侦听到所发送的信息。这也是交换机为什么会很快取代集线器的重
要原因之一。<br></p>
<p>交换机还有一个重要特点就是它不是像集线器一样每个端口共享带宽，它的每一端口都是独享交换机的一部分总带宽，这样在速率上对于每个端口来说有
了根本的保障。另外，使用交换机也可以把网络“分段”，通过对照地址表，交换机只允许必要的网络流量通过交换机，这就是后面将要介绍的VLAN（虚拟局域
网）。通过交换机的过滤和转发，可以有效的隔离广播风暴，减少误包和错包的出现，避免共享冲突。这样交换机就可以在同一时刻可进行多个节点对之间的数据传
输，每一节点都可视为独立的网段，连接在其上的网络设备独自享有固定的一部分带宽，无须同其他设备竞争使用。如当节点A向节点D发送数据时，节点B可同时
向节点C发送数据，而且这两个传输都享有带宽，都有着自己的虚拟连接。打个比方就是，如果现在使用的是10Mbps
8端口以太网交换机，因每个端口都可以同时工作，所以在数据流量较大时，那它的总流量可达到8＊10Mbps＝80Mbps，而使用10Mbps的共享式
HUB时，因为它是属于共享带宽式的，所以同一时刻只能允许一个端口进行通信，那数据流量再忙HUB的总流通量也不会超出10Mbps。如果是16端口、
24端口的更是明显了！</p>

<p>　　交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流量控制。目前一些高档交换机还具备了一些新的功能，如对VLAN（虚拟局域网）的支持、对链路汇聚的支持，甚至有的还具有路由和防火墙的功能。</p>

<p>　　交换机除了能够连接同种类型的网络之外，还可以在不同类型的网络（如以太网和快速以太网）之间起到互连作用。如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口，用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。</p>

<p>　　一般来说，交换机的每个端口都用来连接一个独立的网段，但是有时为了提供更快的接入速度，我们可以把一些重要的网络计算机直接连接到交换机的端口上。这样，网络的关键服务器和重要用户就拥有更快的接入速度，支持更大的信息流量。</p>

<p>　　总之，交换机是一种基于MAC地址识别，能完成封装转发数据包功能的网络设备。交换机对于因第一次发送到目的地址不成功的数据包会再次对所有节
点同时发送，企图找到这个目的MAC地址，找到后就会把这个地址重新加入到自己的MAC地址列表中，这样下次再发送到这个节点时就不会发错。交换机的这种
功能就称之为“MAC地址学习”功能。</p>

<p>　　<font color="#c00000">二、交换机与集线器的区别</font></p>

<p>　　上面我们讲到，交换机最开始是为了解决集线器共享传输介质，端口带宽过窄，容易产生广播风暴而产生，最初的交换机是工作在OSI／RM开放体系
结构中的第二层，所以也称之为第二层交换机（这一点我们会在下篇介绍交换机的分类时继续介绍）。本节要介绍的是交换机与集线器之间到底有哪些区别，换句话
说也就是交换机到底有哪些优点，理解了它们之间的区别后就能正确理解当前局域网为什么广泛使用交换机，而非集线器，也便于我们在日后的网络设备选购中正确
地选择。</p>

<p>　　交换机与集线器的区别主要体现在如下几个方面：</p>

<p>　　<strong>（1）在OSI／RM中的工作层次不同</strong></p>

<p>　　交换机和集线器在OSI／RM开放体系模型中对应的层次就不一样，集线器是同时工作在第一层（物理层）和第二层（数据链路层），而交换机至少是工作在第二层，更高级的交换机可以工作在第三层（网络层）和第四层（传输层）。</p>

<p>　　<strong>（2）交换机的数据传输方式不同</strong></p>

<p>　　集线器的数据传输方式是广播（broadcast）方式，而交换机的数据传输是有目的的，数据只对目的节点发送，只是在自己的MAC地址表中找
不到的情况下第一次使用广播方式发送，然后因为交换机具有MAC地址学习功能，第二次以后就不再是广播发送了，又是有目的的发送。这样的好处是数据传输效
率提高，不会出现广播风暴，在安全性方面也不会出现其它节点侦听的现象。具体在前面已作分析，在此不再赘述。</p>

<p>　　<strong>（3）带宽占用方式不同</strong></p>

<p>　　在带宽占用方面，集线器所有端口是共享集线器的总带宽，而交换机的每个端口都具有自己的带宽，这样就交换机实际上每个端口的带宽比集线器端口可用带宽要高许多，也就决定了交换机的传输速度比集线器要快许多。</p>

<p>　　<strong>（4）传输模式不同</strong></p>

<p>　　集线器只能采用半双工方式进行传输的，因为集线器是共享传输介质的，这样在上行通道上集线器一次只能传输一个任务，要么是接收数据，要么是发送
数据。而交换机则不一样，它是采用全双工方式来传输数据的，因此在同一时刻可以同时进行数据的接收和发送，这不但令数据的传输速度大大加快，而且在整个系
统的吞吐量方面交换机比集线器至少要快一倍以上，因为它可以接收和发送同时进行，实际上还远不止一倍，因为端口带宽一般来说交换机比集线器也要宽许多倍。<br></p>
<p><font color="#c00000">三、交换机的工作原理</font></p>

<p>　　交换机和集线器在外型上非常相似，而且都遵循IEEE802.3及其扩展标准，介质存取方式也均为CSMA／CD，但是它们之间在工作原理上还
是有着根本的区别。简单地说，由交换机构建的网络称之为交换式网络，每个端口都能独享带宽，所有端口都能够同时进行通讯，并且能够在全双工模式下提供双倍
的传输速率。而集线器构建的网络称之为共享式网络，在同一时刻只能有两个端口（接收数据的端口和发送数据的端口）进行通讯，所有的端口分享固有的带宽。下
面简单以图示方式介绍如下。</p>

<p>　　<strong>1、“共享”与“交换”数据传输技术</strong></p>

<p>　　要明白交换机的优点我们首先就必须明白交换机的基本工作原理，而交换机的工作原理其实最根本的是要理解“共享”（Share）和“交换”
（Switch）这两个概念。集线器是采用共享方式进行数据传输的，而我们在这里要讲的交换机工作原理则是采用“交换”方式进行数据传输的。我们可以把
“共享”和“交换”理解成公路。“共享”方式就是来回车辆共用一个车道的单车道公路，而“交换”方式则是来回车辆各用一个车道的双车道公路，“共享”和
“交换”这两种数据传输方式的示意图分别如图1左、右图所示。</p>

<p align="center"><img src="file:///D:/xf/material/network/switch/yesky/%CD%F8%C2%E7%D1%A7%CC%C3%CA%AE%D2%BB%A3%BA%D7%DF%BD%FC%BD%BB%BB%BB%BB%FA3_files/72484.gif" onerror="this.src='http://www.yesky.com/image20010518/72484.gif';" alt="" align="middle" border="1" hspace="3" vspace="1"><br>图1</p>

<p>&nbsp;</p>

<p>　　从我们平常生活中就可感觉到这两种方式的不同之处，明显可以感受到双车道的交换方式的优越性。因为双车道来回的车辆可以在不同的车道上单独行
走，一般来说如果不出现意外的外是不可能出现大塞车现象（当然也有可能，那就车辆太多，速度太慢情况下），而单车道就象我们过单车道的桥一样，来回的车辆
每次只能允许一个方向的车辆经过这个桥，这样就很容易出现塞车现象。</p>

<p>　　交换机进行数据交换的原理就是在这样的背景下产生，它解决了集线器那种共享单车道容易出现“塞车”现象。在交换机技术上把这种“独享”道宽（网
络上称之为“带宽”）情况称之为“交换”，这种网络环境称为“交换式网络”，交换式网络必须采用交换机（Switch）来实现。从图1右图可以知道交换式
网络可以是“全双工”（Full
Duplex）状态，即可以同时接收和发送数据，数据流是双向的。而集线器的“共享”方式的网络就称之为“共享式网络”，共享式网络采用集线器（集线器）
作为网络连接设备。显然，共享网络的效率非常低，在任一时刻只能有一个方向的数据流，即处于“半双工”（Half
Duplex）模式，也称为“单工”模式。</p>

<p>　　另外一方面，由于单车道共享方式中来回车辆共用一个车道，也就是每次只能过一个方向的车，这样车辆一多，速度肯定会降下来，效率也就跟着下降。
共享式网络的通信也与共享车道情况类似，它的效率在数据流量大的时候效率也肯定会降低，因为同一时刻只能进行单一数据传输任务。还可能造成数据碰撞现象，
就像我们在单车道上经常看到撞车现象一样，因为车流量一大，就很难保证每个车辆的司机都那么遵守交通规则，容易出现数据碰撞、争抢车道的现象。而交换式的
数据交换方式出现这种情况就少许多，因为各自都有自己的信道，各行其道基本上是不太可能发生争抢信道的现象。但也有例外，那就是数据流量增大，而网络速度
和带宽没有得到保证时才会在同一信道上出现碰撞现象，就像我们在双车道或多车道也可能发生撞车现象一样。解决这一现象的方法有两种，一种是增加车道，另一
种方法就是提高车速，很显然增加车道这一方法是最基本的，但它不是最终的方法，因为车道的数量肯定有限，如果所有车辆的速度上不去，那还是会效率低的，对
于一些心急的司机来说还是会撞车的。第二种方法是一种比较好的方法，提速有助于车辆正常有序地快速流动，这就是为什么高速公路反而出现撞车的现象比普通公
路上少许多的原因。计算机网络也一样，虽然我们的交换机能提供全双工方式进行数据传输，但是如果网络带宽不宽、速度不快，每传输一个数据包都有要花费大量
的时间，则信道再多也无济于事，网络传输的效率还是高不起来的，况且网络上的信道也是非常有限的，这要决定于带宽。目前最快的以太网交换机带宽可达到
10Gbps。<br></p>
<p><strong>2。　数据传递的方式</strong></p>

<p>　　通过前面的学习我们已经知道集线器的数据包传输方式是广播方式，如图2所示。由于集线器中只能同时存在一个广播，所以同一时刻只能有1个数据包在传输，信道的利用率较低。</p>

<p align="center"><img src="file:///D:/xf/material/network/switch/yesky/%CD%F8%C2%E7%D1%A7%CC%C3%CA%AE%D2%BB%A3%BA%D7%DF%BD%FC%BD%BB%BB%BB%BB%FA4_files/72486.gif" onerror="this.src='http://www.yesky.com/image20010518/72486.gif';" alt="" align="middle" border="1" hspace="3" vspace="1"><br>图2</p>

<p>　　而对于交换机而言，它能够“认识”连接到自己身上的每一台电脑，凭什么认识呢？就是凭每块网卡物理地址，俗称“MAC地址”。交换机还具有
MAC地址学习功能，它会把连接到自己身上的MAC地址记住，形成一个节点与MAC地址对应表。凭这样一张表，它就不必再进行广播了，从一个端口发过来的
数据，其中会含有目的地的MAC地址，交换机在保存在自己缓存中的MAC地址表里寻找与这个数据包中包含的目的MAC地址对应的节点，找到以后，便在这两
个节点间架起了一条临时性的专用数据传输通道，这两个节点便可以不受干扰地进行通信了。要注意交换机档次越低，交换机的缓存就越小，也就是说为保存MAC
地址所准备的空间也就越小，对应的就是它能记住的MAC地址数也就越少。通常一台交换机都具有1024个MAC地址记忆空间，都能满足实际需求。从上面的
分析来看我们知道交换机所进行的数据传递是有明确的方向的，而不是乱传递，而不是集线器的广播方式，这种传递示意图如图3所示。同时由于交换机可以进行全
双工传输，所以交换机可以同时在多对节点之间建立临时专用通道，形成了立体交叉的数据传输通道结构。</p>

<p align="center"><img src="file:///D:/xf/material/network/switch/yesky/%CD%F8%C2%E7%D1%A7%CC%C3%CA%AE%D2%BB%A3%BA%D7%DF%BD%FC%BD%BB%BB%BB%BB%FA4_files/72488.gif" onerror="this.src='http://www.yesky.com/image20010518/72488.gif';" alt="" align="middle" border="1" hspace="3" vspace="1"><br>图3</p>

<p>　　交换机的数据传递工作原理可以简单地这样来说明：</p>

<p>　　当交换机从某一节点收到一个以太网帧后，将立即在其内存中的地址表（端口号－MAC地址）进行查找，以确认该目的MAC的网卡连接在哪一个节点
上，然后将该帧转发至该节点。如果在地址表中没有找到该MAC地址，也就是说，该目的MAC地址是首次出现，交换机就将数据包广播到所有节点。拥有该
MAC地址的网卡在接收到该广播帧后，将立即做出应答，从而使交换机将其节点的“MAC地址”添加到MAC地址表中。换言之，当交换机从某一节点收到一个
帧时（广播帧除外），将对地址表执行两个动作，一是检查该帧的源MAC地址是否已在地址表中，如果没有，则将该MAC地址加到地址表中，这样以后就知道该
MAC地址在哪一个节点；二是检查该帧的目的MAC地址是否已在地址表中，如果该MAC地址已在地址表中，则将该帧发送到对应的节点即可，而不必像集线器
那样将该帧发送到所有节点，只须将该帧发送到对应的节点，从而使那些既非源节点又非目的节点的节点间仍然可以进行相互间的通信，从而提供了比集线器更高的
传输速率。如果该MAC地址不在地址表中，则将该帧发送到所有其它节点（源节点除外），相当于该帧是一个广播帧。</p>

<p>　　讲到这里我们要明白一个事实，那就是交换机在刚买回来不可能知道您所在网络中各节点的地址，也就是说在交换机刚刚打开电源时，其MAC地址表是
一片空白。那么，交换机的地址表是怎样建立起来的呢？学习！交换机根据以太网帧中的源MAC地址来更新地址表。当一台计算机打开电源后，安装在该系统中的
网卡会定期发出空闲包或信号，交换机即可据此得知它的存在以及其MAC地址，这就是所谓自动地址学习。由于交换机能够自动根据收到的以太网帧中的源MAC
地址更新地址表的内容，所以交换机使用的时间越长，学到的MAC地址就越多，未知的MAC地址就越少，因而广播的包就越少，速度就越快。</p>

<p>　　那么，交换机是否会永久性地记住所有的端口号－MAC地址关系呢？不是的。由于交换机中的内存毕竟有限，因此，能够记忆的MAC地址数量也是有
限的。既然不能无休止地记忆所有的MAC地址，那么就必须赋予其相应的忘却机制，从而吐故纳新。事实上，工程师为交换机设定了一个自动老化时间（Auto
－aging），若某MAC地址在一定时间内（默认为300秒）不再出现，那么，交换机将自动把该MAC地址从地址表中清除。当下一次该MAC地址重新出
现时，将会被当作新地址处理。</p>

<p>　　综上所述，交换机作为当前局域网的主要连接设备，与集线器相比具有许多明显的优点，目前正有全面取代集线器之势，随着交换技术的不断发展，以太
网交换机的价格急剧下降，交换到桌面已是大势所趋。如果网络上拥有大量的用户、繁忙的应用程序和各式各样的服务器，而且你还未对网络结构做出任何调整，那
么整个网络的性能可能会非常低。最为有效的解决方法就是用交换机替代原来的集线器，当然交换机的价格会比集线器贵些，但目前来说应该完全可以接受。况且所
带来的性能提绝不是“一点点”那么简单！　</p>

<p><br></p>
<img src ="http://www.blogjava.net/westwin/aggbug/8702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:03 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)路由器基础</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8701.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8701.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8701.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8701.html</trackback:ping><description><![CDATA[<p><font color="#c00000">一、路由器概述</font></p>

<p>　　路由器是一种连接多个网络或网段的网络设备，它能将不同网络或网段之间的数据信息进行“翻译”，以使它们能够相互“读懂”对方的数据，从而构成
一个更大的网络。它与前面所介绍的集线器和交换机不同，它不是应用于同一网段的设备，而是应用于不同网段或不同网络之间的设备，属网际设备。路由器之所以
能在不同网络之间起到“翻译”的作用，是因为它不再是一个纯硬件设备，而是具有相当丰富路由协议的软、硬结构设备，如RIP协议、OSPF协议、
EIGRP、IPV6协议等。这些路由协议就是用来实现不同网段或网络之间的相互“理解”。</p>

<p>　　路由器有两大典型功能，即数据通道功能和控制功能。数据通道功能包括转发决定、背板转发以及输出链路调度等，一般由特定的硬件来完成；控制功能一般用软件来实现，包括与相邻路由器之间的信息交换、系统配置、系统管理等。</p>

<p>　　路由器具有判断网络地址和选择路径的功能，它能在多网络互联环境中，建立灵活的连接，可用完全不同的数据分组和介质访问方法连接各种子网。路由
器只接受源站或其他路由器的信息，属网络层的一种互联设备，它不关心各子网使用的硬件设备，但要求运行与网络层协议相一致的软件。路由器分本地路由器和远
程路由器，本地路由器是直接通过诸如光纤、同轴电缆、双绞线等传输介质连接的；远程路由器是不是通过以上传输介质直接连接的，而是通过其它网络，如电话
网、有线电视网等进行远程连接的。　</p>

<p>　　在局域网接入广域网的众多方式中，通过路由器接入互联网是最为普遍的方式。使用路由器互联网络的最大优点是：各互联子网仍保持各自独立，每个子
网可以采用不同的拓扑结构、传输介质和网络协议，网络结构层次分明，还有的路由器具有VLAN管理功能。通过路由器与互联网相连，则可完全屏蔽公司内部网
络，起到一个防火墙的作用，因此使用路由器上网还可确保内部网的安全。<br></p>
<p>【注】路由器这类网络设备尽管自身具有许多软件性质的协议和OS系统，但从总体上来说它仍属于硬件设备，自身
是不怕攻击的（集线器与交换机等网络设备也一样不怕攻击）。另外，路由器具有独立的公网IP地址，当局域网通过路由器接入互联网后，在互联网上显示的只是
路由器的公网IP地址，而局域网用户所采用的是局域网IP地址，不属同一网络，所以起到保护作用。</p>

<p>　　从本质上说，路由器也是一台计算机，其操作系统是在计算机引导时从ROM中装入内存的。随着Internet和企业网络的不断普及，路由器这种
网络设备也被大量地采用。目前，市场上的路由器品牌很多，其中Cisco（思科）路由器在路由器技术方面最为权威，从某种意义上来说它是路由器的代名字，
所以人们一讲到路由器这个名字就会想到Cisco这个名字。Cisco的路由器不仅产品线非常齐全（低端有Cisco
1600／1700系列，中端有Cisco 2500／2600／3600系列，高端有Cisco
7200／12000系列等），而且其技术也是最先进的，引导着整个市场。不过我国的华为，经过十多年的发展，也已非常强大，在一定程度上它几乎成为了
Cisco公司最具有竞争力的公司之一，为了抑制我国华为公司发展，前不久还在与华为公司打侵权官司。　</p>

<p>　　新购买路由器的配置文件是空的，管理人员必须编辑路由器的配置文件，并将其写入路由器的NVRAM（属于一种内存）。这样，路由器在下次启动时会根据配置文件来进行相应操作。</p>

<p>　　路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径，并将该数据有效地传送到目的站点。由此可见，选择最佳路径的策略即路由算
法是路由器的关键所在。为了完成这项工作，在路由器中保存着各种传输路径的相关数据－－路径表（Routing
Table），供路由选择时使用。路径表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的，
也可以由系统动态修改，可以由路由器自动调整，也可以由主机控制。在路由器中涉及到两个有关地址的名字概念，那就是：静态路径表和动态路径表。由系统管理
员事先设置好固定的路由表称之为静态（static）路由表，一般是在系统安装时就根据网络的配置情况预先设定的，它不会随未来网络结构的改变而改变。动
态（Dynamic）路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议（Routing
Protocol）提供的功能，自动学习和记忆网络运行情况，在需要时自动计算数据传输的最佳路径。<br></p>
<p><font color="#c00000">二、路由器的主要功能</font></p>

<p>　　路由器的主要功能就是“路由”的作用，通俗地讲就是“向导”作用，主要用来为数据包转发指明一个方向的作用。但如要细分的话，路由器的“路由”功能可以细分为如以下几个方面：</p>

<p>　　（1）。在网际间接收节点发来的数据包，然后根据数据包中的源地址和目的地址，对照自己缓存中的路由表，把数据包直接转发到目的节点，这主要是我在上面所讲的路由器的最主要，也是最基本的路由作用。</p>

<p>　　（2）为网际间通信选择最合理的路由，这个功能其实是上述路由功能的一个扩展功能。如果有几个网络通过各自的路由器连在一起，一个网络中的用户
要向另一个网络的用户发出访问请求的话，路由器就会分析发出请求的源地址和接收请求的目的节点地址中的网络ID号，找出一条最佳的、最经济、最快捷的一条
通信路径。就像我们平时到了一个陌生的地方，不知道到目的地点的最佳走法，这时我们就得找一个向导，这个向导就会告诉我们这个最佳的捷径，因为他熟悉各条
的走法，这里所讲的路由器就相当于这里的“向导”。</p>

<p>　　（3）拆分和包装数据包，这个功能也是路由功能的附属功能。因为有时在数据包转发过程中，由于网络带宽等因素，数据包过大的话，很容易造成网络
堵塞，这时路由器就要把大的数据包根据对方网络带宽的状况拆分成小的数据包，到了目的网络的路由器后，目的网络的路由器就会再把拆分的数据包装成一个原来
大小的数据包，再根据源网络路由器的转发信息获取目的节点的MAC地址，发给本地网络的节点。</p>

<p>　　（4）不同协议网络之间的连接。目前多数中、高档的路由器往往具有多通信协议支持的功能，这样就可以起到连接两个不同通信协议网络的作用。如常
用Windows
NT　操作平台所使用的通信协议主要是TCP／IP协议，但是如果是NetWare系统，则所采用的通信协议主要是IPX／SPX协议，还有一些特殊协议
网段，这些都需要靠支持这些协议的路由器来连接。</p>

<p>　　（5）　目前许多路由器都具有防火墙功能（可配置独立IP地址的网管型路由器），它能够起到基本的防火墙功能，也就是它能够屏蔽内部网络的IP地址，自由设定IP地址、通信端口过滤，使网络更加安全。<br></p>
<p><font color="#c00000">三、路由器和交换机的区别</font></p>

<p>　　路由器是产生于交换机之后，就像交换机产生于集线器之后，所以路由器与交换机也有一定联系，并不是完全独立的两种设备。路由器主要克服了交换机不能路由转发数据包的不足。总的来说，路由器与交换机的主要区别体现在以下几个方面：</p>

<p>　　（1）工作层次不同</p>

<p>　　最初的交换机是工作在OSI／RM开放体系结构的数据链路层，也就是第二层，而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在
OSI的第二层（数据链路层），所以它的工作原理比较简单，而路由器工作在OSI的第三层（网络层），可以得到更多的协议信息，路由器可以做出更加智能的
转发决策。</p>

<p>　　（2）数据转发所依据的对象不同</p>

<p>　　交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号（即IP地址）来确定数据转发的地址。IP
地址是在软件中实现的，描述的是设备所在的网络，有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的，由网卡生产商来分配的，
而且已经固化到了网卡中去，一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。</p>

<p>　　（3）传统的交换机只能分割冲突域，不能分割广播域；而路由器可以分割广播域。由交换机连接的网段仍属于同一个广播域，广播数据包会在交换机连
接的所有网段上传播，在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域，广播数据不会穿过路由器。</p>

<p>　　虽然第三层以上交换机具有VLAN功能，也可以分割广播域，但是各子广播域之间是不能通信交流的，它们之间的交流仍然需要路由器。</p>

<p>　　（4）路由器提供了防火墙的服务，它仅仅转发特定地址的数据包，不传送不支持路由协议的数据包传送和未知目标网络数据包的传送，从而可以防止广播风暴。<br></p>
<p><font color="#c00000">四、路由器的发展过程及趋势</font></p>

<p>　　虽然路由器本质上还是一台特殊的专门执行协议处理的计算机，但从功能上看，路由器与计算机还是有较大的区别。这种区别虽然大多在低档路由器或在
路由器的初期发展阶段表现得并不突出，但到了网络系统的规模、速度、种类、应用都已发生巨大变化的今天，这些网络系统本身的变化当然要导致作为网络核心的
路由器的体系结构发生巨大变化。<br>　<br>　　目前，路由器主要有三种发展趋势：一是越来越多的功能以硬件方式来实现，具体表现为ASIC芯片使
用得越来越广泛；二是放弃使用共享总线，而使用交换背板，即开始普遍采用交换式路由技术；三是并行处理技术在路由器中运行，极大地提高了路由器的路由处理
能力和速度。 下面是路由器的总体发展过程：</p>

<p>　　<strong>·第一代单总线单CPU结构路由器</strong></p>

<p>　　最初的路由器采用了传统计算机体系结构，包括共享中央总线、中央CPU、内存及
挂在共享总线上的多个网络物理接口。如Cisco2501路由器就是第一代路由器的典型代表，其中CPU是Motorola的68302处理器，具有一个
AUI以太网接口和两个广域网接口。<br>　<br>　　中央CPU完成除所有物理接口之外的其他所有功能，数据包从一个物理接口接收进
来，经总线送到中央CPU中做到转发决定处理，然后又经总线送到另一个物理接口发送
出去。这种单总线单CPU的主要局限是处理速度慢，一个CPU完成所有的任务，从而限制了系统的吞吐量。另外，系统容错性也不好，CPU若出现故障容易导
致系统完全瘫痪 。但该结构的优点是系统价格低。目前的边缘路由器基本上都是这种结构。　</p>

<p>　　<strong>·第二代单总线主从CPU结构路由器</strong></p>

<p>　　采用主从两个CPU代替了原来仅一个CPU结构，因而较大地降低了CPU的负荷，提高
了处理速度。第二代路由器的两个CPU为非对称主从式关系结构，其中一个CPU负责通
信链路层的协议处理，另一个CPU则作为主CPU负责网络层以上的处理，主要包括转发决　定、路由算法和配置控制等计算工作。<br>　<br>　　总体上来说，第二代体系结构实际上是第一代体系结构的简单延伸，对系统的容错性能没 有多大提高，速度的提高也非常有限。像这种单总线主从CPU结构的典型设备有3Com公 司的NetBuilder2路由器等。　<br></p>
<p><strong>第三代单总线对称式多CPU结构路由器</strong></p>

<p>　　第三代路由器可以说改善了在第二代体系结构中主要限制，因为它开始采用了简单
的并行处理技术，即做到在每个接口处都有一个独立CPU，专门单独负责接收和发送本
接口数据包，管理接收发送队列、查询路由表做到出转发决定等。而主控CPU仅完成路　由器配置控制管理等非实时功能。<br>　<br>　　这种体系结构
的优点是本地转发／过滤数据包的决定由每个接口处理的专用CPU来完 成，对数据包的处理被分散到每块接口卡上。第三代路由器的主要代表有北电的Bay
BCN系列，其中大部分接口CPU采用的是性能并不算高的Motorola 60MHz的MC68060或 33MHz的MC68040。　</p>

<p>　　<strong>·第四代多总线多CPU结构路由器</strong></p>

<p>　　第四代路由器至少包括三类以上总线和三类以上CPU。显然，这种路由器的结构非常
复杂，性能和功能也非常强大。这完全可以从该类路由器的典型之作Cisco7000系列中看
出。在Cisco7000中共有3类CPU和3条总线，分别是接口CPU、交换CPU、路由CPU、CxBUS 、dBUS、SxBUS。　</p>

<p>　　<strong>·第五代共享内存式结构路由器</strong></p>

<p>　　在共享存储器结构路由器中，使用了大量的高速RAM来存储输入数据，并可实现向输　出端的转发。在这种体系结构中，由于数据首先从输入端口存入
共享存储器，再从共享 存储器结构路由器的交换带宽主要由存储器的带宽决定。为了提高带宽，必须增大存储　器的带宽，并采用较多存储模块。<br>　<br>　　显然，当规模较小时，这类结构还比较容易实现，但当系统升级扩展时，设备所需　要的连线将会大量增加，控制也会变得越来越复杂。这种结构不适应向更高水平发展。　</p>

<p>　　<strong>·第六代交叉开关体系结构路由器</strong></p>

<p>　　与共享内存式结构路由器相比，基于交叉开关设计则有更好的可扩展性能，并且省　去了控制大量存储模块的复杂性和高成本。在交叉开关体系结构路由
器中，数据直接从　输入端经过交叉开关流向输出端。它采用交叉开关结构替代共享总线，这样就允许多个　数据包同时通过不同的线路进行传送，从而极大地提高
了系统的吞吐量，使得系统性能
得到了显著提高。系统的最终交换带宽仅取决于中央交叉阵列和各模块的能力，而不是　取决于互连线自身。就目前来看，这种方案是高速核心路由器的最佳方案。
　<br>　　新一代路由器普遍采用交换方法来充分利用公共通信链路设备，不但有效地提高
了整个链路的利用率，其交换还为各结点间通信的并行传输提供了可能性，这类路由　器也就是具有交换功能的路由器。一个性能和功能优秀的路由器，不但要有科
学的路由计算法则，有足够的传输带宽和高速率，还要有较强的信息流量控制能力。</p>
<img src ="http://www.blogjava.net/westwin/aggbug/8701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:03 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)Linux新手入门教程</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8700.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8700.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8700.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8700.html</trackback:ping><description><![CDATA[<div class="smallfont">
				
				<strong>Linux新手入门教程</strong>
			</div>

			
<hr style="color: rgb(0, 0, 0);" size="1">
			<!-- / icon and title -->
		
		
		<!-- message -->
		
			
<div style="overflow: hidden;">1994
年，Young和Mark Ewing创建了Red Hat公司，并创造了全球使用最广泛的Red Hat
Linux套件，为Linux的普及立下了汗马功劳，笔者也是跟随着Red Hat的带领下走进Linux世界的。Red
Hat取得了辉煌的成绩，甚至许多Linux发行公司还采用了许多Red Hat Linux的代码，如Mandrake、SOT
Best、Connectiva、Abit和Kondara。可以说，Red Hat在某种意义上几乎成了Linux的代名词。 <br>
2001年4月16日，Red Hat公司正式推出了Red Hat Linux 7.1版。做为Red Hat Linux的忠实用户，第一时间就在自己的爱机上安装了一套，在此将我的心得汇成本文，希望能够帮助你驾驭它。 <br>
<br>
<br>
第1章：系统简介 <br>
<br>
1.1 系统新特性 <br>
1） 采用了最新的Linux 2.4.2版稳定内核，支持更多硬件设备，具有很高的性能指标； <br>
2） 采用了最新的图形系统Xfree86 4.0.3，提供了强大的硬件支持； <br>
3） 引入了全图形安装界面，使得安装更为简单； <br>
4） 增加了国际化语言支持，但最可恨的是支持了Big5，却没有简体中文，真可气； <br>
5） 显著改进了对多CPU计算机的支持，而对于单CPU的计算机器，则提供了高达4G的用户进程空间，同时取消了PCI总线的限制，虚拟内存可高达64G物理内存，支持多用户和集体使用，可谓是企业级的操作系统； <br>
6） 对移动存储设备提供了出色的支持，包括：可“热插拔”USB设备、ZIP驱动器和各种光盘刻录机。Red Hat Linux 7.1主要采用了一个叫做updfstab的程序模块，使得它能对各种移动存储设备的支持，安装和卸载这些设备也是变得很容易了； <br>
7） 加入了一些新的系统配置工具来方便用户管理以及Linux系统使用，例如apacheconf, bindconf,
和printconf等，这些工具能方便的分别让用户通过GUI图形用户界面来配置APACHE，BIND，和打印机。要知道，以往版本中要配置上述的几
个服务可是很复杂的。要手动修改不少参数； <br>
8） 另外，还增强了对PCMCIA 设备的支持，这对使用PCMCIA 设备的笔记本电脑的用户来说是非常重要的； <br>
9） 在安全方面做了许多修补工作，安全缺省设置可保证端口关闭，新的防火墙屏蔽可使用用户任意打开或关闭； <br>
10）捆绑了大量最新的应用软件、服务器软件。 <br>
<br>
1.2 系统硬件需求 <br>
Linux发展到今天，已经摆脱了以前的硬件支持不好的窘境，它凭借自己的实力赢得了市场，现在众多硬件厂商都使自己的产品能够在Linux下工作。 <br>
1）CPU：Redhat Linux
7.1在安装光盘上内提供了对许多CPU的支持程序，几乎您在安装时不会因为CPU的原因受阻。不过对于一些类似Intel
80386、80486，AMD
486、5x86、K5等的老CPU，系统虽然提供了支持，但未针对这些CPU进行优化，可能导致性能不佳。另外，如果想构建多CPU的系统，那么可选的
CPU为：Intel Celeron、Pentium、 Pentium II、Pentium II Xeon、Pentium
III、Pentium III Xeon、Pentium Pro、Pentium with MMX。 <br>
2）主板：Red Hat Linux 7.1支持所有X86兼容主板 <br>
3）内存：建议64M以上，最好128M <br>
4）CDROM：支持所有的IDE接口的光驱，大部分SCSI接口的光驱也能够识别； <br>
5）SCSI卡：支持Adapterc 152x、154x、274x、284x、294x、394、aic7890-based卡，以及大部分流行的SCSI卡。除非你有SCSI接口的存储设备，否则不需要该设备。 <br>
6）显卡： <br>
对于Linux系统而言，在字符终端方式下，所有的显卡都支持的。但是如果要让你的显示工作在X
Window图形界面下，就需要根据显卡的不同进行相应的设置。在早期，显卡经常困扰着初学者，不过现在显卡的支持变得好了很多。大部分显卡都能够在安装
时被识别，自动完成设置。唯一遇到无法识别的常见显卡是Intel的i810，你可以到Intel的网站上找到帮助（<a target="_blank" href="http://support.intel.com/support/gr...xinstal.htm%EF%BC%89%E3%80%82">http://support.intel.com/support/gr...xinstal.htm）。</a> <br>
7）声卡： <br>
在Red Hat Linux 7.1中提供了更多的声卡支持，就连Creative Labs Sound Blaster Live声卡都可以“即插即用”了。不过一些小牌子的声卡常会出现支持不好的情况。 <br>
8）网卡：支持Ne2000兼容网卡，大部分PCI网也支持的较好。 <br>
9）其它： <br>
Redhat Linux 7.1支持所有X86兼容主板；支持所有市面上销售的键盘、鼠标、软驱；支持所有品牌的内存，至少需要8M内存，建议配备64M以上。 <br>
在Red Hat的网站上有一份详细的硬件兼容性列表，你可以通过它获得更多详细的信息：<a target="_blank" href="http://hardware.redhat.com/hcl/genp...gi?pagename=7.1">http://hardware.redhat.com/hcl/genp...gi?pagename=7.1</a><br><br>第2章：安装指南 <br>
<br>
2.1 安装前的准备 <br>
1、收集系统资料：为了能够顺利安装和设置Linux系统，你必须将以下资料记录在案，以备系统安装时使用： <br>
硬盘：数量, 容量和类型； <br>
内存：您的计算机所装内存的数量； <br>
CD-ROM：接口类型(IDE, SCSI)； <br>
SCSI卡：卡的型号； <br>
网卡：网卡的型号； <br>
鼠标：鼠标的类型（串口、PS/2、总线型），协议（Microsoft,Logitech, MouseMan, 等等），按键的数量，对串口鼠标还要知道它接在哪个串口； <br>
显示卡：显示卡的型号(或者它用的芯片组), 显示内存的数量；(大多数PCI总线的显卡可以被安装程序自动识别.) <br>
显示器：型号，以及水平和垂直刷新频率的范围。 <br>
你可以用Windows的控制面板 -&gt; 设备管理器来获取相应资料，当然还可以查阅相应的随机资料。 <br>
2、检查CMOS设置: <br>
Anti vrius：      Disable 关闭该选项，防止安装时死机，因为安装程序要写主引导扇。 <br>
Swap A,B：Disable 以免启动时可能出现问题。 <br>
Boot Sque：CDROM,A,C 让计算机从光盘启动。 <br>
Memory Hole    :      Disable 若未关闭，则LINUX只能识别16M内存。 <br>
3、了解LINUX的硬盘分区的命名设计与文件系统知识： <br>
Linux安装至少要两个分区：Linux native(文件)分区和Linux Swap(交换)分区。主分区用作存放LINUX的文件，交换分区为运行LINUX时提供虚拟内存。 <br>
交换分区每个16~32M，最多可以有8个，具体可根据内存的多少来决定。一般来说，建一个16M的交换分区就可以了。 <br>
文件分区则根据需要和硬盘大小来决定，一般来说不应少于200M。 <br>
由于我们接触最多的是DOS操作系统，所以大多数人都习惯于使用类似于\\\\\\'C：\\\\\\'的符号来标识硬盘分区，但这在LINUX却不是这
样。Linux的命名设计比其他操作系统更灵活，能表达更多的信息。Linux通过字母和数字的组合来标识硬盘分区，如“hda1”，其具体含义是：分区
名的前头两个字母表明分区所在设备的类型，例如hd指IDE硬盘，sd(指SCSI硬盘)；第三个字母分区在哪个设备，按a,b,c,d的顺序排列，如
hda是IDE 1口的主硬盘，则IDE 2口的主硬盘就应该是hdc了；最后的数字在该设备上的分区顺序，前四个分区(主分区或扩展分区)用数字1
到4表示， 逻辑分区从5开始， 例如： hda3表示第一个IDE硬盘上的第三个主分区或扩展分区。 <br>
在Linux的文件系统中，不论有几个文件分区，全部集合于一个树形的目录结构中。比如说，你可以将某个分区指定给/(根目录)使用，某个分区指定给
/usr目录使用，然而但你进入Linux系统后，你根本感觉不到他们在不同的分区中，你只是感觉都在一棵树上。不过如果你只有一个文件分区，一定要给/
(根目录)使用。 <br>
4、为硬盘作好安装LINUX的准备: <br>
一般说来，大家电脑上的硬盘跟我一样已经全部用于MS-DOS/WIN操作系统的分区。为了能够安装LINUX，只好为LINUX重新分配硬盘空间。我立马把朋友的硬盘借来，数据统统备份下来，再重装系统。不过有三种可供选择的方法： <br>
1) 将MSDOS下的最后一个逻辑盘上的数据全部移到其它分区中，将该逻辑盘用分区工具删除，将这部分空间给LINUX使用。 <br>
2) 重新将硬盘分区，这是最直接和最麻烦的一种方法。具体操作如下： <br>
. 备份用户的文件 <br>
. 用MS-DOS系统盘启动系统 <br>
. 用FDISK删除原有分区，重建新的分区，将分配给LINUX的空间留下来不分配给任何一个分区 <br>
. 重新安装原来的用户系统 <br>
3) 利用一些分区工具在不删除硬盘原有数据的情况下重新分区。如分区魔术师等。 <br>
<br>
2.2 从CDROM安装Red Hat Linux 7.1 <br>
我们可以通过光盘、硬盘、网络安装Red Hat Linux 7.1系统，最常见的方法就是使用光盘安装。使用光盘安装无外乎就是三个要求： <br>
1） 你的主板支持光盘启动 <br>
2） 你有光驱 <br>
3） 你有Red Hat Linux 7.1安装光盘 <br>
通常情况下，这是没问题的。笔者也建议您使用光盘安装，这样是这简单的。随着Linux系统下的应用软件逐渐增多，一张光盘已无法容纳，Red Hat
Linux
7.1安装光盘有两张，第一张可以直接从光盘启动，包含了大部分的软件包和一些安装工具。第二张光盘则是许多附加的软件包。不过这次与以往不同的是，
Red Hat公司专门进行了改进，安装程序可以从多个光盘读取资料。安装的时候，你就会发现中途提示你更换第二张光盘。现在我们就一起开始Red
Hat Linux 7.1安装之旅。 <br>
第一步：选择安装模式 <br>
塞入第一张光盘，让计算机从CDROM启动，将会出现了简洁的欢迎信息。这时可以选择不同的安装模式： <br>
1） 图形模式：直接按回车即可，整个安装过程就象Windows一样，而且可以使用鼠标操作。不过此时的Red Hat好象对显卡很挑剔，有的出现屏幕太大，找不到按钮，有的则根据无法显示图形界面。如果是这样，你可以按下热启动键重选文本模式进行安装。 <br>
2） 文本模式：输入text，再按回车。就会进入文本模式的安装界面，有一定经验的人还是使用这种方式比较好。 <br>
3） 专家模式：输入expert，再按回车。在这种情况下，安装程序就好象没有脑子一样，所有的东西都要您来决策。除非你十分熟悉Linux，并且有一些特殊的硬件安装程序无法正确配置，否则不要使用这种方式。 <br>
4） 救援模式：这不是在首次安装时使用的，它仅是用于原有的Linux系统无法正常启动的情况下使用。这种方式下，你将进入一个微型的Linux系统，并且提供了许多恢复Linux的工具供你使用。 <br>
5） 驱动盘模式：如果你有特殊的硬件驱动盘，需要在安装时提供给Linux系统使用，则你就输入“linux dd”，再按回车，安装程序会提供机会让你插入驱动软盘。 <br>
建议使用文本模式进行安装。 <br>
<br>
第二步：选择语言 <br>
Red Hat Linux 7.1提供了18种不同的语言，可惜还是没有中文，只能选择“english”。然后继续。 <br>
注：Red Hat公司已在近期推出了中文版，大家可以找来试一试。 <br>
<br>
第三步：选择键盘 <br>
在此选择us，继续。 <br>
注：笔者试过在Red Hat Linux 7.1下使用罗技公司的Logitech iTouch无线键盘，那么普通的104键盘更不会有问题了。 <br>
<br>
第四步：选择安装方式 <br>
Red Hat Linux 7.1提供了Workstation，Server，Laptop，Custom，Upgrade
Existing（分别是工作站，服务器，笔记本电脑，用户自定义，升级老版本）这五种安装方式。我们可以根据自己的实际需要来选择安装方式。 <br>
1）
Workstation：工作站方式。对于一般用户建议使用此方式。工作站类型安装将会清除掉所有硬盘上原有的所有Linux分区，对于非Linux分区
（如Windows 98）会置之不理。这种方式安装十分简单，而且如果你的机器上如果原来有Windows
98的话，安装完后，会自动完成LILO双启动的配置。但是，如果你的机器上原来是NT的话，那就千万不要使用这种方式，否则你的NT可能再也无法启动。
<br>
2） Server System：服务器系统方式。警告：采用这种方式安装，将会干掉所有硬盘上所有分区的一切信息。这绝对不是开玩笑！许多初学者已经付出了血与泪的代价。通常在你需要在一台空PC上构建一台网络服务器，才选择它。 <br>
3） Laptop：便携机、笔记本方式。笔顾名思义，当你在笔记本电脑上安装时，建议采用该方式。 <br>
4） Custom System：定制安装。对于Linux有一定了解的朋友，建议使用该方式，自由地构建Linux。在下第一次安装Linux的时候就勇敢地采用了这种方式。 <br>
5） Upgrade Existing System：升级现有系统。假设你的硬上有老版本的Red Hat Linux的话，这是你最佳的选择。 <br>
建议使用“定制安装”。 <br>
<br>
第五步：进行硬盘分区 <br>
首先，会让你选择不同的分区工具：Disk Druid和fdisk，建议使用Disk Druid。 <br>在Disk
Druid的主界面的最上面是\\\\\\'Current Disk
Partitions\\\\\\'区，列出各个硬盘分区的信息。每行由五个项目组成：Mount Point --
指定该分区对应的Linux系统目录；Device -- 硬盘分区的设备名；Requested -- 分区定义时申请的最小空间；Actual
-- 当前分配给这个分区的空间；Type --分区类型。 <br>
而中间的是\\\\\\'Drive Summaries\\\\\\'区，一行对应一个物理硬盘，每行由六个项目组成：Drive --
硬盘的设备名；Geom [C/H/S] -- 硬盘的物理信息，包括柱面、 磁头和扇区的数量；Total -- 硬盘所有可用空间；Used --
硬盘已分配空间；Free -- 硬盘未分配空间；Bar Graph -- 硬盘已用空间表示图。 <br>
最下面的是Disk Druid的按钮区，由五个按钮组成：Add -- 申请一个新的分区； Edit -- 修改在\\\\\\'Current
Disk Partitions\\\\\\'区中选中的分区的属性；Delete -- 删除\\\\\\'Current Disk
Partitions\\\\\\'区中选中的分区；Ok -- 确认分区操作，重写硬盘分区表；Back --
不保存修改而退出，回到前一个屏幕，重新开始。 <br>
我建议为Linux分一个根分区，一个交换分区（建议64M、128M或256M），即： <br>
用Tab选择Add钮，按回车，这时屏幕上将会出现一个题为\\\\\\'Edit New
Partition\\\\\\'的对话框。首先我们在Mount
Point项中，输入这个分区所对应的系统目录：“/”(根目录)；接着在Size(Megs)项中，输入分区的大小；在Type这一项中用光标上、下键
键选择适当的分区类型，我们选中Linux的文件分区Linux
native；最后按OK确认。这样我们就成功地建立起一个为Linux所用的分区了。当然如果你的硬盘空间允许，你完全可以再建立一个或几个分区给
Linux使用。接着用同样的方法给Linux增加一个交换分区，不同的仅在于Mount Point项让它空着，在Type项目中选择Linux
Swap。 <br>
注：如果你在前面选择的是图形界面安装的话，将会提供一个图形化的分区界面，使用起来也是很方便的，而且还可以使用自动分区的办法。让安装程序自已创建分区。 <br>
在做这一步时需要谨慎，不要不小心删掉原来的分区，那就惨了。确认没有错后，按OK按钮继续。然后根据提示将新的Linux分区格式化，以便使用。 <br>
<br>
第六步：LILO配置 <br>
LILO，就是Linux
Loader，即Linux引导器，它负责启动Linux操作系统。我们可以通过配置它实现双启动。首先，安装程序会让你填写有什么内核参数需要传给
LILO，通常是不需要的。接着，会询问你要将LILO安装在什么位置，通常有两种选择：1）第一硬盘的主引区（MBR）；2）Linux分区的引导扇。
<br>
如果你想使用LILO来做双启动的话，你需要选择第一种，如果是想用Linux启动软盘或其它系统引导器引导Linux的话，那就选择第二种。 <br>
<br>
第七步：设置主机名 <br>
随便为你的机器取一个名字。 <br>
<br>
第八步：选择系统安全等级 <br>
这也是Red Hat Linux 7. 1提供的新选项，它提供了三种选择： <br>
1） High：如果你选择High级，那么所有来自外界的网络访系问都将被禁止； <br>
2） Medium：默认的级别，选择该级别，则对于外界的网络访问仅限于该系统提供的网络服务； <br>
3） No firewall：最低的安全保障，任何外界的网络访问都将被允许。 <br>
<br>
第九步：常用选项设置 <br>
接着，设置鼠标、选择你需要支持的语言种类（注意，这里是提供了中文支持的哟），以及时区（图形界面下应点China，而在文本模式下则应选择PRC）。 <br>
第十步：用户设置 <br>
1） 首先设置系统管理员（就是root用户）密码，系统管理员是系统的最高权限者，拥有该系统，所以这个密码是十分重要的； <br>
2） 接着安装程序提供了一个增加用户的工具，你可以通过这个工具很轻松地添加系统用户。 <br>
3） 最后是关于用户认证的配置： <br>
a. Shadow Passwords：默认是选中的，请不要修改。该功能是用来保护密码安全的； <br>
b.使用MD5密码加密：默认也是选中的，请不要修改，它也是保护密码安全的； <br>
c.使用NIS：当你要通过网络上的NIS服务器进行用户验证时，请填写相关信息； <br>
d.使用LDAP：当你要通过网络上的LDAP服务器进行用户验证时，填写相关信息； <br>
e.使用Kerberos：当你要使用Kerberos系统进行用户验证时，填写相关信息； <br>
<br>
第十一步：选择软件包 <br>
这一步是安装过程中最重要的一步，你可以根据提示选择你需要的软件。安装程序将所有的软件分成了许多类： <br>
Printer Support：打印机支持 <br>
X Window System：X Window系统 <br>
GNOME：桌面管理器GNOME <br>
KDE：桌面管理器KDE <br>
Mail/WWW/News Tools：一些收发Mail、WEB浏览、新闻阅读的常用工具 <br>
DOS/Windows Connectivity：提供DOS和Windows的兼容工具 <br>
Graphics Manipulation：图形操作软件 <br>
Games：游戏软件 <br>
Multimedia Support：多媒体支持软件 <br>
Laptop Support：笔记本电脑专用的支持软件 <br>
Networked Workstation：网络工作站工具，如Telnet、FTP等客户端 <br>
Dialup Workstation：拔号上网工具 <br>
News Server：新闻服务器 <br>
NFS Server：网络文件系统服务器 <br>
SMB(Samba)Server：Samba（就是NetBIOS协议）服务器系统 <br>
IPX/Netware™ Connectivity：IPX协议支持软件 <br>
Anonymous FTP Server：匿名FTP服务器 <br>
SQL Server：postgresql 与MySQL数据库服务器 <br>
Web Server：WEB服务器（Apache） <br>
DNS Name Server：域名服务器 <br>
Network Management Workstation：网管工作站，提供一些SNMP支持 <br>
Authoring/Publishing：出版方面的软件 <br>
Emacs：著名的集成编辑软件 <br>
Development：开发工具包 <br>
Kernel Development：内核开发包，包括内核源程序 <br>
Utilities：一些常见工具，如Linuxconf <br>
Everything：所有软件包，如果你的Linux分区足够大（2400M以上），那么你可以选中它，将所有的软件都装上。 <br>
注：在选择界面之下，有一个选项，选中时它会列出详细的软件安装列表，你还可以进行一些选择。 <br>
选择完要安装的软件包后，系统会自己进行软件包依赖检查，接着就开始了文件的拷贝。这时你可以休息一下了。不过与以前不一样，拷贝到一半时，需要你更换光盘！ <br>
<br>
第十二步：制作启动盘 <br>
安装完成之后，会提示你制作一张Linux启动软盘。虽然不是很有用，但是对于初学者而言还是做一张备用为好。因此在以下情况时，能够用得上： <br>
1） 准备将LILO放在Linux分区中，可以通过软盘引导Linux； <br>
2） 装在MBR上的LILO程序在安装Windows时被覆盖，则可以使用这张软盘引导，再运行“/sbin/lilo”，重新往MBR上写LILO程序； <br>
3） 当系统崩溃时，可以使用Linux启动软盘启动，做一些恢复。 <br>
<br>
第十三步：拷贝文件 <br>
接下来就是历时最长，也是最核心的过程：拷贝文件。Linux安装程序将你所选择的软件包通通拷贝到硬盘分区中。要注意的是，在安装过程中是需要你换第二张光盘的。 <br>
<br>
第十四步：配置显卡/X Window <br>
接下来，安装程序将自动检测你的显卡、显示器，由于Red Hat Linux 7.1采用了最新的XFree86 4.0，所以对显示卡的支持更好了，大部分显卡都可以被识别，由于无法识别的话，那就只好等安装完以后再配置了。 <br>如
果你的显卡、显示器都幸运地被识别，那么安装程序将要求你选择图形界面的分辨率，如果你的显卡很好，那就选择800*600*24位色或
1024*768*24位色，象我使用的显卡太老，就只好选择800*600*16位色。你也可以选择多种（启动后，可以使用Ctrl+Alt
+和-来切换）。 <br>
设置完分辨率后，安装程序将测试X Window，如果你的选择正常的话，那么你可以看到漂亮的X Window，那你也就可以轻松地按OK，表示确定。 <br>
按下OK按钮后，安装程序会询问你的Linux系统是否一启动就进入X Window，默认为“是”。不过我是不喜欢，在此选择了“NO”，这样启动Linux后将进入字符状态，需要X Window时再执行startx命令手动启动。 <br>
<br>
好，到此大功告成，Red Hat Linux 7.1将提示你取出光盘，重新启动电脑，带着小红帽子的企鹅落户你家了。 <br>
注：Red Hat Linux 7.1在第一次启动时将会自己运行一个叫Kudzu的程序，用来完成一些硬件添加操作，通常是网卡和声卡。操作十分简单，你只需选择Configure按钮，系统会帮助你完成这些硬件的配置工作。 <br>
<br>
2.3 其它安装方式简介 <br>
如果你没有光驱的话，那么你还可以通过以下几种方式来完成安装： <br>
1） 从FTP站点安装 <br>
2） 从NFS服务器安装 <br>
3） 从SMB共享卷安装 <br>
4） 从硬盘安装 <br>
1.制作Linux启动盘 <br>
如果采用这些安装方式，那你首先得制作两张Linux启动盘。 <br>
1) 在安装光盘上找到LINUX启动盘的映象文件，/images目录下的boot.img（启动盘）和supp.img（扩展盘）这两个文件。 <br>
2）从/images、/install或/dosutils目录中找到制作映象盘的工具RAWRITE.EXE。 <br>
3）将映象文件和RAWRITE.EXE拷入同一目录，然后在DOS命令行下执行RAWRITE: <br>
C:linst&gt;RAWRITE <br>
Enter disk image source file name:在这里输入映象文件名 <br>
Enter target diskette drive:在这里输入目标盘符如A： <br>
2.从FTP站点安装 <br>
要使用这种方式安装必须满足以下条件之一： <br>
1） 你的机器与存放着安装盘的FTP服务器以局域网形式相连； <br>
2） 在你的局域网的FTP服务器上有安装盘。 <br>
要注意，你的FTP服务器必须支持长文件名，才可能成功安装。你需要使用Linux的启动盘和扩展盘启动，并配置有效的域名服务器或指定FTP服务器的IP地址，进行安装。 <br>
3.从NFS服务器安装 <br>
如果在你的局域网中有一台NFS服务器的话，你可以将安装盘复制到NFS服务器上，然后用Linux的启动盘启动，访问NFS服务器进行安装。同样的，这也需要NFS服务器能够支持长文件名。 <br>
4.从SMB共享卷安装 <br>
将安装盘放到一个支持共享卷的Windows 9x/NT/2000服务器上，然后使用Linux启动盘与扩展盘启动，通过访问共享卷中的安装盘实现安装。 <br>
5.从硬盘安装 <br>
这种方式适合于从网上下载了安装盘的用户，首先，你可以将Red Hat Linux包文件拷贝到您的硬盘： <br>
1） 所有的文件都要放在一个硬盘分区上； <br>
2） 将所有的内容放在RedHat目录下； <br>
3） 然后将要安装的包拷贝到另一个子目录RPMS <br>
接着就可以使用Linux的启动盘与扩展盘启动进行系统安装。<br><br>第3章：Red Hat Linux 7.1使用基础<br>
3.1 登录和退出系统 <br>
<br>
1. 启动系统 <br>
通常LILO是安装在MBR上的，计算机启动后，MBR上的程序被执行，将出现一个不是很漂亮的图形：左边是一个小红帽图像，右边列出了可以启动的操作系统，你可以使用键盘箭头切换。刚安装好后默认值是Linux，也就是你不选择，一会儿将自己启动Linux。 <br>
如果你想默认的选择是Windows的话，那你可以在启动Linux后，用vi修改/etc目录下的lilo.conf文件，加上default=windows，然后再执行/sbin/lilo重新生成LILO。 <br>
<br>
2. 用户登录 <br>
Linux是一个真正意义上的多用户操作系统，用户要使用该系统，首先必须登录，使用完系统后，必须退出。用户登录系统时，为了使系统能够识别该用户，必须输入用户名和密码，经系统验证无误后才可以登录系统使用。 <br>
Linux下有两种用户： <br>
1） root用户：超级权限者，系统的拥有者，在Linux系统中有且只有一个root用户，它可以在系统中任何操作。在系统安装时所设定的密码就是root用户的密码。 <br>
2） 普通用户：Linux系统可以创建许多普通用户，并为其指定相应的权限，使其有限地使用Linux系统。 <br>
关于用户的管理，我们将在后面详细说明。 <br>
用户登录分两步进行： <br>
1） 输入用户的登录名，系统根据该登录名来识别用户； <br>
2） 输入用户的口令，该口令是用户自己选择的一个字符串，对其他用户完全保密，是登录系统时识别用户的唯一根据，因此每一个用户都应该保护好自己的口令！ <br>
系统在建立之初，仅有root用户，其它的用户则是由root用户创建的。由于root用户的权限太大了，所以如果root用户误操作将可能造成很大的损失。所以建议系统管理员为自已新建一个用户，只有需要做系统维护、管理任务时才以root用户登录。 <br>
下面就是一个登录实例：（其中黑体字为输入） <br>
Red Hat Linux release 7.1 (Seawolf) <br>
Kernerl 2.4.2-2 on an i686 <br>
Home login:root <br>
Password: <br>
在上面的例子中，我们发现在Password后面是空的，其实并不是不输入密码，而是在输入时，Linux系统不会把它显示出来，这样用来保护密码！ <br>
如果登录成功的话，我们将获得Shell（Shell是用来与用户交互的程序，它就象DOS中的COMMAND.COM，不过在Linux下可以有多种
Shell供选择，如bash、csh、ksh等）提示符，如果以root用户登录的话，那么获得的提示符是“#”，否则将是“$”。 <br>
提示：如果当时在安装时设置为一启动就进入图形界面的话，那系统启动后，用户登录界面将是图形化的，有点象Windows，而且当你输入正确的用户名与密码，就会直接进入X Window。这个设置是可以修改的： <br>
在/etc目录下有一个inittab文件，其中有一行配置： <br>
id:3:default <br>
其中，数字3就是代表一启动进入字符终端，如果改为5则代表一启动进入X Window。 <br>
<br>
3. 修改口令 <br>
为了更好地保护用户帐号的安全，Linux允许用户在登录之后随时使用passwd命令修改自己的口令。修改口令需要经历： <br>
1） 输入原来的口令，如果口令输错，将中止程序，无法修改口令； <br>
2） 输入新的口令； <br>
3） 提示重复一遍新的口令，如果两次输入的口令相吻合，则口令修改成功。 <br>
需要注意的是，Red Hat Linux 7.1为了更好地保护口令，如果你输入的新口令过于简单，它将会拒绝修改。下面就是一个修改口令的实例：（其中黑体字为输入） <br>
$ passwd <br>
Changing password for user1 <br>
(current) UNIX password: ß 在些输入原来的密码 <br>
New UNIX password: ß 输入新的密码 <br>
Retype new UNIX password: ß 再输入一遍新的密码 <br>
Passwd:all authentication tokens updated successfully ß 修改成功！ <br>
注意，在这里输入的口令同样不会显示出来。 <br>
而如果是root用户修改口令，则不需要输入老密码！也就是说，它可以修改任何用户的口令。 <br>
<br>
4. 退出登录 <br>
不论你是root用户还是普通用户，只需简单地执行exit命令就可以退出登录。 <br>
<br>
5. 关闭机器 <br>
在Linux系统中，普通用户是无权关闭系统的！只有root用户才能够关闭它。当然如果你是按关机按钮则别当别论。我们可以通过以下几种方法实现： <br>
1） 按下CTRL+ALT+DEL组合键，这样系统将重新启动！ <br>
2） 执行reboot命令，这样系统也将重新启动！ <br>
3） 执行shutdown -h now命令，这样系统将关闭计算机！ <br>
4） 执行halt命令，可以关闭计算机。 <br>
注意千万不要随意采用硬关机、重启动键等方式关闭系统，那样会导致Linux文件系统遭受破坏！ <br>
<br>
6. 虚拟控制台 <br>
Linux是真正的多用户操作系统，可以同时接受多个用户的远程和本地登录，也允许同一个用户多次登录。Linux为本地用户（也就是做在计算机面前的用户）提供了虚拟控制台访问方式，允许用户在同一时间从不同的控制台进行多次登录。 <br>
虚拟控制台的选择可以通过按ALT键加上F1-F6六个功能键来实现。例如，用户登录后，按一下ALT+F2组合键，用户又可以看到“login:”提示符，这其实就是第二个虚拟控制台，而这时再按下ALT+F1组合键，用户则又可以回到第一个虚拟控制台。 <br>
大家可以通过使用虚拟控制台来感受Linux系统多用户的特性。例如用户可以在某一虚拟控制台上进行的工作尚未结束时，就可以切换到另一个虚拟控制台上开
始另一项工作。例如在开发软件时，可以在一个控制台上编辑程序，在另一个控制台上进行编译，在第三个控制台上查阅信息。 <br>
<br>
<br>
3.2 文件与目录操作 <br>
与其它操作系统一样，在Linux系统下用户的数据和程序也是以文件的形式保存的。所以在使用Linux的过程中，是经常要对文件与目录进行操作的。现在我们就以一个Window用户的立场来学习一下Linux下的文件与目录操作方法。 <br>
<br>
1. 文件名与文件类型 <br>
文件名是一个文件的标识。从这个角度来说，文件名的规则与Windows 9x下的是基本上相同的。它同样是由字母、数字、下划线、圆点组成，最大的长度是255个字符。 <br>
与Windows
9x一样，Linux系统中也有普通文件和目录文件，不过目录文件在Window中被简称为目录就是了。而在Linux系统中有一种特殊的文件，那就是设
备文件。在Linux系统中，把每一个I/O设置都映射成为一个文件，可以象普通文件一样处理，这就使得文件与设备的操作尽可能统一。从用户的用户来说，
对I/O设备的使用和一般文件的使用几乎一样，这样就可以不必了解I/O设备的细节。 <br>
<br>
2. 目录结构 <br>
与Windows下一样，在Linux中也是通过目录来组织文件的。但不同的是，在Linux下只有一个根目录，而不象Windows那样一个分区一个根目录。如果有多个分区的话，就需要将其它分区mount到根目录上来用。 <br>
大家回忆一下当时为Linux分区时，有一个选项要填，那就是Mount Point，我们将其中一个写成了“/”，也就是根目录（这点与Windows相反，一个是“\”，一个是“/”，真是天生冤家）。其它的则可能是/home、/usr。 <br>
安装完系统后，你会发现/home、/usr就是根目录下面的home、usr目录！对了，整个分区就用于该目录了。 <br>
安装完Linux后，有许许多多的目录，下面我们就说明一些重要的目录： <br>
/bin：存放着一百多个Linux下常用的命令、工具 <br>
/dev：存放着Linux下所有的设备文件！ <br>
/home：用户主目录，每建一个用户，就会在这里新建一个与用户同名的目录，给该用户一个自己的空间 <br>
/lost+found：顾名思义，一些丢失的文件可能可以在这里找到 <br>
/mnt：外部设备的挂接点，通常用cdrom与floppy两个子目录！它的存在简化了光盘与软盘的使用。你只需在塞入光盘后，运行：mount
/mnt/cdrom，就可以将光盘上的内容Mount到/mnt/cdrom上，你就可以访问了。不过你使用完成后，应该离开该目录，并执行
umount /mnt/cdrom。同样的，软盘就是mount /mnt/floppy和umount /mnt/floppy了。 <br>
/proc：这其实是一个假的目录，通过这里你可以访问到内存里的内容。 <br>
/sbin：这里存放着系统级的命令与工具 <br>
/usr：通常用来安装各种软件的地方 <br>
/usr/X11R6 X Window目录 <br>
/usr/bin与/usr/sbin 一些后安装的命令与工具 <br>
/usr/include、/usr/lib及/usr/share 则是存放一些共享链接库 <br>
/usr/local 常用来安装新软件 <br>
/usr/src Linux源程序 <br>
/boot：Linux就是从这里启动的 <br>
/etc：这里存放在Linux大部分的配置文件 <br>
/lib：静态链接库 <br>
/root：root用户的主目录，这就是特权之一！ <br>
/var：通常用来存放一些变化中的东西！ <br>
/var/log：存放系统日志 <br>
/var/spool：存放一些邮件、新闻、打印队列等 <br>
另外，要说明的是，在Linux下“当前目录”、“路径”等概念与Windows下是一样的。 <br>
3. 显示文件内容 <br>
使用过DOS命令的人都应该知道，我们可以使用type命令来查看一个文件的内容。在Linux下有五个相关的命令，功能各有千秋，不过它们都象type命令一样，只能用来查看文本文件。 <br>
1） cat命令 <br>
cat命令是最象type命令的，使用的方法很简单：“cat 文件名”。不过比type命令更强大的是，它可以同时查看多个文件：“cat 文件名一 文件名二”。 <br>
2） more命令 <br>
如果文本文件比较长，一屏无法显示完，那么使用cat命令就可能无法看清。这里我们可以简单地使用more来代替cat命令即可。其效果与type
文件名/p类似。使用more命令将一次显示一屏文本，显示满后，停下来，并提示出已显示全部内容的百分比，按空格键就可以看到下一屏。 <br>
3） less命令 <br>
less命令的功能几乎和more命令一样，也是按页显示文件，不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。 <br>
Ø 向前翻：按b键； <br>
Ø 向后翻：按p键； <br>
Ø 指定位置：输入百分比 <br>
Ø 退出：q <br>
我经常使用more和less，几乎不使用cat查看文件。 <br>
4） head命令 <br>
通过head命令可以仅查看某文件的前几行，格式为： <br>
head 行数 文件名 <br>
如果未指定行数，则使用默认值10。 <br>
5） tail命令 <br>
与head命令相对应的，我们可以使用tail命令来查看文件尾部的内容。通常用来实时监测某个文件是否被修改，通常用来观察日志。如： <br>
tail -f maillog <br>
<br>
4. 编辑文件 <br>
在Red Hat Linux 7中有许多文字编辑工具，其中最常用的应该是vi，这是一个广泛应用于所有UNIX系统的编辑器。它的使用有些特别： <br>
首先，可以使用命令“vi 文件名”打开一个文件。 <br>
刚启动的时候，vi处于命令状态，不能够输入任何字符。在这个状态下，可以使用方向键进行移动，而需要输入内容时，你需要输入“i”或“a”命令进入编辑状态。编辑完成后，你需要按下“ESC”键回到命令状态。 <br>
在命令状态下，你可以输入“:q!”不存盘退出，输入“<img class="inlineimg" title="大大笑" alt="" src="http://www.linuxeden.com/forum/images/smilies/supergrin.gif" border="0">q”存盘退出。 <br>
<br>
5. 文件的复制、删除与移动 <br>
大家都早已熟知在DOS下我们可以使用copy、del、move命令来实现文件的复制、删除与移动。下面我们说说如何在Linux系统中做以上操作。 <br>
1） cp命令：文件/目录复制命令 <br>
它的语法格式为：cp [选项] 源文件或目录 目标文件或目录 <br>
常用的选项有： <br>
Ø a 该选项常在复制目录时使用，它保留链接、文件属性，并递归地复制目录，就象DOS中的xcopy /s一样 <br>
Ø f 如果目标文件或目录已存在，就覆盖它，并且不做提示 <br>
Ø i 与f选项正好相反，它在覆盖时，会让用户回答“Y”来确认 <br>
Ø p 使用该选项，复制文件时将保留修改时间和访问权限 <br>
Ø r 若给出的源是一个目录，那么cp将递归复制该目录下所有的子目录和文件，不过这要求目标也是一个目录名 <br>
另外，大家要注意的是，如果源是文件名，目标是目录名的话，那么使用cp命令可以指定多个源文件名。如： <br>
$ cp a.txt b.txt /home/user1 <br>
该命令将把a.txt和b.txt文件复制到/home/usr1目录中。 <br>
2） rm命令：文件/目录删除命令 <br>
它的语法格式为：rm [选项] 文件 … <br>
常用的选项有： <br>
Ø f 在删除过程中不给任何指示，直接删除 <br>
Ø r 指示rm将参数中列出的全部目录和子目录都递归地删除 <br>
Ø i 交互式的删除，每个文件在删除时都给出提示 <br>
使用rm命令时一定要小心，特别是以root用户登录时，我就看到过一个朋友在使用rm命令删除/home/tmp目录时将命令“rm -rf /home/tmp”误输成了 “rm -rf / home/tmp”，结果等他走回电脑面前，整个系统都被删除了！ <br>
3） mv命令：文件/目录移动命令 <br>
它的语法格式为：mv [选项] 源文件或目录 目标文件或目录 <br>
常用的选项有： <br>
Ø f 如果操作要覆盖某已有的目标文件时不给任何指示 <br>
Ø i 交互式的操作，如果操作要覆盖某已有的目标文件时会询问用户是否覆盖 <br>
mv命令的执行效果与参数类型的不同而不同！ <br>
第一参数（源） 第二个参数（目标） 结果 <br>
文件名 文件名 将源文件名改为目标文件名 <br>
文件名 目录名 将文件移动到目标目录 <br>
目录名 目录名 目标目录已存在：源目录移动到目标目录 <br>
目标目录不存在：改名 <br>
目录名 文件名 出错 <br>
<br>
6. 目录相关操作 <br>
1） 创建新目录：mkdir，它的使用与DOS下的md相同：mkdir 目录名； <br>
2） 删除空目录：rmdir，它的使用与DOS下的rd相同：rmdir 目录名； <br>
3）
改变目录：cd，它的使用与DOS下的cd命令基本相同，唯一一个不同的是，不管目录名是什么，cd与目录名之间必须有空格，也就是：“cd/”、
“cd..”、“cd.”都是非法的，而应该输入：“cd /”、“cd ..”、“cd
.”，如果直接输入命令“cd”，而不加任何参数，将回到这个用户的主目录。 <br>
4） 显示当前目录：pwd <br>
5） 列目录命令：ls，相当于DOS下的dir <br>
它的语法为：ls [选项] [目录或文件] <br>
常用的选项有： <br>
Ø a 显示指定目录下所有的子目录与文件，包括隐藏文件； <br>
Ø c 按文件的修改时间排序 <br>
Ø l 采用长格式来显示文件的详细信息，每个文件一行信息，其内容为：文件类型与权限 链接数 文件属主 文件属组 文件大小 最近修改时间 文件名 <br>
<br>
7. 文件与目录的权限操作 <br>
在Linux系统中，每一个文件和目录都有相应的访问许可权限，我们可以用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为可读、可写和可执行三种，分别以r，w，x表示，其含义为： <br>
r w x <br>
文件 可读 可写 可执行 <br>
目录 可列出目录 可在目录中做写操作 可以访问该目录 <br>
在文件被创建时，文件所有者可以对该文件的权限进行设置。 <br>
对于一个文件来说，可以将用户分成三种，并对其分别赋予不同的权限： <br>
1） 文件所有者 <br>
2） 与文件所有者同组用户 <br>
3） 其它用户 <br>
每一个文件或目录的访问权限都有三组，每组用三位表示，如： <br>
d rwx r-x r-- <br>
第一部分：这里的d代表目录，其它的有：- 代表普通文件 c 代表字符设备文件； <br>
第二部分：文件所有者的权限字，这里为r w x表示可读、可写、可执行 (目录的可执行指的可以进入目录)； <br>
第三部分：与文件所有者同组的用户的权限字，这里为r - x表示可读、不可写、可执行。由于同组用户之间交流较多，让他看看文件，别乱改就行了嘛。 <br>
第四部分：其它用户的权限字，这里为- - -，当然给我无关的人嘛，我的文件当然不但不给你写，也不让你读。 <br>
1） 文件/目录权限设置命令：chmod <br>
这是Linux系统管理员最常用到的命令之一，它用于改变文件或目录的访问权限。该命令有两种用法： <br>
Ø 用包含字母和操作符表达式的文字设定法 <br>
其语法格式为：chmod [who] [opt] [mode] 文件/目录名 <br>
其中who表示对象，是以下字母中的一个或组合： <br>
u：表示文件所有者 <br>
g：表示同组用户 <br>
o：表示其它用户 <br>
a：表示所有用户 <br>
opt则是代表操作，可以为： <br>
+：添加某个权限 <br>
-：取消某个权限 <br>
=：赋予给定的权限，并取消原有的权限 <br>
而mode则代表权限： <br>
r：可读 <br>
w：可写 <br>
x：可执行 <br>
例如：为同组用户增加对文件a.txt的读写权限： <br>
chmod g+rw a.txt <br>
Ø 用数字设定法 <br>
而数字设定法则更为简单：chmod [mode] 文件名 <br>
关键是mode的取值，一开始许多初学者会被搞糊涂，其实很简单，我们将rwx看成二进制数，如果有则有1表示，没有则有0表示，那么rwx r-x r--则可以表示成为： <br>
111 101 100 <br>
再将其每三位转换成为一个十进制数，就是754。 <br>
例如，我们想让a.txt这个文件的权限为： <br>
自己 同组用户 其他用户 <br>
可读 是 是 是 <br>
可写 是 是 <br>
可执行 <br>
那么，我们先根据上表得到权限串为：rw-rw-r--，那么转换成二进制数就是110 110 100，再每三位转换成为一个十进制数，就得到664，因此我们执行命令： <br>
chmod 664 a.txt <br>
2） 改变文件的属主命令：chown <br>
语法格式很简单：chown [选项] 用户名 文件/目录名 <br>
其中最常用的选项是“R”，加上这个参数，可以将整个目录里的所有子目录和文件的属主都改变成指定用户。 <br>
3） 改变文件属组命令：chgrp <br>
该命令也很简单：chgrp 组名 文件名<br>3.3 用户管理 <br>
<br>
用户管理，主要的工作就是建立一个合法的用户帐户、设置和管理用户的密码、修改用户帐户的属性以及在必要时删除已经废弃的用户帐号。 <br>
<br>
1. 增加一个新用户 <br>
在Linux系统中，只有root用户才能够创建一个新用户，如下的命令将新建一个登录名user1的用户。 <br>
# useradd user1 <br>
但是，这个用户还不能够登录，因为还没给它设置初始密码，而没有密码的用户是不能够登录系统的。在默认情况下，将会在/home目录下新建一个与用户名相同的用户主目录。如果需要另外指定用户主目录的话，那么可以使用如下命令： <br>
# useradd -d /home/xf user1 <br>
同时，该用户登录时将获得一个Shell程序：/bin/bash，而假如你不想让这个用户登录，也就可以指定该用户的Shell程序为：/bin/false，这样该用户即使登录，也不能够执行Linux下的命令： <br>
# useradd -s /bin/false user1 <br>
在Linux中，新增一个用户的同时会创建一个新组，这个组与该用户同名，而这个用户就是该组的成员。如果你想让新的用户归属于一个已经存在的组，则可以使用如下命令： <br>
# useradd -g user user1 <br>
这样该用户就属于user组的一员了。而如果只是想让其再属于一个组，那么应该使用： <br>
# useradd -G user user1 <br>
完成了这一操作后，你还应该使用passwd命令为其设置一个初始密码。 <br>
<br>
2. 删除一个用户 <br>
删除用户，只需使用一个简单的命令“userdel 用户名”即可。不过最好将它留在系统上的文件也删除掉，你可以使用“userdel -r 用户名”来实现这一目的。 <br>
<br>
3. 修改用户属性 <br>
在前面我们看到了在新建一个用户的时候如何指定它的用户主目录，如何指定它的Shell，如何设置它所属的组…等等。在Linux中提供了一个命令来实现： <br>
usermod -g组名 -G 组名 -d 用户主目录 -s 用户Shell <br>
还有一种直接的方法，那就是修改/etc/passwd文件，在这个文件中每个用户占用一行，它的内容为： <br>
用户名:密码:用户ID:组ID:用户全名:用户主目录:用户Shell <br>
不过值得注意的是，密码这一项通常是用一个*号代替的，你是看不到的。 <br>
<br>
4. 增加一个组 <br>
还记得Linux的文件可以为同组的人、非同组的人设置不同的访问权限吗？我们可以根据自己的需要创建用户组： <br>
groupadd 组名 <br>
<br>
5. 删除一个组 <br>
同样的，我们有时会需要删除一个组，它的命令就是groupdel 组名。 <br>
<br>
6. 修改组成员 <br>
如果我们需要将一个用户加入一个组，只需编辑/etc/group文件，将用户名写到组名的后面。例如将newuser用户加入到softdevelop组，只需找到softdevelop这一行： <br>
softdevelop:x:506:user1,user2 <br>
然后在后面加上newuser，形成： <br>
softdevelop:x:506:user1,user2,newuser <br>
另外，在Red Hat Linux中还提供一个图形化的用户管理工具：userconf，通过它可以更直接地进行用户管理。<br>
3.4 进程管理 <br>
<br>
Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统；多任务是指Linux可以同时执行几个任务，它可以在还未执行完一个任务时又执行另一项任务。 <br>
在Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程，都可以称之为进程。Linux用分时管理方法使用所有的任务共同分享系统资源。下面我们就看一下如何控制这些进程。 <br>
<br>
1. 启动进程 <br>
在Linux系统中有两种启动进程的方法： <br>
1） 直接输入命令，就将直接启动一个进程 <br>
Ø 在普通情况下，进程将在前台执行，这时我们无法再执行新的命令 <br>
Ø 如果我们在命令之后加上一个“&amp;”，那行进程将会放在后台执行，我们仍然可以执行新的命令 <br>
2） 通过at、cron、crontab命令可以像Windows中的计划任务一样定时启动某个进程，具体的使用方法大家可以使用man 命令名来查询。 <br>
<br>
2. 查看进程 <br>
在Linux系统中，我们可以使用ps命令来查看正在运行的进程例如： <br>
列出属于当前用户的进程： <br>
# ps <br>
PID TTY TIME CMD <br>
16767 pts/1 0:00 ps <br>
18029 pts/1 0:00 bash <br>
其中PID代表进程ID，TTY是该进程是由哪个控制台启动的，CMD则是命令。 <br>
如果你想列出更详细的信息，则可使用命令：“ps -auxw”。 <br>
<br>
3. 终止进程 <br>
一个进程在任务完成之后，将会自动完成。如果要中途中止该进程的话，有两种方法： <br>
1） 对于在前台运行的程序，直接通过组合键CTRL+C就可以中止进程； <br>
2） 而对于在后台运行的程序，则需要通过前面介绍的ps命令找到它的进程号，然后使用“kill 进程号”来终止该进程。 <br>
<br>
<br>
3.5 磁盘管理 <br>
<br>
系统软件和应用软件，都要以文件的形式存储在计算机的磁盘空间中，做为系统管理员应随时监视磁盘空间的使用情况。我们可以使用下面两个命令来实现： <br>
<br>
1. df命令 <br>
df，就是Disk Free，顾名思义就是检查磁盘上还剩下多少空间等信息。下面是一个使用实例： <br>
# df <br>
FileSystem 1k-blocks Used Available Use% Mounted on <br>
/dev/hda5 4134900 1749728 2175124 45% / <br>
/dev/hda6 6048320 5741092 0 100% /home <br>
共显示了6列信息： <br>
1） FileSystem：硬盘分区 <br>
2） 1k-blocks：按K计算的分区大小 <br>
3） Used：已经使用的分区大小（按K计算） <br>
4） Available：还要用的分区大小 <br>
5） Use%：已使用的空间所占百分比 <br>
6） Mounted on：挂接点 <br>
可以看到/home是另一个分区，现在空间已经用完了！这都时当时没有规划好！ <br>
如果对与以K为计算单位表示硬盘空间，那么你可以使用df -m，这样就会以M为计算单位。 <br>
<br>
2. du命令 <br>
du，就是disk usage，就是看一下磁盘使用了多少。下面就是一个使用实例： <br>
# pwd <br>
/var/log <br>
# du <br>
4 ./uucp <br>
776 . <br>
在这里，我们使用du命令列出了/var/log目录所占用的磁盘空间。它统计出了该目录有一个子目录：uucp，占用了4K，而/var/log目录下的文件则共有776K。 <br>
该命令还有一些常用的选项，用来完成更多的功能： <br>
Ø -a 将列出当前目录下所有的文件、子目录、子目录下的文件、子目录下的子目录…的磁盘占用情况 <br>
Ø -b 以字节为单位表示占用的磁盘空间 <br>
Ø -c 在最后显示出一个统计值 <br>
3.6 软件安装 <br>
<br>
在Red Hat Linux下，应用软件的安装包通常有两种格式： <br>
1） rpm包，如software-1.2.3-1.i386.rpm。它是Redhat Linux创造的一种包封装格式。 <br>
2） tar包，如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。 <br>
而且，大多数Linux应用软件包的命名也有一定的规律，它遵循： <br>
名称-版本-修正版-类型 <br>
例如： <br>
sfotware-1.2.3-1.i386.rpm <br>
软件名称：software <br>
版本号：1.2.3 <br>
修正版本：1 <br>
可用平台：i386，适用于Intel 80x86平台。 <br>
类型：rpm，说明是一个rpm包。 <br>
根据Linux应用程序软件安装包中的内容不同可以分为：： <br>
1） 是可执行文件，也就是解开包后就可以直接运行的。在Windows中所有的软件包都是这种类型。安装完这个程序后，你就可以使用。不过下载时要注意这个软件是否是你所使用的平台，否则将无法正常安装。 <br>
2） 另一种则是源程序，也就解开包后，你还需要使用编译器将其编译成为可执行文件。这在Windows系统中是几乎没有的，因为Windows的思想是不开放源程序的。 <br>
通常，用tar打包的，都是源程序；而用rpm打包的则常是可执行程序。 <br>
<br>
1.搞定使用rpm打包的应用软件 <br>
rpm可谓是Redhat公司的一大贡献，它使Linux的软件安装工作变得更加简单容易。 <br>
1） 安装： <br>
我只需简单的一句话，就可以说完。执行： <br>
rpm -ivh rpm软件包名 <br>
更高级的，请见下表： <br>
rpm参数 参数说明 <br>
-i 安装软件 <br>
-t 测试安装，不是真的安装 <br>
-p 显示安装进度 <br>
-f 不管任何错误 <br>
-U 升级安装 <br>
-v 检测套件是否正确安装 <br>
这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。 <br>
2） 卸载： <br>
我同样只需简单的一句话，就可以说完。执行： <br>
rpm -e 软件名 <br>
不过要注意的是，后面使用的是软件名，而不是软件包名。例如，要安装software-1.2.3-1.i386.rpm这个包时，应执行： <br>
rpm -ivh software-1.2.3-1.i386.rpm <br>
而当卸载时，则应执行： <br>
rpm -e software。 <br>
<br>
2． 搞定使用tar打包的应用软件 <br>
1） 安装： <br>
整个安装过程可以分为以下几步： <br>
Ø 取得应用软件：通过下载、购买光盘的方法获得； <br>
Ø 解压缩文件：一般tar包，都会再做一次压缩，如gzip、bz2等，所以你需要先解压。如果是最常见的gz格式，则可以执行：“tar
-xvzf 软件包名”，就可以一步完成解压与解包工作。如果不是，则先用解压软件，再执行“tar -xvf 解压后的tar包”进行解包； <br>
Ø 阅读附带的INSTALL文件、README文件； <br>
Ø 执行“./configure”命令为编译做好准备； <br>
Ø 执行“make”命令进行软件编译； <br>
Ø 执行“make install”完成安装； <br>
Ø 执行“make clean”删除安装时产生的临时文件。 <br>
好了，到此大功告成。我们就可以运行应用程序了。但这时，有的读者就会问，我怎么执行呢？这也是一个Linux特色的问题。其实，一般来说，Linux的
应用软件的可执行文件会存放在/usr/local/bin目录下！不过这并不是“放四海皆准”的真理，最可靠的还是看这个软件的INSTALL和
README文件，一般都会有说明。 <br>
2） 卸载： <br>
通常软件的开发者很少考虑到如何卸载自己的软件，而tar又仅是完成打包的工作，所以并没有提供良好的卸载方法。一般都提供 make uninstall 来卸载软件的。 <br>
。<br><br>第4章 X Windows<br>
<br>
4.1 X Windows简介 <br>
要想成为一套优秀的操作系统，除了性能稳定、功能齐全之外，还应该拥有一个友好的操作系统，否则只会呆在研究室里，难以普及。 <br>
在UNIX系统下，大多都是采用X Window做为图形界面的。1984年，麻省理工学院与DEC制定了Athena计划，这就是X Window
第一个版本。1988年1月成立了一个非盈利性的X联盟，负责制定X Window的标准。在Linux出现后，Xfree86 Project
Inc.基于Linux实现了一个开源的X Window系统：XFree86。 <br>
X Window与其他的图形界面系统相比，有几个特点： <br>
Ø 良好的网络支持：X Window采用了C/S网络结构，程序间可以通过网络来通信，而且有良好的网络透明性，也就是说用户不需知道程序在使用远端主机资源。 <br>
Ø 个性化的窗口界面：X Window并未对窗口界面作统一性的规范，程序员可以根据需求自行设计，其中最有名的就是后面要介绍的GNOME与KDE。 <br>
Ø 不内嵌于操作系统：X Window只定义了一个标准，而不属于某个操作系统，因此可在不同的操作系统上运行相同的X Window软件。 <br>
整个X Window由三个部分组成： <br>
Ø X Server：主要是控制输出及输入设备的程序，并维护相关资源，它接收输入设备的信息，并将其传给X Client，而将X
Client传来的信息输出到屏幕上。所以不同的显卡就需要选择不同的X Server，在配置X Window时最主要的就是配置X Server <br>
Ø X Client：它才是应用程序的核心部分，它是与硬件无关的，每个应用程序就是一个X Client <br>
Ø X protocol：X Client与X Server之间的通信语言就是X protocol <br>
为了使得X Window更加易于使用，各个不同的公司与组织都针对其做了许多集成桌面环境。如AIX上的CDE，SUN的OpenServer，而在Linux下则主要是GNOME与KDE的双雄会。下面我们就一起来了解一下它们。 <br>
<br>
4.2 GNOME简介 <br>
GNOME最初是由墨西哥的程序设计师Miguel De Icazq发起的，它受到了Red Hat公司的大力支持。它现在属于GNU（GNU is
Not UNIX）计划的一部分，主要目的是希望能够为用户提供一个完整、易学易用的桌面环境，并为程序设计师提供强大的应用程序开发环境。 <br>
1997年8 月，为了克服KDE所遇到的QT许可协议和单一C++依赖的困难，以墨西哥的Miguel de
Icaza为首的250程序员就开始了一个新项目，完全从头开始，这就是GNOME。经过14个月的共同努力，终于完成了这个工程。现在GNOME已得到
了占Linux 市场份额最大发行商Red Hat
的支持，拥有了大量应用软件，包括文字处理软件Go，电子表格软件Gnumeric，日历程序GNOMEcal，堪与PhotoShop
媲美的图形图像处理软件Gimp 等。 <br>
现在GNOME与KDE成为了两大竞争阵营，必将使得Linux更加易于使用。 <br>
GNOME中还提供了大量的应用软件，它们都放在GNOME的“开始”（一个小脚丫）à Programs中，包括了许许多多的应用软件，下面就是其中的一些： <br>
1. Applications：应用软件 <br>
1） Dia：一个工程图编辑器，适用于绘制电路图； <br>
2） Calendar：一个集日历与日程表于一身的好工具； <br>
3） Address Book：一个通讯录 <br>
4） GEdit：一个功能类似于Windows下的记事本的文本编辑器； <br>
5） Gnumeric：Linux下的一个类似于EXCEL的电子表格软件； <br>
6） Time tracking tools：一个用于提醒时间的小工具； <br>
<br>
2. Games：游戏软件 <br>
1） Gnome Milnes：GNOME下的扫雷； <br>
2） Gnibbles：贪吃蛇游戏； <br>
3） Freecell：Windows下的空当接龙游戏； <br>
<br>
3. Graphics：图形处理软件 <br>
1） Electric Eyes：一个十分优秀的图形处理软件，可谓GNOME下的AcdSee呀！ <br>
2） XPDF：一个在Linux阅读PDF文档的工具； <br>
3） The Gimp：一个十分优秀的绘图软件，与Photoshop很象！ <br>
<br>
4. Internet：Internet应用软件 <br>
1） Dialup Configuration Tool：一个界面十分友好的拔号上网设置工具； <br>
2） gFTP：一个FTP客户端 <br>
3） pine：一个E-Mail客户端软件 <br>
4） Netscape ：大名鼎鼎的浏览器软件，被微软从Windows平台挤下来的 <br>
5） RH Network monitor：网络流量显示 <br>
<br>
5. Multimedia：多媒体软件 <br>
1） Audio Mixer：声音控制器 <br>
2） CD Player：CD播放器 <br>
3） XMMS：与Winamp是一个模子里出来的 <br>
<br>
<br>
4.3 KDE简介 <br>
KDE项目在1996年10月发起的，其目的是在X-Window上建立一个完整易用的桌面环境。KDE现在除了拥有KFM(类似于IE4.0)、
KPresenter(类似PowerPoint)、KIllustrator(类似CorelDraw或
Illustrator)等重量级软件，还有体贴用户的GUI配置软件可以帮助用户配置Unix/Linux，使其深受使用者欢迎。 <br>
但由于KDE是基于由TrollTech公司开发的Qt程序库的，所以也受到了许多批评。虽然Qt本身作为一基于C++的跨平台开发工具是非常优秀，但可
惜的是它不是自由软件。Qt的License允许任何人使用Qt编写免费软件及免费拷贝给其他用户使用，但如果利用Qt编写非免费软件则需要购买他们的
License。更重要的是任何人都不可以随意修改Qt源代码。如果TrollTech公司更改Qt
License、公司倒闭或给人收购等都会令KDE前功尽弃。 <br>
在KDE中，也有许许多的应用软件，它们被分组放在“开始”（一个K字）菜单中，说实在的，我感觉KDE的软件应用比GNOME更多，图形界面也更好。 <br>
1. Office：办公软件 <br>
这就是大名鼎鼎的Koffice套件。 <br>
1） Kword：字处理软件 <br>
2） Kspread：象Excel的电子表格处理软件 <br>
3） Kpresenter：一个类似于PowerPoint的演示软件 <br>
4） Kchart：一个电子图表软件 <br>
5） Kiiiustrator：一个电子出版软件 <br>
<br>
2. Develop：开发工具 <br>
1） Kdevelop：一个KDE下的集成开发环境 <br>
<br>
3. Applications：应用软件 <br>
1） Advanced Editor：一个增强型的文本编辑软件 <br>
2） Emacs：这是一个功能强大的编辑软件，在GNOME中也有，它的原形是字符终端下的Emacs <br>
3） Organizer：一个日程安排软件 <br>
<br>
4. Internet：Internet软件 <br>
1） Kppp：一个十分友好的拔号上网配置工具 <br>
2） Kmail：一个十分漂亮的Email 客户端，有点象Outlook！ <br>
3） Chat Client：一个IRC客户端 <br>
4） KPPPLoad：一个网络流量工具 <br>
5） Netscape：大名鼎鼎的WEB浏览器，在GNOME中也有集成 <br>
<br>
4.4 使用窗口管理器 <br>
Red Hat Linux 7.1默认安装后，X Window将使用GNOME做为窗口管理器，除非你在安装时将GNOME去掉，而选择了KDE包。通常我们可以将这两个包都安装上，到使用的时候再选择。 <br>
1） 在字符终端下执行以下命令，则以后X Window的窗口管理器都成了KDE： <br>
# switchdesk KDE <br>
2） 如果你又不想使用KDE了，则可以使用以下命令转回GNOME： <br>
# switchdesk GNOME <br>
4.5 汉化Red Hat Linux 7.1 <br>
1.安装 TrueType 字体 <br>
要在系统里使用中文TrueType字体,最好先禁用xfs字体服务器, xfs在启动时会自动更新字体目录下的fonts.dir文件，这样会影响到我们所作的修改。 <br>
以root身份登陆，然后执行setup工具，在Service中关闭xfs。 <br>
1）修改XF86Config-4 配置文件 <br>
进入/etc/X11目录，用vi编辑XF86Config-4文件，如下进行相应的修改： <br>
<br>
Section "Files" <br>
# FontPath "unix/:7100" ;注释掉这一行,加入下面的几行 <br>
FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" <br>
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" <br>
FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" <br>
FontPath "/usr/X11R6/lib/X11/fonts/misc" <br>
FontPath "/usr/X11R6/lib/X11/fonts/Type1" <br>
FontPath "/usr/X11R6/lib/X11/fonts/Speedo" <br>
FontPath "/usr/X11R6/lib/X11/fonts/75dpi" <br>
FontPath "/usr/X11R6/lib/X11/fonts/100dpi" <br>
FontPath "/usr/X11r6/lib/X11/fonts/TrueType" <br>
EndSection <br>
<br>
Section "Module" <br>
Load "dbe" # Double-buffering <br>
Load "GLcore" # OpenGL support <br>
Load "dri" # Direct rendering infrastructure <br>
Load "glx" # OpenGL X protocol interface <br>
Load "extmod" # Misc. required extensions <br>
Load "v4l" # Video4Linux <br>
Load "xtt" ;加入这一行 <br>
EndSection <br>
2）获取字体文件simsun.ttf <br>
新建一个目录：/usr/X11R6/lib/X11/fonts/TrueType ，然后将Windows所在的分区mount上来，然后将simsum.ttf复制到该目录。 <br>
3）生成字体列表 <br>
cd /usr/X11R6/lib/X11/fonts/TrueType <br>
# ttmkfdir&gt;fonts.dir <br>
# vi fonts.dir 修改字体列表文件,使其与下面类似 <br>
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-ascii-0 <br>
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15 <br>
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1 <br>
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0 <br>
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-koi8-r <br>
#cp fonts.dir fonts.scale <br>
4）修改 gtk 的字体定义 <br>
# vi /etc/gtk/gtkrc.zh_CN <br>
修改后的内容如下: <br>
style "gtk-default-zh-cn" { <br>
fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-*-*" <br>
} <br>
class "GtkWidget" style "gtk-default-zh-cn" <br>
<br>
2.安装中文输入法Chinput 3.0.1 <br>
1）首先下载以下几个软件包： <br>
Chinput-3.0.1-1.i386.rpm <br>
pth-1.3.7-3.i386.rpm <br>
unicon2-im.tar.gz <br>
2）然后安装： <br>
# rpm -ivh pth-1.3.7-3.i386.rpm <br>
# rpm -ivh Chinput-3.0.1-1.i386.rpm --nodeps <br>
# cp unicon2-im.tar.gz /usr/lib <br>
# cd /usr/lib <br>
# tar vfxz unicon2-im.tar.gz <br>
# rm unicon2-im.tar.gz <br>
# ln -s libstdc++-2-libc6.1-1-2.9.0.so libstdc++-libc6.1-2.so.3 <br>
3）修改Chinput的一些配置 <br>
# cd /usr/lib/ZWinPro <br>
# vi Chinput.ad 修改以下几个地方 <br>
... <br>
chinput.gblocale=zh_CN.gb2312 <br>
chinput.big5locale=zh_CN.gb2312 <br>
... <br>
chinput.gbfont=-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0 <br>
chinput.big5font=-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0 <br>
... <br>
(注意:在这个文件里不能出现空格,只能用 Tab 代替) <br>
4）修改~/.bashrc文件，新增以下几行： <br>
export LC_ALL=zh_CN.GB2312 <br>
export LANG=zh_CN.GB2312 <br>
export XMODIFIERS=@im=Chinput <br>
<br>
3.汉化 GNOME <br>
重启后，执行startx时，你在GNOME中就可以显示中文了。紧接着，你可以通过在Program-&gt;设定-&gt;Session-&gt;
Startup Programs里面把chinput加入启动运行程序里面就完成了 GNOME的中文环境和输入法的安装了。 <br>
<br>
4.汉化 KDE <br>
如果是KDE系统，则打开 Preferences-&gt;Personalization-&gt;Country &amp;
Language，选择中文，再打开 Look &amp;
Feel-&gt;Fonts，选择相应的字体，并把字符集改成gb2312.1980-0。最后再打开桌面上的 Autostart
目录,新建一个应用程序( Chinput )的连接，以后每次启动后就可以使用中文输入法了.<br><br><br>第5章：网络应用 <br>
<br>
5.1 常用网络命令 <br>
在Red Hat Linux 7.1系统提供了与网络相关的工具，掌握好这些工具是十分必要的： <br>
第一类：设置工具 <br>
1.netconf： <br>
netconf是Red Hat
Linux提供的Linuxconf的一部分，主要用于设置与网络相关的参数。它可以在consle下运行（文本菜单），也可以在X-Window中运行
（图形界面）。在前面，我们介绍过了netconf的一些应用，它的使用比较简单，只要认识上面的英文就可以了，所以在此就不再多说。BTW，如果你设置
好了X-Window的话，用用图形界面的netconf，会更漂亮的哟。 <br>
2.ifconfig <br>
ifconfig是Linux系统中最常用的一个用来显示和设置网络设备的工具。其中“if”是“interface”的缩写。它可以用来设备网卡的状态，或是显示当前的设置。 <br>
下面我们简单地说明常用的命令组合： <br>
1） 将第一块网卡的IP地址设置为192.168.0.1： <br>
ifconfig eth0 192.168.0.1 （格式：ifconfig 网络设备名 IP地址） <br>
2） 暂时关闭或启用网卡： <br>
关闭第一块网卡：ifconfig eth0 down <br>
启用第一块网卡：ifconfig eth0 up <br>
3） 将第一块网卡的子网掩码设置为255.255.255.0： <br>
ifconfig eth0 netmask 255.255.255.0（格式：ifconfig 网络设备名 netmask 子网掩码） <br>
我们也可以同时设置IP地址和子网掩码： <br>
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 <br>
4） 将第一块网卡的广播地址设置为192.168.0.255： <br>
ifconfig eth0 -broadcast 192.168.0.255 <br>
5） 将第一块网卡设置为不接收多播数据包： <br>
ifconifg eth0 allmulti <br>
如果要让其接收，则使用命令：ifconfig eth0 -allmulti <br>
6） 查看第一块网卡的状态： <br>
ifconfig eth0 <br>
如果要查看所有的网卡状态，则直接使用不带参数的ifconfig命令即可。 <br>
ifconfig输出的状态信息是十分有用的，下面，我们就简单说明一下： <br>
有几个状态比较重要： <br>
Ø UP/DOWN：网卡是否启动了，如果是DOWN的话，那肯定无法用的； <br>
Ø RX packets中的errors包的数量如果过大说明网卡在接收时有问题； <br>
Ø TX packets中的errors包的数量如果过大说明网卡在发送时有问题； <br>
3.route <br>
route命令是用来查看和设置Linux系统的路由信息，以实现与其它网络的通讯。要实现两个不同的子网之间的网络通讯，需要一台连接两个网络路由器或者同时位于两个网络的网关来实现。 <br>
在Linux系统中，我们通常设置路由是为了解决以下问题：该Linux机器在一个局域网中，局域网中有一个网关，能够让你的机器访问Internet，那么我们就需要将这台机器的IP地址设置为Linux机器的默认路由。 <br>
1） 增加一个默认路由： <br>
route add 0.0.0.0 gw 网关地址 <br>
2） 删除一个默认路由： <br>
route del 0.0.0.0 gw 网关地址 <br>
3） 显示出当前路由表 <br>
route <br>
第二类：诊断工具 <br>
1.ping <br>
ping是一个最常用的检测是否能够与远端机器建立网络通讯连接。它是通过Internet控制报文协议ICMP来实现的。而现在有些主机对ICMP进行过滤，在这种特殊的情况下，有可能使得一些主机Ping不通，但能够建立网络连接。这是一种特例，在此事先说明。 <br>
同样的，在此不罗列ping命令的所有可选参数，而是通过实例来说明一些常用的组合，需要更详细地了解的，可以通过<a target="_blank" href="http://www.linuxaid.com.cn%e7%bd%91%e7%ab%99%e5%9c%a8%e7%ba%bf%e5%9f%b9%e8%ae%ad%e7%9a%84%e5%91%bd%e4%bb%a4%e6%9f%a5%e8%af%a2%e5%b7%a5%e5%85%b7%e8%8e%b7%e5%be%97%e3%80%82/">http://www.linuxaid.com.cn网站在线�...畈檠ぞ呋竦谩�</a> <br>
1） 检测与某机器的连接是否正常： <br>
ping 192.168.0.1 <br>
ping <a target="_blank" href="http://www.linuxaid.com.cn/">www.linuxaid.com.cn</a> <br>
也就是说，我们可以用IP地址或域名来指定机器。 <br>
2） 指定ping回应次数为4： <br>
在Linux下，如果你不指定回应次数，ping命令将一直不断地向远方机器发送ICMP信息。我们可以通过-c参数来限定：ping -c 4 192.168.0.1 <br>
3） 通过特定的网卡进行ping： <br>
有时，我们需要检测某块网卡（系统中有多块）能否ping通远方机器。我们需要在执行ping命令时指出： <br>
ping -I eth0 192.168.0.1 <br>
2.traceroute <br>
如果你ping不通远方的机器，想知道是在什么地方出的问题；或者你想知道你的信息到远方机器都经过了哪些路由器，可以使用traceroute命令。顾名思义：trace是跟踪，route是路由，也就是跟踪路由。 <br>
使用这个命令很简单： <br>
traceroute 远程主机IP地址或域名 <br>
这个命令的输出类似： <br>
1 路由器（网关）的IP地址 访问所需时间1 访问所需时间2 访问所需时间3 <br>
2 路由器（网关）的IP地址 访问所需时间1 访问所需时间2 访问所需时间3 <br>
……… <br>
1） 最前面的数字代表“经过第几站”； <br>
2） 路由器（网关）的IP地址就是“该站”的IP地址； <br>
3） 访问所需时间1、2、3是指访问到这个路由器（网关）需要的时间。 <br>
<br>
3.netstat <br>
在Linux系统中，提供了一个功能十分强大的查看网络状态的工具：netstat。它可以让您得知整个Linux系统的网络情况。 <br>
1）统计出各网络设备传送、接收数据包的情况： <br>
使用命令：netstat -i <br>
这个命令将输出一张表，其中包括： <br>
Iface：网络接口名 MTU：最大传输单元 <br>
RX-OK：共成功接收多少个包 RX-ERR：接收的包中共有多少个错误包 <br>
RX-DRP：接收时共丢失多少个包 RX-OVR：共接收了多少个碰撞包 <br>
TX-OK：共成功发送多少个包 TX-ERR：发送的包中共有多少个错误包 <br>
TX-DRP：发磅时共丢失多少个包 TX-OVR：共接收了多少个碰撞包 <br>
2）显示网络的统计信息 <br>
使用命令：netstat -s <br>
使用这个命令，将会以摘要的形式统计出IP、ICMP、TCP、UDP、TCPEXT形式的通信信息。 <br>
3）显示出TCP传输协议的网络连接情况： <br>
使用命令：netstat -t <br>
这个命令的输出也是一张表，其中包括： <br>
Local Address：本地地址，格式是IP地址：端口号 <br>
Foreign Address：远程地址，格式也是IP地址：端口号 <br>
State：连接状态，包括LISTEN、ESTABLISHED、TIME_WAIT等。 <br>
4）只显示出使用UDP的网络连接情况： <br>
使用命令：netstat -t <br>
输出格式也是一样的。 <br>
5）显示路由表： <br>
使用命令：netstat -r <br>
这个命令的输出与route命令的输出相同。 <br>
<br>
5.2 网络配置文件 <br>
在Red Hat Linux 7.1中有一些用于存放网络配置的文件： <br>
1./etc/hosts <br>
在该文件中存放的是一组IP地址与主机名的列表，如果在该列表中指出某台主机的IP地址，那么访问该主机时将无需进行DNS解析。 <br>
2./etc/host.conf <br>
该文件用来指定域名解析方法的顺序，如： <br>
order hosts,bind <br>
它说明，首先通过/etc/hosts文件解析，如果在该文件中没有相应的主机名与IP地址的对应关系，再通过域名服务器bind进行解析。 <br>
3./etc/resolv.conf <br>
在该文件中存放域名服务器的IP地址。 <br>
4./etc/protocols <br>
Red Hat Linux 7.1系统使用该文件辨别本主机使用的，并通过它完成协议和协议号之间的映射，用户不应修改该文件。 <br>
5./etc/services <br>
该用户用于定义现有的网络服务，用户无需修改它，它通常由安装网络服务的程序来维护。该文件包括网络服务名、网络端口号和使用的协议类型，其中网络端口号和使用的协议类型之间有一个斜杠分开，在设置行的最后还可以添加一些服务的别名。 <br>
5./etc/xinetd.d目录 <br>
在Linux系统中有一个超级服务程序inetd，大部分的网络服务都是由它启动的，如chargen、echo、finger、talk、
telnet、wu-ftpd等…，在7.0之间的版本它的设置是在/etc/inetd.conf中配置的，在Red Hat
7.0后，它就改成了一个xinetd.d目录。 <br>
在xinetd.d目录中，每一个服务都有一个相应的配置文件，我们以telnet为例，说明一下各个配置行的含义： <br>
service telnet <br>
{ <br>
socket_type=stream <br>
wait=no <br>
user=root <br>
server=/usr/sbin/in.telnetd <br>
log_on_failure+=USERID <br>
disable=yes <br>
} <br>
第一行，说明该配置用来设置telnet服务。 <br>
第二行，说明Socket连接类型是stream，也就是TCP <br>
第三行，是指不等待到启动完成 <br>
第四行，是指以root用户启动服务进程 <br>
第五行，是指服务进程是/usr/sbin/in.telnetd <br>
第六行，是用于做一些出错日志 <br>
第七行，是指禁止远方telnet，如果需要开放则将该配置改为：disable=no <br>
修改了xinetd的配置，需要重启xinetd才能够生效，有两种方法可以实现： <br>
1） 执行如下命令： <br>
/etc/rc.d/init.d/xinetd restart <br>
2） 执行如下命令： <br>
killall -HUP xinetd <br>
<br>
5.3 网络服务访问限制 <br>
在Red Hat Linux
7.1中加强了网络安全的防范，如果你安装时安全等级不是在最低一级的话，那么本机之外的所有访问都可能被拒绝。这是因为在Red Hat
7.1中做了一些默认的ipchains设置，这是Linux内置的防火墙机制，它可以使用一些规则来允许或禁止某种访问。 <br>
它的规则存放在/etc/sysconfig/ipchains文件中，如果你想让它暂时不生效，那你可以运行/etc/rc.d/init.d/ipchains stop，那么所有的规则都被取消，所有的网络访问都将被允许。 <br>
你可以运行/etc/rc.d/init.d/ipchains status来获知现在对网络访问的限制。关于这方面的知识，本文限于篇幅无法详细介绍，有兴趣的读者可参考《Linux防火墙》一书。 <br>
<br>
5.4 WEB服务器 <br>
在Linux系统中最适合于做服务器的当数Apache，Red Hat Linux 7.1中集成了Apache 1.3.19版，你只要在安装时选中WEB服务器，那么系统将自动完成Apache服务器的安装，在默认情况，WWW服务就已经启动了。 <br>
如果你在安装时没有选择WEB服务器包，那也没有关系，你只需执行以下命令即可： <br>
1） 将Red Hat Linux 7.1安装光盘的第一张放入光驱，然后执行如下命令： <br>
# mount /mnt/cdrom <br>
2） 转到apache安装文件所在目录： <br>
# cd /mnt/cdrom/RedHat/RPMS <br>
3） 使用RPM完成安装： <br>
# rpm -ivh apache-1.3.19-5.i386.rpm <br>
现在，你就已经拥有一个基于Linux的WEB服务器了，它的配置文件位于/etc/httpd/conf目录下，你可根据需要进行相应的修改，修改完后
执行：/etc/rc.d/init.d/httpd
restart即可。而WEB服务的主目录则在/var/www/html目录下，你可以将你的WEB页传到这里就可以更新了。 <br>
而如果每一个用户都想要拥有一个自己的主页的话，则： <br>
1） 首先在自己的用户主目录下建一个public_html目录： <br>
# cd <br>
# mkdir public_html <br>
2） 然后将自己的用户主目录的权限改为大家可读 <br>
# chmod 755 用户主目录 <br>
3） 这样你就可以使用“localhost/~用户名/”访问到每个用户的主页了。 <br>
5.5 FTP服务器 <br>
在Red Hat Linux 7.1中集成了Wu-FTP 2.6.1做为FTP服务器，在你安装时只要选择了FTP包的话，那么你的Linux服务器就是一台FTP服务器了，如果当时没有安装的话，也没有关系，跟安装apache一样： <br>
1） 将Red Hat Linux 7.1安装光盘的第一张放入光驱，然后执行如下命令： <br>
# mount /mnt/cdrom <br>
2）转到wu-ftp安装文件所在目录： <br>
# cd /mnt/cdrom/RedHat/RPMS <br>
3）使用RPM完成安装： <br>
# rpm -ivh wu-ftp-2.6.1-16.i386.rpm <br>
由于FTP服务是由xinetd超级服务器创建的，所以关于FTP服务器的配置在/etc/xinetd.d目录下的wu-ftpd文件中： <br>
service ftp <br>
{ <br>
socket_type=stream <br>
wait=no <br>
user=root <br>
server=/usr/sbin/in.ftpd <br>
server_args=-l -a <br>
log_on_success+=DURATION USERID <br>
log_on_failure+=USERID <br>
nice=10 <br>
disable=no <br>
} <br>
下面，我们介绍一些关于FTP服务器的管理方法： <br>
1、 暂时关闭FTP服务 <br>
有两种方法可以使FTP服务暂停： <br>
1） 以root用户身份执行： <br>
# ftpshut now <br>
这样就会在/etc目录下生成一个shutmsg的文件，这时FTP服务器将无法使用，直到你删掉这个文件。 <br>
2） 修改配置文件/etc/xinetd.d/wu-ftpd，将disable=no改为disable=yes，然后重启xinetd。 <br>
2、 禁止某用户使用FTP服务 <br>
有两种方法可以禁止某用户使用FTP服务器： <br>
1） 在/etc/ftpuser中写入该用户帐号名 <br>
2） 在/etc/ftpaccess中写入一行配置： <br>
deny-uid 用户名 <br>
用这种方法还可以禁止一个组的用户使用 <br>
deny-gid 组名 <br>
3、 禁止匿名用户（anonymous）登录FTP服务器 <br>
有许多种方法可以实现，但我觉得最简单有效的方法就是将anonymous写入配置文件：/etc/ftpuser中，就可了。 <br>
<br>
5.6 文件服务器 <br>
我们还可以使用Red Hat Linux 7.1内置的Samba为局域网内的Windows主机做文件服务器。如果在安装系统时选择了SMB服务器软件包的话，那么安装完以后，Samba服务就已经Ready了。 <br>
不过为了方便配置，建议安装一下swat，它提供了一个WEB界面的配置工具。它的安装包是第二张光盘的/RedHat/RPMS/samba-swat-2.0.7-36.i386.rpm。 <br>
安装完以后，它会在xinetd.d目录中新建一个swat文件，其内容为： <br>
service swat <br>
{ <br>
port=901 <br>
socket_type=stream <br>
wait=no <br>
only_from=127.0.0.1 <br>
server=/usr/sbin/swat <br>
log_on_failure+=USERID <br>
disable=yes <br>
} <br>
我们看到disable的值是yes，也就是说，现在swat还没有启用，因此，我们需要将其改为disable=no，然后重启xinted。另外，由于这里有一句： <br>
only_from=127.0.0.1 <br>
说明只能在本机使用swat，而如果你想在Windows中用IE来配置的话，请将这句注释掉或删掉。 <br>
下面，我们以设置一个大家都可以访问的homes目录为例，说明SWAT的设置方法： <br>
1） 打开IE浏览器，在地址栏上输入Linux的主机名或IP以及“:901”，例如： <br>
<a target="_blank" href="http://192.168.0.1:901/">http://192.168.0.1:901</a> <br>
2） 如果连接正常，将出一个登录提示窗，要求输入用户名与密码，在此以root为用户名，并输入root用户的密码，再单击确定； <br>
3） 如果输入无误，将出现Samba的配置界面：Swat的首页； <br>
我们可以看到在Swat界面中，最上面有7个图标，分别是：HOME（首页）、GLOBALS（全局设置）、SHARES（共享设置）、PRINTERS（打印机）、STATUS（状态）、VIEW（查看）、PASSWORD（密码） <br>
4） 首先，我们单击GLOBALS图标，将出现GLOBALS设置页面，其中我们对以下几项进行设置： <br>
Ø BaseOption à Workgroup：在些输入工作组名（如NetBIOS中的工作组名） <br>
Ø BaseOption à Netbios name：主机名 <br>
Ø SecurityOption à Security：选择安全等级，在些选择“SHARE” <br>
Ø SecurityOption à hosts allow：允许的主机，通常写入你的网络号，如192.168.0. <br>
Ø SecurityOption à hosts deny：如果你不让某台机器使用，则写入它的IP地址 <br>
修改完后，点击“Commit Changes”按钮（在7个图标的下边一些），保存设置。 <br>
5） 然后，单击SHARES图标，进行共享设置： <br>
第一步：在Create Share按钮的右边文本框中输入要设置的共享名 <br>
第二步：单击“Create Share”按钮； <br>
第三步：确认“BaseOptions à Path的值为你想共享的目录，例如/home/smb/test（注意这必须是已经存在的目录）； <br>
第四步：将“SecurityOptions à writeable”的值设置为Yes，使该目录共享为可写； <br>
第五步：将“SecurityOptions à guest ok”的值设置为Yes，使该目录无需密码访问； <br>
第六步：在“SecurityOptionsàhosts allow、hosts deny”中设置相应的主机IP； <br>
第七步：将“BrowseOptionsàbrowseable”设置为Yes，使其便于使用 <br>
最后，点击“Commit Changes”按钮，保存设置。 <br>
现在，我们就可以在Windows 9x上通过网络邻居访问到这台Samba服务器，并且有一个可读、可写的共享目录。 <br>
在平时使用的时间，系统管理员可以点击“STATUS”按钮，切换到状态页面对其进行监测，在这个页面上，你可以： <br>
1） 启动（Start smbd按钮）、停止Samba（Stop Smbd按钮）服务，以及重启服务（Restart smbd按钮）； <br>
2） 另外，你可以看到当前与Samba服务器建立的连接（Active Connections），并且可以按下“X”按钮，中止它的访问； <br>
3） 同时你还可以检测到正在访问的文件夹（Active Shares），正打开的文件（Open Files）。 <br>
Samba服务还可以对用户进行认证，与Window NT域进行集成等强大的功能，在些限于篇幅就不详细介绍，有兴趣的读者可以参考《实战Samba》一书。<br><br></div>
<img src ="http://www.blogjava.net/westwin/aggbug/8700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:02 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(原创)判断字符串是不是GB2312?</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8699.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8699.html</trackback:ping><description><![CDATA[<p>对于gb2312来讲,首字节码位从0×81至0×FE，尾字节码位分别是0×40至0×FE,所以 ：</p>

<p>&nbsp;public boolean isGB2312(String str){<br>&nbsp;&nbsp; &nbsp;char[] chars=str.toCharArray();<br>&nbsp;&nbsp; &nbsp;boolean isGB2312=false;<br>&nbsp;&nbsp; &nbsp;for(int i=0;i&lt;chars.length;i++){<br>&nbsp;&nbsp; &nbsp;&nbsp;byte[] bytes=(""+chars[i]).getBytes();<br>&nbsp;&nbsp; &nbsp;&nbsp;if(bytes.length==2){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int[] ints=new int[2];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ints[0]=bytes[0]&amp; 0xff;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ints[1]=bytes[1]&amp; 0xff;<br>&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if(ints[0]&gt;=0x81 &amp;&amp; ints[0]&lt;=0xFE
&amp;&amp; ints[1]&gt;=0x40 &amp;&amp; ints[1]&lt;=0xFE){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;isGB2312=true;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;return isGB2312;</p>

<p>}</p>
<img src ="http://www.blogjava.net/westwin/aggbug/8699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:01 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)Runtime.exec()的陷阱</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:00:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8698.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8698.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: When Runtime.exec() won't                              Navigate yourself around pitfalls related to the Runtime.exec() method                                                Summary-->...&nbsp;&nbsp;<a href='http://www.blogjava.net/westwin/archive/2005/07/29/8698.html'>阅读全文</a><img src ="http://www.blogjava.net/westwin/aggbug/8698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:00 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)checked exception VS unchecked exception</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8697.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8697.html</trackback:ping><description><![CDATA[<table align="center" border="0" cellpadding="0" cellspacing="0" width="760">
<tbody><tr><td class="title" align="center" height="56" valign="middle"><b>Java语言中两种异常的差别</b></td></tr><tr><td class="formtitle" align="center" height="40">eugene 翻译 来源：Yesky</td></tr></tbody>
</table>
　
　Java提供了两类主要的异常：runtime exception和checked exception。所有的checked
exception是从java.lang.Exception类衍生出来的，而runtime
exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 
<div>　　它们的不同之处表现在两方面：机制上和逻辑上。<br><br>　　<b>一、机制上</b><br><br>　　它们在机制上的不同表现在两点：1.如何定义方法；2. 如何处理抛出的异常。请看下面CheckedException的定义：<br>public class CheckedException extends Exception<br>{<br>　public CheckedException() {}<br>　public CheckedException( String message )<br>　{<br>　　super( message ); <br>　}<br>}</div>
<div>以及一个使用exception的例子：</div>
<div>public class ExceptionalClass<br>{<br>　public void method1() <br>　　throws CheckedException <br>　　{<br>　　　// ... throw new CheckedException( "...出错了" );<br>　　}<br>　public void method2( String arg )<br>　　{<br>　　　if( arg == null ) <br>　　　{<br>　　　　throw new NullPointerException( "method2的参数arg是null!" );<br>　　　}<br>　　}<br>　public void method3() throws CheckedException<br>　　{<br>　　　method1(); <br>　　}<br>}</div>
<div>　
　你可能已经注意到了，两个方法method1()和method2()都会抛出exception，可是只有method1()做了声明。另外，
method3()本身并不会抛出exception，可是它却声明会抛出CheckedException。在向你解释之前，让我们先来看看这个类的
main()方法：<br>public static void main( String[] args )<br>{<br>　ExceptionalClass example = new ExceptionalClass();<br>　try <br>　{<br>　　example.method1(); <br>　　example.method3();<br>　}<br>　catch( CheckedException ex ) { } example.method2( null );<br>}</div>
<div>　　在main()方法中，如果要调用method1()，你必须把这个调用放在try/catch程序块当中，因为它会抛出Checked exception。<br><br>　
　相比之下，当你调用method2()时，则不需要把它放在try/catch程序块当中，因为它会抛出的exception不是checked
exception，而是runtime exception。会抛出runtime
exception的方法在定义时不必声明它会抛出exception。<br><br>　　现在，让我们再来看看method3()。它调用了
method1()却没有把这个调用放在try/catch程序块当中。它是通过声明它会抛出method1()会抛出的exception来避免这样做
的。它没有捕获这个exception，而是把它传递下去。实际上main()方法也可以这样做，通过声明它会抛出Checked
exception来避免使用try/catch程序块（当然我们反对这种做法）。<br><br>　　<b>小结一下</b>：<br><br>　　* Runtime exceptions：<br><br>　　　在定义方法时不需要声明会抛出runtime exception；<br><br>　　　在调用这个方法时不需要捕获这个runtime exception；<br><br>　　　runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。<br><br>　　* Checked exceptions：<br><br>　　　定义方法时必须声明所有可能会抛出的checked exception；<br><br>　　　在调用这个方法时，必须捕获它的checked exception，不然就得把它的exception传递下去；<br><br>　　　checked exception是从java.lang.Exception类衍生出来的。<br>&nbsp;　　<b>二、逻辑上</b><br><br>　
　从逻辑的角度来说，checked exceptions和runtime exception是有不同的使用目的的。checked
exception用来指示一种调用方能够直接处理的异常情况。而runtime
exception则用来指示一种调用方本身无法处理或恢复的程序错误。<br><br>　　checked
exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例，它的每一个构建器都会抛出
MalformedURLException。MalformedURLException就是一种checked
exception。设想一下，你有一个简单的程序，用来提示用户输入一个URL，然后通过这个URL去下载一个网页。如果用户输入的URL有错误，构建
器就会抛出一个exception。既然这个exception是checked
exception，你的程序就可以捕获它并正确处理：比如说提示用户重新输入。<br><br>　　再看下面这个例子：<br><br><table bgcolor="#ffffff" width="100%"><tbody><tr><td><font size="2">public void method()<br>{<br>　int [] numbers = { 1, 2, 3 };<br>　int sum = numbers[0] + numbers[3];<br>}</font></td></tr></tbody></table><br>　
　在运行方法method()时会遇到ArrayIndexOutOfBoundsException（因为数组numbers的成员是从0到2）。对于
这个异常，调用方无法处理/纠正。这个方法method()和上面的method2()一样，都是runtime
exception的情形。上面我已经提到，runtime
exception用来指示一种调用方本身无法处理/恢复的程序错误。而程序错误通常是无法在运行过程中处理的，必须改正程序代码。<br><br>　　
总而言之，在程序的运行过程中一个checked
exception被抛出的时候，只有能够适当处理这个异常的调用方才应该用try/catch来捕获它。而对于runtime
exception，则不应当在程序中捕获它。如果你要捕获它的话，你就会冒这样一个风险：程序代码的错误(bug)被掩盖在运行当中无法被察觉。因为在
程序测试过程中，系统打印出来的调用堆栈路径(StackTrace)往往使你更快找到并修改代码中的错误。有些程序员建议捕获runtime
exception并纪录在log中，我反对这样做。这样做的坏处是你必须通过浏览log来找出问题，而用来测试程序的测试系统（比如Unit
Test）却无法直接捕获问题并报告出来。<br><br>　　在程序中捕获runtime
exception还会带来更多的问题：要捕获哪些runtime exception？什么时候捕获？runtime
exception是不需要声明的，你怎样知道有没有runtime
exception要捕获？你想看到在程序中每一次调用方法时，都使用try/catch程序块吗？</div>
<img src ="http://www.blogjava.net/westwin/aggbug/8697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 08:59 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>