【资料】Linux基础教程

6楼
【资料】Linux基础教程 第3章 安装Linux系统
第3章 安装Linux系统

本章要点:

本章概略地叙述安装Linux的基本步骤和必须注意的问题。

本章具体包括以下内容。

安装Linux服务器应该做的准备工作

三种常见版本(RedHat,TLC,S.u.S.E)的安装过程

3.1 准备工作

在安装任何Linux发行版本之前,你首先应该做一些准备工作,包括收集系统信息,准
备安装版本等等,特别地,你应该进行一个安装规划。我们现在就来介绍一下安装之前
的准备要点。

3.1.1 获取Linux发行版

Linux发行版本可以从网络下载,也可以直接购买发行光盘。

目前下载Linux发行版本的站点相当多,如果你有一条64KB以上的DDN或者ISDN专线,
并且有让下载工具连续运行几天几夜的准备,那么下载总是要比购买cdrom来的容易一些
(因为Linux版本升级非常快,往往升级版推出半个月以后才能在本地买到发行盘)。

如果你不涉及国际流量问题,可以直接到发行商的主站点去下载光盘映像,然后烧制
成CD-R,或者拷贝到硬盘上安装。由于安装时的文件名大小写问题,我们一般建议将下
载的文件放到你的本地服务器上,通过ftp安装,然而这要求你首先有一台基本的linux
服务器。否则,你就需要烧制CD-R了。

如果有国际流量问题,可以考虑到教育网内的某个站点下载。另外,Turbo Linux公司
设有国内分公司,可以到www.turbolinux.com.cn去下载TLC的最新版本。

到市场上的软件连锁店直接购买Linux 光盘发行版,用光盘来安装是最方便快捷的。
目前RedHat,TurboLinux和corel都可以在连锁店买到。一定要注意,大部分Linux发行
版本有“完整版”和“精简版”的区分,例如TurboLinux有1CD,3 CD和10CD三个版本。
如果你是用Linux为你的单位构造网络服务器,我们总是建议你购买完整版本,毕竟价格
差不多。不过如果你想要使用SuSE之类不常见的版本,你还是得把网络打开转上几天几
夜。

我们建议你用一种Linux版本为基础,然后抽取别的版本中的优秀产品组合成你的服
务器软件。作为基点,RedHat(3CD版)和TurboLinux(10CD)都不错。

3.1.2 准备服务器硬件

①CPU

Linux 在Intel 80386, 80486, Pentium, Pentium Pro, Pentium II, Pentium
III ,Celeron ,AMD K6-2 (3DNow),AMD K6-3这几款cpu下能很好的工作,而非Inte
l 的 CPU ,主要包括:Cyrix 6x86,AMD K6,AMD K5,AMD,Cyrix MediaGX chip,WA
RNING出现问题的机会似乎比较多。需要补充的是6x86MX据说在Linux下的表现远好于原
来的6x86。不过,话说回来,你真的穷到要用6x86MX做服务器的程度吗?

一台装配PII以上CPU的Linux在服务量不是非常大时就能很好的工作,如果配备双CPU
那就可以和一台中档的名牌服务器相媲美。Linux对双CPU的支持还算不错,但如果你是
购买的发行版本,那么你在安装后经常需要重新编译内核才能充分发挥双CPU的威力。详
情可以参考第四章。

②主版

Linux支持市面上出售的大多数主板,在选购主板应该考虑是不是支持你的CPU,如果
采用双CPU还考虑买一块兼容的主板。笔者认为在主版的选购时要注意名牌效应,条件允
许一定要买名牌的。

③内存

Linux对内存的品牌没有特殊的限制,只是要求内存最小是 16MB,当然这个数字就我
感觉跟说用32MB内存跑Windows NT差不多。大体上,作为一台服务器,你可以从64MB内
存开始,至于多到多少,反正上限是2GB,现在条子这么便宜,你自己看看你的机器上有
多少个槽就行了。Linux对内存的质量要求比较一般。

④Linux支持的硬盘控制器/硬盘

Linux 支持标准的IDE、EIDE、MFM/RTL控制器。

IDE设备在工作是要占用CPU的处理时间,如果同时有几百个访问,这样占用CPU处理的
时间就急剧增加,系统的负担急剧上升,如果选用SCSI接口卡设备的话就可提高系统的
效率。Linux 并不支持并口的 SCSI 卡,在Linux下兼容的SCSI 列表么……反正我不想
介绍了,你自己去看兼容性列表,目前的Linux内核对BusLogic,AHA之类的大牌SCSI卡
支持还不错,但是肯定不如windows NT那么多。实在不行你可以跟零售商说:“不支持
Linux我可不要啊。”如果你真的预算紧张,那么也可以使用IDE硬盘,不过目前的Linu
x内核似乎对UDMA66不能正确支持,你可能仍然使用标准的DMA-33硬盘。

Linux 也支持磁盘阵列。

⑤网卡

Linux 以其强大的网络功能而著称,选择一块合适的网卡是十分必要的。在选择网卡
是要注意网的性能和兼容性。对于用Linux作为服务器的用户选择一块100M的以太网卡可
在很大程度上提高服务效率。下面就是一些在Linux下能很好工作的网卡:

3Com Etherlink III (3c509 EISA)

3Com 3c59x, 3c900, 3c905 (Not the 3c905B and C, see below) 3c579

Digital DE425, DE434, DE435, DE450, DE500 (uses DE4x5)

Digital 2104x,2114x ``Tulip'' chip cards, SMC DEC21041 , SMC PCI EtherPowe
r (uses Tulip driver)

Intel EEPro100 (PCI),EtherExpress i82557/i82558 PCI Pro/10+。

3Com 3c503, 3c503/16, 3c505, 3Com Etherlink 16 (3c507)

Allied Telesis AT1500 (uses Lance driver), AMD Lance/PCnet, HP J2405A, NE2
100, NE2500

AMD PCnet32 and AMD PCnetPCI

Apricot Xen-II, 680x0 VME (82596 chipset)

Ansel Communications AC3200 EISA

AT&T GIS WaveLAN ISA

Alteon AceNIC Gigabit Ethernet Driver

Allied Telesis AT1700

Aironet Arlan 655

Cabletron E21xx

Crystal LAN CS8900/CS8920

Comtrol Hostess SV11

Compaq Netelligent 10/100 TX PCI UTP, 10 T PCI UTP, Compaq Integrated
NetFlex 3/P, Compaq Netelligent Dual 10/100 TX PCI UTP, Compaq Netelligent I
ntegrated 10/100 TX UTP, Compaq Netelligent 10/100 TX Embedded UTP, Compaq N
etelligent 10 T/2 PCI UTP/Coax, Compaq Netelligent 10/100 TX UTP, Compaq Net
Flex 3/P

100VG-AnyLan Network Adapters, HP J2585B, J2585A, J2970, J2973, J2573,Comp
ex ReadyLink ENET100-VG4 & FreedomLine 100/VG

D-Link DE600, DE620 pocket adapters

D-Link DFE-930-TX PCI 10/100, VIA Rhine PCI Fast Ethernet cards with eithe
r the VIA VT86c100A Rhine-II PC or 3043 Rhine-I

Digital DEPCA & EtherWORKS, DE100, DE101, DE200 Turbo, DE201 Turbo, DE202
Turbo, DE210, DE422

Digi Intl. RightSwitch SE-X EISA and PCI

EtherWORKS 3 (DE203, DE204, and DE205)

Fujitsu FMV-181/182/183/184

HP PC-LAN Plus

HP PC-LAN (27245B and 27xxx series)

HP AnyLAN, 10/100VG, PCLAN (J2577, J2573, 27248B, )

Intel EtherExpress 16

Intel EtherExpress i82595 Pro10/10+ (ISA only)

MiCom-Interlan NI5010 ethercard

Mylex LNE390 EISA cards (LNE390A, LNE390B)

NE1000/2000 and compatible ISA cards

NE2000 (PCI), RealTEk RTL-8029, Winbond 89C940, Compex RL2000, KTI ET32P2,
NetVin NV5000SC, Via 82C926, SureCom NE3

NI5210 card (i82586 Ethernet chip), NI6510, ni6510 EtherBlaster

Novell NE3210 EISA Network Adapter

Yellowfin (and Compatibles)

G-NIC

Racal-Interlan ES3210 EISA Network Adapter

RedCreek Communications PCI

RealTek cards using RTL8129 or RTL8139 Fast Ethernet chipsets

Sangoma S502/S508 multi-protocol FR, Sangoma S502A, ES502A, S502E, S503, S
507, S508, S509

SMC Ultra / EtherEZ (ISA, 8k 83c790), SMC 9000 series, SMC 9000 series, SM
C Ultra32 EISA (32K) SMC EtherPower II 9432 PCI (83c170/175 EPIC series),

Tangent ATB-II, Novel NL-10000, Daystar Digital LT-200, Dayna DL2000, Dayn
aTalk PC (HL), COPS LT-95, Farallon PhoneNET PC II & III

Western Digital WD8003, WD8013

Any IBM Token Ring card that does not use DMA

SysKonnect Token Ring ISA/PCI Adapter TR4/16(+) ISA or PCI, TR4/16 PCI, an
d older SK NET TR4/16 ISA cards

IBM PCI tokenring cards based on the Pit/Pit-Phy/Olympic chipset

IBM Tropic chip-set cards

Linux支持的网卡品牌很多,详细的情况可以参考Linux的硬件兼容性列表(/usr/doc
/HOWTO/HARDWARE-HOWTO)。

⑥显示卡

就我看来,服务器的图形界面完全是不必要的,Solaris的那个openlook确实很漂亮,
但是有谁用呢,还不如干脆用M$呢。对于Linux更是如此,你只要弄一块凑合着能上102
4*768的4MB显卡就行了,当然前提是Linux的XFree86兼容。我推荐的是Trident 9750和
S3 virge,兼容性绝对没问题。如果你觉得这种东西实在太古老了,呵呵。

3.1.3 准备安装规划

为了安装Linux, 必须为它准备硬盘空间。这个硬盘空间必须和您的计算机上安装的
其他操作系统(如Windows, OS/2或着其他版本的Linux)所使用的硬盘空间分开,或者是
一个独立的硬盘。在你决定创建Linux分区之前最好先备份你的重要数据,以免造成不必
要的损失。实际上,既然你准备安装的是一台服务器,那么你干脆把整个硬盘都交给Li
nux得了。

Linux整个系统可安装在1GB左右的硬盘空间上,可是,我们安装Linux是为了让它完成
如:Web,Mail,Ftp等一些服务,这些服务真的开启之后,对硬盘的空间要求特大,比
如你开启一有2G大小的Ftp服务,你至少要有3G的硬盘空间,我们单位有的是一个28G的
硬盘可是在不到一年的应用中就使用了80%,如果你正在规划一个服务器是,那你一定要
考虑你选择一块容量大小合适的硬盘,不要等到不够用时再想办法,要加一个硬盘容易
,改变/home和/var的目录结构却可能是非常讨厌的。

Linux 在装时需要建立两种类型的分区,即“Linux native”硬盘分区和“Linux s
wap”交换分区。

尽管可以将Linux装在一个单一的大分区中(根据我们已经提到的分区原则),但我们推
荐你把系统分开安装在不同的分区上。如果你有一个装满的8G以上的分区,一旦发生文
件系统问题,你肯定会有麻烦的。

下面是我们建议的分区规划:

一个交换分区 -- 交换分区用来支持虚拟内存。 您必须创建交换分区, 即使您有更
多的内存,仍然推荐使用交换分区。 目前的交换分区已经可以设置到非常大,不过太大
也不见得有什么意义,我们建议控制在100MB以上,500MB以下,而且可以使用多个交换
分区。需要注意的是,如果你设置了多个交换分区,那么Linux安装程序通常只会激活第
一个,你需要手工启动其它的交换分区,详见第四章。

一个根分区 -- 根分区是/(根目录)所在地.。它只需要启动系统所须的文件和系统配
置文件,这些文件并不大。但是由于缺省的/tmp(存储临时文件的目录)也在这个目录下
面,所以应该留出足够的空间,一般可以设置在500MB到1GB。不过如果你按照我们下面
解释的专门创建了/tmp分区,那么就可以小一点,只要300MB左右。

一个 /usr 分区 -- /usr 是Linux系统大部分应用软件的所在的地方。 根据您交换安
装的包的数量以及发行版本的不同, 这个分区应该在300MB到1500MB之间。 如果可能,
将最大的空间用于/usr分区。 任何您以后将要安装的基于RPM的包都会使用比其他分区
更多的/usr空间。

一个 /home 分区 – 这是用户的home目录所在地;它的大小取决于您的Red Hat Lin
ux 系统有多少用户, 以及这些用户将存放多少数据。

一个 /var 分区 – 所有的邮件和打印队列,系统日志文件等等都存放在这个分区里
面,所以你应该适当选择一个足够大的/var分区。

一个 /tmp 分区 -- 就象它的名字,/tmp分区用来存放临时文件。 对于一个大型的,
多用户的系统或者网络服务器,专门创建一个/tmp分区是一个好主意。至于分区的大小
,你只有在实践中摸索了。

一个 /usr/local 分区 – 这个分区用来存放包含按照BSD的目录组织存放的软件,大
部分源代码编译后的目标程序也缺省放在这里,你需要一定的空间来存放这些文件,例
如1-2GB。

就服务器来说,存在两种基本的思路,一种是在开始的时候选择安装所有应用软件包
;另一种是开始只安装最小系统,然后逐步增加需要的包。除非你的应用对安全性很敏
感,否则建议你用第一种方法,否则你会发现研究软件包之间的依赖关系是一种很讨厌
的工作。

大部分发行版本在安装系统的同时完成对系统的基本设置。但是这种设置程序并不是
非常可靠,如果你在安装过程中发现配置某种硬件或者网络信息失败,你有两种选择:
停止安装或者忽略。据我们的经验,通常你应该忽略这些信息,只要Linux安装到了系统
上并且可以启动,所有的东西都可以手工设置。不要轻易地停止安装过程或者重新安装
,那是解决windows 9x问题的途径,不是Linux的。

