Linux 版 (精华区)

发信人: netiscpu (网中自由鸟), 信区: Linux
标  题: Linux实用教程(部分)(2)
发信站: 哈工大紫丁香 (Thu May 20 17:53:49 1999), 转信

第二部分

Linux 奥秘

Linux 以及许多在 GNU 通用公共许可证条款的保护下发行的软件,经常被人们误认为

是“免费”软件,但是,GNU GPL 条款中所谓“free”的原意实际是“自由”,也就是

说,用户享有自由发行软件,修改源代码并重新发行的权利,但要求用户同样遵循这一

 GPL 条款,并应赋予其他用户以相同的权利。

Linux 的迅速成长与用户享有修改并发行程序新版本的“自由”权利是分不开的。现在

,中国用户也可以自由获取 Linux 以及许多应用程序或程序库的源代码,但如何才能

最大程度地利用 Linux 呢?显然,冲击世界 Linux 的热浪,并不仅仅因为其低廉的成

本和高的性能,而主要在于其真正开放的结构和所遵循的标准,以及 Linux 爱好者和

开发者所奉行的信念。由于许多原因,使 Linux 在国内的推广比国外晚了好几年,所

幸的是,去年以来有更多的软件爱好者开始了 Linux 的学习。但是,仅仅了解和掌握

 Linux 的使用还远远不够,要真正利用 Linux 并发挥其最大潜力,需要深刻理解 Li

nux 系统及其内核结构。

这一部分通过对 Linux 内核的介绍,论述有关内存管理、进程、进程间通讯等方面的

内容。在介绍内核组件的同时,介绍相应的系统工具。另外,也介绍了有关引导、登录

以及安全性等方面的内容。各章的内容相对独立。通过这部分的学习,读者可以对 Li

nux 有比较深刻的理解,可为系统管理、应用开发和软件开发打下坚实的基础。

阅读这部分内容,首先要求读者掌握基本的 Linux 命令,并具有一定的上机操作经验

,也需要读者具备一定的 PC 硬件和软件知识,尤其是 C 语言和数据结构。初学者可

参阅本书第一部分。另外,Linux 内核在不断发展,这一部分描述的内容是基于2.0.x

x 版本的。本书写作的时候,流行的 Linux 发行版本所采用的 Linux 内核版本最高为

 2.0.36,而最高的稳定版本是 2.2.3。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第九章

Linux 系统概述

在详细了解 Linux 奥秘之前,本章首先向读者简单介绍 Linux 的组成部分以及作为操

作系统,Linux 为用户提供的主要服务。

9.1 操作系统的概念和组成部分

从程序员的角度来讲,操作系统提供了一个与计算机硬件等价的扩展或虚拟的计算平台

。它抽象了许多硬件细节,程序可以以某种统一的方式进行数据处理,而程序员则可以

避开许多硬件细节。从另一个角度讲,普通用户则把操作系统看成是一个资源管理者,

在它的帮助下,用户可以以某种易于理解的方式组织自己的数据,完成自己的工作并和

其他人共享资源。

实际上,操作系统一般由内核和一些系统程序组成,同时,还有一些应用程序帮助用户

完成特定任务。内核是操作系统的灵魂,它负责管理磁盘上的文件、内存,负责启动并

运行程序,负责从网络上接收和发送数据包等等。总而言之,操作系统实际是抽象的资

源操作到具体硬件操作细节之间的接口。对 Linux 这样的多用户操作系统来说,它还

需要避免用户对硬件的直接访问,并防止用户之间的互相干扰。

系统程序以及其他所有的程序在内核之上运行,程序和内核之间的接口由操作系统提供

的一组“抽象指令”定义,这些抽象指令称为“系统调用”。所有运行在内核之上的程

序可分为系统程序和用户程序两大类,但它们统统运行在“用户模式”之下。系统程序

和用户程序之间的界限是模糊的。系统程序一般指运行系统所不可缺少的程序,例如 

Linux 中的 shell;而用户程序则是给用户提供特定功能的程序,例如字处理程序或游

戏程序。实际的操作系统中往往还包含一些工具程序(如编译器)以及一些联机文档。

9.2 Linux 内核的重要组成部分

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络

管理等。下面分别简要介绍内核的主要组成部分。

9.2.1 内存管理

对任何一台计算机而言,其内存以及其他资源都是有限的。为了让有限的物理内存满足

应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux

 将内存划分为容易处理的“内存页”,在系统运行过程中,应用程序对内存的需求大

于物理内存时,Linux 可将暂时不用的内存页交换到硬盘上,这样,空闲的内存页可以

满足应用程序的内存需求,而应用程序却不会注意到内存交换的发生。

