Archive for 2006年1月20日


第六章 Sendmail
& 6.1 简 介
    邮件服务是用户所需要的最重要的网络服务。Web的通信量很大,但邮件主要用于个人之间的通信,而人-人的通信是商务的基础。没有邮件服务的网络是不完整的网络。换句话说,如果不能给用户提供完整的TCP/IP下的邮件支持,这样的网络操作系统也不值得信赖。
    配置sendmail是一件大而复杂的工作,但也不完全都是这样,与其他一些网络服务器系统只安装SMTP服务器软件的情况相比,Linux已经配置好了多数的设置。在多数系统下,缺省配置都能良好的运行。我将在本章中给出一些配置的建议,主要的一些配置参数建议大家不要随意更改。
& 6.2 所需系统资源
6.2.1 配置文件:
         文件 来源
   /etc/sendmail.cf sendmail-8.9.3-20.i386.rpm
   /etc/sendmail.cw sendmail-8.9.3-20.i386.rpm
6.2.2 相关工具:
         文件 来源
 /etc/rc.d/init.d/sendmail              sendmail-8.9.3-20.i386.rpm
& 6.3 配置方案
1./etc/sendmail.cf         sendmail的主配置文件
   作用:控制sendmail运行时的配置。完整的sendmail配置应该包括7部分:
Local Info(本地信息):这部分定义了本地主机的信息
Options(选项):用来设置定义sendmail环境的选项。
Message Precedence(消息的优先级):sendmail消息的优先级
Trusted Users(信任用户):定义发送邮件时允许改变发送地址的用户
Format of Headers(头格式):定义在sendmail中插入的邮件头信息
Rewriting Rules(改写规则):这部分保存着改写邮件地址命令使用该命令可以将邮件地址从用户邮件程序的地址形式改写为邮件发送程序所需要的地址形式。
Mailer Definition(邮寄者说明):定义发送邮件的程序,改写规则是邮件者使用的规则,在本部分定义。
    其实,配置一个完整的sendmail服务器是一件极其复杂的工程,然而对于我们所适用的范围来说,很多的功能是没有必要的,所以我想以一个简单的例子来说明我们的配置,也就是说,没有被提出的配置在一般情况下是不需要我们的管理员来考虑的,你按照默认的做就可以了。
    实例:
         V8/Berkeley