Linux在安装过程中需要一些硬件的相关信息才能正确配置相应的硬件,在安装Linux
前一定要知道你使用的硬件信息,最好在安装时把你使用的所有硬件说明书放在手边(
如:主板、显示卡、显示器、调制解调、Scsi卡等),也可应用一些相应的软件检测你
的硬件信息然后记录下来。当然如果你早对你的硬件了如指掌就不必这样麻烦了。

一般用户只需知道网卡的型号、中断号和地址、鼠标和调制解调的类型和端口、显示
卡的类型和显存的大小、显示器的类型和参数、内存的大小、光驱的类型连接到哪个口
上、声卡的类型中断和地址、如用scsi卡必须知道类型。为了连接网络,还需知道机器
的域名、IP地址、子网掩码、路由地址、域名服务器的地址。

在记录了各种安装的必要信息之后,下一步是选择安装介质。

从CDROM安装总是最简单的。目前大部分系统可以从光盘启动,所以你需要的仅仅是设
置系统启动顺序为CDROM优先。如果你的Linux发行版本是多光盘的,通常在基本安装的
时候只需要第一张光盘。

从ftp安装也是一种很常用的手段。这种安装最常见的应用是你想要在一台新的机器上
安装一个全新的Linux发行版本的时候,毕竟CD-R刻录机不是每人都有的。如果要用ftp
安装,你必须首先确定你使用的发行版本是否支持ftp安装。某些版本是无法从ftp安装
的。

如果你确定你的版本支持ftp安装功能,而且你的Linux发行版本用的内核支持你的网
卡,你需要做两件事:(1)把发行盘的内容拷贝到ftp服务器的某个目录下面,并且记
下目录名;(2)制作软盘引导盘。

另外的安装方式是通过NFS或者samba数据源。这两种东西和用ftp安装差不多,不过一
个使用NFS,另一个使用的是Windows 的文件/目录共享,支持SAMBA数据源的安装的发行
版本更少一些,而且一般我们也不建议使用这种功能(主要是文件名大小写的问题)。

如果你选择的是从软盘启动,那么你需要根据是CD-ROM还是网络安装来确定使用哪一
种软盘映像,一般情况下,Linux的启动软盘是用全盘映像的方法存放在光盘上,可以使
用DOS下面的rawrite(在光盘上有)或者Linux下面的dd命令复制到软盘上使用。

3.2 RedHat 的安装过程

从这一节开始,我们介绍几种Linux发行版本的安装过程。这里选择了三个版本:Red
Hat,Turbo Linux中文版和SuSE。RedHat是最容易安装的版本,如果你是一个新手,看
看下面的安装过程就应该可以顺利地安装成功。

3.2.1 建立Linux引导盘

如果你的主板不支持光驱启动或者你要从软盘启动来安装RedHat那么就需要制作启动
盘,在RedHat 的光盘上包含一个启动盘映象文件,只要将这个文件用相应的程序写到软
盘上就可以制成启动软盘。

从Redhat 6.1以后的版本只提供一个映象文件即可安装,如从光驱和硬盘安装用\ima
ges\boot.img;如从网络安装用\images\bootnet.img。启动盘可以在DOS或者Linux下面
制作:

在 Dos 下制作启动盘

E:\images>\dosutils\rawrite (E 为 光盘的盘符)

假如是使用boot.img,只要在提示“Enter dis images source files name :”时输
入 boot.img,按回车出现提示“Enter target diskette driver: ”输入 A: 回车
。其他类型的启动盘制作方法类似。

在Linux 下制作启动盘

制作启动盘: dd if=boot.img of /dev/fd0 bs=1440k

建立DOS引导盘和用Loadlin引导

Linux提供了一个 Loadlin的应用程序可在dos 下启动Linux的安装程序,首先制作一
张dos启动盘拷贝相应的文件,再在这张盘上加载光驱的驱动程序,然后用这张盘启动计
算机,进入Linux 发行板的 dosutils 目录运行 autoboot .bat 就可进入安装界面。

autoboot.bat的内容如下:

loadlin autoboot\vmlinuz initrd=autoboot\initrd.img

3.2.2 开始系统安装

本书使用Redhat 6.1作范例.

使用发行光盘或者制作好的启动软盘盘启动机器,在lilo:提示符下面直接回车,将进
入安装界面。

如果你是从软盘启动机器,那么将进入下面的安装过程,否则,如果是从cd-rom安装
,将直接进入第四步。

选择语言



图3.1 选择语言

Redhat提供了多种言支持,很遗憾没有中文,只好选择 English。

选择键盘

系统提示用户选择键盘类型,选择 us即可 ,也可在安装后用 setup 程序更改此项。



图3.2 选择键盘

选择安装方式



图3.3 选择安装方式

通常我们选择从cdrom安装,只要直接在对应栏目里面按下回车就可以了。如果要选择
从ftp安装,那么在选择了ftp之后,还要给出ftp服务器的ip地址,本机器的ip地址和L
inux发行盘在服务器上的目录。

如果你是从软盘安装,那么这一步之后,系统将切换到图形模式,继续安装过程。

配置鼠标

系统能识别多数的鼠标类型,这项可使用默认值,如果你用的是两键鼠标你还应该选
择 'Emulate 3 mouse'否则在x windows 下有一些功能不能用。

图3.4 配置鼠标

欢迎界面

这是一个欢迎界面,标志下一步将进入文件拷贝和系统设置。



图3-5 欢迎界面

安装类型



图3-6 选择安装内容

为了方便用户Redhat的开发人员设计了几种安装类型,可根据需要来选择,但大多数
用户选择'Custom'定制安装,这样在以后的安装过程中可详细的对Redhat提供的软件包
进行选择,自由度更大。

建立分区



图3-7 建立分区

Redhat 提供了一个简单使用的图形化的分区工具,利用这个工具你可方便的建立,修
改,删除分区,分区的种类及大小可参看本章的1.3中的规划分区,如建立一500M的根分
区,选则 Add ,然后在下图的 'Mount Point:'中输入 '/';'Size(Megs):' 中输入 '
500' ; 'Partition Type:' 选择 'Linux Native ' ,最后按 Ok 确认即可。



图3-8 建立分区(2)


选择格式化的分区



7楼
图3-9 格式化分区

与其它的操作系统一样在使用分区前要对分区进行格式化,格式化成Redhat 可识别的
分区。注意原则上每个分区都应该格式化。如果你的硬盘使用的时间较长或则有坏块,
那么就选择' Check for bad blocks while formatting'把坏的区域标志上,以免数据
写到坏块上丢失。否则,对于新的硬盘只要简单地选择格式化就行了。

Lilo的配置

引导Linux 需要安装一个用来把内核装入计算机的程序,在Intel 的兼容PC 上使用L
ilo。在安装界面内有如下几个选项:

Create boot disk

创建软盘启动盘。默认是允许,如不创建,用鼠标点击前面的小方块让其凸起。一般
我们不必创建这个东西,详情见第四章和第九章。

Do not install LILO

不安装LILO,建议你不要选择这个选项,否则你无法启动系统。

Install LILO boot record on:

询问LILO 安装在哪儿,通常选则安装在 MBR 上。

Use linear mode

这个选项是要求Linux使用SCSI的线性模式。如果你有一个超大的或者比较特殊的SCS
I硬盘,选择这个选项。

下面的区域是表明了分区的详细情况,通常不用作修改。



图3-10 配置lilo

选择时区

中国用户在WORLD项选择亚洲,在相面的滚动框内选上海时间。



图3-11 设置时区

账号配置



图3-12 设置密码和账号

Redhat 在安装过程中需要设置 ROOT 用户的密码,同时也可建立新的用户,不过很少
有人在此时建立用户。只要输入root密码并且确认就可以了。

认证配置



图3-13 身份验证设置

这个配置通常不需要改动,它表示账号的身份认证和口令的加密方式。在Redhat 6.1
中,口令验证使用MD5加密方式,它具有更高的对抗蛮力猜测算法的能力。不过MD5不是
一个严格意义上的加密算法,因此是一个可选项。你也可以使用原始的DES并且不使用M
D5。当然这意味着降低了系统的安全强度。

X配置



图3-14 X window配置

所谓X 配置主要是指显示卡和显示器的配置,如不想在此配置可选 Skip x configur
ation ,等安装结束后用 setup 应用程序来设置。

选择安装的应用程序

你可根据需要选择你想要的应用程序,如果你的硬盘空间足够大我们总是建议安装所
有的软件包。(最后的everything选项)



图3-15 选择安装的软件包

(15)安装软件包

现在开始软件包的拷贝了,耐心的等几十分钟就可以了。



图3-16 安装软件包

在此安装过程中没有提到网络部分,可用安装后用 netconf 这个应用程序来完成,
后面的章节有详细的说明。

3.3 Turbolinux中文版安装过程

这里介绍的是TurboLinux 4.0Chinese的安装过程。目前TurboLinux 6.0已经发布了,
不过两者在安装之间的差别几乎可以忽略,你可以自己看看自己拿到的TLC版本。

3.3.1 启动Turbolinux 安装程序

直接用CDROM启动

只要你的BIOS支持CD-ROM启动,你就可以用这种方式。 直接把光盘插入光驱,引导机
器就可以了.

在DOS下用LoadLin启动

从DOS启动,转换到光盘驱动器,例如e:,然后进入子目录dosutils/ ,输入命令aut
oboot 并回车,就可以开始安装TurboLinux。

利用软盘启动

如果上面的两种安装方式都不能工作, 就必须利用软盘来启动安装TurboLinux,不管
怎样,我不建议你使用这种功能。如果你一定要用,你可以自己看TurboLinux附带的安
装手册。

3.3.2 TurboLinux安装过程

TurboLinux的安装过程是中文的,所以我们下面只是简单地介绍一下,其实你只要仔
细研究一下说明就差不多了。

1) 选择显示模式

本窗口会询问用户是否使用彩色的显示模式,缺省是YES,一般情况下,按回车 就可
以。除了某些单色显示器以外。



图3-17 选择显示器类型

欢迎画面,然后安装程序将会显示一个欢迎画面,您只需要按回车跳过即可。

2) 选择键盘类型



图3-18 选择键盘类型

用户在此处设置键盘布局,而中国用户一般都直接键入回车使用缺省设置US 键盘。

3) PCMCIA

如果您的系统上有PCMCIA卡(有时被称作PC Card),选择'是',安装程序会提醒您插
入特别设备驱动盘,不然您将无法驱动您的PCMCIA设备。 如果没有,直接选‘否’继续


4) 特别设备驱动

如果安装程序提醒您需要特别设备驱动盘,移去启动盘,并且插入特别设备驱动盘。
通常这是不必要的,除非你使用某种从软盘启动的安装方式。

TurboProbe



图3-19 检测硬件

TurboProbe是TurboLinux安装程序所特有的一部分, TurboProbe可以自动检测您系统
上安装的ISA设备/PCI设备/SCSI设备/网卡/并口IDE设备。如果系统在这个过程中挂起
了,重新启动机器。

  6) 安装介质



图3-20 选择安装介质

TurboLinux提供了4种的方式,我们只介绍除'硬盘安装'方式外的3种方式。

CD-ROM 安装 - 最常用的安装方式,如果您选择了这种安装方式,你就要用第一张Tu
rboLinux光盘启动计算机,而后TurboLinux将自动进入安装界面。

NFS 方式安装 - 如果您的机器在一个局域网中, 并且该局域网上有另外一台服务器
上以NFS方式共享出一份TurboLinux的拷贝。那么您就可以利用这台 机器作为NFS服务器
来安装TurboLinux。在安装之前您必须从您的系统管理员处获得您系统的TCP/IP设置和
NFS服务器 的配置信息。选择这种安装方式将会弹出对话框 网络设置。 您需要输入您
得到的配置信息来进行NFS安装。请注意,TurboLinux 安装程序不支持拨号网络, 因此
目前还不能通过Modem或者拨号网络来进行NFS安装。

FTP 方式安装 - 如果您拥有Internet的快速接入 那么您可以通过FTP方式安装Turbo
Linux。选择这个选项后,您会被提示插入安装支持支持盘,移去软盘驱动 器中的软盘
并插入安装支持盘,按下回车键,然后系统会将其加载进内存,并且启动第二阶段 的安
装程序,进行FTP安装。必须注意这种方式需要制作另外的两张安装软盘。

7) 选择安装程序方式

此处大多数用户应该选择缺省,如果您是富有经验的用户,希望使用更加精密的安装
方式,就请您选择'扩展方式'。

8)网络类型选项 ( 只限普通方式 )

请选择您系统上使用的网络类型,我们安装TurboLinux的目的不是用它作为一个工作
站(如果那样的话还不如安装一个Windows98实际得多),而是用作服务器,因此你一定
要选 LAN这个选项。

 

图3-21 选择网络类型

9) 系统选项 (只限扩展方式 )

本窗口同网络类型窗口很类似,但是允许您选择系统启动时预先加载的设备驱动模组
, PPP/拨号选项的作用同上节一样,其他的选项的作用如下:

IP Aliasing - 如果您的系统需要给一个或多个网络设备分配多个IP地址,您 就需要
选择这个选项。

Reverse ARP - 如果您的系统需要提供反向地址查询,就需要选择这个选项。 请您确
认后再选。

VFAT 文件系统 - 本模组允许您在加载Dos/Windows分区时能够看到Win95的长 文件名


Samba 文件系统 - 本模组允许您使用smbmount来加载windows服务器的共享卷

NCP/Netware 文件系统 - 本模组允许您通过IPX来加载 Netware的文件系统

SysV 文件系统 - 本模组允许您加载SysV的文件系统。

UFS 文件系统 - 本模组允许您加载BSD UFS 文件系统。

HPFS 文件系统 - 本模组允许您加载OS/2的 HPFS 文件系统。

HFS 文件系统 - 本模组允许您加载 Macintosh的 HFS 卷(硬盘、光盘、软盘)