有关内存管理的详细内容在第十章中讲述。

9.2.2 进程

进程实际是某特定应用程序的一个运行实体。在 Linux 系统中,能够同时运行多个进

程,Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间

间隔称为“时间片”,让进程轮流运行的方法称为“调度”,完成调度的程序称为调度

程序。通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。

每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进

程之间的互相干扰以及“坏”程序对系统可能造成的危害。

为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一

个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任

务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。

有关进程以及进程间通讯的详细内容在第十一章中讲述。

9.2.3 设备驱动程序

设备驱动程序是 Linux 内核的主要部分。和操作系统的其他部分类似,设备驱动程序

运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何

一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统

和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作

系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备

驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 

SCSI 驱动程序,而不是 IDE 驱动程序。

有关硬件以及设备驱动程序的详细内容在第十二章中讲述。

9.2.4 文件系统

和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱动

器名称(如 A: 或 C: 等)来标识的。相反,和 UNIX 操作系统一样,Linux 操作系统

将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文

件系统。Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某

个目录上,从而让不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点

是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2,它也是

 Linux 土生土长的文件系统。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不

同类型的文件系统,从而可以方便地和其他操作系统交换数据。由于 Linux 支持许多

不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统,因此,用户和进程不

需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用

它们。

实际上,Linux 利用虚拟文件系统,把文件系统操作和不同文件系统的具体实现细节分

离了开来。

有关文件系统的详细内容在第十三章中讲述。

9.2.5 网络

Linux 和网络几乎就是同义语。Linux 实际就是 Internet 和 WWW 的产物。Linux 的

开发者使用网络和 Web 进行信息交换,而 Linux 本身又用于各种组织的网络支持。众

所周知,TCP/IP 协议是 Internet 的标准协议,同时也是事实上的工业标准。Linux 

的网络实现支持 BSD 套接字,支持全部的 TCP/IP 协议。Linux 内核的网络部分由 B

SD 套接字、网络协议层和网络设备驱动程序组成。

有关网络的基本概念在第十四章中讲述。

9.2.6 其他

除上述主要组成部分之外,内核还包含一些一般性的任务和机制,这些任务和机制可使

 Linux 内核的各个部分有效地组合在一起,它们是上述主要部分高效工作的必要保证



从结构上来讲,操作系统有微内核结构和单块结构之分,Windows NT 和 MINIX 是典型

的微内核操作系统,而 Linux 则是单块结构的操作系统。微内核结构可方便地在内核

中添加新的组件,而单块结构却不容易做到这一点。为此,Linux 支持可动态装载和卸

载的模块。利用模块,可方便地在内核中添加新的组件或卸载不再需要的内核组件。

第十五章讲述上述内核机制和模块的概念。

图 9-1 说明了上述 Linux 内核的重要组成部分及其相互关系。

9.3 Linux 系统的主要服务

本节描述的主要服务也是 UNIX 系统所提供的主要服务,以后的各章节将详细描述这些

服务。

9.3.1 init

init 作为每个 UNIX 系统的第一个进程而启动,同时也是引导过程中内核的最后一项

工作。init 启动之后,它将继续引导过程,包括检查并加载文件系统,以及启动守护

进程等。

和 init 相关的概念有“单用户模式”和“多用户模式”。在“单用户模式”中,只有

 root 才能登录到系统中。这两个概念常引申为“运行级别”,上述两种模式分别对应

init 的两个运行级别,但 init 的运行级别有 6 个之多,其他运行级别可由应用程序

使用。

系统关机时,init 负责“杀掉”所有的进程,卸挂所有文件系统并终止处理器的指令

执行。

有关引导和关机以及 init 的详细内容将在第十六章中讲述。

9.3.2 终端登录

通过串行线路的终端登录和以及控制台登录(不运行 X Window时)由 getty 程序提供

。init 为每个终端启动一个单独的 getty 实例。getty 读取用户名并启动 login 程

序,如果用户名和口令是正确的,login 则会启动 shell 程序。如果用户注销,或由

于不正确的用户名和口令而导致 login 终止,init 就会启动一个新的 getty。用户的

登录完全由系统程序完成,内核不参与登录过程。

图9-1 Linux 内核的重要组成部分

有关登录和注销的详细内容将在这一部分第十七章中讲述。

9.3.3 Syslog

内核和系统程序经常会产生一些错误、警告或其他类型的消息。这些消息通常对系统管

理非常重要,因此有必要记录这些消息以备将来查看。这一工作由 syslog 程序完成。

syslog 可按照产生消息的程序以及消息的重要性对消息进行整理,以方便查看。

9.3.4 周期命令执行:cron 和 at