Cwlocalhost
Fw /etc/sendmail.cw
CP.
DYuunet.uu.net
CPUUCP
DS thj.mycompany.com
CO @ % !
C..
C[[
Kmailertable hash -o /etc/mail/mailertable
#制作db库
Kdomaintable hash -o /etc/mail/domaintable
Kgenerics hash -o /etc/mail/genericstable
Kvirtuser hash -o /etc/mail/virtusertable
Kaccess hash -o /etc/mail/access
Kmxserved bestmx -z: -T<TEMP>
Kresolve host -a<OK> -T<TEMP>
FR-o /etc/mail/relay-domains
DR
DH
Kdequote dequote
CM root
DM thj.mycompany.com
#设置邮件服务器名称
DnMAILER-DAEMON
CPREDIRECT
DZ8.9.3
O SevenBitInput=False
O EightBitMode=pass8
O AliasWait=10
O AliasFile=/etc/mail/aliases,/etc/mail/majordomo
O MinFreeBlocks=100
#规定最小空闲块
O MaxMessageSize=1000000
#指定用户一次最大发送的邮件大小
O BlankSub=.
O HoldExpensive=False
O DeliveryMode=background
O AutoRebuildAliases=true
O TempFileMode=0600
O HelpFile=/etc/mail/sendmail.hf
O SendMimeErrors=True
O ForwardPath=$z/.forward.$w:$z/.forward
O ConnectionCacheSize=2
O ConnectionCacheTimeout=5m
O UseErrorsTo=False
O LogLevel=9
#记录到日志文件的事件等级
O CheckAliases=False
O OldStyleHeaders=True
O PrivacyOptions=authwarnings,noexpn,novrfy
O QueueDirectory=/var/spool/mqueue
O Timeout.queuereturn=4d
O Timeout.queuewarn=4h
O SuperSafe=True
O StatusFile=/var/log/sendmail.st
O DefaultUser=8:12
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
O UnixFromLine=From $g  $d
O OperatorChars=.:%@!^/[]+
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100
Ft -o /etc/mail/sendmail.ct
Troot
Tdaemon
Tuucp
R$* $#error $@ 5.7.1 $: "550 Relaying denied"
#以上是Linux默认的选项,不允许客户机使用mail服务器收发邮件,如果允许客户机收发的话应将上边一句话改成
R$- $@ok
#注意:中间是两个tab键
#一下是邮件头信息
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: $t.$i@$j
#以上是邮件头信息
2.管理员需要执行touch /etc/mail/aliases 和 touch /etc/mail/majordomo来创建两个文件,然后重新启动sendmail,利用sendmail.cf里生成db库的配置来生成两个库文件:aliases.db和majordomo.db;当然,管理员也可以通过执行makemap hash mailertable < mailertable来生成新的db,这样可以不重新启动。
& 6.4 测试及管理方法
1. 管理员可以通过执行/etc/rc.d/init.d/sendmail restart来使更改的配置生效。
2. 管理员通过执行 fetchmail –u yourname yourserver 来为没有邮件用户制定他们的口令,用户需要在客户端作相应的设置。
3.管理员应该打开pop3服务,即更改配置文件 
4.管理员在服务器上可以通过执行 echo test | /usr/sbin/sendmail –v
thj@mycompany.com 来测试建立好的邮件用户是否能够正常工作。
& 6.5 本章小节
    其实我们只要设置其中的几个地方就可以实现mail服务器的功能,这是因为sendmail有很强的适用性,并且它是在不断更新的。所以现在提供给我们的sendmail的配置方案已经经过实践检验,不需要管理员做太大改动,就可以实现强大的sendmail功能。


第七章 PPP

& 7.1 简 介
    首先向大家强调一点,我们这里所谈的PPP不是要将我们的服务器配置成为提供拨入服务的服务器,而是用户可以通过服务器拨号上网,简而言之就是,服务器可以按照客户的需求自动拨号上网,也就是所谓的按需拨号。
    为什么我们要向大家介绍这项配置呢?因为虽然现在许多企业都用DDN上网,但是Modem在很大程度上还是有它的作用的,所以我们将向大家介绍一下如何实现PPP自动拨号上网。
& 7.2 所需系统资源
7.2.1 配置文件:
         文件 来源
  /etc/ppp/options              ppp-2.3.11-4.i386.rpm
  /etc/ppp/dial                     管理员创建
  /etc/rc.d/rc.local            initscripts-5.00-1
7.2.2 相关工具:
         文件 来源
  /usr/sbin/chat          ppp-2.3.11-4.i386.rpm
  /usr/sbin/pppstats           ppp-2.3.11-4.i386.rpm
  /usr/sbin/pppd               ppp-2.3.11-4.i386.rpm
& 7.3 配置方案
1./etc/rc.d/rc.local
作用:这个文件是启动脚本,它是放在启动服务进程之后启动的项目,要想实现自动拨号,首先应该启动一个PPP的守护进程,实现的方法就是在这个脚本中加上一句话,以实现开启守护进程。
   实例:
        pppd /dev/modem 115200 connect ‘chat -f –v -V /etc/ppp/dial’
        #115200是连接速率,dial是拨号脚本
2./etc/ppp/options
   作用:PPP拨号的全部可选项都在这里
   实例:
         demand
         #按需拨号
idle 300
#若在300秒内没有请求从服务器发出,则自动断开Modem
crtscts
modem
noauth
#无需验证
defaultroute
asyncmap 0
lock
noipdefault
name 169
#与pap-secrets对应
usepeerdns
#抓取DNS到本地
3./etc/ppp/dial 
   作用:这是个拨号的脚本,用Modem指令来实现拨号
   实例:
        “ “     ATZ
         #初始化Modem
         OK       ATDT169
         #拨号,注意在外线0后要加“,”
         CONNECT  “ “
         #连接
         name: 169
         #用户名
         word:     169
         #密码
3./etc/ppp/pap-secrets
   作用: pap校验
   实例:
          169 * 169
          #注意一定要在169和*之间加空格
& 7.4 测试及管理方法
1.可以执行ps auxw|grep pppd,查看是否有pppd的守护进程
2.若pppd进程非正常工作,则可以执行killall pppd来杀死守护进程
3. 若想再次启动守护进程,可以执行 /etc/rc.d/rc.local restart
4.执行 tail –f /var/log/message 可以观察拨号过程
5.执行 pppstats可以观察Modem的工作情况
& 7.5  本章小节
其实这一切很简单,通过我上面的叙述,大家不难发现,其实所谓的按需拨号,它的实现应该被划分成两个步骤:第一,先将服务器本身配置好,让它可以拨号上网;第二,编写自动拨号配置文件,使Linux服务器具备自动拨号的能力。其实,从客户端自动拨号与从服务器自动拨号的原理是一样的,只要有向外的请求,就应该自动启动拨号进程,而从客户机来的请求,最终将通过sendmail,squid等从服务器发送到Internet。所以我们只要配置好服务器上的自动拨号,也就能实现客户机的自动拨号。

第八章 ISND
& 8.1 简 介
    近两年来,ISDN在我国蓬勃发展起来,各省市的电信部门相继开通ISDN业务。尤其在上海、广州、福州、北京等地,ISDN的发展趋势更是势不可挡。就上海来说,到今年5月份,ISDN用户已达32,000。ISDN凭借其连接速度快、传输质量高等优势正吸引着越来越多的用户。 
什么是ISDN? 
    ISDN是综合业务数字网的简称,它由电话综合数字网(IDN)发展而来。ISDN是数字交换和数字传输的结合,它以迅速、准确、经济、有效的方式提供目前各种通信网络中现有的业务,而且将通信和数据处理结合起来,开创了很多前所未有的新业务。 ISDN是一个全数字的网络,也就是说,不论原始信号是话音、文字、数据还是图象只要可以转换成数字信号,都能在ISDN网络中进行传输。在传统的电话网络中,实现了网络内部的数字化,但在用户到电话局之间仍采用模拟传输,很容易由于沿途噪声的积累引起失真。而对于ISDN来说,实现了用户线的数字化,提供端到端的数字连接,传输质量大大提高。 
    由于ISDN实现了端到端的数字连接,它可以支持包括话音、数据、图象等各种业务。随着电子通信在全球不断扩大,我们许多人需要和不同地区的用户交换信息。而现在人们对通信的要求已经不仅是简单的声音交换,还需要共享各种格式的不同信息。例如,有些人需要高速数据和文件传输;有些人可能需要多媒体和会议电视;有些人则希望能访问中央数据库。ISDN的业务覆盖了现有通信网的全部业务,例如传真、电话、可视图文、监视、电子邮件、可视电话、会议电视等,可以满足不同用户的需要。 ISDN还有一个基本特性是向用户提供了标准的入网接口。用户可以随意地将不同业务类型的终端结合起来,连接到同一接口上,并且可以随时改变终端类型。 
    ISDN主要有两种类型:基本速率(BRI)和基群速率(PRI)。电信局向普通用户提供的均为BRI接口,采用原有的双绞线,速率可达144Kb/s。BRIISDN可在一对双绞线上提供两个B通道(每个64K)和一个D通道(16K),D通道用于传输信令,B通道则用于传输话音、数据等。一路电话只占用一个B通道,因此,在同时进行多种业务或对话。PRI接口速率为2.048Mb/s,用于需要传输大量数据的应用,如PBX,LAN互联等。 
ISDN能做些什么? 
    ISDN可向用户提供各种各样的业务。目前CCITT将ISDN的业务分为三类:承载业务,用户终端业务和补充业务。 
    承载业务是ISDN网络提供的信息传送业务,它提供用户之间的信息传送而不改变信息的内容。常用的承载业务有:话音业务、3.1KHz音频业务和不受限64K数字业务。打电话时一般采用话音业务,该种承载业务向网络表明目前用户是在打电话,网络可以对其做语音压缩、回波消除、数字话音插空等处理。3.1KHz音频承载业务主要用于用调制解调器进行数据传输或用模拟传真机发传真的情况,这类业务可在网络中对信号进行数模变换,但是其他形式的话音处理技术必须禁止。若要使用ISDN拨号上网,则需要用不受限64K数字业务,此时网络对于传送的数据不做任何处理。有时用户若碰到申请的ISDN线路能打电话却无法拨号上网的情况,即可能是由于线路上为开放不受限64K数据承载业务所致。 
    用户终端业务是指所有面向用户的应用业务,它即包含了网络的功能,又包含了终端设备的功能。用户可以使用电话、4类传真、数据传输、会议电视等用户终端业务,但均需要终端设备的支持。 
    补充业务则是ISDN网络在承载业务和用户终端业务的基础上提供的其他附加业务,目的是为了给用户提供更方便的服务。目前上海市电信局向用户提供的补充业务有:多用户号码、子地址、主叫号码显示、呼叫等待、呼叫保持等。其中除多用户号码由于号码资源紧张需每个月交纳一定费用外,其他补充业务均为免费开放,当然首先您需要到电信局去申请这些业务。这些业务确实可给用户带来很大的方便。例如,呼叫等待业务可以使您在两个电话同时使用时,外面电话还能打进来。呼叫保持则使您在打电话时,将现有的电话暂时挂起,去打新的电话或接听其他电话,结束后在将原来的电话恢复。 
为什么要用ISDN? 
    无论是个人还是公司,ISDN都应成为您的首选。因为它有以下诸多好处:
价格便宜: 
    由于使用单一的网络提供不同的业务,ISDN大大提高了网络资源的利用率。用户不必要购买不同的设备和线路接入不同的网络。就上海来说,目前电信局对用户推出ISDN优惠大套餐,只需花490元,即可获得上海贝尔生产的智能网络终端和ISDN适配卡,家中原有的模拟电话、传真机等都可直接接入,通过ISDN适配卡可以128Kb/s的速率上网,所花的费用不到一块56K调制解调器的价钱。而且每条ISDN线路的月租费为24元,与模拟电话线相同,却可当两条模拟线路使用,何乐而不为呢? 
高速数据传输: 
    使用ISDN,最高数据传输速率可达128Kb/s,相对于现有电话网中的数据速率提高了好几倍。对于因特网用户来说,使用56K调制解调器时文件下载速率最快时在4KB/s左右,还需视网络情况而定,而使用ISDN,若同时使用两个B信道,下载文件是速率最快可达12KB/s左右,提高整整3倍!这样,省下来的时间、电话费、上网费就相当可观了。 
高的传输质量: 
    经常上网的用户肯定有类似经验,有时下载一个大文件花费了好几个小时,结果下载完后却发现由于线路质量差,误码率高,下载的文件不能使用。而使用ISDN几乎不会发生这种问题。由于ISDN采用端到端的数字连接,传输质量很高,它不会象模拟线路一样受到静电和噪音的影响。此外,由于ISDN中的数字设备便于故障检测,系统可靠性也得到提高。 
使用灵活方便: 
    ISDN提供各种业务,用户只需一个入网接口,就能使用网络提供的各种业务。例如,您可以把电话和个人电脑接入ISDN,在上网的同时可以打电话。还可接入可视电话、会议电视、ISDN路由器等设备。由于这些设备均有相应的国际标准,可以象家用电器一样具有便携性,可以从一个插座上拔到另一个有插座的地方去使用。 
    总的来说,ISDN是一个非常成熟的技术,它必将以其优质的服务、平民化的价格将您带入一个全新的数字时代。 & 8.2 内置ISDN的安装
8.2.1 说明
内置ISDN卡的安装比较麻烦,造成这种情况的主要原因是卡的型号比较多,而内核支持的范围十分有限,所以,笔者向大家推荐上海贝尔出的几种,我们只需要重新编译内核,加上我们用ISDN的型号就可以啦。
8.2.2 配置
1. 内核配置文件
实例:
     以下是我们需要的选项,由于现在市面上见到的所有中文Linux的发行版均不支持内置的ISDN,所以,我们要想用这个好东东只能自己动手啦。
     在/usr/src/linux目录下执行make menuconfig,然后在ISDN项中选择一下选项:
<*> ISDN support
 [*]   Support synchronous PPP
 [*]   Use VJ-compression with synchronous PPP
 [*]   Support generic MP (RFC 1717) 
 [*]   Support audio via ISDN 
 <M>   HiSax SiemensChipSet driver support
 [*]   HiSax Support for EURO/DSS1
 [*]   Support for german chargeinfo 
 [*]   Disable sending complete  
 [*]   Disable sending low layer compatibility 
 [*]   HiSax Support for Teles 16.3 or PNP or PCMCIA 
 [*]   HiSax Support for Winbond W6692 based cards
     然后存盘退出,执行make dep,make clean,make bzImage,make modules,make
modules_install,depmod –a,make install。
     此时,新的核心已经生成啦,而我们老的核心并没有被删除,只是做了一个备份,要是有什么问题,还是可以恢复的。最后我们需要重新启动使得新内核生效。
2. isdn4k-utils-3.1beta7_mini-1.i386.rpm
    这是一个支持内置ISDN的包,安装上之后,系统就会识别我们的内置卡了,当然,为了实现拨号,我们还需要写一个拨号脚本以及相应的挂断脚本,它们是isdnon和isdnstop。
3. isdnon
实例:
#!/bin/sh
echo -n E > /dev/ttyS1
modprobe hisax type=36 protocol=2
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
#Kill previous ipppd process
if [ -r /var/run/ipppd.ippp0.pid ]
then kill -9 `cat /var/run/ipppd.ippp0.pid`
fi
if [ -r /var/run/ipppd.ippp1.pid ]
then kill -9 `cat /var/run/ipppd.ippp1.pid`
fi
#Variables
MYIP=0.0.0.0
REMIP=0.0.0.0
MYMSN=62986638
REMMSN=169
MYUSER=169
REMNAME=169
#Init
/sbin/isdnctrl verbose 3
#/sbin/isdnlog -sS -v1 -m0x17d7 -l0x3d7 -C /dev/console -D /dev/isdnctrl
#Add and set ippp0
/sbin/isdnctrl system on
/sbin/isdnctrl addif ippp0
/sbin/isdnctrl eaz ippp0 $MYMSN
/sbin/isdnctrl addphone ippp0 out $REMMSN
/sbin/isdnctrl huptimeout ippp0 3600
/sbin/isdnctrl l2_prot ippp0 hdlc
/sbin/isdnctrl l3_prot ippp0 trans
/sbin/isdnctrl encap ippp0 syncppp
/sbin/isdnctrl dialmode ippp0 auto
#Add and set ippp1
/sbin/isdnctrl addslave ippp0 ippp1
/sbin/isdnctrl eaz ippp1 $MYMSN
/sbin/isdnctrl addphone ippp1 out $REMMSN
/sbin/isdnctrl huptimeout ippp1 3600
/sbin/isdnctrl l2_prot ippp1 hdlc
/sbin/isdnctrl l3_prot ippp1 trans
/sbin/isdnctrl encap ippp1 syncppp
/sbin/isdnctrl dialmode ippp1 auto
/sbin/ifconfig ippp0 -arp -broadcast
#Startup PPP
/sbin/ipppd user $MYUSER remotename $REMNAME
lock
noipdefault
+mp
ipcp-accept-local
ipcp-accept-remote
name $MYUSER
-detach
mru 552
mtu 552
lcp-restart 1
defaultroute
/dev/ippp0 &
/sbin/ipppd user $MYUSER remotename $REMNAME
lock
noipdefault
+mp
ipcp-accept-local
ipcp-accept-remote
name $MYUSER
-detach
mru 552
mtu 552
lcp-restart 1
defaultroute
/dev/ippp1 &
4. isdnstop
实例:
#!/bin/sh
echo -n G > /dev/ttyS1
ifconfig ippp0 down >/dev/null 2>&1
isdnctrl delif ippp0 >/dev/null 2>&1
killall -9 ipppd >/dev/null 2>&1
sleep 2
echo -n H > /dev/ttyS1
& 8.3  外置ISDN的安装
8.3.1 说明
由于现在最新的内核2.4.0-test6不支持USB接口的ISDN.所以,我们这里所说的外置ISDN指的是串口的.
安装串口ISDN的方法有许多种,笔者从自身实践中感觉,将ISDN当成Modem一样用比较方便,这样不需要安装其余RPM包,又不用设置DNS,所以将外置串口的ISDN当Modem用既简单,又实用.
8.3.2 配置
1./etc/ppp/isdndial
   实例:
   “ “  ATZ
   OK  ATX0
   OK  AT%B8
   #启动双信道
   OK  “ATB31”
   #有时候直接上双信道不成,所以在线路忙的时候可以注释掉这行
   OK  ATD169
   “CONNECT”  “ “
2. /etc/ppp/options
   同第七章
3./etc/ppp/pap-secrets
   同第七章
     
& 8.4 测试及管理方法
1.管理员通过执行/sbin/imon来监控内置ISDN的工作状况
2.管理员可以执行/usr/sbin/ipppstats来监控内置ISDN的流量
& 8.5  本章小节
    ISDN在国内的应用越来越多,它比电话线拨号上网的带宽增大了许多,中小型企业通过它共享上网非常合适。 
  现在国内用在ISDN上网的设备有很多种,没有任何厂商声明支持Linux,但是Linux已经可以支持大多数ISDN设备。 
  ISDN上网与我们常用的Modem拨号上网类似。在Linux下甚至可以把ISDN卡模拟成Modem设备,所不同的是ISDN可以使用同步PPP(synchronous PPP),而Modem拨号一般使用异步PPP(anonymous PPP)。对于这两种拨号方式,邮局或ISP采用不同的接入设备。
  尽管ISDN可以模拟成Modem进行异步模式的拨号,但一般只是用来测试ISDN卡是否运行正常,真正在上网时通常要用同步PPP拨号模式。


第九章 Linux下 Apache、Tomcat的整合

一、所需的RPM包:
jdk1_2_2_006-linux-i386.tar.gz 
jakarta-tomcat.tar.gz,
mod_jserv.so
二、软件安装:
1、安装jdk1.2.2
(1) 解开压缩包
    tar xvzf jdk1_2_2_006-linux-i386.tar.gz
(2) 目录的处理
        ln -s jdk1.2.2 jdk
        ln -s jdk/jre jre
    (3) 设置$JAVA_HOME,$CLASSPATH
        vi /root/.bash_profile
        加入:
             JAVA_HOME=/usr/local/jdk
             export JAVA_HOME
             CLASSPATH=/usr/local/jdk/lib:/usr/local/jre/lib
  export CLASSPATH
             PATH=$PATH:/usr/local/jdk/bin:/usr/local/jre/bin
注:JDK的安装到此结束
2、安装tomcat
    (1) 解开压缩包
        tar xvzf jakarta-tomcat.tar.gz
    (2) 运行tomcat服务器
        cd /usr/local/jakarta-tomcat/bin
        ./startup.sh start(用./shutdown.sh stop结束tomcat服务器)
        lynx http://localhost:8080/
 看见了jsp/servlet的东西,并且能运行它的例子程序,那么你的tomcat  服务器就安装成功了
3.和apache连接
    (1) 简介:
    tomcat本身其实就是一个web服务器,我们可以把它和apache等其他web服务器连接起来,这两个服务器可以不在同一台机器上。下面的操作是在同一台机器上的情况。
    (2) 拷贝.so文件
        cp mod_jserv.so /usr/local/apache/libexec
    (3) 修改Apache的配置文件,加入对tomcat的支持
cp /usr/local/jakarta-tomcat/conf/tomcat.conf      /usr/local/apache/conf/tomcat.conf
       vi /usr/local/apache/conf/httpd.conf
       加入Include /usr/local/apache/conf/tomcat.conf
4、测试
     重新启动你的apache, 然后运行tomcat服务器
     lynx http://localhost/examples/
     如果你看见了jsp、servlet目录,你的apche与tomcat已经连接成功了.
5、一些说明:
     如果你的jsp/servlet运行不了或者有错误,一般是你的CLASSPATH设置错误。如果你的apache是自己编译的,编译apache时请把–enable-module=so打开。


第十章  Linux下Apache、JServ的整合

一、需要的源码包:
jdk-1_2_2_006-linux-i386.tar.gz
jsdk20-solaris2-sparc[1].tar.Z
ApacheJServ-1.1.2.tar.gz
二、安装过程
1、安装jdk1.2.2
(2) 解开压缩包
    tar xvzf jdk1_2_2_006-linux-i386.tar.gz
(2) 目录的处理
        ln -s jdk1.2.2 jdk
        ln -s jdk/jre jre
    (3) 设置$JAVA_HOME,$CLASSPATH
        vi /root/.bash_profile
        加入:
             JAVA_HOME=/usr/local/jdk
             export JAVA_HOME
             CLASSPATH=/usr/local/jdk/lib:/usr/local/jre/lib
  export CLASSPATH
             PATH=$PATH:/usr/local/jdk/bin:/usr/local/jre/bin
    注:JDK的安装到此结束。
2.安装JSDK
      (1) tar zxvf jsdk20-solaris2-sparc[1].tar.Z
      (2) 将产生的JSDK2.0目录移到 /usr/local/JSDK2.0
          mv JSDK2.0 /usr/local/JSDK2.0
    注:JSDK的安装到此结束。
3.Apache和Jserv的静态混合编译
      所谓的静态编译是指将Jserv编译进apache里
     (1) tar xvzf apache_1.3.12.tar.gz
         tar xvzf ApacheJServ-1.1.2.tar.gz
     (2) cd apache_1.3.12
         ./configure –prefix=/usr/local/apache
     (3) 配置apache jserv编译参数
         cd ../ApacheJServ-1.1.2
         ./configure
          –prefix=/usr/local/jserv
         –with-apache-src=../apache_1.3.12
    –with-jdk-home=/usr/local/ jdk1.2.2
         –with-java-platform=2
         –with-JSDK=/usr/local/JSDK2.0/lib/jsdk.jar
         make
         make install
     (4) 编译apache和apache jserv
         cd ../apache_1.3.12
         ./configure  
                      –prefix=/usr/local/apache
                      –activate-module=src/modules/jserv/libjserv.a
         make
         make install
(5) 执行/usr/local/apache/bin/httpd -l检查一下mod_jserv是否编译进apache了
   (6) 更改配置文件 /usr/local/apache/conf/httpd.conf
   添加 Include /usr/local/jserv/etc/jserv.conf
     (7) 更改配置文件 /usr/local/jserv/etc/jserv.conf
         SetHandler jserv-status
order deny,allow
deny from all
加入你的信任主机allow from xxxx
这样在信任主机上通过http://yourserver/jserv/(注意后面这个"/"不能少)可以看到你的apache jserv的配置信息。
接着在/usr/local/jserv/servlets下放入你自己的servlet class实验一下效果吧,测试结果表明在redhat6.2下没有中文显示问题,一切ok!
其他关于servlet zone的设置、load balance等等请参考apache jserv文档和java.apache.org网站
   注:Apache和Jserv混合编译到此结束
三、最后的测试:
1. 启动apache:/usr/local/apache/bin/apachectl start
2. 用浏览器测试http://yourserver/servlets/IsItWorking
       看见了Yes,It’s working!了吗?你成功了!!


第十一章 Linux下Apache、php3、MySQL的整合

一、所需的RPM包 
    apache_1.3.12.tar.gz 
    php-3.0.16.tar.gz 
    mysql-3.22.32.tar.gz 
    注意:以上均为源代码而非RPM包 
二、软件安装 
  以root登录,将以上文件均拷贝至/root下 
1. 安装MySQL 
(1) 解开压缩包
       tar -zvxf mysql-3.22.32.tar.gz 
(2) 将产生mysql-3.22.32目录移到/usr/local/mysql
        mv mysql-3.22.32 /usr/local/mysql 
    (3) 编译MySQL
        cd /usr/local/mysql 
        ./configure –prefix=/usr/local/mysql 
        make
        make install
注:MySQL的安装到此结束
2. Apache、PHP3的混合编译 
(1) 解开压缩包
      tar xvzf apache_1.3.12.tar.gz 产生apache_1.3.12目录 
        tar xvzf php-3.0.16.tar.gz 产生php-3.0.8目录 
     (2) 把Apache的安装目录定为/usr/local/apache 
         cd apache_1.3.12
         ./configure –prefix=/usr/local/apache 
     (3) 配置支持MySQL、作为Apache功能模块、跟踪变量有效 
         cd ../php-3.0.16
./configure –with-mysql=/usr/local/mysql –with-     apache=../apache_1.3.12 –enable-track-vars 
       make
         make install 
注:PHP的安装到此结束
      (4) 配置Apache,加入PHP3的模块
cd ../apache_1.3.12
./configure –prefix=/usr/local/apache –activate- module=src/modules/php3/libphp3.a 
make
make install 
注:APACHE安装完毕 
3.更改配置
   (1) 把php.ini文件拷到/usr/local/lib/目录下. 
       cd ../php-3.0.8#cp php3.ini-dist /usr/local/lib/php3.ini 
   (2) 更改Apache的配置文件
       cd /usr/local/apache/conf 
       vi httpd.conf 
找到 AddType application/x-httpd-php3.php3 把它前头的#号给删了当然也可加一行AddType application/x-httpd-php3.asp 这样用FrontPage编辑会方便一点。


第十二章 MySQL

简 介
    MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
    SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。
    MySQL 主要目标是快速、健壮和易用。最初是因为我们需要这样一个SQL服务器,它能处理与任何可不昂贵硬件平台上提供数据库的厂家在一个数量级上的大型数据库,但速度更快,MySQL就开发出来。自1996年以来,我们一直都在使用MySQL,其环境有超过 40 个数据库,包含 10,000个表,其中500多个表超过7百万行,这大约有100 个吉字节(GB)的关键应用数据。
    MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
    MySQL的官方发音是“My Ess Que Ell”(不是 MY-SEQUEL )。
第一节 MySQL的安装
1.1 所需资源
  MySQL-3.22.32-1.i386.rpm
  MySQL-client-3.22.32-1.i386.rpm
1.2 安装方法
 第一步:rpm –ivh  MySQL-3.22.32-1.i386.rpm
 第二步:rpm –ivh  MySQL-3.22.32-1.i386.rpm
 第三步:执行mysql,启动MySQL monitor就可以使用mysql数据库了。
第二节 MySQL的使用
2.1 启动MySQL守护进程 
      /etc/rc.d/init.d/mysql start
2.2 关闭MySQL守护进程
      /etc/rc.d/init.d/mysql stop
2.3 检查MySQL服务器是否已经运行
       2.3.1 检查MySQL的属性
               /usr/bin/mysqladmin variables 
       2.3.2 检查MySQL的版本信息
               /usr/bin/mysqladmin version  
       2.3.3 检查MySQL的运行状态
               /usr/bin/mysqladmin status
       2.3.4 检查MySQL服务器此时正运行的线程信息
               /usr/bin/mysqladmin processlist
 2.4 连接和断开服务器
       2.4.1 连接服务器
               mysql –h host –u user –p
               #要求输入口令
       2.4.2 断开服务器
               quit
               #进入MySQL之后可以敲help来获取帮助信息
 2.5 MySQL存取权限的控制
    MySQL的存取控制技术功能强大,比Postgres更加具有灵活性。MySQL采用的用户名和密码的加密算法与Unix系统不尽相同,其用户名可以长达16个字符。
    先以root登陆MySQl,然后在MySQL的提示符下键入grant all privileges  on *.* to thj@localhost identified by ‘thj’ with grant option;  这样,无论用户thj从什么地方登陆到这台服务器都可以使用MySQL。
第三节 MySQL数据库的简单操作语句
3.1 对数据库的操作
    MySQL的数据库实际上对应的是一个目录,它被系统存储在/var/lib/mysql  中。
       3.1.1 创建数据库
               命令:create database 数据库名;
       3.1.2 删除数据库
               命令:drop database 数据库名;
       3.1.3 查询MySQL中都有什么数据库
               命令:show databases;
       3.1.4 更改当前使用的数据库
               命令:use tbl_name
3.2 对数据表的操作
       MySQL中的TABLE才是真正的数据库。
       3.2.1 创建数据表
               命令:create table tbl_name ( column_specs );
               说明:tbl_name 数据表名   column_specs 表中列的说明
       3.2.2查询指定的数据表的结构
               命令:describe tbl_name;
       3.2.3 查询数据库中都有什么数据表
               命令:show tables;
3.3 对数据记录的操作
       3.3.1 增加新记录
 命令:insert into tbl_name (col_name1,col_name2,…) values(values1,values2,….)
说明:insert语句简单易用,但是它也有一个缺陷,就是每次只能插入一条记录。
       3.3.2 批量装载数据
命令:load data local infile “filename.txt” into table tbl_name;
说明:MySQl的版本不得低于3.22.15,否则load data local不起作用。该语句实际上是调用了/usr/bin/mysqlimport。
       3.3.3 检索信息
命令:select 要选择的东西 from 一个或多个表 where 数据必须满足的条件
注:在MySQL中,每键入一条命令之后,在命令行的结尾都要敲入“;”,标志是一条命令,或者敲回车之后再敲go,提示系统执行上边的命令;另外,在多数关于MySQL的参考书中,命令都为大写,实际上小写也可以;还有,use语句可以不加“;”,这是所有MySQL语言中唯一一个不需要加“;”就可以执行的语句。

第一章 DNS
& 1.1 简 介
在TCP/IP网络中最基本的服务就是域名解析,即用户可以从IP和URL两种方式访问你的网站。而且域名解析还应为用户提供命名服务,即用户执行ftp 192.168.10.1 和执行ftp thj是一样的。
& 1.2 所需系统资源
1.2.1 配置文件:
        文件名                               来源
/etc/named.conf                  caching-nameserver-6.2-2.noarch.rpm
/etc/named.boot                  caching-nameserver-6.2-2.noarch.rpm
/etc/hosts                                 系统自带
/etc/host.conf                            系统自带
/etc/resolv.conf               系统自带
/etc/nsswitch.conf                      glibc-2.1.3-15
/var/named/named.local           caching-nameserver-6.2-2.noarch.rpm
/var/named/named.ca              caching-nameserver-6.2-2.noarch.rpm
/var/named/name2ip.conf                   管理员创建
/var/named/ip2name.conf                   管理员创建
1.2.2 相关工具:
        文件名                               来源
/etc/rc.d/init.d/named                 bind-8.2.2_P5-9
/usr/bin/nslookup                      bind-8.2.2_P5-9
/usr/sbin/ndc                          bind-8.2.2_P5-9
& 1.3 配置方案
    对于DNS服务器的配置需要涉及5个主要文件,另外还有四个文件也与DNS有关:
     1./etc/named.conf  configuration文件
        作用:定义了域数据库信息的基本参数和源点,该文件可以存放在本地或远程的服务器上。
        实例:
options {
directory "/var/named";   
               #定义了named要读写文件的路径
         };
zone "." {
type hint;
#表明在启动时被用来初始化域名服务器的文件是一个线索文件,每一个服务器都有一个线索区。
file "named.ca";
               #指定所要读取的文件名
          };
zone "0.0.127.in-addr.arpa"{
type master;
                            #表明服务器是主域名服务器
file "named.local";
                            };
zone "mycompany.com" in {
                        type master;
                        file "name2ip.conf"; 
                          };
zone "10.168.192.in-addr.arpa" {
                                 type master;
                               file "ip2name.conf"; 
   };
    2./var/named/name2ip.conf  正向解析文件
作用:用来定义域信息,实现主机名和地址之间的镜像、识别mail服务器和提供各种域信息。
       实例:
@  IN  SOA  thj.mycompany.com.  root.thj.mycompany.com. 
#所有的区文件都以SOA开头,@指定当前的信息源,thj.mycompany.com这个值可以将域名和named.conf连接起来。通常只有一个@符号。
( 2000062900 ;serial    #序列号
  28800 ;     refresh    #刷新周期,以秒为单位
  14400 ;     retry      #循环周期
  3600000;    expire    #中止时间
  86400  );   minuum   #time-to-live的时间
 IN           NS      thj.mycompany.com.
 #定义域名服务器
 IN           MX  10  thj.mycompany.com.
 #定义邮件服务器,10表示优先级,越小越高
 localhost      IN      A      127.0.0.1
 #实现域到IP的映射
 thj           IN      A      192.168.10.1
 www         CNAME          thj
 #CNAME前后两者为等价名
 mail          CNAME          thj
        3./var/named/ip2name.conf  反向解析文件
           作用:实现IP地址很域名的映射
           实例:
  @ IN SOA thj.mycompany.com.  root.thj.mycompany.com.          ( 2000062900
;serial
  28800 ;     refresh
  14400 ;     retry
  3600000;    expire
  86400  );   minuum
  IN    NS      thj.mycompany.com.
  IN    MX  10  thj.mycompany.com.
  1    IN   PTR      thj.mycompany.com.
  #定义逆向关系,即192.168.10.1 与 thj.mycompany.com 之间的映射,也可以用作定义一个反转域。
        4./var/named/named.local  本地主机解析文件
作用:解析回送地址localhost 即127.0.0.1,回送地址是一种特殊的约定,即允许在处理本地机地址时与处理远程机地址的方法一样,这样可以简化处理过程,不必将数据发送到物理网络上。
           实例:
   @  IN  SOA     localhost. root.localhost.  (
   1997022700 ; Serial
   28800      ; Refresh
   14400      ; Retry
   3600000    ; Expire
   86400 )    ; Minimum
   IN      NS      localhost.
   1       IN      PTR     localhost.
      5./var/named/named.ca    线索文件
作用:初始化缓冲区的信息。该文件不需要管理员更改,而是系统自带。
       实例:
.    3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
.    3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
.    3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
.    3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
.    3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
.    3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
.    3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
.    3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
.    3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
.    3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
.    3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
.   3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
.   3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
      6./etc/hosts
作用:实现与网上其他主要计算机的映射,它通常是当作DNS的备份出现的,也就是说,当DNS系统出现问题的时候才使用Hosts表。
           实例:
  127.0.0.1 localhost localhost.localdomain localhost
  192.168.10.1    thj.mycompany.com   thj
#由于每台服务器都会有几个域名与IP的对应关系是永久的, 所以Hosts表中存放的应该是它们。
      7./etc/resolv.conf   
         作用:指定域名服务器的IP和搜索顺序。
         实例:
domain 
#定义本地域名。
search mycompany.com 
#简化用户输入的主机名,即当用户输入thj时,使得DNS可以把它成功地解析为thj.mycompany.com。它与domain是互斥的,无论谁出现都是用来定义search列表的。
nameserver 192.168.10.1
#定义域名服务器的IP,最多三个,建议一般使用两个。
       8./etc/hosts.conf
          作用:如何实现hosts表与DNS的关系和接口。
           实例:
   order hosts,bind
   #解析域名的顺序
   multi on
   #允许一台计算机拥有多个IP
       9./etc/nsswitch.conf
          作用:用于处理Hosts表和DNS的顺序
          实例:
   passwd:     files nisplus nis
   shadow:     files nisplus nis
   group:      files nisplus nis
   hosts:     files dns
   bootparams: nisplus [NOTFOUND=return] files
   ethers:     files
   netmasks:   files
   networks:   files
   protocols:  files
   rpc:        files
   services:   files
   netgroup:   nisplus
   publickey:  nisplus
   automount:  files nisplus
   aliases:    files nisplus
& 1.4 测试及管理方法
1. 管理员修改完DNS的配置文件,需要执行/etc/rc.d/init.d/named restart来是更改生效。
2. ndc工具:用来向named进程发送信号
3. nslookup:测试正向、反向的解析是否正常
& 1.5  本章小结
    DNS服务是许多服务的基础,所以配置一台Linux Server应该从DNS开始,并要从一开始就对你的服务器配置成什么样子有一个整体的把握,这样才能保证配置之间能够相互协调,避免错误的发生。


第二章 Apache

& 2.1 简 介
    Apache是世界排名第一的Web服务器,根据著名的Web服务器调查公司Netcraft的调查,世界上百分之五十以上的Web服务器都在使用Apache。
    纵观Apache,它为我们的网络管理员提供了丰富多彩的功能,包括目录索引、目录别名、内容协商、可配置的HTTP错误报告、CGI程序的SetUID执行、子进程资源管理、服务器端图象映射、重写URL、URL拼写检查以及联机手册man等。也就是说,如果您在Linux Server上成功安装配置了Apache之后,您的计算机也将随着Apache的生效而摇身一变,成为一台名副其实的Web Server,这种变化的确是激动人心的。伴随着自由软件发展的强大动力,我们有理由相信Apache的未来是一片光明的。
    在Internet时代,外部主页的发布已经成为树立公司形象的一个重要手段,而内部主页也成为公司管理的主要方式。但是,要想实现这些功能,首先应该把我们的Linux Server配置成为一台强大的Web Server。时至今日,全球应用最广泛的Web服务器软件就是Apache,本章将详细介绍如何配置Apache服务器。希望各位同仁能够通过阅读本片文章达到理论实践双丰收的目的,在很短的时间里迅速成为一名出色的网络管理员。
& 2.2  所需系统资源
2.2.1 配置文件:
         文件   来源
/etc/httpd/conf/httpd.conf      apache-1.3.12-2.i386.rpm
/etc/httpd/conf/access.conf     apache-1.3.12-2.i386.rpm
/etc/httpd/conf/srm.conf        apache-1.3.12-2.i386.rpm
2.2.2相关工具:
         文件 来源
/etc/rc.d/init.d/httpd          apache-1.3.12-2.i386.rpm
& 2.3 配置方案
与Apache配置相关的文件共有3个:
   /etc/httpd/conf/httpd.conf   主配置文件
作用:定义HTTP协议的设置值和针对该服务器的操作,还包括定义三个文件的目录
实例:
          ServerType standalone                    
#定义WebServer的启动方式为standalone,以增强其对大量访问的及时响应性
ServerRoot "/etc/httpd"
#指定包含httpd服务器文件的目录
LockFile /var/lock/httpd.lock
PidFile /var/run/httpd.pid
ScoreBoardFile /var/run/httpd.scoreboard
Timeout 300
#响应超时量,单位为秒
KeepAlive On
#允许用户建立永久连接
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
#要保留的空闲服务器进程的最小值
MaxSpareServers 20
#要保留的空闲服务器进程的最大值
StartServers 8
#系统启动时的守护进程数
MaxClients 150
#所能提供服务的最大客户端编号,大于它的部分被放入请求队列之中
MaxRequestsPerChild 100
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule env_module         modules/mod_env.so
LoadModule config_log_module  modules/mod_log_config.so
LoadModule agent_log_module   modules/mod_log_agent.so
LoadModule referer_log_module modules/mod_log_referer.so
LoadModule mime_module        modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module      modules/mod_status.so
LoadModule info_module        modules/mod_info.so
LoadModule includes_module    modules/mod_include.so
LoadModule autoindex_module   modules/mod_autoindex.so
LoadModule dir_module         modules/mod_dir.so
LoadModule cgi_module         modules/mod_cgi.so
LoadModule asis_module        modules/mod_asis.so
LoadModule imap_module        modules/mod_imap.so
LoadModule action_module      modules/mod_actions.so
LoadModule userdir_module     modules/mod_userdir.so
LoadModule alias_module       modules/mod_alias.so
LoadModule rewrite_module     modules/mod_rewrite.so
LoadModule access_module      modules/mod_access.so
LoadModule auth_module        modules/mod_auth.so
LoadModule anon_auth_module   modules/mod_auth_anon.so
LoadModule db_auth_module     modules/mod_auth_db.so
LoadModule digest_module      modules/mod_digest.so
LoadModule proxy_module       modules/libproxy.so
LoadModule expires_module     modules/mod_expires.so
LoadModule headers_module     modules/mod_headers.so
LoadModule usertrack_module   modules/mod_usertrack.so
LoadModule setenvif_module    modules/mod_setenvif.so
LoadModule perl_module        modules/libperl.so
LoadModule php3_module        modules/libphp3.so
ClearModuleList
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_log_agent.c
AddModule mod_log_referer.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_proxy.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_perl.c
AddModule mod_php3.c
Port 80
#定义服务器所使用的TCP的端口号
User nobody
Group nobody
#以上两行是分配给httpd的新用户的文件权限,出于安全的考虑把它们的权限设置成为最低。
ServerAdmin root@localhost
#设置Web管理员的邮件地址
ServerName thj
#定义客户端从服务器读取数据时返回给客户端的主机名,其缺省值是localhost
DocumentRoot "/home/httpd/html"
#设置所有Apache所提供的文档的根目录,比如说,用户对www.mycompany.com/index.html的访问请求,Apache对它的响应就是/home/httpd/html/index.html
UserDir public_html
DirectoryIndex index.html index.htm index.shtml index.cgi
#设置多种成功访问主页的方式,为的是提高系统的容错性
AccessFileName .htaccess
UseCanonicalName On
TypesConfig /etc/mime.types
DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/httpd/error_log
LogLevel warn
#定义那些错误类型被记录到错误日志中
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""
combined
#所有的LogFormat都用来定义日志中的条目
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/httpd/access_log common
ServerSignature On
Alias /icons/ "/home/httpd/icons/"
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de
AddType application/x-tar .tgz
AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler imap-file map
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0
Alias /doc/ /usr/doc/
CacheSize  5
#定义缓存区大小,以KB为单位。可以根据需要和硬盘空间大小进行设置
CacheGcInterval  4
#每隔4小时检查缓存区,如果已经超过CacheSize就删除文件
CacheMaxExpire  24
#HTTP文件最多被保持24小时
CacheLastModifiedFactor  0.1
#定义HTTP文件失效期,缺省是0.1 ,意思是说失效期=离最近一次修改的时间
X<factor>,比如离最近一次修改的时间是5小时,那么失效期就是5X0.1=0.5小时
CacheDefaultExpire 1
#这一指令提供一个缺省的时间(小时)来销毁缓存的文件,这些文件的最后更改时间不详。CacheMaxExpire  命令不覆盖这一设置
& 2.4 测试及管理方法
1.每当管理员更改了Apache的设置之后,都应执行/etc/rc.d/init.d/httpd restart使得更改生效。
2.Apache提供大量的日志文件,当Apache出错的时候,管理员可以根据htppd.conf中的ErrorLog定义的路径来诊断。具体方法是:tail –f /var/log/httpd/apache/error_log

& 2.5  本章小节
    Web服务是Internet服务器最基本的服务,Linux发行版中包含的Apache软件是性能优良的Web服务器,也是Internet上最流行的Web服务器,由于它时刻都经历着无数使用者的测试,所以现行的Apache的默认选项已经是十分适合我们大家的了,你只需要更改其中几个与当前应用环境紧密相关的选项就可以达到你的目的了。


第三章 DHCP

& 3.1 简 介
    对于那些不太了解网路技术的人来说,配置TCP/IP可能是一件非常复杂的工作,对那些将PC连接到局域网的用户来说只能将配置集中到服务器端,这样可以简化用户端的工作复杂度。当然,这将在一定程度上,增加管理员的工作量,但是从整体考虑,这样是最优的。
    本章我将向大家介绍如何配置动态IP分配以及管理,并用通俗易懂的语言解释它是如何工作的,希望大家通过阅读本章,迅速成为一名合格的网络管理员。
& 3.2所需系统资源
3.2.1 配置文件:
         文件 来源
   /etc/dhcpd.conf      dhcp-2.0-5.i386.rpm ->
                          /usr/doc/dhcp-2.0/dhcpd.conf.sample
   /var/state/dhcp/dhcpd.leases     管理员创建
3.2.2 相关工具:
         文件 来源
   /etc/rc.d/init.d/dhcpd  dhcp-2.0-5.i386.rpm
& 3.3  配置方案
/etc/dhcpd.conf            IP分配主配置文件
作用:包含了许多配置命令,既有针对服务器的,也有针对客户机的。它可以利用动态IP分配技术来管理整个子网,也可以根据静态IP分配技术来对其中某台客户机进行管理。
    实例:
         option domain-name "mycompany.com";
         #定义DHCP服务器的域名
         option domain-name-servers 192.168.10.1;
         #定义DNS的服务器地址
         option subnet-mask 255.255.255.0;
#定义子网掩码,如果不定义该选项,则使用Subnet命令中的子网掩码
         default-lease-time 1200;
#如果客户端不能请求一个指定的租用期,就使用该参数来定义该地址租用的时间长度
         max-lease-time 87600;
  #用来指定租用的最长时间,尽管租用的时间长度是根据客户端的请求决定的。
         subnet 192.168.10.0 netmask 255.255.255.0
         #指定子网的网段和子网的掩码
         {
         range 192.168.10.2 192.168.10.110
         #指定子网的IP范围
         option broadcast-address 192.168.10.255;
         #指定子网的广播地址
         option routers 192.168.10.1;
         #指定路由器的IP
         }
  host fantasia {
  hardware ethernet 00:50:BA:CA:2E:D2;
  fixed-address 192.168.1012;
  }
 #给客户机分配一个永久的IP
& 3.4测试及管理方法
1.管理员修改完配置文件之后需要执行/etc/rc.d/init.d/dhcpd restart来使更改生效。
2.在Windows 98的客户端,用户需要将TCP/IP配置成为自动搜索IP。
3.在Windows 98的客户端可以运行winipcfg来动态申请IP。
4.管理员可以通过查看/var/state/dhcp/dhcpd.leases文件来监督IP资源的分配情况。

& 3.5  本章小节
    通过学习本章,各位一定有一个感觉,就是DHCP的配置十分的简单。在一定程度上是这样的,因为我向大家介绍的是一台主服务器带一个子网,这是最简单的一种网络拓扑结构,要是更加复杂的多子网情况,那配置起来就要更加麻烦一点,这就需要为每个子网配置一个中继代理(dhcrelay),它的文档在Linux中都可以找到,一看就能明白了。


第四章 Samba

& 4.1 简 介
    网络的宗旨是更容易地在计算机间共享信息, 在 Linux服务器和Windows 98的客户机之间实现打印共享和文件共享已经成为一个中小型企业必须解决的问题。
    Samba 实际上是一组程序, 它们让你的Linux服务器机器懂得SMB (Server Messages Block)协议。SMB是一套通讯协议,让运行 OS/2,Windows NT,Windows 95,Windows for Workgroups的计算机实现文件共享和打印机共享服务。这套协议类似于NFS (网络文件系统)和lpd (Unix 标准打印服务器),及一套分布式授权认证系统(如 NIS 或 Kerberos)的组合。在运行 Samba 服务器程序的时候,你的 Linux 机器在"网络邻居"中看起来如同一台 Windows 机器。Windows 机器的用户可以"登录"到你的Linux服务器上, 当然这要求你给予适当的权限。
Samba 也能做一些一般来说需要 Windows NT 服务器去完成的工作,如作为一个 WINS服务器和处理来自Windows 95 机器的 "网络登录" 请求等等. 
& 4.2 所需系统资源
4.2.1 配置文件:
         文件 来源
   /etc/smb.conf              samba-2.0.6-9.i386.rpm -> 
                        /usr/doc/samba-2.0.6/example/smb.conf.default
   /etc/smbusers      samba-2.0.6-9
   /etc/smbpasswd            系统自带,使用smbpasswd更改
4.2.2 相关工具:
         文件 来源
      /etc/rc.d/init.d/smb        samba-2.0.6-9.i386.rpm 
      /usr/bin/smbadduser         samba-2.0.6-9.i386.rpm
      /usr/smbpasswd              samba-2.0.6-9.i386.rpm
& 4.3 配置方案
   1./etc/smb.conf
     作用:这是Samba的主配置文件,集中了所有的Samba配置选项。
     实例:
  [global]
   netbios name = thj
   #指定本机在网上邻居中的显示名
   workgroup = basexf
   #指定本机所属的工作组
   server string = Tang Haijing’s Linux Server
   #指定本机的备注
;  hosts allow = 192.168.1. 192.168.2. 127.
   #允许访问本机共享
   printcap name = /etc/printcap
   load printers = yes
   printing = bsd
   guest account = nobody
log file = /var/log/samba/log.%m
max log size = 50
security = user
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
#指定定对用户口令校验的密码文件
#安全级别为用户级,这样定义是为了让每个98的客户端能自由使用它们在Linux服务器上的目录。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
;  interfaces = 192.168.12.2/24 192.168.13.2/24 
dns proxy = no 
[homes]
comment = THJ’s Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = yes
writable = no
printable = yes
[public]
comment = Public Stuff
path = /home/Share
browseable = yes
guest ok = yes
public = yes
writable = yes
#定义了共享目录,所有的用户对这个目录都有读写权限
[ thj ]
comment = Fred’s Printer
valid users = thj
path = /homes/thj
printer = thj_printer
public = no
writable = no
printable = yes
#以上是定义打印机
2.管理员执行smbadduser tanghj:smithj来创建一个smb用户,相应地更改了/etc/smbpasswd 和 /etc/smbusers
3. 管理员需要执行 chmod 0777 /home/Share,修改/home/Share访问权限。 
& 4.4 测试及管理方法
1.管理员可以通过执行/etc/rc.d/init.d/smb restart使更改的配置文件生效。
2.testparm 命令,解析和描述你的 smb.conf 文件的内容,特别有用,  因为它提供了一个简易的方法发现配置上的错误。
& 4.5  本章小节
    Linux是一个优秀的网络操作系统,它可与多种网络集成。Linux系统的稳定性、可靠性受到了广大用户的欢迎,在中小型网或者在公司、部门、单位等内部网(Intranet)上,常将Linux充当有效而强劲的文件和打印服务器,让windows客户机共享Linux系统中的文件。这种Linux与 windows网络集成是通过samba来实现。其实大家看了我关于Samba的介绍已经有了一个切身的感觉,就是Samba的配置选项太多了,但是要实现我们的目的只需要更改其中不多的部分就足以实现强大的文件、打印共享了。


第五章 Squid

& 5.1 简 介
   作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前因特网(Internet)上运行的主机有相当一部分采用的就是linux操作系统,而且中国已经把linux操作系统作为政府上网年的指定网络操作系统,种种迹象表明,linux操作系统正在逐渐走向成熟。在本章我将向大家介绍一种能在Linux系统下使用的比较优秀的代理服务器软件的配置方法。 
    众所周知,当今因特网发展速度极其迅猛,IP地址资源非常紧张。而如果您想访问因特网,共享因特网的丰富资源,您的机器必须拥有一个标准的IP地址。在因特网上,IP地址是识别您的机器的唯一标志。目前,有两种方式可以让您的机器拥有标准的IP地址:一种是局域网通过专线接入因特网,您的机器可以拥有静态的IP地址。所谓静态IP地址,就是对使用者来说,是固定不变的IP地址,这个IP地址给您使用后,其他人就不能再用了。一种是通过电话线拨号或ISDN拨号等方式接入因特网,您的机器可以在您拨号上网的在线期间从ISP的访问服务器的IP地址池中获得一个临时的标准IP地址,这个IP地址在您下线后就不归您使用了,而您下次拨号再上网,很可能分配给您的机器的是另外一个临时的IP地址了。这种临时分配的IP地址,称为动态IP地址。无论是静态地址还是动态地址,在您的机器访问因特网时,使用起来没有什么区别。 
   现在因特网发展速度这么快,而IP地址资源又这么紧张,这不能不说是一个尖锐的矛盾。虽说Ipv6正在开发中,但远水不解近渴,好多的企业、公司内部的Intranet现在就想接入因特网这个浩瀚的资源海洋,但又苦于没有充足的IP地址资源,怎么办?还好,有代理服务这个好东西。代理服务是指由一台拥有标准IP地址的机器代替若干没有标准IP地址(以下称内部地址)的机器和因特网上的其他主机打交道,提供代理服务的这台机器称为代理服务器。拥有内部地址的机器想到因特网上查找资料时,先把这个请求发给拥有标准IP地址的代理服务器,由代理服务器把这个请求通过它的标准IP地址发到请求的目标地址。然后目标地址的服务器把返回的结果发回给代理服务器,代理服务器再原封不动的把资料发给最初那台拥有内部IP地址的机器。这样就完成了一次内部机器访问因特网的一个过程。若干拥有内部地址的机器就组成了内部网,代理服务器的作用就是勾通内部网和因特网,解决内部网访问因特网的问题。而且这种代理是不可逆的,因特网上的主机不能访问任何一台拥有内部地址的机器,这样又可以保障内部资料的安全性。 
    能够完成这种代理功能的服务器软件有好多,我给大家推荐一种能在linux下使用的比较优秀的代理服务器软件Squid。之所以说它比较优秀,是因为它可以在代理服务器上作一个很大的缓存,可以把好多常去的网站内容存储到缓存中,这样,内部网的机器再访问那些网站,就可以从缓存里调用了。这样一方面可以加快内部网浏览因特网的速度,这就是所谓的提高客户机的访问命中率, 另一方面,Squid不仅仅支持HTTP协议,而且还支持FTP,GOPHER,SSL和WAIS等协议考虑到简捷实用的原则,我们本章只向大家介绍如何设置HTTP代理,而其他的代理大同小异,各位理解了HTTP的配置也就明白应该如何配置其他的代理了。
& 5.2 所需系统资源
5.2.1 配置文件:
         文件 来源
/etc/squid/squid.conf             squid-2.3.STABLE1-5      
5.2.2 相关工具:
         文件 来源
/etc/rc.d/init.d/squid           squid-2.3.STABLE1-5
/etc/spool/squid                 squid-2.3.STABLE1-5
& 5.3  配置方案
1./etc/squid/squid.conf           squid主配置文件
作用:包括了全部的squid配置选项,管理员只需编辑此文件便可达到提供代理服务的目的。
   实例:
        http_port 3128
        #HTTP协议代理默认代理端口
        cache_mem  42 MB
        #开劈一块内存区域作为缓冲
        cache_dir ufs /home/squid/cache 2048 16 256
#开劈一块硬盘空间,作为硬盘缓冲区,这块区域的分布是连续的,逻辑关系由管理员设定
cache_access_log /var/log/squid/access.log
#该log文件是用来描述每次客户请求HTTP内容时,高速缓存命中或未命中的项目。同时描述提出请求的主机身份及它们所需的内容。
cache_log /var/log/squid/cache.log
#用于描述当squid守护进程启动时,可看到有多少内存、交换空间,高速缓存目录的位置,所接受的连接类型及接受连接的端口。
cache_store_log /var/log/squid/store.log
#用于描述页面从高速缓存中被调入调出的情况。
       pid_filename /var/run/squid.pid
       #管理员可以通过查看此文件了解当前执行的squid进程。
       dns_nameservers  192.168.10.1
       #定义域名解析服务器的地址
       acl all src 0.0.0.0/0.0.0.0
       #定义all
       acl manager proto cache_object
       acl localhost src 127.0.0.1/255.255.255.255
       acl SSL_ports port 443 563 
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow all
#对所有来自子网的HTTP请求均不作限制
http_access deny !Safe_ports
#禁止来自!Safe_ports的HTTP请求
http_access deny CONNECT !SSL_ports
icp_access allow all
miss_access allow all
cache_mgr root@mycompany.com
#设置cache管理员的邮件箱地址
acl whitehouse dst 209.67.27.247
#设置地址变量
acl BAD dst whitehouse
#设置禁止访问的外部地址变量
http_access deny BAD
acl whitehouseurl url_regex http://www.whitehouse.com
#设置禁止访问的外部URL
acl BAD dst whitehouseurl
http_access deny BAD
#管理员可以通过IP和URL两种方式实现对外部网站的屏蔽
reference_age 1 week
#设置缓冲区的更新周期
maximum_object_size 4096 KB
#设置允许被缓存的一次性最大请求
2./etc/rc.d/rc.local
        echo 1 > /proc/sys/net/ipv4/ip_forward
        #增加该行的意思是,打开ip_forward,使得系统能够支持IP转发。
        ipchains –I forward –s 192.168.10.0/24 –d 0/0 –j MASQ
        #设置透明代理的一种方式。
& 5.4 测试及管理方法
1.管理员更改了配置选项之后需要执行/etc/rc.d/init.d/squid restart使得更改生效。
2.在客户端的IE浏览器中需要设置代理服务器为192.168.10.1,端口为3128。
3.在配置文件中设定的cache_dir 需要通过squid –z 使得这个目录生效,当然,在squid –z之前先要更改这个目录的权限:chmod 0777 /home/squid/cache。
& 5.5 本章小节
    看完本章之后,我想各位一定有个深切的感受,squid的配置文件十分的长,而且能干的事情实在是太多了,但是我们作为一名合格的管理员应该从需求方案出发,以客户的需求为导向,配置出我们自己需要的服务器,这样不但可以满足需要,还能大大减少我们的工作量,配置squid就是一个鲜明的例子。

无盘的linux是如何实现的.基本上有两个思路,

1. 使用无盘工作站的资源来运行应用程序.
2. 使用服务器的资源来运行应用程序.

两种方法各有好处及缺点.应该根据具体的情况来决定选用的方式.

如果你的无盘工作站资源比较好.那么可以选用第一种方案.那么只有文件系统是使用服务器的.其他的就可以使用本地的.象一些设备 软驱 声卡 等资源.

另一种情况是工作站比较破,cpu 内存等 太差,那么就可以使用服务器的资源来工作. 不过一些设备就用不了了.

根据我个人的使用情况来看,第二种方式比较好.

下面就按照这个顺序来介绍. 我使用的linux版本是redhat6.2其他的系统可能有点差别,但我想也应该是可行的.

一.第一种方案.

首先你要准备一台机器作为服务器.服务器需要的服务有以下几种
dhcpd   —-(Dynamic Host Configuration Protocol)用来动态分配ip
tftpd   —-文件传输服务.(Trivial File Transfer Protocol)
nfsd    —-网络文件系统(Network File System)

dhcpd与tftpd这两个服务都很好配置.
dhcpd主要是修改/etc/dhcpd.conf.初次安装时是dhcpd的sample文件.自己看看,照着自己修改就可以用了.然后用dhcpd eth? 来启动.
tftpd主要是修改/etc/inetd.conf.把 tftpd那一行注释去掉.然后让inetd重新读取一下配置文件即可.
kill -HUP inetd
linux自己带的tftpd 性能不是很好.可以下一个改进的版本.旧的tftpd每次只传送512字节.改进的则可以多一些.

nfsd 需要配置的文件是/etc/exports. 具体的格式如下:这是我的exports文件.
/tftpboot/client1 192.168.0.2/255.255.255.0(ro,no_root_squash)
/tftpboot/client2 192.168.0.3/255.255.255.0(ro,no_root_squash)
….

然后使用/etc/rc.d/init.d/nfs start 来启动.其他的版本可能要手工启动.一共有三个进程.
rpc.mountd
rpc.rquotad
nfsd
使用ps ax看看有没有着三个进程.

无盘工作站最要紧的是bootrom.
可以制作bootrom的软件有两个。一个是netboot,另一个是etherboot.
netboot的最新版本是0.90e.etherboot的最新版本是 4.6.6。个人认为etherboot比较好。
在我用的ne2000的bootrom中。etherboot不需要网卡的io及irq然而netboot却要我输入。不对的启动不了。还有一个问题是etherboot支持的网卡比较多。不过netboot也有他的好处。以后制作bootImage比较方便。下载一个netboot和etherboot的最新版本。解开来以后都是标准的unix软件。使用
./configure
make
make install
来安装netboot. netboot如果编译通不过,可能要修改一下原文件。
etherboot只需在src 目录下make即可。
生成的rom image 在 etherboot/src/bin32中。
一般有.rom .lzrom .img 文件. .img文件时写到软盘上来模拟rom的启动.
.rom 和.lzrom一样.只是.lzrom是压缩过的.推荐使用.
使用dd if=xx.img of=/dev/fd0 来测试生成的rom是不是可以用.

如果要用netboot来做rom.相应的程序是makerom.
只要回答几个问题就可以.不过对于ne2000的网卡,需要输入io及irq.

下面我们要用软盘来模拟rom来启动.测试一下好不好用.然后再写入rom中.
找一张软盘.最好是好一些的.不过我们就用开头的几十k.在etherboot的目录下使用
cat floppyload.bin.pre 3c509.lzrom > /dev/fd0
这里使用3com509来作为例子.具体看看你的网卡是什么型号的.

服务器设置好后.把无盘工作站和服务器连接起来.在做实验是我最喜欢用一根网线连接客户机和服务器这样免得硬件出问题.搞得你焦头乱耳

客户机启动后,先把软盘的rom读到内存.然后来执行rom的内容.那个rom一般作以下的工作.
用bootp来广播自己的mac地址.然后等待dhcpd服务器的应答.
一般如果存在多的dhcpd服务器.那么得到最先反映的服务器的应答.
dhcpd服务器查找客户机的mac地址,如果要分配固定的ip.则把ip分配出去.不是固定的,在未分配的地址当中找出一个分配出去.我们需要分配固定的ip.

系统是rh6.1。

作无盘工作站需要客户端和服务器端两方面的工作,下面分别叙述。

无盘工作站客户端

这部分的主要任务是做一个EPROM的启动文件,还包括一个处理linux内核的工具mknbi-linux。
有两个package可以用,etherboot和netboot, etherboot对网卡型号有要求,支持的网卡种类不算少但不是全部,但基本上最常用的网卡都支持,比如3c503/507/509/905b,NE1000/2000/PCIne2000,Intel eepro等等。Netboot可以用ndis或pktdrv,这些在随卡带的驱动盘上一般都有,所以什么卡都能用。但这仅限于网络启动,Linux内核启动之后不支持的还是不支持。所以对网卡的要求是Linux能识别。

以下所述适用于etherboot;

1. 展开etherboot,进入src-32,编辑Config。有许多选项可以让你做多重启动、显示信息、询问口令之类的事情,但是唯一需要的是用bootp代替dhcp,即在Config中定义-DNO_DHCP_SUPPORT。因为在服务器端我们打算用bootp,所以这是必须的,否则启动时会因为寻找dhcp server又找不到启动不了。如果你准备在服务器端使用dhcp,那么这一步就不需要了。

2. make。对每种网卡都会生成两个文件 .rom和 .lzrom,后者是压缩过的。

3. 使用软盘启动验证所作的启动ROM没问题,假设你用的网卡是ne2000兼容的: 

cat ../src/floppyload.bin ne.lzrom > /dev/fd0

用软盘启动,应该能探测到你的网卡并发出bootp请求。如果一切OK,你就可以把ROM文件烧到EPROM里了。

4. cd ../netboot*;make;make install。make如果出错,解决办法是把系统中的bcc改名,然后将gcc连接成bcc,再重新make。最后在系统中会增加一个程序mknbi-linux,是用来处理linux内核的,在服务器端设置部分会讲它的用法。

客户端的工作完成了。

服务器端:

假设你的无盘工作站ip为10.0.0.1; 机器名为dc1.subnet.net,另一台无盘工作站ip为10.0.0.2,机器名为dc2.subnet.net, 服务器ip为10.0.0.254,名为server.subnet.net。

1. 修改/etc/hosts,增加dc1.subnet.net,dc2.subnet.net

2. 取得bootp-2.x.x,展开后注意把带的各种patch都打上。然后make; make install

3. 建立/etc/bootptab,like this
————————————————————————
         global.prof:
                 :sm=255.255.255.0:
                 :bf=/tftpboot/vmlinuz.nb:
         dc1:tc=global.prof:ha=0000c0863d7a:ip=10.0.0.1:
         dc2:tc=global.prof:ha=0800110244e1:ip=10.0.0.2:
    ———————————————————————
ha用无盘工作站网卡的MAC地址代替。

4. 修改inetd.conf,去掉bootpd和tftpd的#号,like this
———————————————————
tftp   dgram   udp     wait    root   /usr/sbin/tcpd    tftpd –s /tftpboot
bootps dgram   udp     wait    root   /usr/sbin/tcpd    bootpd -i
———————————————————-
kill –HUP `cat /var/run/inetd.pif`

5. 建立/tftpboot/10.0.0.1,cd /tftpboot/10.0.0.1, 
(cd /; tar cpf – lib sbin bin var etc dev)| tar xpf –
mkdir usr; mkdir tmp; chmod 1777 tmp; mkdir home;mkdir root; mkdir proc; 

mkdir mnt

6. touch fastboot; chattr +i fastboot
(fstab 中 / 和 /usr 的最后一项设成0,也许不需要这一步了,但我没试过)

以下是一个shell script,可用于自动执行以上操作。
———————————————————-
 #!/bin/sh
       if [ $# != 1 ]
       then
               echo Usage: $0 client-IP-addr
               exit 1
       fi

       cd /

       umask 022

       mkdir -p /tftpboot/$1

       # just make these ones
       for d in home mnt proc tmp usr
       do
               mkdir /tftpboot/$1/$d
       done

       chmod 1777 /tftpboot/$1/tmp

       touch /tftpboot/$1/fastboot
       chattr +i /tftpboot/$1/fastboot

       # copy these ones
       (cd /; tar cpf  – bin lib sbin dev etc var) | (cd /tftpboot/$1; tar 
xpf -)
——————————————————————————

7. 删除var下一切不需要的东西, 减小空间。删除lib/modules下一切不需要的模块。

8. 修改etc/sysconfig/network,etc/sysconfig/network-scripts/ifcfg-eth0,
etc/fstab,etc/conf.module
fstab中指明root在服务器server上,like this
—————————————————
server:/tftpboot/10.0.0.1   /       nfs   default  0  0
server:/usr                 /usr    nfs   default  0  0
—————————————————-

9. 配置etc/rc.d/rc3.d,关掉一切不需要的网络服务。

10. 删除etc/rc.d/rc6.d/K??network。

11. 修改etc/rc.d/rc.sysinit,寻找“mount –a –t nonfs,smbfs…"改成
“mount.–a –t nosmbfs…"

12. mkdir /tftpboot/10.0.0.2; cd /tftpboot/10.0.0.2; 
(cd ../10.0.0.1; tar cpf – *) | tar xpf –

13. 修改etc/sysconfig/network,etc/sysconfig/network-scripts/ifcfg-eth0,
etc/fstab,etc/conf.module

14. cd /etc; vi exports;
—————————————————————————–

/usr               dc*.subnet.net(ro)
/tftpboot/10.0.0.1 dc1.subnet.net(rw,no_root_squash)
/tftpboot/10.0.0.2 dc2.subnet.net(rw,no_root_squash)
—————————————————————————–

exportfs –a

15. 编译一个新内核,必须包含以下特性:
NFS filesystem 支持
Root on NFS 支持
Bootp 支持
无盘工作站所用的网卡型号支持

编译出新内核之后,用mknbi-linux处理,
 mknbi-linux bzImage vmlinuz.nb

将vmlinuz.nb放在/tftpboot下即可。

服务器端的工作就完成了。

注意事项:
1. 如果你打算在服务器端用dhcp,需要自己配置,参看dhcp的文档。
2. Rh6.1自带一个bootparamd,也应该能完成同样的工作,但manual中语焉不详,不知该如何设置。
3. 服务器端 / 和 /usr 最好单独分区。
4. etherboot的文档上说对有些网卡比如PCI NE2000兼容网卡,可能需要调整Makefile中的vendor信息和ID信息,我没试过。

启动你的无盘工作站,一切无误的话,它应该顺利起来。启动过程中如果有一些地方failed,可以在起来之后在无盘工作站上按一般方法设置。

缺省安装的mars_nwe
有可能不适合你,比如缺省的客户数是50个你想要多一些,那就要下载源程序重新编译了.我以前见过,在客户进程超过50个时,服务器便从网上邻居中消失了,而当服务器杀死几个进程后又能看到(那时我还不明白,总以为是Linux系统的限制) :)
在目录/etc下有一个文件:nwserv.conf,mars_nwe就是依靠这个文件来规定服务器的行为.因此要修改他,使之符合自己的要求.

我的配置文件是这样的:
第一部分,netware的卷,netware使用卷来管理硬盘.因此把linux下面的一个目录来模拟成一个卷,其中sys卷不可少,其他的卷随你便,
 1       SYS             /home/netware           k
                         ^^^^^^^^^^^^^          ^^^
                        映射的目录              属性:
   属性中可以为k:允许小写的文件名,r:只读,
   其他的我一般不用

第二部分,服务器的名字.可以修改你想要的,(mars_nwe不像samba,要自己加一行
  NetBIOSName = ? ,否则便用hostname.)
  2       LINUXSVR

我的配置文件是这样的:
第二部分,服务器的名字.可以修改你想要的,(mars_nwe不像samba,要自己加一行
  NetBIOSName = ? ,否则便用hostname.)
  2       LINUXSVR

第四部分,网络界面的IPX地址及邦定的协议.我有两块网卡,而要让eth1来接受服务
,
因此只要邦定一个便可.802.3是netware3.12及之前用的协议,我只用他.
  4      0x33    eth1    802.3   1

由于配置文件的配置说明写起来比较麻烦,我就不仔细说了,假如你想要详细的可以到http://linux.asnc.edu.cn的速成教程中看看.或者看英文的文档.

当时有一点要注意的是,网卡一点要邦定ipx协议.否则便不能启动服务器.可以用netconf来配置.很方便的.假如还不行.我想还是重新编译一下内核,把
  The IPX protocol (CONFIG_IPX) [N/m/y/?] y
选上.
  Full internal IPX network (CONFIG_IPX_INTERN) [N/y/?] n
而此项不选.

启动完服务器后,可以看看进程,应该有以下的进程
ps ax
  841 ?        S      0:15 nwserv
  842 ?        S      0:00 nwbind LINUXSVR ca.76.4a.40:0.0.0.0.0.1:4.
51 4002
  854 ?        S      0:00 ncpserv LINUXSVR ca.76.4a.40:0.0.0.0.0.1:4.
51
假如有以上的信息,那表明启动成功.
对了,启动服务器的命令是nwserv
也可以用/etc/rc.d/init.d/mars_nwe start来启动.(对于redhat)
也可以用/etc/rc.d/init.d/mars_nwe start来启动.(对于redhat)

服务器配置完后,下面便是客户机得事了.

找一张netware的盘,我用的是netware4.1的光盘.用它来设置客户机.运行client下的install,然后回答一些问题,就可以设置,但是网卡还是有点问题,假如你有网卡的驱动程序,那自然很好,对于那些ne2000兼容的网卡,你要知道irq及base address,在dos下面是很难知道的.但可用linux来查出来,我把检测的的shell在贴一遍:
#!/bin/bash
base=0
while [ $base -le 9 ]
do
  for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  do
    for i in 00 20 40 60 80 a0 c0 e0
    do
      io=0x$base$j$i
      modprobe ne io=$io
    done
  done
  base=`expr $base + 1`
done
      io=0x$base$j$i

把网卡插上后,启动linux,然后运行上面的shell(记得写完后要用chmod u+x设置为可以执行)
检测完后,该可以用硬盘启动来登陆到linux的netware仿真服务器.

由于可以仿真netware,而netware支持无盘启动,那么理论上mars_nwe也可以的.不幸的是我不会用netware,而mars_nwe中的文档也没有说明如何做.为此我借了几本netware的书看也不能搞定.主要是设定netware无盘工作站是需要一台netware服务器,然后才能移植到linux上.因此,放弃了这种想法.

第二个想法是NT也可以设置无盘客户,而现在的samba也许可以胜任.因此找来了NT4的光盘,装了一台dos客户机.不过还是不行(也许是我对samba不太熟吧)

在走投无路的情况下,我想起了linux有一个diskless的howto,便找来看看,(我以前认为是booting diskless linux client,所以没有看)有关LDP的文章,可以到http://mirror.dlut.edu.cn/LDP 中看.

下面要介绍制作无盘启动的软件:netboot
你可以到ftp://202.118.70.105/pub中下载,当前版本是0.81
你可以用netboot来制作无盘工作站中的bootrom的bootimage.

拿来源程序,首先解开它
使用 tar zxvf netboot-0.81.tgz 来做.
建议在下一步之前看看它带的文档.
第二个想法是NT也可以设置无盘客户,而现在的samba也许可以胜任.因此找来了

由于我们现在用的linux版本中的gcc比较新,因而在编译时会出一点问题,因此要修改一下源程序,以适合我们的系统.

在gcc-2.1.x中,strlen()及strcmp()函数定义及使用.在此源程序中的mknbi-mgl/mglparse.y文件不一样.一次编译便不能通过.解决办法是修改一下mglparse.y

— mknbi-mgl/mglparse.y.orig   Sun Jan  3 21:38:29 1999
+++ mknbi-mgl/mglparse.y        Tue Apr 11 12:34:19 2000
@@ -2373,7 +2373,7 @@
                        struct expr *ep;

                        /* We need this for the code generator */
–                       static struct sym strlen = {
+                       static struct sym str_len = {
                                funcsym, "", 0, -1, {
                                  { 0, 0, CMD_STRLEN, 1, &int_type,
                                    { &string_type },
@@ -2387,11 +2387,11 @@
                            exprtype($1) == EXPR_STRING &&
                            $3 != NULL && !strcmp($3->name, "len")) {
                                ep = newexpr();
                            $3 != NULL && !strcmp($3->name, "len")) {
–                               ep->type = strlen.def.f.ret;
–                               ep->opcode = strlen.def.f.opcode;
–                               ep->exprnum = strlen.def.f.argnum;
+                               ep->type = str_len.def.f.ret;
+                               ep->opcode = str_len.def.f.opcode;
+                               ep->exprnum = str_len.def.f.argnum;
                                ep->exprlist[0] = reorg($1);
–                               ep->spec.func = &strlen;
+                               ep->spec.func = &str_len;
                                $$ = ep;
                                break;
上面中减号是指去掉相应的行,加号是指增加相应的行.(其实就是把strlen改成str_len)修改完后,便可以编译通过了.

在试验过程中,渐渐发觉无盘工作站的好处.
其实现在的网卡非常快,好一点便可以到100M,因此在对服务器的读取时的等待时间大大减少了.另外一个好处就是,能使你的破机器得到新生.
你在工作时可以的登陆到服务器上(指使用Linux系统),这是客户机就仅仅是一个终端了,一般来说可以做X终端.从而充分利用服务器的资源.(我仅仅试验了dos,Linux终端还没有做好)

要设置无盘的工作站,总的来说,要配置server及client.
其实我们以上的所作的还是很少的一点.server端一共要设置以下几个服务:
dhcpd——->动态分配ip地址,这个比较常见.
tftpd——->(trival file transfer protocal)一个文件传输协议.它是建立在

UDP的基础之上,而ftp是建立在TCP上.它的连接时不太可靠的,即当文件在传输过程中发生了错误,客户机发现后不能让服务器重新发包.
你可能会问:我们在这里为什么用它呢?ftp协议不好吗?
我认为有以下的原因:1.tftp协议一般用在LAN中,比起WAN来,出错的可能性小.
2.网卡的rom非常小.以前用的是8kb,现在一般用16kb,或者32kb.要在这么小的空间内处理这么多的事.程序当然不能太大.而tftp协议相对简单些.你在工作时可以的登陆到服务器上(指使用Linux系统),这是客户机

tftpd在安装linux是一般都缺省安装了.假如你没有tftpd这个文件,那可能你没有

安装.还是找redhat6.2的光盘.在RPMS目录里找tftp*的rpm 包,然后安装.
有了tftpd这个服务后,然后修改/etc/inetd.conf,找到有tftp 的那一行,把注释去掉,重起inetd服务.

下一步是安装dhpcd服务,dhcpd服务是动态分配ip地址,可以节约ip.比如你有50台机器,但是只有40个ip地址,那么动态分配ip便能达到目的.我们现在拨号上网的ip便是由ISP动态分配的.
动态分配ip的缺点是客户机的ip地址在每一次申请时都不一样,这对于要提供服务的客户机来说是不能忍受的.另一个缺点是由于客户机每次都要向服务器申请,故启动时会慢一点点.

有一个办法让客户机拥有一个固定ip是把此ip和客户机的MAC地址邦定.当客户申请ip时,假如它的MAC是我们预定的,那么便给他分配指定的ip.我们在这里便使用这个办法来让无盘工作站得到固定的ip及启动文件.

安装dhcpd非常简单,rpm后,到/usr/doc/dhcp-2.0/中,
把dhcpd.conf.sample 拷贝到/etc/目录下,改成dhcpd.conf
用以下命令:
我们现在拨号上网的ip便是由ISP动态分配的.
#cp /usr/doc/dhcp-2.0/dhcpd.conf.sample /etc/dhcpd.conf

下一步是修改配置文件,使它符合我们的要求.

dpcpd.conf非常简单,下面是我的dhcpd.conf

subnet 192.168.0.0 netmask 255.255.255.0 {
        option routers                  192.168.0.158;
        option subnet-mask              255.255.255.0;

        option domain-name              "dlut.edu.cn";
        option domain-name-servers      202.118.66.6;

        option time-offset              -5;

        range dynamic-bootp 192.168.0.150 192.168.0.255;
        default-lease-time 21600;
        max-lease-time 43200;
        host ben {
                hardware ethernet 00:40:05:27:09:97;
                fixed-address 192.168.0.234;
                filename "/tftpboot/bootdos";
        }
        max-lease-time 43200;
}
上面几行是动态分配ip时的路由,域名服务器等等.而最下面的几行是我们要设的.
host ben {
                hardware ethernet 00:40:05:27:09:97;
这两行是说明主机ben的网卡地址为00:40:05:27:09:97;
                fixed-address 192.168.0.234;
分配一个固定的ip,为192.168.0.234
                filename "/tftpboot/bootdos";
这个是我们下一步要生成的文件.也是无盘工作站的启动镜像盘.

要生成无盘工作站的启动镜像,这就要用到我们以前安装的的netboot了.

安装完netboot后,会生成几个实用工具,其中有一个是我们现在要用到的.mknbi-dos.这个实用程序是用来做启动镜像的.

在做启动镜像之前,当然要做一张dos启动盘.这张启动盘里可以加一些其他的工具,但不必太多.另外最重要的是要有netware的客户端!(我们要登陆到我们以前设定的netware服务器!)
一般.安装netware客户端时大都安装在C盘.你可以把C:NWCLIENT这个目录拷贝到软盘上,不过要改一下startnet.bat,把路径改一改.然后用这张启动盘启动一下你的客户机,如果没有问题,也可以登陆到netware服务器,那么便好了.

回到linux服务器上,把软盘插上,
#mknbi-dos -r /dev/fd0 -o bootdos
其中-r选项是指定软驱,-o 是生成名为bootdos的文件.
生成后在根目录下建立一个/tftpboot的目录,把它拷到这个目录下,然后改属性,让任何人都可读.

下一步要生成无盘工作站的bootrom的镜像,要用到makerom这个实用程序.

一般要回答几个问题,推荐生成32kb rom

在makerom时会生成两个文件,image.rom和image.flo
我们要先测试一下,要不然,就写到rom上,不好用会很麻烦.(比如要用紫外线擦写,然后才能固化)

使用dd if=image.flo of=/dev/fd0 来把image.flo写到软盘上,然后用这张软盘启动,一般来说应该没有问题
假如不能找到服务器,那多半是网卡的的中断或base address 没有设好,用网卡的驱动盘看看,要不,就是dhpcd服务没有设好
假如能拿到ip,但是不能得到文件,看看文件名吧.

无盘工作站启动后,那该祝贺祝贺了.
这时该可以登陆到我们的"netware" 服务器了.

&
  
  &用在其他任何命令的后面,它用来通知计算机在后台运行某一命令。通过把作业放在
后台,用户可以继续使用当前的shell来处理其他命令;如果命令在前台运行,那么用户
在此进程结束前不能继续使用当前的shell 。
  
  adduser
  
  adduser命令由root或其他具有权限的管理员用来创建新用户,跟在adduser命令后面
的所要创建的帐号名,例如:
  
  adduser test
  
  alias
  
  alias命令用来设置命令的别名或替代名。例如:下面的命令为ls设置了一个别名dir

  
  alias dir=ls
  
  当仅仅输入alias本身时,将显示当前所有的别名。
  
  bg
  
  bg命令用来迫使被挂起的进程在后台运行。例如,当你已经在前台启运了一个命令时
(没有在此命令后面使用&),意识到这一命令将运行将长一段时间,但此时还须使用s
hell。在这种情况下,可通过在按下Ctrl键的同时按下Z键挂起当前运行的进程。此时你
既可以使它长期挂起,也可以通过输入bg把这一进程放到后台运行。这样便可以把shel
l解放出来,从而用于其他命令的执行。  
  
  cat
  
  这个命令用来显示文件的内容,语法是:
  
  cat [文件名]
  
  cd
  
  这个命令和DOS的cd命令是一样的,除了一般的用法之外,还有一些特殊用法:
  
  cd ..               移到目录树的上一层
  
  cd ~[用户名]
  
  移动到用户的宿主目录,例如cd ~wanghy
  
  chgrp
  
  chgrp命令用来改变文件或目录所属的用户组。仅有超级用户和文件的属主具有改变文
件所属用户组的权力,这一命令的格式是:
  
  chgrp  [组名] [文件名]
  
  例如 chgrp wanghy test
  
  chmod
  
  chomd命令用来改变对象(通常是文件或目录)的访问权限,其实也就是改变文件模式
。有两种方法可以用来指定对象的权限,一种方法是使用数字编码系统,另一种方法是
使用字母编码系统。如果回忆一下,可以记起与每个对象关的有三类用户,这三类用户
分别是:对象的属主、对象所属用组中的成员以及其他用户。当使用字母编码系统时,
将分别用不同的字母来表示他们,其中u代表拥有对象的用户,g代表同一用户组的成员
,o代表其他用户,a代表所有用户。人们可以对三种基本的权限类型进行改变,这三种
类型读权限、写权限和执行权限,其中r代表读权限,w代表写权限,x代表执行权限。这
三种权可通过使用加号(+)和减号(-)进行修改。例如,要为test1文件的属主和同
组的用户添加读和执行的权限,可运行如下命令:
  
  chmod ug+rx test1
  
  要从test1文件的属主和同组用户的权限中删除读权限和权限,需要把加号(+)改变
为减号(-):
  
  chmod ug-rx test1
  
  这种方式称为文件模式的相对修改。
  
  当使用数字编码系统时,需要设定权限的绝对方式的值,而不管它们以前的权限。数
字系统使用三组以2为基数的数字为基础,每一组数字针对于属主、同组成员以及其他用
户中的一类,它的值分别是4、2、1;这里的4表示读,2表示写,1表示可执行,这些值
加起来的和将确定该类用所具有的权限。利用数字编码,一般要同时指定三类用户的权
限。因此,要想使test1文件的属主具有读、写执行权限,而同组用户和其他用户不具有
任何权限,需要使用700,具体命令如下:
  
  chmod 700 test1
  
  要想使这一文件对于属主具有可读和可写的权限,对于同组的用户和其他用户具有只
读的权限,需要按照下面的数学逻辑来计算权限值。对于第一组权限,也就是属主的权
限,可读的值是4,可写的值是2,两者之和是6;对于下一组权限,也就是同组用户权限
,由于它是中读的,因此值是4;其他用户与同组用户相同,它的值也应该是4。因此,
这一命令应该是chmod 644 test1。
  
  chmod 的格式是
  
  chmod [模式] [文件]
  
  chroot
  
  chroo命令用来把根目录设置为其他目录而不是文件系统的/。例如,在管理Interne
t 服务器时,可以把根目录设置为/usr/ftp,此时当某个用利FTP注册到系统时(在缺省
情况下,将时入根目录中),他将进入到/usr/ftp目录中,这可以使匿名客户看不到并
且也不能改变到系统的其他目录。如果用户通过命令cd/etc打算进入etc目录,ftp程序
将首先把他放在根目录中,然后再从根目录进入etc目录。由于目前的根目录是usr/ftp
,因上ftp程序实际上将把这一用户放入到/usr/ftp/etc目录中(假设在/usr/ftp目录中
存在etc目录)。这一命令的语法是:
  
  chroot <original filesystem location> <new filesystem location>
  
  cp
  
  cp命令用于拷贝文件,语法是
  
  cp [源文件名] [目标文件名]
  
  dd
  
  这个命令用来写文件系统的直接映像,详情参考第九章。
  
  env
  
  env命令用来查看环境变量。
  
  fg
  
  fg命令可用来激活某个被挂起的进程并使它在前台运行。例如,你用^Z组合键挂起某
个进程之后,想要将它重新调度到到前台运行,此时便可以使用fg命令使这一进程继续
运行。
  
  find
  
  find命令用来传递给它的目录及其所有子目录中查找指定的文件。
  
  这个命令的一般用法是:
  
  find [目录名] -name [文件名]
  
  例如在/pub及其所有子目录下面查找test.doc文件,执行
  
  find /pub –name test.doc
  
  grep
  
  grep (global regular expression parse全局正则表达式分析)命令用来在指定的对
象中搜索指定的文本。这一命令的语法是:
  
  grep [表达式] 文件名
  
  如果不使用文件名,就使用标准输入,我们通常可以通过管道调用grep,例如
  
  ps ax|grep sendmail
  
  gzip
  
  gzip是GNU版本的zip压缩软件,它的格式是:
  
  gzip  [文件名]
  
  halt
  
  关闭系统。
  
  hostname
  
  显示当前的主机名,如果加上一个字符串可以设置当前的主机名字。
  
  kill
  
  kill 用来向指定的进程发送指定的信号。如果没有为kill命令指定信号,将向进程发
送TERM信号。
  
  语法是
  
  kill –[信号] [进程ID]
  
  less
  
  less命令用来在控制台上显示一个文本文件的内容。它可以上下滚卷和翻页。
  
  login
  
  当向系统注册时,将使用login。Login命令也可用来随时从这一用户改变到另一用户

  
  logout
  
  logout命令用来使当前用户从系统中注销。如果他是你使用的注册到系统的唯一用户
,那么将退出系统。
  
  ls
  
  ls命令用来列出目录的内容,没有任何选项的ls命令将按照字母顺序列出所有非隐藏
文件(文件名以圆点开始的文件是隐藏文件)。如果要显示所有文件,使用ls –a命令
;如果要显示文件的详细信息,使用ls –l。
  
  make
  
  这个程序用来自动编译源代码。
  
  man
  
  man命令显示联机手册页面。
  
  mesg
  
  是否允许其它用户在自己的终端上写信息。如果你想让别人能用talk或者write向你发
送信息,必须允许写访问。缺省状态是允许写访问。
  
  允许写访问:
  
  mesg y
  
  禁止写访问
  
  mesg n
  
  mkdir
  
  mkdir命令用来创建新的目录。语法是
  
  mkdir [目录名]
  
  makefs
  
  makefs用来在某一设备上创建Linux文件系统。
  
  mkswap
  
  mkswap用来在某一设备上(通常是某个磁盘分区)创建Linux交换区。
  
  more
  
  在控制台上显示文件内容,但是与less不同,它只能从前向后翻卷。语法是
  
  more [文件名]
  
  mount
  
  用来安装文件系统。
  
  mv
  
  移动文件和目录。用法是:
  
  mv [源文件名] [目标文件名]
  
  netstat
  
  netstat用来示网络连接的状态。
  
   passwd
  
  对于一般用户(非超级用户)来说,passwd命令不需使用变量。这一命令首先要求用
户输入老口令;接着,将要求用户输入新口令,并需要再次输入,以确保口令被正确地
输入。新口令的长度必须至少是六字符,并且必须包含一个大写字符或者是非字母字符
。除此之外,新口令不能与被替换的口令相同,也不能与用户的ID(帐号名)相同。
  
  如果passwd命令由超级用户来执行,它后面可以跟一个或两个变量。如果它后面跟的
是单一的用户ID,那么超级用户可以改变那一用户的口令,超级用不受任何权限的约束
。如果在用户的ID后还有一个变量,那么这一变量将成为该用户的新口令。
  
  ps
  
  ps用来报告进程的状态。
  
  pwd
  
  pwd用来显示当前的工作目录。
  
  rm
  
  rm用来删除指定的文件。语法是:
  
  rm [文件名]
  
  在缺省情况下,rm命令不删除目录。

  
  使用-r参数可以递归地删除子目录中的所有文件,例如
  
  rm –r ./local
  
  如果想要避免出现提示信息,可以使用-f参数。
  
  rmdir
  
  rmdir用来删除指定的空目录,这里的“空”是关键词。语法是:
  
  rmdir [目录名]
  
  shutdown
  
  shutdown命令用来关闭系统。
  
   su
  
  su命令用来切换用户身份。
  
  swapoff
  
  swapoff命令用来终止对某个块设备交换。
  
  swapon
  
  swapon用来打开对某个块设备的交换。
  
  tail
  
  把某一给定文件的最后十行打印到标准输出。
  
  talk
  
  talk命令用来通过终端同其他用户进行交谈。语法是:
  
  talk [用户名]
  
  tar
  
  tar是一个用来存储和归档的程序。
  
  umount 
  
  用来卸下文件系统。
  
  unalias
  
  unalias用来取消别名。在前面介绍alias命令时,曾把dir设置为ls命令的别名,要取
消这一别名,只须输入unalias dir。
  
  unzip
  
  unzip用来从zip档案文件中展开文件。用法是:
  
  unzip [文件名]
  
  wall
  
  wall用来把标准输入的内容显示在当前注册到系统的所有用户终端上。
  
  用法是wall [消息]。
  
  who
  
  who命令用来显示当前登录到系统的每个用户的注册名、终端类型、注册时间和远程主
机名。
  
  zip
  
  用来压缩某个文件。用法是:
  
  zip [归档的zip文件名] [被压缩的文件名]
  
  例如,下面的命令会创建doc.zip并且将所有.doc文件压缩到里面:
  
  zip doc *.doc
  
  附录B:joe 使用简介
  
  joe是Linux初学者最常用的编辑工具,虽然没有vi和emacs功能强大,但是它具有丰富
的热键和快速的运行效率。通常的Linux发行版本都会包含joe,即使没有,你总可以自
己编译它。
  
  启动joe
  
  要启动joe,执行
  
  joe  <文件名>
  
  <文件>是可选的,例如你编辑一新的文件叫test.txt你可使用 joe test.txt 来建立
并编辑这个件,也可直接键入joe 来编辑文件然后在存盘时输入test.txt这个文件名,
在这一点上与dos的edit一样。
  
  编辑操作
  
  删除 
  
   Backspace 键删除左边的一个字符
  
  Delete键删除右边的一个字符。
  
  ^Y 删除整行
  
  ^J   从光标当前位置删除到行尾
  
  ^_ 恢复
  
  移动光标
  
   支持键盘定义的前后翻页,上下左右移动光标的键,同时还可用组合来移动光标。
  
   ^U 向前移动一屏幕
  
      ^V 向后移动一屏幕
  
   ^A 移动到行首
  
   ^E 移动到行尾
  
   ^KU  移动到文件首
  
   ^KV   移动到文件尾
  
   ^KL   移动到第几行
  
  块使用
  
   ^KB  定义块首
  
   ^KK  定义块尾
  
  ^KM  块移动
  
   ^KC  块复制
  
   ^KW  块写文件
  
   ^KY  块删除
  
 
  
  查找
  
   ^KF  查找
  
   ^L  查找下一处
  
  文件操作
  
   ^KE  编辑新文件
  
   ^KR  在当前位置插入另外一个文件
  
   ^KD  文件另存
  
  退出
  
   ^KX  存盘退出
  
   ^C  退出

在/etc/services文件中有如下的两行,这是配置服务的:

cvspserver      2401/tcp                        # CVS client/server operations
cvspserver      2401/udp                        # CVS client/server operations

然后如果是使用inetd来启动,那么需要修改修改/etc/inetd.conf文件,
如果使用xinetd,那么就需要在/etc/xinetd.d/目录下加入一个启动cvs的脚本
我的系统使用的是red hat7.0,所以就加入如下的脚本到/etc/xinetd.d/下
[root@local /]# less /etc/xinetd.d/cvspserver 
# default: off
# description: The SPOP3 service allows remote users to access their mail 
#              using an POP3 client with SSL support such as Netscape 
#              Communicator or fetchmail.
service cvspserver 
{
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = root
        server                  =  /usr/bin/cvs
        server_args             =  –allow-root=/source pserver
        log_on_success          += USERID
        log_on_failure          += USERID
        disable                 =  no
}
如果使用inetd,也可以修改inetd.conf,很简单的。
完成这些之后,就可以重新启动inetd/xinetd了。
然后执行cvs的命令就可以正常使用cvs了。

不过需要注意的是远程使用需要设置一下客户机:
CVSROOT=:pserver:user@host:/cvsrootdir:
export CVSROOT
cvs login
需要将前面两句加入到你的启动脚本中去。
如果还有什么问题,请访问http://www.cvshome.org/docs/manual/

添加:iptables -A FORWARD -d 10.0.0.1/32 -j ACCEPT
去掉:iptables -t nat -A POSTROUTING -s 10.0.0.1 -o eth0 -j SNAT –to 211.123.123.124 

这是因为
iptables -t nat -A PREROUTING -i eth0 -d 211.123.123.124 -j DNAT –to 10.0.0.1 

这一句其实已经自动包含了上一句的规则(通过/proc/net/ip_conntrack实现自动包含的功能) 

全部iptable规则如下:

1、用iptables作NAT访问外网,成功! 
2、用iptables作NAT把202.123.123.124这个IP映射到10.0.0.1上,外网访问211.123.123.124即访问到10.0.0.1,成功。

iptables配置如下,求助! 
/sbin/modprobe ip_tables 
/sbin/modprobe ip_nat_ftp 
/sbin/modprobe ip_conntrack_ftp 

echo 1 > /proc/sys/net/ipv4/ip_forward 

iptables -F INPUT 
iptables -F FORWARD 
iptables -F POSTROUTING -t nat 

iptables -P FORWARD DROP 
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT 
iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT 

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE 

iptables -t nat -A PREROUTING -i eth0 -d 211.123.123.124 -j DNAT –to 10.0.0.1 
iptables -A FORWARD -d 10.0.0.1/32 -j ACCEPT

Q:有一台机器A能出国(假设192.168.0.1),我(B机器:192.168.0.2)在A机器上装了一套代理服务器软件,开8080端口,但是被A机的防火墙(疑似iptables)给封住了,我有A机器上的普通用户帐号,没有root权限,怎么突破防火墙实现使用A代理出去啊?

A1:用ssh的port tunnel。将A机的8080映射到你B机的某个端口,如8080,这样就可以在本机上设置代理为127.0.0.1:8080

A2:还可以A机器代理软件都不装.
B:ssh -D 1080 A
这样本地的1080端口就是一个通过A机上网的socks4端口了.设好socks代理客户端就好了
=========================

管理员不会傻到只装telnet或者聪明到连ssh都不装吧?
现在默认都是安装sshd的
开ssh而傻到不关闭forward

Q:在本地启动远程主机的X么?

A:先将sshd的配置文件改一下,将 forward x11 改成yes,然后ssh过去,直接运行x 程序就可以在本机显示了。如果你是win32主机,需要安装一个exceed之类的xserver。redhat的sshd是默认允许forward x11的,debian是默认不允许的。

谈到重建,大家都有一种摸不着头脑的感觉,原因是内核选项给人实在太多的无赖,不光需要知道那一项是干什么的,还要知道自己的硬件到底是什么样的。下面的解说只是给大家作一个参考,别人领进门,修行在个人,能否配置好自己的内核,做到全面而短小,这全要靠自己。有一点是要提醒大家的:内核的配置是一件很考验人的意志的任务,不要因为几次失败而放弃!笔者也曾经经历过那段难熬的岁月,所以提醒大家–不要气馁。

prompt for development and/or incomplete code/drivers
很多参考书上说这是那些开发人员认为还不是很稳定的功能,但是根据我的经验,这个是应该选的一个选项,因为现代的LINUX是建立在这些基础上的,所以应该可以回答Y,除非你只是想使用LINUX中已经完全定型的东西,但性能肯定不会好到哪,而且对系统特性的支持也不会好。

processor family (386,486/cx486,586/k5/5×86/6×86,pentinum/k6/tsc,ppro/6×86)
这应该没有太多可说的吧,选择你的CPU的种类,BIOS可以自检得到,注意系统的启动信息。需要注意的是不能选择比你的CPU类型还高级的CPU,否则可能不能正常工作。

math emulation
模拟数学协处理器,如果你的机器没有数学协处理器,那就选上以提高性能,但486以后数学协处理器就集成到CPU内部了,应该是用不上的,所以一般的选择是N。当然选上也不会有什么问题,除了内核稍稍变大外。

mttr(memory type range register) support
这个选项是用来启动pentinum pro和pentinum II 的特殊功能,如果你用的不是这类CPU就选N,否则也仅仅是使内核变大而已。

symmetric multi-processing support
同步处理器支持,如果你有多个CPU就选上吧。

enable loadable module support
这会启动动态载入额外模块的功能,所以一定选上。

set version information on all symbols for modules
这个选项可以为某个版本的内核而编译的模块在另一个版本的内核下使用,但一般用不上。

kernel module loader
如果你启用这个选项,你可以通过kerneld程序的帮助在需要的时候自动载入或卸载那些可载入式的模块。建议选上。

networking support
如果你用到任何网络就应该选上

pci bios support
这个一般是应该选上的,除非你用没有任何PCI设备的机器。PCIBIOS是用来侦测并启用PCI设备的。

pci bridge optimization(v1.3)
当这个选项被启动时,操作系统会对从CPU和系统内存在PCI总线来往的数据做最佳化,这个功能已经完成实验阶段,使用起来应该很安全,而且还可增进系统的效率。

system v ipc
起用这个选项可以使内核支持System V 的进程间通信的功能(IPC),有些从System V转移过来的程序会需要这个功能,建议启用该功能。

sysctl support
除非你的内存少的可怜,否则你应该启动这个功能,启用该选项后内核会大8K,但能让你直接改变内核的参数而不必重新开机。

kernel support for elf binaries
该选项让你的系统得以执行用ELF格式存储的可执行文件,而ELF是现代LINUX的可执行文件、目标文件和系统函数库的标准格式。当操作系统要和编译器以及连接器合作时会需要这些标准,所以应该回答Y。

compile kernel as elf
这选项让你的内核本身以ELF的格式编译,如果你的系统上的过程gcc默认产生ELF格式的可执行文件,那么你就应该启动这个选项。先看看你的编译器的版本再决定。

parallel port support
如果你有任何并行口的设备并且想让LINUX使用,那么就可以启用这个选项。LINUX不仅可以使用并口的打印机,还可以支持PLIP(一种为并行口而设计的网络通讯协定),ZIP磁盘驱动器、扫描仪等。在大多情况下,你需要额外的驱动程序才能使用外接的并口设备。

plug and play support
支持PNP设备并非Microsoft的专利,如果你要让LINUX也支持PNP设备,只要启用该选项就可以,但有些情况下会和其他设备产生冲突(I/O,DMA,IRQ等)。这个选项对PCI设备没有影响,因为他们天生就是PNP设备。

normal floppy disk support
除非你不想在LINUX下使用软盘,否则就应该回答Y。但对于一些不需要支持软盘驱动器的系统而言,这个选项可以节省一些内存。

enhanced ide/mfm/dll disk support
除非你不需要MFM/DLL/IDE硬盘的的支持,否则就应该回答Y,但如果你只有SCSI的硬盘,关掉这个选项会比较安全。

enhanced ide/mfm/dll cdrom support
和上面的类似,只不过是对CDROM的支持而已。

enhanced ide/mfm/dll tape support
一般没有多少人在用磁带机吧,所以回答N是比较好的答案。

enhanced ide/mfm/dll floppy support
这个设备好象一般也没有人用,所以也可以回答N。

xt harddisk support
如果你有这种石器时代的XT硬盘,那么恭喜你你可以用上他了。

parallel port ide device support
LINUX是支持这种很新的并口的IDE设备的,如果你有的话就用上
吧。

networking options
如果你在前面选了支持网络的话,在这里会回答很多问题。除非你有特别的需求,否则使用默认的选项应该就足够了。

scsi support
如果你有任何一种SCSI控制卡,这个选项就应该回答Y。事先搞清楚你的硬件的类型,因为这些问题都是针对特定的SCSI控制芯片和控制卡的,如果你不确定自己使用的是哪一种,查看你的硬件的说明文件或者LINUX的HOWTO文档。同样也会让你回答很多SCSI设备的支持(硬盘、CDROM、Tape、floppy等),依据你的情况选择。如果你没有SCSI设备的话,建议不要支持,因为这会节约很多内核空间。

network device support
这里面有很多关于网络控制卡的问题,如果你无法确定如何正确选择,查看硬件文档或LINUX HOWTO文档。

amateur radio support
这个选项可以用来启动无线网络的基本支持,目前的无线网络可以通过公众频率传输数据,如果你有此类设备就可以启用,具体请参考AX25和HAM HOWTO 文档。
isdn subsystem
如果你有ISDN硬件就应该启用该选项并安装合适的硬件驱动程序,你应该还会需要启用Support synchronous PPP选项(参考PPP overISDN)。

old cd-rom drivers
这是针对一些特殊光盘驱动器程序的问题,如果你有IDE或SCSI的CDROM控制卡,那么就不用启用该选项了。

character devices
LINUX支持很多特殊的字符设备,例如并口、串口控制卡、QIC02磁带驱动器以及特定界面的鼠标,此外对于游戏杆和影象摄取和麦克等也在这里面,依据你自己的情况选者吧。

filesystems
这是一系列内核所支持的各文件系统的问题,对ext2 /proc文件系统是一定应该支持的,有光驱还应该支持ISO9660(或模块支持),有WINDOWS或DOS分区并且想在LINUX下访问他们也可以进行支持。

console drivers
你至少应该支持VGA text console,否则你无法从控制台使用LINUX。

sound card support
在这里回答Y会出现很多关于声卡的问题,根据你自己的情况来配置。

kernel profiling support(v1.3)
这个选项可以开启内核做效率统计的功能,并且会提供其他在为系统侦错时有用的信息。这些功能会需要付出一些代价并造成系统执行得较为缓慢,除非你正在研究内核的某个问题,否则你应该回答N。

kernel hacking
如果你正打算深入研究自己系统上运行的LINUX如何运作,这里有很多选项,但一般没有必要的话可以全部关掉。