lp (打印机) - 本模组允许您使用并口打印机,缺省为选中。

Cyclades - 如果您的系统上装有cyclades 多串口卡,选中该选项。 on.

Riscom/8 - 如果您的系统上装有Riscom/8 多串口卡,选中该选项。 Riscom/8

FTape - 如果您的系统上装有基于软盘扩展器的磁带机,选中该选项。

iBCS - 如果您需要在TurboLinux上允许SCO UNIX,FreeBSD,或者Solaris系统的可执
行文件,那么就选中该选项。

普通SCSI - 如果您要在TurboLinux上使用SCSI接口的CDR/CDRW设备,选中该选项。

10)SCSI 检测

如果您的系统上安装有SCSI设备,但是没有连接任何SCSI设备,您将看到一条警告信
息,不必理睬它。

11)硬盘分区

现在屏幕上将显示您的系统上安装的硬盘,使用上下键来加亮您希望分区的硬盘,并
且 按TAB键直到光标停留在FDISK或者CFDISK上,按回车来选择。FDISK是Linux标准的分
区程序,如果你要用FDISK,参考第四章。一般对于新手可以选择CFDISK,这是个菜单界
面的分区程序。

关于CFDISK的命令我们不介绍了,(真的很简单,相信我)你只需要注意一点,就是
如果你要分一个交换分区,你应该先建立一个分区然后把它的类型(type)改成82。

12)激活交换分区

下面将出现窗口让您选择哪一个交换分区将被激活,以便安装TurboLinux,并且要求
格式化交换分区,这时系统缺省选择了检查坏块这个功能,用户一般应该选择继续, 这
时屏幕上会出现显示一个完成进度条,如果不检查坏块,这一步将一闪而过。

13) 选择根分区

现在将显示所有可能的Linux ext2分区,选择一个作为根分区(将被 作为/加载)。
如果只有一个Linux分区,选择OK继续。

14)设置文件系统

所有包含TurboLinux能识别的文件系统的分区 (包括MS-DOS或Windows分区)将列在下
一个对话框中。你可以设置哪些分区在启动的时候自动被连接,选择你想要设置的分区
按回车,输入这些分区的连接点(如/var,/usr等等)。

15)格式化分区

接下来你必须格式化分区。如果你正在进行一个全新的安装,格式化所有需要连接的
分区,通常并不需要在格式化的同时检查坏块,除非你对你的硬盘很没有信心。

16)配置 TCP/IP 网络



图3-22 选择显示器类型


这个屏幕设置你的ip地址和子网掩码,网关,DNS服务器等等。不要选择“设定BOOTP
设备”选项。




图3-23 选择显示器类型

这个屏幕中需要输入你的域后缀名和带有域后缀的主机名(节点名)。如果你有多个
名字服务器也可以输入。

17) 安装记录信息

现在安装程序将提醒你将把所有的安装记录输出到文件 /tmp/install.log中, 您可
以在安装完成后查看这个文件。

18)安装软件包

安装程序将启动turbopkg程序来安装发行软件包,

安装TurboLinux最简单的方式就是选择一个预定义的安装类型,在您选择安装类型时
可以 按F1来查看该安装类型更多的附加信息。在这种安装方式下,软件包的依赖关系将
自动被处理, 并自动计算出需要的硬盘工具,现在您可以选择继续安装或者定制您需要
安装的软件包。 当然我们建议你最好的办法是全部安装。

19) 安装LILO(Linux启动管理器)



图3-24 选择显示器类型

这里主要的选择是把lilo安装到什么地方,MBR是第一个硬盘的主引导区(master bo
ot record),ROOT是安装到可以启动的Linux分区的Superblock上,而floppy是安装到
一张软盘上,即启动软盘,用户一般应该选择MBR,然后选择 “OK” 并按回车键。

下一个窗口让您输入需要在启动时传递给 LILO的信息,如果您使用的是某些SCSI 驱
动器,您还需要选中'Linear' 模式,除非你肯定你需要这个参数,不然一般情况下建议
你不用选中这个选项。

在一般情况下Linux分区将被自动配置为标志'Linux'。 您的第一个DOS分区将被自动
配置为标志'DOS',选中'Ok'继续,配置将被写入硬盘,完成LILO的安装。

20)配置显示卡



图3-25 自动探测显示卡

现在安装程序将执行 TurboXCfg来配置您的显示卡。几乎所有的显示卡都可以 用Tur
boXCfg来自动检测,(检测不了你也就没什么办法了)目前已经能够检测大多数AGP显示
卡和PCI模式的显示卡。

在选择了显示卡配置之后,会出现X的配置界面,对于专家级用户,这应该是很容易的
,如果不行,你总可以跳过X的配置用手工来配置图形。原则上,除非你非常有信心,不
要选择在配置后出现的“使用图形方式登录”的选项!

21)配置时区

选择所在的时区。

22)配置打印机

可以在这个时候配置打印机,但我们建议跳过打印机配置,在“系统配置”那一章我
们再介绍如何配置打印机。

23) TurboPNPCfg - ISA即插即用配置



图3-26 检测即插即用设备

如果选择 '继续',系统将自动检测即插即用设备,如果你的系统上没有即插即用设备
或者想跳过这一步,请选择'忽略',如果没有即插即用设备而选择 继续,那么安装程序
会自动跳到下一步。

检测完毕后会产生一个即插即用设备的列表。大多数设备可以简单地选择“自动探测
”。

某些即插即用设备,如NE2000兼容网卡,既可以设置成PnP模式又可以设成非PnP模式
,建议您设置 成非PnP模式使用,这样会避免一些不必要问题。

24) TurboPPPCfg - 配置调制解调器和拨号网络

建议你简单地取消这一步,在路由器和防火墙那一章我们再讨论如何配置PPP拨号连接


25)TurboService - 配置系统服务



图3-27 配置系统服务

这个程序用来配置系统启动时自动运行的系统服务/守护进程,我们建议你打开随机数
服务器,syslogd等少数几个最重要的服务,而其它进程最好不要在第一次使用的时候启
动。

26) TurboWMCfg - 配置您的缺省X Window 桌面

如果你设置了X window,你可以选择使用的缺省桌面。

27) 设置超级用户密码



图3-28 设置root口令

输入并且确认超级用户口令

28)增加普通用户

增加普通用户的账号。通常可以跳过

29)重新启动机器

现在安装已经完成,移去软驱中的软盘,或者光盘驱动器中的光盘,按回车重新启动
TurboLinux就可以使用了。
8楼
【资料】Linux基础教程 3.4 SuSe的安装过程
3.4 SuSe的安装过程

对于SuSE的安装只简单的介绍,因为SuSE在安装的过程中与Redhat 、TurboLinux有类
似之处,只要我们理解了Linux的一些实质性问题,安装是一件很容易的事情。

1)用SuSE的发行光盘启动计算机。

计算机启动后你首先看到一个标有'Have a lot of fun ..'的界面,而后系统自动引
导。

2)语言选择

选择 'English'即可,如果你对其它语言感兴趣你也可选择别的语言,那后面安装过
程中的提示将是选择的语言。

3)显示器的选择

根据你使用的显示器类型选择彩显(color display)或单显(Monochrome display)。

4)选择键盘

选择 'English (US)"。

5)Main menu 界面



图3-29 S.u.S.E的安装界面

直接选择'Start installation/system'后进入'Startinstallation'窗口。

画面中各选择项的含义是:

Settings 系统的一些基本配置,如:语言、键盘等

System informationg 系统的硬件配置信息

Kernel modules (hardware drivers)选择硬件驱动模块,如果你是一个SuSE的高手
可用这项对系统的硬件驱动模块进行配置,相反选择'Start installationg/system'是
一个好主意。

End/Reboot 我想这就不用解释了。

6)选择安装方式

SuSE提供了CD-ROM、Network(NFS)、Network(FTP)、Harddisk四种安装方式,在
这选CD-COM项。

7)安装类型

SuSE 提供了三种安装类型即'Iinstall Linux from scratch'(标准安装)、'update
existing Linux system'(更新安装)、'Installation using Expert mode'(专家模
式安装)。本书以标准模式为例进行介绍。

8)硬盘分区

安装程序提示你是否对硬盘进行分区。如果你的硬盘有SuSE分区你就选择'Do not pa
rtition' 否则只能选择'Partitioning'对你的硬盘进行分区。我们选择'partitioning
'。由于具体情况的差别,系统可能会提示你是否使用硬盘的剩余空间,这个决定完全取
决于你。通常情况选择使用否。SuSE的分区特别简单,如果你对分区的详细知识不太了
解或者懒的一个一个的分,你就可在标题为'USE ENTIRE DISK'的床体内选择'Whole ha
rd disk',让系统自动的完成这个过程。

SuSE分区原理与Redhat 、Turbolinux的几乎完全一样,这里就不再说明了。

选择'Whole hard disk'有一个安全提示,如果你的硬盘已经没有重要数据可用了选择
'Yes',这时要等待一段时间,由系统自动进行分区处理。

9)选择安装软件包



选择'Load configuration' 进入'Load configuration'窗口,选择'SuSE Almost ev
eything'(所有软件即可)后按'Add'回到上面的画面。

10)开始安装

选择'Start installation'执行拷贝文件,这个过程要一段很长时间。

11)选择内核

根据你使用的硬盘控制器类型选择相应的驱动内核,如果你使用的是IDE控制器,那就
选择标准的EIDE内核,如果使用SCSI控制器就选则相应与SCSI控制器相匹配的内核。

12)创建启动盘

根据需要决定是否创建。

13)安装Lilo

系统提示是否安装配置Lilo,选则'Yes'进入如'Lilo Installation' 画面,首先我们
要按F4键进入如下画面建立一个新Lilo 引导配置。



图3-30 配置lilo

在 'Configuration name'输入配置名如'suse'(任意),在'Which operating system
'处选择'Boot Linux',而后选择'continue'回到'Lilo Installation'画面。

在'Append-line for hardware parameter'输入任意标志如'SuSE Linux',在'Where
do you want to install LILO'处选'Master boot record',其余项默认即可,最后按
'Continue'键继续。

14)选择时区

对于中国用户选择'Asia /Shanghai'。

15)调整硬件时钟

系统询问你的硬件是使用格林威治时间(GMT)来是你自己设定的区域时间。选择'lo
cal time'。

16)设置主机名域名

在'ENTER YOUR HOSTMAME'窗口内的'Hostname'内输入你的主机名(由你定义),在'Do
main name'栏内输入你的域名。

17)配置网络

你的机器不上网的话,就选择'Lookback only',反之选择'Real network'进行下一步
配置。

如果你的IP地址从DHCP获得的话你就选'Yes',而你有固定的IP地址就要选择'No',进
行网卡的配置。见下图:



图3-31 配置网络

在'Type of networ'选择'eth0'即可,其它选项根据自己的实际情况填写。接下了是
谢谢服务提示,然你选择一些服务是否在开时自动加入。

18)选择网络驱动器

'Network Type' 选 'eth0'

'Networking device type '选择与你使用的网卡类型相匹配的驱动,我用的NE200兼
容的网卡,就选择了'NE2000/NE1000(ISA)'。

'Module options'指明网卡的IO地址,如果你选择了'NE2000/NE1000(ISA)',系统将
给出默认值'io=0x300'。

按'continue'进行下一步激活网卡,选择'continue'继续。

19)配置sendmail

SuSE的安装程序把sendmail也作到里边去了,可是sendmail是一个相当复杂的程序,
后面章节有详细的论述。在这里就选 'Abort'跳过。

20)输出SuSE配置

'OUTPUT of SuSEconfig'把以上的配置更新到系统内。选'Continue'完成。

21)设置root用户的密码



图3-32 超级用户口令

根据提示输入即可。

22)创建新用户

通常都不在此创建,而是在系统第一启动后在建立。

23)其它的配置

系统会连续提示是否配置如Mode 、鼠标等配置界面都和简单,这里就不详细的说明了
。至此SuSE安装完成。

SuSE还提供一个名为YaST 的实用程序可对系统进行详细的配置。



图3-33 YaST程序

3.5 配置X Window

X window 是Unix(包括Linux)的图形界面,XFree86运行在Intel平台上的一个免费的
X Window 系统,所有的Linux都预装了这个应用程序,你只需要进行简单的配置就可在
Linux 下使用图形界面了。

首先我们要注意配置X之前的一些问题。第一件事情是在安装时你可能跳过了X的配置
,在某些情况下,这种安装方式会导致相应版本的安装程序并不将X的服务程序复制到硬
盘上,所以任何配置工具都会失败。解决的办法是手工安装包含你的显卡对应的X服务器
的rpm包,大部分显示卡都有对应的X服务器,例如最常用的XF86_SVGA,XF86_S3V等等。
你可以看一看发行盘的rpms目录确定你需要哪个rpm。

另外一个问题是X的操作必须使用鼠标。如果mouse设备没有被正确设置,你就无法在
X中使用鼠标,你会看到启动X的时候,光标停止在屏幕上。这时,你必须用Ctrl+Alt+B
ackSpace组合键退出X,然后手工设置鼠标。实际上,在Linux下面设置一般的鼠标相当
简单,因为鼠标设备/dev/mouse只是到对应端口的一个连接,例如我用的是PS2接口的标
准鼠标器,所以只要这样建立连接:

ln –s /dev/psaux /dev/mouse

/dev/psaux是ps2鼠标口的设备名字,同样,要使用一个连接在串行口com1上的鼠标器
,使用

ln –s /dev/ttyS0 /dev/mouse

通常可以用Xconfigurator或者XF86Setup来设置你的显示卡,Xconfigurator是一种字
符菜单的配置工具,直接在命令行下面执行Xconfigurator就得到:



图3-34 Xconfigurator


按下ok按钮之后,Xconfigurator将自动测试显示卡的类型,如:



图3-35 显示卡类型

接下来会设置你的显示器类型,通常如果你不是用的名牌显示器只要用custom就可以
了,然后设置刷新率和扫描频率:



图3-36 选择显示器类型