系统管理员或用户经常要让一些周期性的任务自动完成,以便减少日常工作量,例如,

每周定时清除 /tmp 目录中的文件等。

cron 是一个守护进程,它可以完成类似的工作。每个用户有一个 crontab 文件,用户

可在这个文件中列出要执行的命令以及执行的时间,cron 则按照指定的时间和命令完

成相应的工作。

at 和 cron 类似,但是由 at 执行的命令只能执行一次而不会重复执行。

9.3.5 图形用户界面

Linux 并没有直接将用户界面结合到操作系统内核中,相反,用户界面由用户级的程序

实现。用户界面包括字符用户界面和图形用户界面。Linux 主要使用 X Window 系统(

简称为 X)作为它的图形环境,但是,X 只是一个窗口系统,它仅仅管理窗口的建立、

销毁以及窗口中的图形输出,而实际的窗口管理程序则需要单独实现。窗口管理程序的

不同意味着不同的图形用户界面风格,这种多样化的界面风格虽然有很大的灵活性,但

是它使得用户界面的学习变得有些困难。Linux 中,常见基于 X 的用户界面风格有 X

wmf、Xwmf2、Motif以及 AfterStep 等。

9.3.6 网络

如前所述,Linux 支持完整的 TCP/IP 协议,许多基本的操作系统服务,例如文件系统

、打印、备份等均可以通过网络实现,这使得网络的中心化管理成为可能。

9.3.7 网络登录

网络登录和通常的登录有一些不同。由于受到物理线路数量的限制,通过串行线路的登

录数目是有限的,但是,每个网络登录可由一个单独的虚拟网络连接来代表,因此,网

络登录的数量几乎不受限制。由于这一原因,不可能象终端登录一样为每个可能的网络

登录运行单独的 getty。同时,网络登录的方式也是多样的,例如可使用 telnet 登录

,也可使用 rlogin 登录。

为此,对于所有的网络登录方式,系统运行一个守护进程(inetd),这一守护进程监

听所有的网络登录。当某个用户试图登录时,守护进程会启动一个新的自身实例处理登

录,而原有的进程则继续监听。新进程接下来的工作和 getty 类似。

9.3.8 网络文件系统

通过网络服务可实现文件的共享,通常使用由 Sun Microsystem 开发的网络文件系统

,即 NFS。在网络文件系统的帮助下,程序可象处理本地文件一样处理其他计算机上的

文件,这样,信息的共享非常简单,因为它不需要对程序进行额外修改。

9.3.9 其他

电子邮件是计算机间常见的信息交换方式,系统提供了许多程序来收发电子邮件。

打印机是比较特殊的一种设备,因为同一时刻只能有一个用户使用打印机。系统通过打

印队列协调多个用户对打印机的使用。当打印机正在打印时,其他的打印作业在打印队

列中排队,上一个打印作业完毕后,下一个打印作业自动开始。打印队列的管理软件可

将程序的打印输出假脱机到磁盘上,这样,输出打印的程序不需要等待打印结束就可以

继续运行。

9.4 目录树的标准布局

对大多数 Linux 发行版本而言,文件系统的目录树布局遵循 FSSTND 标准。遵循这一

标准有利于编写或移植软件,同时也有利于进行系统管理和维护。虽然并不强制执行 

FSSTND 标准,但遵循这一标准会给日常工作带来许多好处。本节简要描述基于 FSSTN

D 标准的 Linux 目录树布局,有关详细内容可参阅 FSSTND 文档。

完整的目录树可划分为小的部分,这些小部分又可以单独存放在自己的磁盘或分区上。

这样,相对稳定的部分和经常变化的部分可单独存放在不同的分区中,从而方便备份或

系统管理。目录树的主要部分有 root、/usr、/var、/home 等(图9-2)。这样的布局

可方便在 Linux 计算机之间共享文件系统的某些部分。

图9-2 Linux 目录树的不同部分

目录树的不同部分在 Linux 系统中所扮演的角色由表 9-1 给出。

表 9-1 目录树的不同部分在 Linux 系统中所扮演的角色

名称

 角色

 

root

 root 文件系统中包含和特定计算机相关的内容,因此,root 文件系统一般保存在计

算机的本地硬盘中,但也可以保存在 ramdisk 或网络驱动器中。root 文件系统中的内

容包括:引导系统的必备文件,文件系统的挂装信息以及系统修复工具和备份工具等。

 

/usr

 /usr 文件系统中包含通常操作中不需要进行修改的命令程序文件、程序库、手册和其

他文档等。由于 /usr 中的文件并不和特定的计算机相关,也不会在通常的使用中修改

,因此可通过网络共享这些文件。这样,当 root 安装了新的软件之后,所有共享这一