通常你可以选择一个与你的显示器相当的Super Vga类型,例如我用的是High Freque
ncy SVGA。然后选择纵向刷新率,选择你的显示器支持的刷新范围,比如50-90。

下一步,Xconfigurator将测试你的显示卡设置是否正确并确定卡上显存的大小,在这
个过程中屏幕会闪烁几次,然后出现模式选择菜单:



图3-37 选择分辨率

如果你对设置结果满意,可以直接使用测试得到的缺省值,否则用“Let Me Choose”
来自己设置分辨率,

设置分辨率后,Xconfigurator将测试你选择的分辨率和颜色数,你会看到一个图形屏
幕,注意其中有一个选项是问你是否使用图形登录方式,一般建议不要使用,以免出现
问题。

设置了Xconfigurator之后,就可以使用startx或者openwin来启动图形界面了。

另外一个常用的配置工具是XF86Setup,这个工具是图形化的,不过并不是所有Linux
发行版本中都带有这个工具,如果有的话(例如slackware和S.u.S.E),可以直接在命
令行方式下面使用XF86Setup,出现一个图形化的

图3-17 XF86Setup

配置界面:

这个界面除了需要用鼠标操作之外,其它方面和Xconfigurator大同小异。

除了直接调用Xconfigurator和Xf86Setup之外,许多发行版本提供集成化的配置工具
,例如RedHat的setup程序,TLC的turbosetup程序和S.u.S.E的YaST实用程序,这些程序
可以配置各种硬件以及图形驱动,你可以自己执行这些命令,看看他们的用法。
9楼
【资料】Linux基础教程 第4章 系统配置
第4章 系统配置

本章要点:

本章介绍如何对服务器的各种基本硬件(网络,打印机,硬盘)进行设置,以便构成
一台能够工作的服务器系统,系统启动流程和硬盘分区等管理员必须精通的内容也在此
章叙述。

本章具体包括以下内容。

系统启动的过程

TCP/IP网络协议的设置

编译自己定制的内核

硬盘分区

配置打印机

安装附加应用程序


这一章我们要详细的介绍基本系统的配置,特别是网络配置,在安装中我们已经看到
了一些配置工具,但是这一章我们将主要地基于命令行和shell脚本,因为当你陷于灾难
之中时,只有直接修改配置文件才是可靠的。为此,我们必须去研究系统启动脚本以及
系统内核的配置,如果它让你感兴趣,那么很好,你会很快成为一个有经验的系统管理
者;如果它让你感到痛苦,对不起,这就是生活—一个UNIX系统管理员必须懂得这些。

4.1 系统启动流程

成为一个职业的系统管理员的第一步是了解系统的启动脚本。许多人喜欢图形喝彩单
的管理工具,例如SCO的scoadmin程序,或者Sun的admintool。另外的人习惯性地去查找
/etc/network,/etc/defaultroute这样的文件。对此你必须理解,UNIX的风格并不是这
样的。对于UNIX系统,一切东西都是可以被拆卸的,甚至系统内核也可以调整,每个厂
商都在对它进行修改,对于Linux就尤其如此。如果你所知道的就是ScoAdmin或者netco
nf程序,那么你永远也不会成为合格的系统管理员。UNIX不是NT,你必须了解它隐藏在
系统内部的东西。

4.1.1 lilo和引导内核

当你给系统上电以后,经过一段冗长的自检过程,最后系统去读Linux的引导程序,并
且显示出引导提示符:

lilo:

这个提示表示引导盘已经就绪。

lilo是linux 的引导管理程序,它和OS/2、NT的BootManager,以及许多人用的syste
m commander的作用类似,当你在这个提示符下按下Tab键的时候,它会显示出当前可以
引导的系统:

lilo:

dos smp linux

实际上,lilo就是一小段引导程序,可以位于任何有可能用来引导系统的位置,但是
通常我们把它放在硬盘的主引导区,这个概念对任何与病毒打过交道的用户都应该是非
常熟悉的。系统自检完毕之后,就会从硬盘上读入主引导区的内容,于是,lilo接管了
系统的控制权,可以引导Linux了。理论上,许多书籍建议你用软盘引导服务器以便避免
可能的破坏,这倒是那种“教科书的解决方案”的一个典型。

你可以看到在上面显示出了多个系统名字,输入某一个名字引导相应的系统,lilo会
自动选择对应的分区以及启动文件来启动系统。

与lilo决斗是系统管理员生活的一部分,硬盘可能会损坏,病毒可能更改了引导记录
,错误地编译内核使系统报销,甚至一些愚蠢的反病毒程序也可能会使得lilo被破坏,
这时你也许必须从DOS上引导,然后重新配置lilo。如何从DOS下启动Linux等一会再说,
现在让我们把主要精力拿来对付lilo。

lilo的配置是靠编辑/etc/lilo.conf实现的,这个文件的规则很简单,举例来说,这
是我的lilo文件:

[wanghy@openlab /etc]$ cat lilo.conf

boot=/dev/hda

install=/boot/boot.b

prompt

timeout=50

default=smp


image=/boot/bzImage

label=smp

read-only

append="mem=256M"

root=/dev/hda1


image=/boot/vmlinuz-2.2.12-20

label=linux

read-only

root=/dev/hda1

other = /dev/hda3

label = dos

table = /dev/hda

首先是boot=/dev/hda,这表示你用的启动磁盘是第一个IDE硬盘(由于这个原因,通
常你不能从从盘上启动Linux)。

接下来,install=/boot/boot.b将/boot.b表示要将/boot/boot.b文件的内容写到引导
记录中。这个文件在安装Linux的时候就已经创建了。

prompt

timeout=50

default=smp

这两行表示系统启动时将会显示一个lilo:提示信息并等待5秒钟,注意timeout的单位
是0.1秒。如果5秒钟之内没有输入系统的名字,那么缺省将引导标号为"smp"的系统。

接下来定义的是各个引导项目,首先定义了两个Linux引导项目,image=/root/bzIma
ge这样的行定义了启动时使用的内核映像,接下来,label=smp定义了这个启动选择项的
名字是smp。在下面的几行则是用bzImage启动系统时的一些附加参数:

read-only

使用只读方式连接文件系统,由于系统启动的时候要检测文件系统完整性,因此要使
用这个选项,当系统启动后,启动脚本会自动将它切换为read-write模式。

append="mem=256M"

缺省下,Linux内核只使用64MB以下的内存空间,由于这个系统有256MB内存,必须用
命令行直接通知内核,append后的内容就是启动时加给内核的命令行参数。必须注意,
有时你需要把它写成mem=255M,原因是在许多系统上bios会占用部分存储空间,如果你
没有把握,就从内存量中减去一。

root=/dev/hda1

当这个内核启动以后,用/dev/hda1文件系统作为本机文件系统的根。

接下来的段落的效果与刚才我们解释的一样,刚才定义了一个名叫"smp"的启动项,它
启动Linux并且连结/dev/hda1文件系统,而从image=/boot/vmlinuz-2.2.12-20开始的段
落则定义一个名叫“Linux"的选项,它使用/boot/vmlinuz-2.2.12-20作为内核映像,挂
接/dev/hda1文件系统,但是只使用缺省的64MB内存。

再往下的段落

other=/dev/hda3

label=dos

table=/dev/hda

定义了一个名叫dos的启动项,这个启动项用来启动位于/dev/hda3上的MS-DOS分区。
由于DOS不使用内核映像而是利用引导记录,系统必须能够找到分区表信息以便定位引导
记录,table=/dev/hda表示系统的DOS类型的分区表在/dev/hda上。

当完成了lilo.conf的设置工作后,执行

/sbin/lilo

会出现这样的信息:

[openlab]# /sbin/lilo

Added smp *

Added linux

Added dos


*表示这个加入的项是缺省启动项。三行信息表示我们定义的三个启动项都已经被加入
,以后再启动就可以使用新的启动定义了。

lilo还支持很多其他的定义,但是对于系统管理员来说,上面解释的已经足够了,想
要了解进一步的内容,执行man lilo.conf。

前面提到了内核映像这个概念,Linux在编译内核时将内核做成压缩的二进制内存映像
,启动中自动拷贝到内存中并解压,然后让核心代码接管系统。

核心代码得到系统的控制权之后,下一步需要检测系统设备并激活必须的设备,在这
个过程中,一串初始化信息在屏幕上滚过:

Linux version 2.2.14 (root@openlab.asnc.edu.cn) (gcc version egcs-2.91.66
199903

14/Linux (egcs-1.1.2 release)) #9 SMP Sat Jan 29 10:07:06 EST 2000

Intel MultiProcessor Specification v1.1

Virtual Wire compatibility mode.

OEM ID: MSI Product ID: 440BX APIC at: 0xFEE00000

Processor #0 Pentium(tm) Pro APIC version 17

Processor #1 Pentium(tm) Pro APIC version 17

I/O APIC #2 Version 17 at 0xFEC00000.

Processors: 2

mapped APIC to ffffe000 (fee00000)

mapped IOAPIC to ffffd000 (fec00000)

Detected 451033204 Hz processor.

Console: colour VGA+ 80x25

Calibrating delay loop... 448.92 BogoMIPS

Memory: 257700k/262144k available (1044k kernel code, 424k reserved, 2920k
data,

56k init)

Dentry hash table entries: 32768 (order 6, 256k)

Buffer cache hash table entries: 262144 (order 8, 1024k)

Page cache hash table entries: 65536 (order 6, 256k)

VFS: Diskquotas version dquot_6.4.0 initialized

Checking 386/387 coupling... OK, FPU using exception 16 error reporting.

Checking 'hlt' instruction... OK.

.............

这个信息很长,几乎每个被初始化的设备都会显示一段讯息,从这里可以看出系统中
那些设备已经开始工作,那些设备失败了。如果信息滚动过快,可以在启动完成之后用
dmesg命令显示全部信息。

当需要直接在内核映像中启动的设备(这些设备是在编译内核时确定的)初始化完毕
后,Linux连结在lilo.conf的root=行中定义的根文件系统,启动init进程(应该记得它
是一切程序的最初启动者),寻找/etc/inittab文件并且进入运行级的设置。

4.1.2 运行级别和inittab

运行级的概念来自System V,运行级别将启动过程分成不同的集合,每个集合包含一
组脚本,当init程序“切换运行级”到对应的级别时,相应的脚本就被触发,切换运行
级可以通过执行init [级别号]完成。(比如,在Linux中,run level 6代表reboot,所
以执行init 6就会引起系统重新启动)

运行级别的定义每种System V都不完全一样,只能通过直接读/etc/inittab来确定,
下面是一个标准的Linux的/etc/inittab,注意这里解释的内容来自redhat,但是其他的
版本也大同小异。我们将它分成若干段来解释,如同一般情况那样,用#开始的行是注释
,而非注释行的语法是:

标号:运行级别:操作方式:命令

标号是这一行的标签,运行级别用于定义这一行应该用于那些级别,如果为空就定义
为所有级别,操作方式可以是一些确定的字符串,代表如何执行后面的命令,而命令则
给处在进入这一级别时执行的程序。

下面是它的内容:

# Default runlevel. The runlevels used by RHS are:

# 0 - halt (Do NOT set initdefault to this)

# 1 - Single user mode

# 2 - Multiuser, without NFS (The same as 3, if you do not have networki
ng)

# 3 - Full multiuser mode

# 4 - unused

# 5 - X11

# 6 - reboot (Do NOT set initdefault to this)

#

上面的几行解释了缺省的运行级别定义:

停机,系统进入这一级别后关机;

单用户模式,在这个模式中只能从控制台操作计算机,网络和终端不启动,许多文件
系统也没有连结;

多用户模式,但关闭了网络服务支持

完全的多用户模式,就是我们一般使用的模式

无定义

图形界面模式,系统切入这一运行级后自动启动X Window系统

重新启动


这些级别的定义是任意的,然而你最好不要修改它,尤其是level 0,1和6,因为许多
程序都使用init 0之类的方式实现对系统的控制,其他的Linux发行版本可能会更改2-5
的定义,你需要参考/etc/inittab才能判断到底那个级别是什么意思,不过一般来说0,
1和6总是上面的定义。

下面开始才是真正的内容,首先系统必须定义缺省的运行级别:


id:3:initdefault:


initdefault关键字决定了缺省的运行级别,在这里是3,也就是在执行了公共的系统
启动脚本之后,系统将会执行与级别3对应的那些行

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

这里的sysinit关键字定义了公共的“系统初始化”脚本,在相应于运行级的地方是空
,表示适用于所有运行级别。注意它将在系统进入任何运行级别以前完成,一会我们再
研究这个脚本的内容。


l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

这里开出了六个运行级别的定义,运行级0就去执行命令/etc/rc.d/rc 0,运行级1是
/etc/rc.d/rc 1,.....诸如此类。wait关键字表示系统必须等待此命令执行完才能开始
下一步工作。

# Things to run in every runlevel.

ud::once:/sbin/update

这又是一个适用于所有级别的命令。update命令实际是去启动updated守护进程,以便
定期刷新内存中的超级块表。Once关键字说明这个项只被执行一次。

# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

ctrlaltdel定义当热启动组合键被触发时系统的行为,这里定义所有的运行级别对它
的响应都是重新启动(shutdown –r)


pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down
"


pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled
"

这两行定义如何响应ups信息,如果系统掉电(powerfail),执行两分钟后关机的指令
;如果关机之前电源恢复,取消关机操作。


# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

2,3,4,5都是多用户级别,为系统开出6个虚拟屏幕(就是用Alt+Fn即获得虚拟屏幕)
,respawn关键字表示这个动作在每次进入相应运行级别时都会执行。

# Run xdm in runlevel 5

# xdm is now a separate service

x:5:respawn:/etc/X11/prefdm -nodaemon

对于级别5,启动图形界面。

归纳一下,系统在读入inittab以后要做什么?设置Ctrl+Alt+Del响应,设置好对UPS
的支持,然后应该执行/etc/rc.d/rc.sysinit,然后是/etc/rc.d/rc 3,最后是update
和启动虚拟屏幕。显然,系统的主要初始化命令应该在/etc/rc.d/rc.sysinit和/etc/r
c.d/rc 3中完成。

4.1.3 rc.d下的基本脚本


下面我们来研究启动脚本,这里的脚本来自redhat 6.1,因为这是个最为广泛使用的
版本,其他的版本的特有问题将在下一节讨论。

首先,系统将执行/etc/rc.d/rc.sysinit,这是个shell脚本,你可以用普通的文本编
辑工具对它进行处理,为了简便,我们只研究其中较为重要的部分或者较为典型的段落


#!/bin/sh

#

# /etc/rc.d/rc.sysinit - run once at boot time

#

# Taken in part from Miquel van Smoorenburg's bcheckrc.

#


# Rerun ourselves through initlog

if [ -z "$IN_INITLOG" ]; then

[ -f /sbin/initlog ] && exec /sbin/initlog $INITLOG_ARGS -r /etc/rc.d/rc.
sysinit

fi

首先,确定系统中是否存在/sbin/initlog文件,如果存在,那么需要记录初始化信息


# Set the path

PATH=/bin:/sbin:/usr/bin:/usr/sbin

export PATH

设置缺省路径。

# Read in config data.

if [ -f /etc/sysconfig/network ]; then

. /etc/sysconfig/network

else

NETWORKING=no

HOSTNAME=localhost

fi

这一段是网络的参数设置,/etc/sysconfig/network的内容是这样:

NETWORKING=yes

FORWARD_IPV4="yes"

HOSTNAME="openlab.asnc.edu.cn"

GATEWAY=""

GATEWAYDEV=""

显然,如果这个文件存在,那么设置网络的运行参数,如域名,网关等等,这个文件
中可以包含很多的东西。详细的内容我们在设置网络的部分介绍

# Source functions

. /etc/rc.d/init.d/functions


/etc/rc.d/init.d是所有的服务脚本存放的地方,而functions是各种服务脚本需要的
一些参数的设置。有兴趣的话你可以看一看,不看也不影响什么。

以下有一段是设置一些显示信息,接下来是这样的内容:



# Mount /proc (done here so volume labels can work with fsck)


action "Mounting proc filesystem" mount -n -t proc /proc /proc


连结/proc文件系统,应该记得/proc是用来显示系统状态的虚拟文件系统,注意acti
on命令的语法,它显示一段提示信息,然后去执行相应的命令。

然后的段落有一点意思:


# Turn off sysrq

#if [ "$MAGIC_SYSRQ" = "no" ]; then

# echo "0" > /proc/sys/kernel/sysrq

#fi


$MAGIC_SYSRQ=no意味着你决定不使用内核调试,脚本必须把系统的内核调试功能关闭
,注意接下来的处理方法,在/proc/sys/kernel下建立一个名叫sysrq的文件,并且设置
其内容为"0",就关闭了这项功能,这也是在运行中打开或者关闭内核的某个功能的标准
方法,以后我们会经常看到这样的例子。

接下来要设置时钟和键盘映射表,装入系统字体,又是一段冗长的代码,这里将它省
略,反正你总可以在自己的系统上看到他们。


# Start up swapping.

action "Activating swap partitions" swapon -a


swapon –a 将读/etc/fstab文件,这个文件中包含有系统中存在的应该自动挂接的各
种文件系统的列表,同时也包含了关于交换分区的知识,swapon –a将启动其中标注的
所有交换分区。

# Set the hostname.

action "Setting hostname ${HOSTNAME}" hostname ${HOSTNAME}


# Set the NIS domain name

if [ -n "$NISDOMAIN" ]; then

action "Setting NIS domain name $NISDOMAIN" domainname $NISDOMAIN

else

domainname ""

fi

这两段设置系统名字,我们应该记得$HOSTNAME已经在/etc/sysconfig/network文件中
设置过,所以这里的action被执行,而$NISDOMAIN现在是空字符串,所以执行后hostna
me被设置而NIS域名不存在。

if [ -f /fsckoptions ]; then

fsckoptions=`cat /fsckoptions`

else

fsckoptions=

fi


if [ -f /forcefsck ]; then

fsckoptions="-f $fsckoptions"

fi

这里是与管理员相关的行了。如果系统的/下将存在/forcefsck文件,于是系统自动启
动fsck程序去检查文件系统是否有错误。接下来是一段关于是否存在/fastboot文件的判
断,与其大同小异,然后系统将会决定是否启用PNP,方法和处理MAGIC_SYSRQ是类似的
,这两段我们不讨论了,你可以自己看一下。


# Remount the root filesystem read-write.

action "Remounting root filesystem in read-write mode" mount -n -o remount
,rw /


# Add /proc to /etc/mtab

mount -f -t proc /proc /proc

检测根文件系统完毕后,系统重新将/连结成读写方式,并且将/proc加入到/etc/mta
b中。下面是非常重要的一步,如果系统内核支持可装载模块,需要把$USEMODULES变量
设置成"y"并且设置模块的缺省路径,参数等等,然后,系统开始装入模块:


# load sound modules

if [ -n "$USEMODULES" ]; then

if grep -s -q "^alias sound " /etc/conf.modules ; then

action "Loading sound module" modprobe sound

fi

.........

fi

...........

当这些直接装入的模块结束后,为了和以前的方式兼容,也为了管理员的方便,这个
脚本试图去寻找/etc/rc.d/rc.modules,如果存在就执行它:

# Load modules (for backward compatibility with VARs)

if [ -f /etc/rc.d/rc.modules ]; then

/etc/rc.d/rc.modules

fi

显然,你可以将自己的模块初始化命令加入/etc/rc.d/rc.modules使它在启动时得到
运行。

完成主要模块的装入后,系统将开始一系列日常工作,如检测有问题的文件系统,连
结所有本地文件系统,启动磁盘限额等等,如果系统还没有被配置,那么将启动配置脚
本,设置网络,超级用户口令等等,否则,对于已经配置好的系统,清理记账文件,准
备进行系统工作。

当一切都完成之后,系统按照inittab的设定,进入运行级3,执行/etc/rc.d/rc 3。

/etc/rc.d/rc是一个很有意思的程序,它是一个shell脚本,其行为是这样:根据提供
给它的参数,它去寻找相应的目录rc${arg1}.d,例如,在/etc/rc.d/rc 3执行时,它去
查询/etc/rc.d/rc3.d下的所有文件,试图执行那些所有用S或K打头的脚本,凡是用S开
头的脚本,它给加上一个start参数,凡是用K打头的脚本,加上一个stop参数。执行次
序是按照S或K后跟的数值顺序。

例如,在现在的例子中,/etc/rc.d/rc 3下存在一个S50inet的脚本,于是 rc 脚本去
执行S50inet start。而S50inet其实是到/etc/rc.d/init.d/inet的一个符号连结,其内
容是(这里只给出了部分内容):

. /etc/rc.d/init.d/functions

. /etc/sysconfig/network

if [ ${NETWORKING} = "no" ]

then

exit 0

fi


[ -f /usr/sbin/inetd ] || exit 0

RETVAL=0


# See how we were called.

case "$1" in

start)

echo -n "Starting INET services: "

daemon inetd

RETVAL=$?


echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/inet

;;

stop)

echo -n "Stopping INET services: "

killproc inetd

RETVAL=$?


echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/inet

;;

*)

echo "Usage: inet {start|stop|status|restart|reload}"

exit 1

esac


exit $REVAL



daemon和killproc是在/etc/rc.d/init.d/functions里面定义的函数,daemon将命令
当成守护进程执行,killproc则杀掉对应进程。显然,S50inet start的结果是inetd程
序被启动为一个守护进程。

这里的方法是启动服务进程的标准模式,例如你要设置某个服务在runlevel 3被启动
,那么你可以自己写一个脚本,比如说mydaemon,让mydaemon start启动服务,mydaem
on stop停止服务,然后将这个脚本复制到/etc/rc.d/init.d中,接着在/etc/rc.d/rc?
.d中建立连接,在rc3.d中连结为S65mydaemon,而在其他目录中为K65mydaemon,这样你
的脚本就会在进入和退出运行级3时自动处理了。

除此与run level相关的启动指令之外,Linux还从BSD中引入了另外一些配置文件,其
中最重要的是/etc/rc.d/rc.local,通常它在执行了全部运行级脚本以后运行,你可以
在这里定制自己的设置,如欢迎信息等等。


4.1.4 版本之间的区别

如同我们看到的那样,Redhat的启动脚本看上去井井有条,要寻找某个功能很容易,
但是要寻找某个命令在何处启动就显得比较困难,经常需要从/etc/inittab开始。

Turbo Linux和Red-Flag的脚本和Redhat颇为相似,尤其是红旗几乎就是RedHat的中文
版,它们的配置也相当近似。

Slackware的启动脚本使用另外一种风格,实际上,看上去很象BSD系列。启动脚本也
在/etc/rc.d下面,但是它把一些在大部分运行级别必须使用的脚本做在了一起,冠以r
c.modules,rc.inet1,rc.inet2等等的名字,这样对于手工配置系统确实简单的多,不
过这些文件都相当大,看起来需要耐心。对于这个系统,你只要看一遍/etc/inittab就
能掌握它的配置文件位置了。

Debian/Corel使用一种有趣的方式,看上去颇像Sun的Solaris。实际上,它和RedHat
的方式几乎是一样的,但是启动脚本不是在/etc/rc.d,而是直接位于/etc下,例如/et
c/rc1.d,/etc/rc2.d等等,知道了这一点之后,配置debian就不会感到困难了。

关于Corel Linux我们应该特别地说一句,它的配置文件组织看起来要比RedHat简单一
些,但是它没有类似于rc.modules的设定,等价于rc.sysinit的文件是/etc/init.d/rc
S。它的运行级别定义也比较怪异,好像Run Level 2是正常的图形模式,要配置Corel,
最好是从/etc/inittab直接开始。无论如何,我们不会建议一个新手使用corel Linux。

4.2 网络配置

下面我们要开始研究网络的配置脚本了,这个部分有许多很简单的地方,也有很讨厌
的问题,原因经常来自内核的一些设定。无论如何,在研究这里描述的东西时,最好使
用发行盘上带的内核,并且确认你的内核版本是2.2或者更高版本。通常发行盘上的版本
总是带有网络支持的。

我们假定你已经在上一节中知道了启动脚本在哪里,下面就可以开始了。

10楼
4.2.1 配置网卡

Linux对网卡的支持需要通过内核,早期,许多人使用编译时直接加入网卡支持的办法
,不过随着网卡种类的增加,已经很少有人使用这种吃力不讨好的办法了。现在,大部
分人都采用加入网卡模块的方法来驱动网卡。

为了加入网卡,首先必须知道网卡的类型,Linux对那些破破烂烂的“NE 2000兼容”
的网卡的支持倒确实是不错的,但是对于百兆的网卡就不太好说了,反正你总可以通过
实验选出合适的产品。

首先得一条是了解网卡的芯片型号,由于硬件厂商通常不会提供网卡的Linux驱动程序
,你必须自己为网卡选择正确的驱动程序。许多人喜欢说“啊,就是D-Link的”,这种
说法大概是在Linux中你能听到的最令人愤怒的说法了,跟那个著名的“在空中”的回答
差不多,绝对正确而绝对毫无意义。

你可以首先看看你的网卡属于哪一个类型,如果是3COM 3C系列的“骨灰级”产品,你
根本不需要进一步了解型号,Linux中肯定会有对应的驱动程序。到/lib/modules/x.x.
xx/net 下(x.x.xx是里Linux内核的版本号)看一看,确定一下到底应该使用那一个驱动
程序。例如,3C509的驱动程序就是3c509.o

如果是ne2000 兼容型,那么一般来说只要使用ne2000的驱动程序就可以了,这个驱动
程序的名字是ne.o,另外还有许多10兆的PCI网卡属于"NE2000-PCI"兼容类型,对应的驱
动程序名字是ne2k-pci.o。

如果都不是,那么你就需要猜测一种合适的网卡型号了,网卡的主控芯片(通常是最
大的一块)上面会标出芯片的型号,然后到/lib/modules/2.2.14/net(我使用2.2.14的
内核,你的内核版本可能会不一样)下看一看,找到合适的驱动程序名字。

下一步是对网卡进行测试,例如,我的网卡驱动程序是rtl8139.o,是一块PCI的100M
网卡,因此执行

/sbin/modprobe rtl8139

路径名/lib/modules/2.2.14/net和扩展名.o可以省略。

在我们这个情况下,这个命令直接返回,不产生任何输出,表示这个模块已经正确地
装入内核存储区。如果你想确定一下,你可以用dmesg命令看一下内核输出,会有这样的
内容:

rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/dri
vers/r

tl8139.html

eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec.

这表示网卡已经被激活了。

有些ISA网卡(特别是ne2000兼容网卡)需要显式给出一些配置参数,例如,要激活n
e2000兼容网卡,需要给出I/O地址,可以使用这样的形式:

/sbin/modprobe ne io=0x300

这里假定ne2000兼容网卡位于I/O地址0x300处。IRQ不需要指定,Linux会给出正确的
值。

对于特定的网卡,具体的参数格式可以参考驱动程序的源代码。

假如网卡驱动程序不对或者参数有问题,就会显示出错信息:

[openlab]# /sbin/modprobe 3c509

/lib/modules/2.2.14/net/3c509.o: init_module: Device or resource busy

在某些系统中,使用/etc/conf.modules文件来设置网卡的缺省参数,例如:

$cat conf.modules

alias eth0 ne

options ne io=0x300

options 命令为模块提供缺省参数。以后只要执行/sbin/modprobe ne或者/sbin/mod
probe eth0就可以自动使用参数了。

假设你通过上面的过程已经确定了网卡驱动程序,测试也正确,那么你就应该把它放
到系统启动脚本中去。前面我们已经提到过,对于RedHat或者Slackware,用户自选的模
块文件通常可以放在/etc/rc.d/rc.modules中,内容就是简单的写上上面用来加载模块
的命令,例如,我的系统中有两片网卡,分别使用rtl8139和ne2000驱动程序,ne2000兼
容网卡的I/O地址是0x300,那么,rc.modules的内容就是