文件系统的计算机均可以使用新的软件。 

/var

 /var 文件系统中包含经常变化的文件,例如打印机、邮件、新闻等的假脱机目录、日

志文件、格式化后的手册页以及临时文件等。按传统习惯,/var 的文件通常包含在在

 /usr 中,但这样就无法将 /usr 文件系统挂装为只读文件系统。 

/home

 /home 中包含用户的主目录,用户的数据保存在其主目录中,如果有必要,也可将 /

home 划分为不同的文件系统,例如 /home/students 和 /home/teachers 等。将 /ho

me 放置在单独的文件系统中便于进行用户数据的备份。 

/proc

 /proc 文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统。其

中包含一些和系统相关的信息,例如 CPU、DMA 通道以及中断的使用信息等。 

上表中,目录树的不同部分又称为文件系统,但它们不必保存在单独的文件系统中。

9.4.1 root 文件系统

root 文件系统中包含一些关键文件,同时其内容也比较小。如果 root 文件系统被破

坏,操作系统就无法正确引导。root 文件系统中包含的文件和目录见表 9-2。

表 9-2 root 文件系统中的文件和目录

/vmlinuz

 文件。系统的标准引导映象,通常以压缩形式出现。

 

/bin

 包含引导过程必需的命令,也可由普通用户使用。

 

/sbin

 和 /bin 类似,尽管其中的命令可由普通用户使用,但由于这些命令属于系统级命令

,因此无特殊需求不使用其中的命令。 

/etc

 包含与特定计算机相关的配置文件。

 

/root

 root 用户的主目录。

 

/lib

 root 文件系统中的程序要使用的共享库保存在该目录中。

 

/lib/modules

 包含可装载的内核模块。

 

/dev

 包含设备文件。

 

/tmp

 包含临时文件。引导后运行的程序应当在 /var/tmp 中保存文件,因为其中的可用空

间大一些。 

/boot

 包含引导装载程序要使用的文件。内核映象通常保存在这个目录中。因为多个内核映

象会占用很多磁盘空间,因此可将该目录放置在单独的文件系统中。 

/mnt

 临时文件系统的挂装点。

 

/usr, /var, 

/home, /proc

 其他文件系统的挂装点。

 

9.4.2 /usr 文件系统

/usr 文件系统中包含所有的程序文件以及联机文档,因此其内容通常很大。/usr 文件

系统中包含的文件和目录见表 9-3。

表 9-3 /usr 文件系统中的目录

/usr/X11R6

 包含 X 窗口系统的所有文件。

 

/usr/X386

 和 /usr/X11R6 类似,但包含 X11 的 Release 5。

 

/usr/bin

 绝大多数用户命令。其他命令包含在 /bin 和 /usr/local/bin中。

 

/usr/sbin

 root 文件系统中不需要的系统管理命令。

 

/usr/man, /usr/info,

/usr/doc

 分别包含手册页、GNU Info 文档以及其他杂项文档。

 

/usr/include

 C 语言的头文件。

 

/usr/lib

 程序和子系统所使用的不变的数据文件。

 

/usr/local

 本地挂装的软件和其他文件的存放位置。

 

9.4.3 /var 文件系统

/var 通常包含系统运行过程中经常发生变化的文件。/var 文件系统中包含的目录见表

 9-4。

表 9-4 /var 文件系统中的目录

/var/catman

 格式化手册页的高速缓存。

 

/var/lib

 包含系统运行时经常改变的文件。

 

/var/local

 安装 /usr/local 中的程序的可变数据。

 

/var/lock

 包含锁文件。

 

/var/log

 包含程序产生的日志文件。

 

/var/run

 该目录包含在下次引导之前有效和系统相关的信息。

 

/var/spool

 排队任务的假脱机目录。

 

/var/tmp

 包含大的临时文件,或者保存时间较长的临时文件。

 

9.4.4 /proc 文件系统

/proc 文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统。/pr

oc 文件系统中包含的文件和目录见表 9-5。

表 9-5 /proc 文件系统中的文件和目录

/proc/1

 该目录中包含进程号为 1 的进程信息。每个进程在 /proc 目录下有一个以自己的进

程号为名称的目录。 

/proc/cpuinfo

 有关 CPU 名称、型号、性能和类型的信息。

 

/proc/devices

 当前内核中的设备驱动程序列表。

 

/proc/dma

 当前使用的 DMA 通道。

 

/proc/filesystems

 内核支持的文件系统。

 

/proc/interrupts

 当前使用的中断信息。

 

/proc/ioports

 当前使用的 I/O 端口。

 

/proc/kcore

 系统物理内存的映象。

 

 

 

 

 


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:210.055毫秒