[openlab]# cat /etc/rc.d/rc.modules

/sbin/modprobe rtl8139

/sbin/modprobe ne io=0x300

不要忘了设置这个脚本的可执行属性。当系统重新启动时,它会自动执行这个脚本,
你可以在系统启动之后用dmesg看看执行是否正确。如果你的Linux启动脚本并不使用rc
.modules,你总可以把它放到rc.sysinit或者rcS里面去。


4.2.2 TCP/IP的启动

每当装入一个网卡驱动模块,系统会为它分配一个设备名字,命名规则是:第一个以
太网卡是eth0,第二个是eth1,....以此类推。分配可以用dmesg命令显示,例如:

rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/dri
vers/r

tl8139.html

eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec.

表明rtl8139的设备名字是eth0,MAC地址是十六进制0050bad08dec。

下面需要为设备分配IP地址和网络广播地址以便启动TCP/IP。这要使用ifconfig命令
,其语法是

ifconfig [设备名] [IP地址] netmask [网络掩码] broadcast [广播地址] ....

例如,要为eth0分配ip地址202.199.248.145,掩码为255.255.255.0,广播地址是20
2.199.248.255,那么命令是

/sbin/ifconfig eth0 202.199.248.145 netmask 255.255.255.0 broadcast 202.19
9.248.255

同样的方式可以用来配置eth1,eth2,等等,通常netmask和broadcast只要设置一个
就可以了。

不带参数的ifconfig命令可以显示当前启动的网络接口:

[openlab]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:50:BA:D0:8D:EC

inet addr:202.199.248.6 Bcast:202.199.248.255 Mask:255.255.255
.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1930 errors:0 dropped:0 overruns:0 frame:0

TX packets:841 errors:0 dropped:0 overruns:0 carrier:0

collisions:1 txqueuelen:100

Interrupt:19 Base address:0xd800


lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:3924 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

lo是look-back网络接口,从IP地址127.0.0.1就可以看出,它代表“本机”。无论系
统是否接入网络,这个设备总是存在的,除非你在内核编译的时候禁止了网络支持。

如果你只是关心某个设备是否正常,可以在ifconfig后面加上接口名字:

[openlab]# ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:50:BA:D0:8D:EC

inet addr:202.199.248.6 Bcast:202.199.248.255 Mask:255.255.255
.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:2284 errors:0 dropped:0 overruns:0 frame:0

TX packets:889 errors:0 dropped:0 overruns:0 carrier:0

collisions:1 txqueuelen:100

Interrupt:19 Base address:0xd800

表示eth0设备已经正常工作。

有时需要为某个设备接口配置多个IP地址,办法是使用设备别名,例如,eth0设备可
以有eth0,eth0:0,eth0:1....多个别名,每个都可以有一个独立的IP地址:

ifconfig eth0 202.199.248.2 netmask 255.255.255.0 broadcast 202.199.248.25
5

ifconfig eth0:0 202.199.248.3 netmask 255.255.255.0 broadcast 202.199.248.
255

这样,202.199.248.2和202.199.248.3都会被绑定在eth0设备上,使用同样的网络设
备,不同的IP地址。

如果你要暂停某个网络接口的工作,使用down参数:

ifconfig eth0 down

将取消eth0网络接口。与之对应的是有一个参数up,不过由于是缺省值,所以从来不
用。

4.2.3 协议和路由配置

配置了网络接口之后,通常本地网络就可以通信了,通过ping命令可以显示子网内能
否相互访问:

[openlab]# ping 202.199.248.1

PING 202.199.248.1 (202.199.248.1) from 202.199.248.6 : 56(84) bytes of da
ta.

64 bytes from 202.199.248.1: icmp_seq=0 ttl=255 time=0.9 ms

64 bytes from 202.199.248.1: icmp_seq=1 ttl=255 time=0.9 ms

64 bytes from 202.199.248.1: icmp_seq=2 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=3 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=4 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=5 ttl=255 time=0.8 ms

?--- 202.199.248.1 ping statistics ---

6 packets transmitted, 6 packets received, 0% packet loss

round-trip min/avg/max = 0.8/0.8/0.9 ms

注意ping命令会反复试验直到你按下^C为止,上面的信息说明本地网的相互通信已经
正常了。但是如果你现在ping子网外面的机器,就会得到一个“网络不可达”的信息,
因为还没有设置路由:

[openlab]# ping 202.112.58.200

connect: Network is unreachable

路由路径的设置是由route命令完成的,通常,你用ifconfig命令启动一个网络接口的
时候会启动一个子网内的路由,这可以用route命令显示出来:

[openlab]# route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use If
ace

202.199.248.0 * 255.255.255.0 U 0 0 0 et
h0

127.0.0.0 * 255.0.0.0 U 0 0 0 lo

这两行表示目标地址在C类网202.199.248.0(也就是,202.199.248.0到202.199.248.
255)中的数据包要送到eth0设备去广播,而目标为A类地址127.0.0.0的数据包直接送到
lo接口。

那么,下一步需要给出目标地址不在这个子网内的数据包的递送地址,route命令可以
用来加入这种静态递送路径:

route [add/del] [-net/-host] [目标地址] [gw] 网关地址或者

route [add/del] default gw [网关地址]

route [add/del] –net [子网地址] dev [网络接口]

add/del表示在路由表中增加还是删除一条路径,而-net或者-host则表示投递的目标
地址是一个地址还是一个网络,如果是网络的话,可以使用netmask参数。gw后边跟路由
器地址。例如,要把目标地址是202.118.x.x的数据包通过202.199.248.1路由出去,使


route add –net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1

如果要撤销这个路由路径,照样重敲一遍并且使用del替换add:

route del -net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1

当然,实际上,大部分比较小的网络使用缺省路由,即“除了本地地址,全都投递到
路由器”,这可以使用default参数来完成,例如,我们的缺省路由器是202.199.248.1
,那么,使用命令

route add default gw 202.199.248.1

有时也需要设定对某个主机的确定路由路径,这可以把-net选项换成-host,另外主机
地址不能使用掩码,其他和上面说的一样。route命令还有一个特殊的参数metric,用来
设置路由器的缺省跳数,不过事实上没有人用。

route的最后一个常用参数是dev,用于设定设备接口,这个功能一般用在你有多片网
卡的时候。例如,要强制让所有目标地址是202.199.248.0的包通过eth0送出,使用

route add –net 202.199.248.0 netmask 255.255.255.0 dev eth0

最后可以用route和ping命令检测一下是否正确:

[openlab]# route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use If
ace

202.199.248.0 * 255.255.255.0 U 0 0 0 et
h0

127.0.0.0 * 255.0.0.0 U 0 0 0 lo

default router.asnc.edu 0.0.0.0 UG 0 0 0 et
h0

[openlab]# ping 202.112.58.200

PING 202.112.58.200 (202.112.58.200) from 202.199.248.6 : 56(84) bytes of
data.

64 bytes from 202.112.58.200: icmp_seq=0 ttl=247 time=586.0 ms

64 bytes from 202.112.58.200: icmp_seq=1 ttl=246 time=562.2 ms

64 bytes from 202.112.58.200: icmp_seq=2 ttl=246 time=617.6 ms

?--- 202.112.58.200 ping statistics ---

4 packets transmitted, 3 packets received, 25% packet loss

round-trip min/avg/max = 562.2/588.6/617.6 ms

一般来说,经过这样的配置之后,Linux系统已经可以使用网络了。但是,域名系统需
要额外配置,我们这里不涉及DNS Server,相反,假定你已经有了一个可以使用的域名
服务器,并且知道它的IP地址,那么,你需要修改一个文件,即/etc/resolv.conf,这
个文件用于寻找正确的DNS服务器地址:

[openlab]# cat /etc/resolv.conf

search asnc.edu.cn

nameserver 202.199.248.2

search子句定义了缺省的域名后缀,例如,现在这个配置中,当你输入ping myhost时
,系统自动将myhost解释成myhost.asnc.edu.cn。nameserver子句给出名字服务器的IP
地址,可以有多个nameserver子句。

接下来是/etc/host.conf和/etc/nsswitch.conf两个文件,这两个文件定义名字解析
的顺序。需要指出的是不同的Linux内核可能使用不同的定义,有的使用/etc/host.con
f,有的使用/etc/nsswitch.conf,没有确定的标准,目前的版本主要是使用/etc/nssw
itch.conf。一般系统安装后这两个文件的内容已经是正确的,不过为了完整,这里解释
一下:/etc/host.conf的内容是

order hosts,bind

multi on

第一个order子句用于说明域名的搜索顺序,hosts其实就是/etc/hosts文件的内容,
这个文件用来定义某些需要在启动时使用的地址,例如,一个典型的/etc/hosts文件的
内容是

[openlab]# cat /etc/hosts

202.199.248.6 localhost.localdomain localhost

202.199.249.2 openlab.asnc.edu.cn openlab

202.199.248.5 solaris7.asnc.edu.cn solaris7

202.199.248.149 tvt.asnc.edu.cn tvt

每一行定义了一个ip地址、主机名和别名。

bind指代一个dns服务。连起来的意思就是先查找本地/etc/hosts文件,然后再查询D
NS服务器。

multi on的含义是允许一个名字有多个ip。

/etc/nsswitch.conf文件比较长,你在其中应该能看到类似这样的行:

hosts:files dns

这一行的效果和/etc/host.conf里的order hosts,bind是类似的。

现在你有了一个可以使用网络的系统了,但是除了resolv.conf和host.conf/nsswitc
h.conf之外,这些内容并没有被记忆下来,而是一旦重起就会丢失,因此,很自然的想
法是把相关的命令放到启动脚本中,一开机就自动执行。往系统的缺省运行级目录里写
一个脚本是不错的主意,或者写在rc.inet1,rc.sysinit等等地方,但是,如果喜欢有
序,你可以看看基于菜单的配置工具。

4.2.4 配置工具

实际上,前面的两节已经包含了配置网络所需要的主要知识。对于slackware,这可能
就是你需要的全部知识,只要把合适的命令加入/etc/rc.d/rc.inet1里面就可以了。不
过,现在的Linux发行版本往往提供了配置工具,特别是网络配置工具,另外,象redha
t使用许多个脚本分散在各个目录下面的办法,编辑起来可能是相当累人的,因此,了解
一些配置工具可能也是必要的。不过要记住,配置工具所做的,无非就是把你用手工完
成的编辑工作自动化而已,而且它们往往依赖于“某个文件在什么地方”的假设,所以
它们可能会工作不正确。而且,许多Linux发行版本并不包含这些工具,比如slackware
和corel Linux。不管怎么说,如果你不喜欢配置工具,你可以把网络的启动命令加到/
etc/rc.d/rc.sysinit或者/etc/rc.d/rc.local里面,或是干脆修改inittab。

配置工具有好几种,最常见的就是类似于控制中心的东西,例如linuxconf程序和YaS
T程序,两者都很常用,你可以看看你的系统上有没有这两个命令。另外就是专门用于网
络的配置工具。实际上,linuxconf也是去调用这种配置工具。

最常用的网络配置工具是netconf程序,这是个很有用有时也很讨厌的程序。它包含在
RedHat(及一切派生系统,如RedFlag,Xteam等等)和Turbo Linux中,可以直接以超级
用户输入/bin/netconf来执行,根据是终端还是图形方式,它会有不同的界面,不过其
内容和用法都是一样的,这里使用终端界面为例子:




图4.1 netconf配置工具

在Basic host information中的选项是基本的信息,按下回车键得到:

图4-2 网络接口设置

每一个网卡用一个Adapter表示,检查框内容为"X"是允许的状态,其他各项的意思对
于理解了我们上面说的内容的读者应该是十分简单的。按下Accept或者Cancel可以返回
到上一屏。

在Name Server Specification中按下回车进入DNS设置屏幕:



图4.3 DNS配置

注意第一栏DNS is required.....前面的选择,这个检查框当前被设置为X,表示肯定
的状态,这个选择表示当其他机器通过网络存取这台计算机时,本机将首先询问存取者
的DNS名字,如果没有,就要等待到DNS超时为止,这个选项有时很讨厌,你会看到当te
lnet到这台机器上时可能会等待相当长的一段时间,然后才能连接成功,如果它使你困
扰,你可以禁止它。

在主选单的 Routing & gateways选项中按下回车,出现路由选择屏幕,在我们的这个
阶段,主要是设置缺省路由,在路由选择屏幕的Set Defaults选项中按下回车键,出
现设置缺省路由的屏幕:



图4.4 路由配置

输入你的缺省路由,接受并返回。

主界面的另一个选择项是Host name search path,它实际是设定/etc/host.conf文件
,不过如同我们说的,现在的系统常常使用/etc/nsswitch.conf,所以建议你不要使用
它,而是自己去修改对应文件。

当基本的设置完毕后,回到主界面,选择Quit,然后将出现三个选项,如:



图4.5 退出并且激活

选择Active the changes,退出,就可以使用网络了,偶尔你必须重新启动计算机。

需要指出的是RedHat的脚本组织有点奇特,基本上是按照/etc/rc.d/rc程序的逻辑来
进行的,这里很难用语言来形容它,只能给出一些提示,这些提示可以帮助你解决可能
碰到到一些问题:

首先,netconf程序并不会处理内核模块的装入,所以,如果你使用了netconf程序但
是没有得到正确的结果,你首先应该看看网络驱动模块有没有正确地装入。一般如果内
核模块失败或者没有被装入,那么会出现一个"Delaying eth0 initialization"或类似
的错误信息

第二,也是比较重要的,就是系统的网络脚本并不直接使用我们描述的那些命令的具
体形式。相反,它试图从几个配置文件中读出信息并且相应地生成配置命令,例如,主
要的脚本/etc/sysconfig/network-scripts/ifup试图去/etc/sysconfig/network-scri
pts下面去寻找一切名为ifcfg-eth0,ifcfg-eth1的文件,并且根据他们来启动网络,而
/etc/rc.d/rc.sysinit以及启动网络的脚本/etc/rc.d/S10network则试图通过判断是否
存在/etc/sysconfig/network文件来决定是否启动网络,所以如果要调整网络配置通常
就从/etc/sysconfig/network下手,这个文件具有这样的典型形式:

[openlab]# cat network

NETWORKING=yes

HOSTNAME="openlab.asnc.edu.cn"

GATEWAY="202.199.248.1"

GATEWAYDEV="eth0"

其含义很容易看出来,这里就不多讲了,如果你对到底配置文件是如何工作的感兴趣
,可以参考/etc/rc.d/init.d/network脚本。

第三,即使用RedHat,你也一样可以通过修改/etc/rc.d/rc.sysinit或者/etc/rc.d/
rc.local来执行网络启动脚本,而且netconf程序通常工作的很好,所以问题总是可以解
决的。

我们还是要额外提一下Corel Linux。尽管几乎不会有人用它作为服务器,但是它的工
作方式是典型的“教科书方式”,也许将来另一个愚蠢的厂商会采用这个办法。它缺省
的时候是使用dhcp(见第五章)来取得系统的IP地址和网关,所以如果你真的要配置网
络就的先把对应运行级别里的有关dhcp的脚本连接删除掉,然后更改/etc/init.d/netw
ork并且把它连接到正确的位置上去:

ln –s /etc/init.d/network /etc/rc2.d/S05network

还要在/etc/init.d/rcS中加入启动网卡的命令,就可以使用网络了。


4.2.6 inetd服务器

下面我们来处理一个最重要的网络服务进程,即inetd服务器程序。实际上,大部分请
求不太频繁的服务都是由它启动的。

inetd程序在系统中是作为一个服务进程出现,它监听许多端口并且在得到客户请求时
启动这个端口的服务程序。由于它的通用性,我们把它放到这一章来介绍。

inetd程序可以由命令行来启动:

inetd [-d]

-d选项用于打开调试信息。

inetd的工作方式是由/etc/inetd.conf和/etc/services文件设定的,下面我们来解释
一下这两个文件。

services文件的格式基本上是这样:

netstat 15/tcp

qotd 17/tcp quote

msp 18/tcp # message send protocol

msp 18/udp # message send protocol

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp 21/tcp

# 22 - unassigned

telnet 23/tcp

每一行都是两栏或者三栏,第一栏是服务的名字,第二行是使用的端口和协议,例如
,这里的telnet 23/tcp是表示telnet服务应该使用端口23,协议类型为tcp。第三
栏是服务的别名,通常可以省略。

inetd.conf是依赖于services文件的,它也是个文本文件,每行代表一种服务的工作
方式,由"#"引导的行表示注释行,非注释行的格式大体是这样:

服务名 数据类型 协议 监听方式 用户身份 服务程序 参数

例如,要启动telnet的服务,应该加入这样一行:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

服务的名字就是telnet,这个名字按照/etc/services的定义将在23端口提供服务;s
tream表示数据的发送和接收将使用简单的流式文件读写来完成(fscanf和fprintf);
tcp表示使用tcp协议,监听方式这一栏可以由两个选项,即wait和nowait。简单地说,
如果相应的服务程序是多进程的,那么要设置为nowait,这时inetd会每接受到一个请求
之后启动一个服务程序进程,例如telnet就是这样工作的,每个独立的telnet对话都会
启动一个telnet服务进程。相反,如果是单进程的,就可以设置为wait。

用户身份表示对应服务进程启动时所使用的uid/euid,因为telnet可以是任何用户发
出,而且用户可以通过telnet执行任何命令,所以使用root用户身份。

/usr/sbin/tcpd 是实际启动的程序,这个程序实际是一个通用的TCP连接处理程序,
参数使用in.telnetd,连起来就是当有23端口的连接请求时,inetd去执行/usr/sbin/t
cpd in.telnetd。

通常情况下,各种服务都已经写在inetd.conf中,不启用的服务使用注释#使之失效。
如果需要打开这服务,只要把引导的#注释符号删除就可以了。

值得一提的是/usr/sbin/tcpd程序,它是一个TCP连接过滤程序,通常大部分需要做连
接验证的服务都应该通过tcpd程序启动,这个程序能够自动对客户机器的IP地址进行验
证并且进行某些安全性过滤,其中最主要的功能是禁止某些地址来的连接。例如,按照
上面的形式,in.telnetd程序就是通过/usr/sbin/tcpd程序启动的,因此可以对telnet
请求进行地址检验。

tcpd的地址检验是通过/etc/hosts.deny和/etc/hosts.allow文件完成的,如果不存在
这样的文件,你可以自己建立一个,两者的语法几乎是一样的,只是hosts.allow是允许
某个地址来的连接,而hosts.deny是禁止某个地方来的连接。

基本的语法是:

服务程序:客户地址

服务程序是通过tcpd程序被启动的程序名字,客户地址是相关地址的一个列表,例如
,在/etc/hosts.allow文件中加入这样一行:

in.telnetd:10.0.0.2

将允许10.0.0.2处的机器使用本地的telnet服务,如果这一行加入到/etc/hosts.den
y重将禁止10.0.0.2处的机器登录上来。

地址可以使用集合形式,常用的集合形式主要有下列几种:

以逗点开头的字符串定义一个域,例如.edu.cn表示所有域名后缀是.edu.cn的机器。

以逗点结束的字符串定义一串IP地址,如202.199.248.代表202.199.248.0到202.199
.248.255。

以/分开的字符串解释为网络地址/子网掩码的形式,例如172.13.0.0/255.255.0.0代
表172.13.0.0到172.13.255.255。

另外,地址和服务程序都可以使用通配符,通配符有下列几种:

ALL 代表所有,所有的服务程序或者所有的地址。经常和EXCEPT子句连用,EXCEPT代
表“除了”。例如,在hosts.deny中写上ALL:ALL EXCEPT 202.199.248.将禁止除了202
.199.248.*的机器之外的所有客户机器使用任何基于tcpd的服务。写上ALL EXPECT in.
telnetd:ALL将使得除了telnet以外的所有基于tcpd的服务都被禁止。

LOCAL 指代所有没有名字后缀的机器。

KNOWN 所有IP地址和域名都知道的机器

UNKNOWN IP地址或者域名无法确定的机器

PARANOID IP地址和从域名服务返回的名字不匹配的机器。
11楼
【资料】Linux基础教程 4.3 定制内核
4.3 定制内核

对于Linux系统管理员来说,定制系统内核是一件相当简单的事情,这主要是因为它提
供源代码和编译器。困难之处仅仅是必须理解每一个选项是什么。你可以看到我也不能
完全解释配置内核时的各种选项,一般来说,由于内核配置包含了如此多的东西,你只
要关心和自己有关的东西就可以了。

4.3.1 配置系统内核

配置内核的命令是满简单的,不过选项实在是太多了,所以我们强烈建议你使用基于
菜单的配置程序。

要配置内核,首先必须安装内核的源代码,通常可以使用rpm命令,安装的目标位置是
/usr/src/下面,例如我用2.2.14的内核,源代码就被安装到/usr/src/linux-2.2.14这
个目录下。如果你是从网络上下载的gz或tgz文件,请将它展开的/usr/src目录下。另外
,一般建议建立一个名为/usr/src/linux的符号连接:

ln –s linux-2.2.12 linux

然后进入这个目录,内核源代码的目录一般是这样的:

[openlab]# ls

COPYING Makefile System.map include lib scripts

CREDITS README arch init mm vmlinux

Documentation REPORTING-BUGS drivers ipc modules

MAINTAINERS Rules.make fs kernel net

可以有三种启动配置程序的方法:

make config启动交互式的命令行配置程序

make menuconfig启动文本菜单形式的配置程序

make xconfig启动图形界面的配置程序,这个命令必须在X Window下执行,我们将以
这个命令的界面为例子,其他两种配置的内容是一样的,只是输入方式有所不同。



图4.6 配置内核

每个菜单选项被按下后都会出现一个子菜单,给出一些选择项,例如:Code manturi
ty level options会给出下面的选择菜单:



图4.7 内核配置(2)

设置好了一个子菜单之后,按下next可以进入下一个选单,每个选项都可以用help按
钮取得帮助。对我们而言,下面的一些选择可能是重要的:(注意这里只给出一些主要
的选择项,其他的你可以自己根据help判断,而且那些选项对服务器通常没有多少影响


Code manturity level options子选单

Prompt for development and/or incomplete code/drivers(y/n)

这个选项问你是否有兴趣尝试那些还处在开发测试阶段的内核功能,除非你是Linux的
测试人员,否则选N,因为这些内核功能还不是十分可靠,对于服务器最好不用。

Processor type and features子选单

Processor family

这个选项问你的处理器类型,可以选择从386到Pentium Pro/MMX(Pentium II)在内的
任何一种,但是如果你选择了Pentium处理器,编译出的内核将不能在386/486上运行。
相反,386代码可以在任何可以运行Linux的系统上运行,但是可能无法发挥Pentium II
的全部性能,自己选择合乎自己系统的选项。

Math emulation 数学协处理器仿真,选否。

Maximum Physical Memory 设置系统可以使用的最大内存量,缺省是1GB,不过如果你
正好有一台梦幻级x86系统,可能必须将它改成2GB。

Symmetric multi-processing support,这个选项用于支持多处理器,如果你有两个
以上的处理器,选yes,否则选N。

Loadable module support子选单

Enable loadable module support 是否使用可装载模块,选yes,否则无法使用装载
模块功能。

Kernel module loader 自动装载模块功能,这个功能允许核心在必要时自动装入对应
的模块,不过这样很容易出错,通常应该禁止。

Set version information on all symbols for modules 这个选项通常禁止。

General setup子选单

Network support 网络支持,选yes

PCI support PCI设备支持,选yes

Plug and Play 子选单

Plug and Play support 即插即用功能的支持,由于目前Linux的即插即用特性还不是
很好,通常禁止。

Block Devices子选单

这个选单用来设置内核支持的外部存储设备,通常,除了你的服务器上确实存在的设
备之外,其他的设备都可以选N,如果没有什么把握,也可以使用m选项将其编译为可装
载模块。当然你启动Linux用的磁盘的驱动程序必须选Y。

Network options子选单

大部分的选项都可以选yes,除了下面的一些选项:

IP:optimize as router not host 这个选项将按照路由器设置调整你的TCP/IP工作模
式,如果你用Linux作为软件路由器,那么可以选Y,否则选N。

IP:tunneling 这个选项允许IP隧道,这对早期的的Netware是很重要的一种TCP/IP实
现方式,但今天已经不再需要。如果担心由个别的程序使用这个功能,将它编译为模块


The IPX protocol 是否支持IPX协议。如果需要支持老式的netware 3.x或4.x文件服
务,需要打开这个选项,否则禁止。

Apple Talk DDP 是否支持AppleTalk,选禁止。

TCP syncookie support 这个选项是一个补丁,用于对付“SYN flood”攻击,选yes


SCSI support 子选单和 SCSI low-level drivers子选单

在这两个选单里选择你使用的SCSI控制器和设备类型,通常启动磁盘的驱动程序必须
编译进内核(y)

Network device support 子选单及相关选单

在这几个选单里选择你使用的网络适配器类型。通常我们将它们编译成可装载模块(m
)。

Character devices子选单

缺省设置通常就已经很好了,不过有一个选项必须注意,即

Maximum number of Unix98 PTYs in use(0-2048)这个选项可以理解为最大的telnet
进程数(包含ssh,rsh,rlogin等),缺省值是256,这对一般系统已经足够,然而也许你
要开设一个有几百人上站的BBS,在这种情况下,将它提高到2048。

Filesystems 子选单

它设置内核中支持的文件系统类型,可以参考第二章的解释。

Network File Systems子选单

设置支持的网络文件系统,NFS和SMB文件系统是必须支持的,其他系统可以编译成模
块。

Partition Types 子选单

选择系统支持的分区格式。

Native language Support子选单

可以将各种语言的支持程序都编译成模块。

kernel hacking 子选单

Magic SysRq Key 这个选项允许你通过sysrq(Alt+PrintScreen)来强行控制系统,即
使在系统崩溃之后。除非你准备调试内核,否则选N。

当全部选项设置完毕后,选择主选单的Save and Exit退回,然后开始编译:

openlab$ make bzImage

make bzImage命令将按照你的选择重新编译系统内核源代码并生成核心映像,这需要
一段时间。注意建立启动映像有两个办法,即make zImage或者make bzImage。其中,m
ake bzImage对核心映像进行压缩,由于服务器用到的核心驱动比较多,通常应该选择m
ake bzImage,否则用make zImage可能发生映像文件太大而无法安装的情况。

下一步是编译模块,使用命令

openlab$ make modules

将产生对应的内核模块。

4.3.2 使用新内核

编译通过了一个新内核之后,可以用新内核引导系统,这样就可以使用新内核提供的
功能了。

为了使用新内核进行引导,首先要把编译出的内核模块安装到/lib/modules目录下,
这可以用modules_install选项完成

[openlab]$ make modules_install

这个操作必须在root权限下执行。

然后需要为新的内核创建启动选择,通常我们建议不要用新内核覆盖旧内核,而是用
lilo程序配置一个新的启动选择项,首先我们要把生成的内核映像拷贝出来,这个映像
按照我们的设定应该是

/usr/src/linux/arch/i386/boot/bzImage

另外,为了正确地装入模块,下面的文件也是必要的:

/usr/src/linux/System.map

将这两个文件拷贝到合适的地方,例如/bootimage,然后在lilo.conf中建立新的启动
项,例如:(加粗体的是增加的内容)

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

image=/boot/vmlinuz-2.2.5-15

label=linux

root=/dev/hda1

read-only

image=/bootimage/bzImage

label=new

root=/dev/hda1

read-only

然后执行lilo程序,显示

linux *

new

表示核心已经安装成功,重新启动,在lilo:提示符下输入new回车,就可以启动新的
内核了。

在新内核测试确认无误以后,将default改成新内核对应的项,重新运行lilo程序,就
不需要手工引导新内核了。

4.3.3 从灾难中恢复

安装在主引导扇区的的Lilo是容易被破坏的,一旦发生这种情况,系统将无法启动,
这也是教科书上一般建议从软盘启动系统的原因之一。但是,如同我们所说的那样,我
们不主张这样做,相反,我们主张准备一张Linux启动盘,然后在万一出现问题时从软盘
引导系统并且进行灾难恢复。

通常,可以制作标准的Linux软盘系统,然后用软盘启动系统,这需要将软盘做成Lin
ux启动格式,但是更好的办法是将系统引导到DOS下,然后用loadlin.exe程序来引导Li
nux。

为了达到这个目的,你首先要找到一个能够正确引导系统的内核,根据你的系统中的
/etc/lilo.conf就可以知道目前使用的内核映像是哪一个文件,将它拷贝到一张在DOS下
格式化的软盘。然后到安装Linux的光盘上找到loadlin.exe程序,拷贝到软盘上。

要使用loadlin,首先用DOS软盘启动系统,然后在包含内核映像的软盘上使用loadli
n.exe,例如你的映像文件为bzImage,而Linux系统的根分区是hda1,则可以使用下面的
语法:

loadlin.exe bzImage root=/dev/hda1 ro

ro表示第一趟连接/文件系统的时候使用read-only方式,这也是lilo.conf中使用的方
式。

执行这一条命令之后,Linux将象平时一样启动,只是使用的是软盘上的内核。启动完
毕之后,只要正确设置/etc/lilo.conf并且重新执行lilo程序就可以恢复lilo了。不过
由于Linux内核建立在保护模式下,所以最好用纯DOS方式启动loadlin,不要使用emm38
6和himem,更不要在windows 95的dos框中执行loadlin。

另外一种常见的灾难是由于某些原因,系统的启动脚本发生错误,特别是与网络相关
的脚本发生了错误,或是某些网络文件系统损坏等等。如果发生这样的情况,常常必须
进入运行级1来修改系统脚本。

要想在启动时直接进入某个运行级,可以在lilo:提示符下使用命令行,例如,你的启
动选项中某个启动项为sel,要使用这个启动项的运行级1,在lilo:下输入

sel 1

回车后,就会自动进入运行级1。

运行级1有其特殊的含义,因为它代表“单用户模式”,这个模式启动系统时无需输入
口令就可以获得一个root shell。如果你忘记了超级用户口令,就可以使用这个办法进
入系统更改口令。当然这带来了一些安全性问题,特别是在可能有人接触你的机器时,
解决的方法是为lilo设置口令,见有关安全性的部分。

还有一种比较可怕的灾难是文件系统损坏,这时只能从包含Linux根文件系统的软盘加
载文件,然后手工安装文件系统了。

4.4 使用硬盘

4.4.1 为系统安装新的硬盘

或迟或早你的硬盘空间总会耗尽,当硬盘空间开始紧张的时候,你可以通过删除文件
腾出一些空间,然而必须存储的文件总是比你能买到的硬盘的容量大一些。在这种情况
下,更有效的方法是为系统添加一块新的硬盘,在笔者写这部分内容的时候,28GB的ID
E和37GB的SCSI硬盘已经成为新的时尚。(PC的最大好处就是你可以在任何有必要的时候
扩展你的系统!)

如同一般书上建议的那样,SCSI硬盘在服务器方面具有对IDE硬盘的先天优势。不过,
与NT不同,Linux并不十分依赖于SCSI,高性能的磁盘缓冲在很大程度上抵消了IDE的弱
点,因为你可以把买SCSI控制器的钱转用于购买128MB内存。当然,如果你的服务比较繁
重,特别是内存比较紧张而需要使用交换,那么SCSI的性能优势会迅速的体现出来。

许多服务器主板上带有SCSI控制器,你可以将SCSI硬盘直接连接在上面,否则你需要
一块SCSI控制卡,不过,一定要确认你的Linux内核支持你购买的SCSI控制卡,就我知道
的,Linux对SCSI的支持远不象对以太网卡那样令人满意。然后,为了确保工作,你需要
将SCSI支持加入内核,并且编译相应的SCSI卡驱动程序。

相对来说,IDE硬盘的安装极其简单,只要确认你的系统BIOS能够识别你的硬盘,将I
DE硬盘正确连接,上电就可以了,而且几乎可以肯定Linux内核会自动识别你的硬盘。

由于作者假定你有一定的DIY基础,所以不打算处理如SCSI连接,IDE的跳线等等问题
,你可以自己查阅有关的资料,或者最简单的找人给你安装一遍。

4.4.2 分区和建立文件系统

如同在DOS和Windows 9x下一样,一个新的硬盘必须通过分区和格式化(在Linux下叫
做“建立文件系统”)才能被Linux所使用。通常我们总是建议将新的分区格式化为ext
2文件系统。

分区可以使用许多程序来完成,例如fdisk,cfdisk,Disk Druid等等。在安装那一章
我们已经看到了DiskDruid程序和CFDISK程序,这里我们主要介绍的是fdisk。每个Linu
x发行版本都会带有这个程序,而且它的使用虽然不直观,却非常简单。

要使用fdisk程序,使用命令fdisk [设备名],例如,要给第二个IDE主磁盘分区,使


fdisk /dev/hdc

然后出现下面的选项:

The number of cylinders for this disk is set to 3467.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)


Command (m for help):

注意这里的提示信息,这里警告你的柱面数大于1024。Linux可以支持柱面数大于102
4的硬盘,但是启动分区通常必须保留在1024以内,如果你的启动分区太大,那么Lilo程
序可能无法正常安装(在目前的发行版本中的lilo都不能支持超过1024个柱面的启动分
区,如果一定要这样用,你需要去下载新版本的lilo)。

按下m键并回车可以得到命令列表:

a 设置活动分区

b 对磁盘进行BSD类型的分区

c 切换DOS兼容标志

d 删除某个分区

l 列出已知的分区类型

m 显示这个帮助信息

n 建立新的分区

o 清空分区表

p 显示当前分区形式

q 放弃并退出

s 对磁盘进行Sun 风格的分区

t 改变某个分区的标志

u 改变显示的单位

v 校验分区表

w 存盘并退出

x 专家模式

这些命令的含义都十分简单,例如,要建立一个新的分区,使用命令n

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p就是普通的分区,而e代表扩展分区。如果要建立一个普通的分区,输入p并且回车:

p

Partition number (1-4):

输入1,表示使用第一个分区表项,然后将输入起始和结束柱面号,完毕后,返回分区
界面。

由于普通的分区(主分区)的分区表项只能使用1-4的数值,也就是最多只有四个,这
在许多情况下是不够用的,因此我们通常还要使用扩展分区:

Command (m for help): n

Command action

e extended

p primary partition (1-4)

e

Partition number (1-4): 1

First cylinder (1-3467, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-3467, default 3467):

Using default value 3467

上述操作把整个硬盘划成了扩展分区,在存在扩展分区时,就可以使用逻辑分区划分
了(类似于DOS的逻辑盘):

Command (m for help): n

Command action

l logical (5 or over)

p primary partition (1-4)

注意在有扩展分区的时候出现了l选项,这个选项将扩展分区分划为逻辑盘,分区方法
与前面基本上是一样的,区别在于逻辑分区的分区号是从5开始。

Command action

l logical (5 or over)

p primary partition (1-4)

l

First cylinder (1-3467, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-3467, default 3467): +1000M

上述操作建立了一个1GB的逻辑分区,如此下去可以建立更多的逻辑分区。

分区结束之后,可以用p命令显示,确认无误后用w命令存盘退出。如果有必要,重新
启动计算机。

分区正确后,下一步要为Linux建立文件系统,这可以用mkfs命令完成:

mkfs [-V] [-t 文件系统类型] [-l ] [-c] 分区名

-V选项输出完整的信息,-l从系统中读入坏块的列表,-c选项用于在建立文件系统的
同时检测磁盘介质。文件系统类型选ext2。

[openlab]# mkfs -t ext2 -c /dev/hdc1

mke2fs 1.15, 18-Jul-1999 for EXT2 FS 0.5b, 95/08/09

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

32128 inodes, 128488 blocks

6424 blocks (5.00%) reserved for the super user

First data block=1

16 block groups

8192 blocks per group, 8192 fragments per group

2008 inodes per group

Superblock backups stored on blocks:

8193, 24577, 40961, 57345, 73729,


Checking for bad blocks (read-only test): done

Writing inode tables: done

Writing superblocks and filesystem accounting information: done

建立了文件系统之后,就可以连接到系统上使用了。

但是,一般情况下,我们总是希望启动系统时自动挂接文件系统,这可以通过编辑/e
tc/fstab来实现,/etc/fstab是一个用来描述文件系统的文件:

[openlab]# cat /etc/fstab

/dev/hda1 / ext2 exec,dev,suid,rw,usrquota,grpquota
1 1

/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0

/dev/hda2 /usr ext2 defaults 1 2

/dev/fd0 /mnt/floppy ext2 noauto,owner 0 0

none /proc proc defaults 0 0

none /dev/pts devpts gid=5,mode=620 0 0

它的基本格式是这样:

设备名 连接点 文件系统类型 选项 备份频度 文件系统检查的趟数

其中,最后的检查趟数是一个用在fsck中的数值,对于根文件系统,这个值为1,其他
本地文件系统是2,如果设置为0,那么将不检查这个文件系统。至于备份频度栏,只要
设置为1就可以了。显然,cdrom不需要备份,也不需要做完整性检查,所以都是0。

现在要把新分的这个分区加入进去,设备名是/dev/hdc1,可以随便设置一个连接点,
比如/export,文件系统显然是ext2,选项由于现在还没有设置,可以直接设为default
s,所以只要加入这样一行:

/dev/hdc1 /export ext2 defaults 1 2

然后建立/export目录,重新启动计算机就可以使用新的硬盘了。如果你觉得重新启动
太复杂,也可以使用mount –a命令。

4.4.3 交换分区

通常很少需要更改交换分区的大小,或是使用新的交换,无论如何我们还是解释一下
,建立swap分区的工作和建立常规文件系统几乎是一样的,仅有两点区别:第一个区别
是,建立swap分区的办法是,首先建立一个常规的Linux分区:

fdisk /dev/hda2

…………

n

# fdisk /dev/hda1

Command (m for help):

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4):4

First cylinder (46-3467, default 1): 46

Last cylinder or +size or +sizeM or +sizeK (46-3467, default 3467): 353

接下来,我们要把这个分区定义成一个交换分区,这需要用t命令修改分区标志:

Command (m for help): t

Partition number (1-4): 4

Hex code (type L to list codes):

会让你输入16进制的分区类型代码,如果你对分区代码不熟悉,输入L命令察看:

Hex code (type L to list codes): L


0 Empty 17 Hidden HPFS/NTF 5c Priam Edisk a6 OpenBSD

1 FAT12 18 AST Windows swa 61 SpeedStor a7 NeXTSTEP

2 XENIX root 1b Hidden Win95 FA 63 GNU HURD or Sys b7 BSDI fs

3 XENIX usr 1c Hidden Win95 FA 64 Novell Netware b8 BSDI swap

4 FAT16 <32M 1e Hidden Win95 FA 65 Novell Netware c1 DRDOS/sec
(FAT-

5 Extended 24 NEC DOS 70 DiskSecure Mult c4 DRDOS/sec
(FAT-

6 FAT16 3c PartitionMagic 75 PC/IX c6 DRDOS/sec
(FAT-

7 HPFS/NTFS 40 Venix 80286 80 Old Minix c7 Syrinx

8 AIX 41 PPC PReP Boot 81 Minix / old Lin db CP/M / CTO
S / .

9 AIX bootable 42 SFS 82 Linux swap e1 DOS access

a OS/2 Boot Manag 4d QNX4.x 83 Linux e3 DOS R/O

b Win95 FAT32 4e QNX4.x 2nd part 84 OS/2 hidden C: e4 SpeedStor

c Win95 FAT32 (LB 4f QNX4.x 3rd part 85 Linux extended eb BeOS fs

e Win95 FAT16 (LB 50 OnTrack DM 86 NTFS volume set f1 SpeedStor

f Win95 Ext'd (LB 51 OnTrack DM6 Aux 87 NTFS volume set f4 SpeedStor

10 OPUS 52 CP/M 93 Amoeba f2 DOS second
ary

11 Hidden FAT12 53 OnTrack DM6 Aux 94 Amoeba BBT fd Linux raid
auto

12 Compaq diagnost 54 OnTrackDM6 a0 IBM Thinkpad hi fe LANstep

14 Hidden FAT16 <3 55 EZ-Drive a5 BSD/386 ff BBT

16 Hidden FAT16 56 Golden Bow

从这个可以看到,Linux交换分区的代码是82,因此输入82:

Hex code (type L to list codes): 82

Changed system type of partition 4 to 82 (Linux swap)

Command (m for help):

然后用w命令写盘退出,交换分区就被定义了。

第二个区别是,我们在建立了新的交换分区后,要使用mkswap命令将它制作成一个交
换分区:

mkswap [-c] [分区名]

-c参数的意义仍然是检查磁盘介质。

例如:

[openlab]# mkswap -c /dev/hda14

Setting up swapspace version 0, size = 131567616 bytes

在mkswap之后,就可以使用交换分区了。这可以用swapon和swapoff命令控制,不过,
一般我们总是希望系统启动的时候自动激活交换分区,因此还是需要编辑/etc/fstab文
件,对于swap分区,主要的区别是连接点和文件系统类型都应该设置成swap,而且显然
swap分区不需要fsck和备份,所以可以添加这样一行:

/dev/hda14 swap swap defaults 0 0

重新启动机器,或者执行swapon 命令,swapon [分区名]可以打开某个分区上的交换
,swap –a将打开/etc/fstab中定义的所有交换。

如果要关闭某个分区上的交换,使用swapoff [分区名],全部关闭的命令是

swapoff –a。

电脑版 Page created in 0.1055 seconds with 4 queries.