admin 管理员组

文章数量: 1086019


2024年2月20日发(作者:aspcms免费模板下载)

第一讲 linux概述

1.1linux简介

linux操作系统核心是由25岁的芬兰大学生

Linus 于1991年8月在芬兰的赫尔辛基大学发布的。在互联网的背景下,成千上万的程序员加入了它的开发中,使其成为了最流行的操作系统之一。

Linus是一个天才,他的才能不仅展现在编程能力方面,而且组织技巧也相当杰出。Linux的内核是由世界上一些最优秀的程序员开发并不断完善的,他们通过Internet相互协作,开发理想的操作系统;他们享受着工作中的乐趣,而且也获得了充分的自豪感。

Linux并不是一个完整的操作系统。当我们在安装通常所说的Linux时,我们实际安装的是很多工具的集合。这些工具协同工作以组成一个功能强大的实用系统。Linux本身只是这个操作系统的内核,是操作系统的心脏、灵魂、指挥中心。整个系统应该称为GNU/Linux。

Linux优秀的一个原因在于它是基于一组优秀的概念。Unix是一个简单却非常优秀的模型。在Linux创建之前,Unix已经有20年的发展历史。Linux从Unix的各个流派中不断吸取成功经验,模仿Unix的优点,抛弃Unix的缺点。这样做的结果是Linux 成为了Unix系列中的佼佼者:高速、健壮、完整,而且抛弃了历史包袱。

Linux最强大的生命力还在于其公开的开发过程。每个人都可以自由获取内核源程序,每个人都可以对源程序加以修改,而后他人也可以自由获取你修改后的源程序。(GPL协议)

如果你发现了缺陷,你可以对它进行修正,而不用去乞求不知名的公司来为你修正。如果你有什么最优化或者新特点的创意,你也可以直接在系统中增加功能,而不用向操作系统供应商解释你的想法,指望他们将来会增加相应的功能。如果你发现一个安全漏洞后,你可以通过编程来弥补这个漏洞,而不用关闭系统直到你的供应商为你提供修补程序。由于你拥有直接访问源代码的能力,你也可以直接阅读代码来寻找缺陷,或是效率不高的代码,或是安全漏洞,以防患于未然。【这对于安全操作系统项目而言,是一个参考原型】

Linux是一个Unix的版本。就像Solaris,AIX等一样。

Linux最早是针对Intel构架开发出来的,但是现在适用于各种硬件平台,诸如Alpha,IBM的个小型机、大小机,Sun的Sparc,ARM等。

1.2linux的产生和发展

简单的说:一个名叫Linus Torvalds的芬兰大学生想要了解Intel的新CPU386。他认为比较好的学习方法是自己编写一个操作系统的内核。出于这种目的,加上他对当时Unix变种版本(即Minix)对于80386类机器的脆弱支持十分不满,他决定要开发出一个全功能的、支持POSIX标准的、类Unix的操作系统内核,该系统吸收了BSD和System V的优点,同时摒弃了它们的缺点。Linus独立把这个内核开发到0.02版,这个版本已经可以运行gcc、bash和很少的一些应用程序。这些就是他开始的全部工作了。后来,他又开始在因特网上寻求广泛的帮助。

【以下参考了赵炯的书的1.1.1 - 1.1.5】

具体的分析:Linux 操作系统的诞生、发展和成长过程依赖于以下五个重要支柱:UNIX 操作系统、MINIX

操作系统、GNU 计划、POSIX 标准和Internet 网络。

1.2.1 UNIX操作系统

Linux 操作系统是UNIX 操作系统的一个克隆版本。UNIX 操作系统是美国贝尔实验室的on

和Dennis Ritchie 于1969 年夏在DEC PDP-7 小型计算机上开发的一个分时操作系统。

Ken Thompson 为了能在闲置不用的PDP-7 计算机上运行他非常喜欢的星际旅行(Space travel)游戏,于是在1969 年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了UNIX 操作系统的原型。当时使用的是BCPL 语言(基本组合编程语言),后经Dennis Ritchie 于1972 年用移植性很强的C语言进行了改写,使得UNIX 系统在大专院校得到了推广。

1.2.2 MINIX操作系统

MINIX 系统是由Andrew S. Tanenbaum(AST)开发的。AST 是在荷兰Amsterdam 的Vrije 大学数学与计算机科学系统工作,是ACM 和IEEE 的资深会员(全世界也只有很少人是两会的资深会员)。

MINIX 是他1987 年编制的,主要用于学生学习操作系统原理。到1991 年时版本是1.5。目前主要有两个版本在使用:1.5 版和2.0 版。当然目前MINIX 系统已经是免费的,可以从许多FTP 上下载。

对于Linux 系统,他后来曾表示对其开发者Linus

的称赞。但他认为Linux的发展很大原因是由于他为了保持MINIX 的小型化,能让学生在一个学期内就能学完,因而没有接纳全世界许多人对MINIX的扩展要求。因此在这样的前提下激发了Linus 编写Linux 系统。当然Linus 也正好抓住了这个好时机。

作为一个操作系统,MINIX 并不是优秀者,但它同时提供了用C 语言和汇编语言编写的系统源代码。这是第一次使得有抱负的程序员或hacker 能够阅读操作系统的源代码。在当时,这种源代码是软件商们一直小心守护着的秘密。

1.2.3 GNU计划

软件产业在70年代成就了两位针锋相对的领袖人物,来自哈佛大学的比尔·盖茨和Richard M.

Stallman。前者宣布了Copyright(版权)时代的到来,并构建了微软帝国的辉煌;后者于1984年创立自由软件体系--GNU,拟定普遍公用版权协议(GeneralPublicLicense,简称GPL),今天Linux的成功就得益于GPL协议。所有GPL协议下的自由软件都遵循着Richard M. Stallman的"Copyleft"(非版权)原则:即自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开。

GNU 计划和自由软件基金会FSF(the Free

Software Foundation)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似UNIX 并且是自由软件的完整操作系统:GNU 系统(GNU 是"GNU's

Not Unix"的递归缩写,它的发音为"guh-NEW")。各种使用Linux 作为核心的GNU 操作系统正在被广泛的使用。虽然这些系统通常被称作"Linux",但是Stallman 认为,严格地说,它们应该被称为GNU/Linux

系统。

到上世纪90 年代初,GNU 项目已经开发出许多高质量的免费软件,其中包括有名的emacs 编辑系统、bash shell 程序、gcc 系列编译程序、gdb 调试程序等等。这些软件为Linux 操作系统的开发创造了一个合适的环境。这是Linux 能够诞生的基础之一,以至于目前许多人都将Linux 操作系统称为“GNU/Linux”操作系统。

1.2.4 POSIX标准

POSIX(Portable Operating System Interface for

Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口。用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运行。它是在1980 年早期一个UNIX 用户组(usr/group)的早期工作基础上取得的。该UNIX 用户组原来试图将AT&T 的System V 操作系统和BerkeleyCSRG 的BSD 操作系统的调用接口之间的区别重新调和集成。并于1984 年定制出了/usr/group 标准。

关于POSIX标准的制定过程:略。

在90 年代初,POSIX 标准的制定正处在最后投票敲定的时候,那是1991-1993 年间。此时正是Linux刚刚起步的时候,这个UNIX 标准为Linux 提供了极为重要的信息,使得Linux 能够在标准的指导下进行开发,并能够与绝大多数UNIX 操作系统兼容。在最初的Linux 内核源代码中(0.01 版、0.11 版)就已经为Linux 系统与POSIX 标准的兼容做好了准备工作。在Linux 0.01 版内核的/include/unistd.h 文件中就已经定义了几个有关POSXI 标准要求的符号常数,而且Linus 在注释中已写道:“OK,这也许是个玩笑,但我正在着手研究它呢”。

1.2.5 Linux的诞生

在1981 年,IBM 公司推出了享誉全球的微型计算机IBM PC。在1981-1991 年间,MS-DOS 操作系统一直是微型计算机操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然居高不下【a】。当时Apple 的MACs 操作系统可以说是性能最好的,但是其天价使得没人能够轻易靠近【b】。

当时的另一个计算机技术阵营就是UNIX 世界。但是UNIX 操作系统就不仅是价格昂贵的问题了。为了寻求高利润率,UNIX 经销商们把价格抬得极高,PC 小用户根本不能靠近它。曾经一度收到Bell Labs许可而能在大学中用于教学的UNIX 源代码也一直被小心地守卫着不许公开【c】。对于广大的PC 用户,软件行业的大型供应商们始终没有给出有效的解决这个问题的手段。

正在此时,出现了MINIX 操作系统【d】,并且有一本描述其设计实现原理的书同时发行。由于AST的这本书写的非常详细,并且叙述得有条有理,于是几乎全世界的计算机爱好者都开始看这本书,以期能理解操作系统的工作原理。其中也包括Linux 系统的创始者Linus Benedict Torvalds。当时(1991 年),Linus

Benedict Torvalds 是赫尔辛基大学计算机科学系的二年级学生,也是一个自学的计算机hacker。这个21

岁的芬兰年轻人喜欢鼓捣他的计算机,测试计算机的性能和限制。但当时他所缺乏的就是一个专业级的操作系统。

在同一年间,GNU 计划已经开发出了许多工具软件。其中最受期盼的GNU C 编译器已经出现,但还没有开发出免费的GNU 操作系统。即使是教学使用的MINIX 操作系统也开始有了版权,需要购买才能得到源代码。虽然GNU 的操作系统HURD一直在开发之中【e】,但在当时看来不能在几年内完成。

(已经有了【a-e】,但是还没有一个os)

为了能更好地学习计算机知识(或许也只是为了兴趣),Linus 使用圣诞节的压岁钱和贷款购买了一台386 兼容电脑,并从美国邮购了一套MINIX 系统软件。就在等待MINIX 软件期间,Linus 认真学习了有关Intel 80386 的硬件知识。为了能通过Modem 拨号连接到学校的主机上,他使用汇编语言并利用80386 CPU

的多任务特性编制出一个终端仿真程序。此后为了将自己一台老式电脑上的软件复制到新电脑上,他还为软盘驱动器、键盘等硬件设备编制出相应的驱动程序。(他编写了一些os相关的程序)

通过编程实践,并在学习过程中认识到MINIX 系统的诸多限制(MINIX 虽然很好,但只是一个用于教学目的简单操作系统,而不是一个强有力的实用操作系统),而且通过上述实践Linus 已经有了一些类似于操作系统硬件设备驱动程序的代码,于是他开始有了编制一个新操作系统的想法。(一个影响深远的想法诞生了)

从1991年4月份起(let take this time as the

start),他通过修改终端仿真程序和硬件驱动程序,开始编制起自己的操作系统来。开始,他的目的很简单,只是为了学习Intel 386 体系结构保护模式运行方式下的编程技术。但后来Linux发展却完全改变了初衷。(起始的时间)

根据Linus 在 新闻组上发布的消息,我们可以知道他逐步从学MINIX 系统阶段发展到开发自己的Linux 系统的过程。(具体了解的来源)

Linus第1次向 投递消息是在1991

年3月29日。所发帖子的题目是“gcc on

minix-386doesn't optimize”,是有关gcc 编译器在MINIX-386 系统上运行优化的问题(由此可知,Linus

在1991 年初期就已经开始深入究了MINIX 系统,并在这段时间有了改进MINIX 操作系统的思想。在进一步学习MINIX 系统之后,这个想法逐步演变成想重新设计一个基于Intel 80386 体系结构的新操作系统的构思。(思想的转变)

他在回答有人提出MINIX 上的一个问题时,所说的第一句话就是“阅读源代码”(“RTFSC (Read the

F**ing Source Code :-)”)。他认为答案就在源程序中。这也说明了对于学习系统软件来说,我们不光需要懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分,就象麻雀身上的一根羽毛。(实践的重要意义)

(以下是按照时间顺序进行介绍)

从1991 年4 月份开始,Linus 几乎花费了全部时间研究MINIX-386 系统(Hacking the kernel),并且尝试着移植GNU 的软件到该系统上(GNU gcc、bash、gdb 等)。并于4 月13 日在 上发布说自己已经成功地将bash 移植到了MINIX 上,而且已经爱不释手、不能离开这个shell 软件了。

第一个与Linux 有关的消息是在1991 年7 月3

日在 上发布的(当然,那时还不存在Linux 这个名称,当时Linus 脑子里想的名称可能是FREAX,FREAX 的英文含义是怪诞的、怪物、异想天开等)。其中透露了他正在进行Linux 系统的开发,并且已经想到要实现与POSIX 兼容的问题了。

在Linus 另一个发布的消息中(1991 年8 月25

日 ),他向所有MINIX 用户询问“What

would you like to see in minix?”(“你最想在MINIX

系统中见到什么?”),在该消息中他首次透露出正在开发一个(免费的)386(486)操作系统,并且说只是兴趣而已,代码不会很大,也不会象GNU 的那样专业。

希望大家反馈一些对于MINIX 系统中喜欢哪些特色不喜欢什么等信息,并且说明由于实际和其它一些原因,新开发的系统刚开始与MINIX 很象(并且使用了MINIX

的文件系统)。并且已经成功地将bash(1.08版)和gcc(1.40 版)移植到了新系统上,而且在过几个月就可以实用了。

最后,Linus 申明他开发的操作系统没有使用一行MINIX 的源代码;而且由于使用了386 的任务切换特性,所以该操作系统不好移植(没有可移植性),并且只能使用AT 硬盘。对于Linux 的移植性问题,Linus

当时并没有考虑。但是目前Linux 几乎可以运行在任何一种硬件体系结构上。

到了1991 年的10 月5 日,Linus 在 新闻组上发布消息,正式向外宣布Linux 内核系统的诞生(Free minix-like kernel

sources for 386-AT)。这段消息可以称为Linux 的诞生宣言,并且一直广为流传。因此10 月5 日对Linux

社区来说是一个特殊的日子,许多后来Linux 的新版本发布时都选择了这个日子。所以RedHat 公司选择这个日子发布它的新系统也不是偶然的。(产生的时间)

1.2.6 Linux发展的网络贡献者

(第一个人)

从Linux 早期源代码中可以看出,Linux 系统的早期主要开发人员除了Linus 本人以外,最著名的人员之一就是Theodore Ts'o。

早在Linux 操作系统刚问世时,他就怀着极大的热情为linux 的发展提供了Maillist,几乎是在Linux

刚开始发布时起,他就一直在为Linux 做出贡献。

他也是最早向Linux 内核添加程序的人(Linux 内核0.10 版中的虚拟盘驱动程序ramdisk.c 和内核内存分配程序kmalloc.c)。他对Linux 作出的最大贡献之一是提出并实现了ext2 文件系统。该文件系统现已成为Linux 世界中事实上的文件系统标准。他又推出了ext3 文件系统。该系统大大提高了文件系统的稳定性和访问效率。

(第二个人)

Linux 社区中另一位著名人物是Alan Cox。Linux

0.95 版发布之后,他开始为Linux 系统编写补丁程序(修改程序),并成为Linux 系统上TCP/IP 网络代码的最早使用人之一。后来他逐渐加入了Linux 的开发队伍,并成为维护Linux 内核源代码的主要负责人之一,也可以说成为Linux 社团中继Linus 之后最为重要的人物。以后Microsoft 公司曾经邀请他加盟,但他却干脆地拒绝了。从2001 年开始,他负责维护Linux

内核2.4.x 的代码。而Linus 主要负责开发最新开发版内核的研制(奇数版,比如2.5.x版)。

《内核黑客手册》(The Linux Kernel Hackers'

Guide)一书的作者Michael K. Johnson 也是最早接触Linux 操作系统的人之一(从0.97 版)。他还是著名Linux 文档计划(Linux Document Project - LDP)的发起者之一。曾经在Linux Journel 工作,现在RedHat 公司工作。

Linux 系统并不是仅有这些中坚力量就能发展成今天这个样子的,还有许多计算机高手对Linux 做出了极大的贡献,这里就不一一列举了。主要贡献者的具体名单可参见Linux 内核中的CREDITS 文件,其中以字母顺序列出了对Linux 做出较大贡献的近400 人的名单列表,包括他们的email 地址和通信地址、主页以及主要贡献事迹等信息。

1.2.7 总结

UNIX 操作系统 -- UNIX于1969 年诞生在Bell实验室。Linux就是UNIX的一种克隆系统。UNIX的重要性就不用多说了。

MINIX 操作系统 -- MINIX 操作系统也是UNIX 的一种克隆系统,它于1987 年由著名计算机教授Andrew

S. Tanenbaum 开发完成。由于MINIX 系统的出现并且提供源代码(只能免费用于大学内)在全世界的大学中刮起了学习UNIX 系统旋风。Linux 刚开始就是参照MINIX 系统于1991 年才开始开发。

GNU 计划-- 开发Linux 操作系统,以及Linux 上所用大多数软件基本上都出自GNU 计划。Linux只是操作系统的一个内核,没有GNU 软件环境(比如说bash

shell和gcc),则Linux 将寸步难行。

POSIX 标准 -- 该标准在推动Linux 操作系统以后朝着正规路上发展起着重要的作用。是Linux 前进的灯塔。

INTERNET -- 如果没有Intenet 网,没有遍布全世界的无数计算机黑客的无私奉献,那么Linux 最多只能发展到0.13(0.95)版的水平。

1.2.8 Linux的版本发展

将Linux 系统0.13 版内核直接改称0.95 版,Linus 的意思是让大家不要觉得离1.0 版还很遥远。同时,从0.95 版开始,对内核的许多改进之处(补丁程序的提供)均以其他人为主了,而Linus 的主要任务开始变成对内核的维护和决定是否采用某个补丁程序。

2003 年12 月18日公布的2.6.2 版。其中包括大约15000 个文件,而且使用gz 压缩后源代码软件包也有40MB 左右!

1.3linux的特点

开放性:可以在CPL协议下进行发放、使用和修改。

linux是一个多用户、多任务的操作系统:多用户是指系统资源可以被不同用户使用,每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响;d多任务是指计算机同时执行多个程序,而且各个程序的运行互相独立

2.6以前的版本是用户抢先式:(和winddow3.1不同,因为采用了分时技术进行进程调度,但是当进程在内核态的时候,是不能被抢占的。Linux 2.4 cannot

arbitrarily interleave execution flows while they

are in privileged mode.[3] Several sections of

kernel code assume they can run and modify data

structures without fear of being interrupted and

having another thread alter those data

structures.{来自ulk第二版1.1}),而2.6以后则是真正的抢先式(内核的抢先式)。

可重入内核: 描述的是多个进程进入了特权(内核)态的这个状态,而至于是如何a进程在特权态放弃cpu,然后b使用cpu且进入特权态,没有具体的考虑。

支持内核线程:注意区别windows的线程。

是一个单模式的内核(Monolithic kernel),区别于微内核

内存保护:

虚拟内存:

支持多种文件系统

符合POSIX1003.1标准

具有较好的可移植性:是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。

支持多平台:支持多个硬件平台,是因为可移植性而存在的特性。

支持对称多处理机SMP:

全面支持TCP/IP网络:

图形用户接口和桌面环境:除了shell界面,支持xwindows界面,比如KDE和GNOME

速度和稳定性:

设备独立性:是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。 Linux是具有设备独立性的操作系统,它的内核具有高度适应能力

可靠的安全系统:Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障

1.4linux内核的版本

源程序版本号的形式为x.y.z。比如2.4.20。其中x是主版本号,y是次版本号,而z是代表改动较小的末版本号。

对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。

比如说,某稳定内核版本号是2.2.10,而也许正在开发内核的版本号是2.3.12。对2.3树的缺陷修正会回溯影响(back-propagated)2.2树,而当2.3树足够成熟的时候会发展成为2.4.0。

1.5linux组成

的内核:内核是系统的核心,是运行程序和管理 像磁盘和打印机等硬件设备的核心程序。

SHELL: Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。

文件系统: Linux文件系统是文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前浒的文件系统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS等。

应用系统:标准的Linux系统都有一整套称为应用程序的程序集,包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。

注意区别:Xwindows是应用程序,而不是内核的一个部分。这个和windows操作系统不同。

1.6linux的发行版本

Linux初学者对常会把内核版本与发行套件的版本弄混了,实际上内核版本指的是在Linus领导下的开发小组开发出的系统内核的版本号(这个已经在上面讨论了的。)

原则上,用户可以从网上或其它地方获取Linux的内核,并且自己编译它。然后用户用 同样的方式获取许多应用程序的源代码,编译以后装入系统。对于复杂的程序,这样做不但费时,而且容易出错。

为了避免这样做,用户通常选择从Linux的发行商那儿获取操作系统和应用程序。一些组织或厂家将Linux系统内核与应用软件(比如编译器、网络工具,office套件、多媒体工具等)和文档包装起来,并提供一些安装界面和系统设定与管理工具,这样就构成了一个发行套件(也可以称为发行版本),例如最常见的Slackware,RedHat,Debian等等。

实际上,发行套件就是Linux的一个大软件包而已。相对于内核版本,发行套件的版本号随发布者的不同而不同,与系统内核的版本号是相对独立的,例如Slackware5.0,RedHat8.0、Debian3等等。

Linux发行版本之间的区别是它们的软件、协议和他们如何封装、安装和在用户系统中跟踪应用软件包,以及安装和维护工具、文档和其它服务

1.6.1 slackware

Slackware Linux是最早出现的Linux发行套件之一。Slackware是Walnut Creek CDROM公司发行的,是Slackware Linux的起源地。

Slackware曾经是市场上最重要的一种发行版本,一些发行版本也是以它为基础经过再包装和提供其它服务而形成的。它的优势是文档比较完整,Linux的许多文档都是以Slackware为缺省平台来写的,包括安装、配置和维护等各方面,所以用户选用Slackware

Linux可以迅速地按照相应文档熟悉Linux。

其缺点是软件的更新速度慢,也没有给用户提供很好的升级、更新的策略和工具。

网址:WWW:

/titles/os/ ;FTP: ftp:///pub/linux/slackware

1.6.2 RedHat

RedHat的问世比Slackware和Debian都要晚,RedHat Linux曾被权威计算机杂志InfoWorld评为最佳Linux套件。

Red Hat Linux是由Red Hat Software公司发行的,它的RPM技术-即RedHat的软件包管理系统,RedHat安装和配置也是几种发行版本 中间最容易的,一个从来没有接触过Unix或者Linux的新手,可以在20分钟的时间内轻松 地从CDROM上安装完RedHat。安装的过程甚至比Windows 95还要方便。

Red Hat Linux从 4.0 版起 便同时支持Intel、Alpha、Sparc三种硬件平台,这正是RedHat 公司引以为荣的地方。为电影Titanic制作电脑特技效果的公司在制作过程中就使用了105台运行 Red Hat Linux的Alpha电脑。

基于RPM的软件包管理方式的发行版:RPM是RedHat Package Manager的缩写,意即RedHat(红帽子)软件包管理器。

这种Linux下安装软件,一般是选择已经编译好的RPM软件包,用rpm命令, 加上参数-i进行安装,系统会自动地把软件包解开,并复制到相应的目录中去,同时会在系统的系统文件中加入软件包的相关信息。如果以后想要卸载某些软件,同样使用rpm命令加上参数-e,系统会去查询数据库,并删除相关的文件和目录。

当然,不可否认RPM的软件包管理方式也就其缺点,最主要的就是上面所提到的“软件包依赖性问题”。由于一些软件在运行是往往还需要其他软件的支持,而用rpm命令安装软件包时系统会先检查它需要的软件是否已经安装,如果发现有一个它所依赖的软件包没有安装,安装程序就会退出,并让你先安装上其他软件,而在安装其他软件时又有可能发生依赖性问题……可以想象有多么麻烦!虽然rpm命令提供了“强制安装”选项,但除非你有很大的把握,否则“强制安装”上去的软件很难正常工作。

网址:WWW: ;FTP:

ftp://

1.6.3 Debian

这是由GNU发行的Linux发行套件,是完全由网络上的Linux爱好者负责维护的发行套件。这些志愿者的目的是制作一个可以同商业操作系统相媲美的免费操作系统。并且其所有的组成部分都是自由软件。Debian Linux的特点是软件极其丰富,升级容易,软件之间的关联性强。开放式的开发环境。

Debian是由Ian Murdock在1993年编成的,最先由自由软件基金会(FSF)的GNU项目负责的。现在,Debian的开发者们仍然认为它是GNU项目的一个直接结果。

基于deb的软件包管理方式的发行版:这种软件包管理方式主要用在Debian Linux上

在自由软件里,以deb打包的软件数量是最多的。Debian Linux本身就是由世界各地的志愿者共同开发的,其理念也最接近Linux本质。它的软件包管理方式自诞生之日起就比RPM先进,可以说几乎没有所谓的依赖性问题,遇到缺少软件包的情况时会自动从网上下载或提示您需要哪一张光盘;也正因为如此,我们说Debian Linux对于网络的依赖性很大。

Debian发行版本目前包括近500个软件包,是所有发行版本中间包含的软件最全的。你可以在Debian的任何一个镜相接点找到Debian目前提供的软件包的列表和说明。

Debian Linux下的软件极其丰富,而且增长速度又逐年加快,最为重要的是,Debian下软件包的发布都要经过很严格的测试,所以Debian Linux的稳定性几乎是一流的

从1.3版本开始,Debian还提供了一个CDROM的映象文件,使用这个文件, 任何人都可以在一台CDROM的刻录机上刻写出Debian的正版CDROM

网址: WWW: /;FTP:

ftp:///debian/

1.6.4 TurboLinux

TurboLinux公司是以推出高性能服务器而著称的linux厂商,在美国有很大的影响,另外在中国,日本和韩国也有一定的市场,目前比较流行的版本是TurboLinux7.0。

对于一台运行关键任务的服务器来说,兼备稳定和安全是非常重要的,而Turbolinux Server通过将内核与外围工具和实用程序的完美结合做到了这一点。除了硬件本身提供的RAID容错手段外,Server还可以提供RAID0/1/4/5等多种形式的软件支持,如配合UNIX系统备份工具tar,可以方便完成各种备份和恢复工作。此外,Server中还包含了最新的UPS管理软件,保障系统在发生停电意外时仍可持续运行。

Turbolinux Server附带了大量的服务器端软件,全方位支持Internet服务,并且无需任何额外投资,它们包括:互联网上第一品牌的web服务器─Apache,具有60%以上的市场占有率,可以支持SSL(安全交易)、Proxy服务以及虚拟主机;功能强大的电子邮件系统Sendmail;目前十分流行的轻量级数据库MySQL、PostgreSQL;由互联网软件联盟所提供的bind套装软件,专门提供DNS服务;多种操作系统共享资源、互相访问的Samba、NFS以及NCP(Netware);核心模块所提供的网络流量以及IP-计帐功能;提供防火墙功能的TIS和SOCKS工具套件,可以灵活制定不同的网络流量控制策略以及可以提供代理上网和页面缓存的代理服务器SQUID等等。

1.6.5 红旗Linux

由北京中科红旗软件技术有限公司发行的。采用了图形用户界面,简洁实用的菜单结构,比较接近windows界面,使原windows用户更容易过渡到linux。为用户集成了网络、图形处理、多媒体应用和娱乐游戏等应用程序。同时结合了office办公软件,能够直接对微软的office格式文档进行操作。中文化支持很好。

1.6.6 DIY一个

LFS文档:自己动手从源代码打造linux系统。从源代码安装有不可比拟的好处,一个是能让你更加清楚Linux的原理,再就是由于是在自己的计算机上编译软件,编译后的二进制代码肯定更加适合自己的机器,运行速度往往比安装预先编译好的软件要快得多。所以有时候花点儿时间还是值得的

1.6.7 如何选择发行版本

如果你刚刚接触Linux,不妨选择第一类,RPM的软件包很多,在中国也很流行,遇到问题了也容易请教,

如果你是一个Linux的使用者,看重方便和稳定,那么Debian Linux自然是你的首选。

如果你认为对Linux有了一定的了解,想更好地“玩”Linux,或是想用Linux构建一个专门用途的高性能平台,那就选择LFS吧!总之,一切的选择权在你自己!

1.7linux的安装

1.7.1 安装linux的选择

1.7.1.1 独立安装

可以直接在硬盘上安装完整的、独立linux系统。这个时候的linux系统是真正意义上的操作系统,它可以独立存在(也可以和windows等其他操作系统同时存在于一个裸机上)。如果裸机上除了linux以外,还有其他操作系统的存在(比如在另外一个分区或者另外一个硬盘上还有windows),那么,在开机的时候,你只能同一个裸机上某一个操作系统。

举例来说:你的20G硬盘分成了4个主分区,分别是hda1,hda2,hda3,hda4。那么,你可以进行如下的安排:hda1上安装linux,hda2上安装windows 2000(也就是windows的c盘),hda3和hda4分别作为windows的d和e盘。

如何在启动的时候,告诉裸机,你是打算启动哪个操作系统呢?可以利用bootloader的程序来完成,常用的bootloader程序有lilo和grub。它们一般存在于MBR上(chs=001),在bios启动完成之后,裸机的控制权就移交给了bootloader。

具体的启动过程,在后面的内容里面有介绍。

1.7.1.2 虚拟机上安装linux

关于虚拟机,在后面内容里面会有具体的介绍。在这里,我们以使用最广泛的虚拟机软件vmware为例。

简单的说,有了vmware,我们可以在windows下开一系列的窗口(多个vmware实例),而每一个窗口里面运行一个“独立”的操作系统(实际上是一个独立的主机)。

这样的好处有两个:首先,对于初学者来说,安装独立的linux系统对于裸机来说,是有破坏危险的(破坏已有的windows系统,破坏硬盘分区表),而使用本方法,可以避免这个危险。其次,对于开发人员来说,可以利用一个计算机来虚拟多个计算机设置一个网络环境,节约成本(不用买多个计算机了)和时间(避免了系统切换时间)

作为窗口存在各个虚拟存在系统

Vmware虚拟的各个“虚拟裸机”

某个操作系统;比如windows

真正的裸机(比如x86系统)

VMware Workstation能够在同一台计算机上运行多个操作系统以及它们的应用程序。该软件的聪明之处就在于,这些操作系统和应用程序都被非常安全的隔离在各自的虚拟机内。它们虽然共用同一套硬件,但是每一套虚拟机都会将系统的硬件资源做个一个镜像。这样,每一套虚拟机就用了“自己”的处理器、内存、硬盘,以及I/O设备等等。由于在性能上,虚拟机之能够大致相当于一套基本的x86系统,因此,你不能指望它能够发挥出你计算机的全部能量。不过,能够在彼此互不干涉的情况下在同一台计算机上运行多个操作系统和它们的应用程序的能力,已经足以弥补该软件在性能上的不足了。

下面的两个图是windows下虚拟windows和linux下虚拟windows。

1.7.2vmware上安装linux的过程介绍

1.7.2.1 vmware的安装和配置

参考资料: 上搜索:vmware 安装

linux。可以参考下面两个文章。

注意:版本不同,具体的过程有所区别,本课程中,我使用的版本是4.0。

/main/jingtai/62/

/forum/?p=452804&postcount=8

先安装好VMware Workstation,然后运行vmware。界面如下:

因为,现在vmware中还没有任何虚拟系统,因此要进行添加操作。今后有添加其他虚拟系统的的时候,过程是一样的。

选主窗口中的New Virtual Machine, 连按两个“下一步”之后,选“linux”,然后按“下一步”;

按“browse”选择虚拟机在XP下的所在目录。默认的目录是C:Documents and SettingsqMy

DocumentsMy Virtual MachinesRed Hat Linux但我觉得最好不要和XP同在C盘上。另外,虚拟机目录所在的盘要有足够的空间,因为安装好的RED HAT 9本身就有近1.8G。定好虚拟机目录后按“下一步”。

选择适当的网络连接。按“完成”。

完成后,现在vmware中,就已经有一个linux的虚拟系统了(到这一步,还没有真正的进行安装)。(还可以继续添加其他的。)这个时候,界面如下。

右边列举了这个虚拟系统的一些硬件参数设置。界面上出现了虚拟机,有内存、硬盘、光驱、软驱、网卡、USB控制器、声频适配器。可以通过编辑菜单对其进行修改和设置。

比如可以设置光驱是指定真正的光驱,还是windows系统上的iso文件(如果选择的是iso文件,则在后面的安装过程中还要重复这个步骤)。

设置完成之后,就可以启动这个linux虚拟系统,,就是点“start this virtual machine”命令,按OK,VMWARE的窗口里就出现了虚拟机启动的画面。这样,就进行linux系统的安装了。(一旦完成了安装,今后的启动命令就是真正的启动虚拟机里面的linux系统)

说明;其实,如果有一个人已经安装好了,你可以拷贝他的vmx文件,这样可以省略去安装过程。

说明;要注意的是光标在windows界面和VMWARE界面间的切换方法。光标从windows到VMWARE,只要在VMWARE窗口上点鼠标即可。从VMWARE回到windows,则要按CTRL+ALT。

1.7.2.2 vmware的上安装linux的过程

【参考资料:网络资源:Linux系统终极安装手册 和

我下载的ppt文档:linux的安装.ppt】

说明:这里的界面和独立安装linux没有什么区别。因此,这里说明的安装过程和独立安装linux是一致的。

1.图形化安装界面

2.选择安装语言

3.选择键盘类型

4.选择你的鼠标类型

5.选择安装还是升级

6.安装类型

在这里选择custom,自己进行定制,这样可以有更大的主动权。

7.确定磁盘分区方式

8.为系统分区

在这里,为了简化,就分一个/区和一个交换区就可以了。而今后实际安装的时候,特别是给服务器按照的时候,是有很多技巧来实现可靠性和稳定性。

9.添加分区

10.引导装载程序配置

一般在真实安装的时候,是让grub或者lilo安装到MBR上,这样可以给用户以启动的时候,进行不同os的选择。而关于grub的使用,还有很多其他的技巧,比如实现ntloader加载linux,虚拟软驱vfloppy等(参考资料:Grub安装、配置以及使用实例汇总讲解)。

11. 网络配置

12. 防火墙配置

在这里,可以暂时不考虑,如果打算深入学习,可以参考相应的netfilter/iptables howto等文档

13. 语言支持的选择

14. 时区配置

是可以通过点击地图上的一个地方而实现设置的。【你知道如何实现这个功能么?just try it】

15. 设置根口令

16. 选择软件包组

为了完成后面的编译内核的实验,一定要选择kernel development

注意:一份完整的安装日志可在

/root/ 中找到

17. 安装软件包

一般在安装的过程中,会使用三个安装光盘或者iso文件。

18. 创建引导盘

这里创建的引导盘就是后面的boot盘。类似window98下创建的dos系统引导盘

19. 视频卡配置

20. 配置显示器

21. 定制配置

1.8linux系统目录的功能介绍

【在学习了bootdisk howto和lfs文档后,认识会更加深刻,通过实践和时间的积累去掌握】

/bin 该目录中存放Linux的常用命令。

/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息

grub的配置文件也是放在这里的。

/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。

/etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。

/sbin 该目录用来存放系统管理员的系统管理程序。

/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库

/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。

/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的

/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录

/tmp 用来存放不同程序执行时产生的临时文件

/var 这是系统在工作时预先设置的工作目录,如各种服务的日志文件和收发的邮件等。

/usr 最复杂和最重要的目录之一,要用到的应用程序和文件几乎都存放在这个目录下面。其中包括

[具体的含义,请自己去参考一些资料]

/usr/X11R6

/usr/bin

/usr/sbin

/usr/doc

/usr/include

/usr/lib

/usr/man

/usr/src

/usr/local/bin

/usr/local/lib

1.9linux的内核编译

1.9.1 编译过程介绍

1.9.1.1 编译内核概述

编译内核的原因:新内核提供更好的硬件支持能力。新内核有某些特殊的优点,例如,对多处理器(SMP)更好的支持, 或者是支持USB。新内核修正了一些BUG。你自己定制的内核去除了多余的元素,因此它更快,更稳定。(最后一个原因是最普遍的)

编译内核包含两大项内容,即配置内核和编译内核。

这两项工作需要经常查看内核的文档,至少要查看Readme文件和Documentation目录下的Changes文件。它们对内核进行了描述,比如升级内核可能出现的问题和内核对系统中工具的版本要求等。

1.9.1.2 编译前的准备

了解自己系统的硬件配置情况,比如CPU的类型、主办芯片、显卡和声卡的型号等

首先需要将内核源码下载到/usr/src/目录下面,然后运行命令tar xzvf ,解压内核,这时会建立Linux-2.4.23内核源代码树。(如果你在安装系统的时候,已经安装了内核源代码,而且打算编译的是当前的内核源代码,则不需要下载了。)

1.9.1.3 编译内核第一步:配置内核

利用命令cd /usr/src/linux,进入linux内核源代码目录。

一.在开始配置内核之前,首先需要通过下面的命令清除所有的临时文件、中间件和配置文件。对于一个刚从网上下载的内核来说,它肯定是干净的,这么做只会多此一举。但是这是一个良好习惯,而且不会有坏结果。 命令:#make mrproper

二.配置内核选项,比较常用的有:

make menuconfig 一个文本模式、简单的菜单模式的配置界面。

make xconfig 基于Tcl/Tk的X图形配置界面。

三.根据自己的需要,进行各个选择和子选项的配置。对每一个内核选项,可以有三个选择:不包括(N),build-in(Y),和模块化支持(M)。

内核的配置选项很多,这里就主要选项进行简要说明,使大家能根据自己的情况,进行内核定制。如果某些项把握不准,可以参考documentation/文件,也可在为网络上搜索一些文章。

常见的选项包括:

1.Loadable module support(可加载模块支持)

其中“Enable loadable module support”选项可让内核支持模块;“Module unloading”选项可以让用户卸载不再使用的模块,如果不选的话用户将不能卸载任何模块;“Module versioning support(EXPERIMENTAL)”选项允许用户可以使用其它版本内核中编译的模块,不过并不可靠,所以一般不选择它;“Automatic kernel module loading”选项允许内核自动调用“modprobe”命令来加载需要的模块。

模块是一小段代码,编译后可在系统内核运行时被动态地加入内核,从而为内核增加一些特性或对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以缩小内核的体积。在运行时可以使用“modprobe”命令把模块加载到内核中去(在不需要时还可以卸载它)。

2.Set version infomation on all symbols for

modules(CONFIG_MODVERSIONS)

是有关内核模块版本控制的选项。如果用户打算开发内核模块代码(包括当前内核源码树中之外的任何模块代码),就开启这个设置。一般的用户可以关闭。

3.(Pentium-III/Celeron(Coppermine))Processor family

用来选择CPU类型。它允许内核使用高级处理器内部的特殊指令。当然,如果用户的CPU是80386,就没必要选择P4。但是如果实在不知该怎么选择,就选386。这时如果用户使用高级的CPU,内核的运行速度会比它应有的速度慢,但至少它能够运行。建议使用Help和/proc/cpuinfo获得更多的帮助。

4.High Memory Support (CONFIG_NOHIGHMEM)

使内核支持大内存。通常情况下内核只支持1GB内存(实际情况是896MB,它与vmalloc()的实现有关,这超出了我们的讨论范围)。如果用户的内存数量超过了896MB,请选择内核对4GB内存的支持,甚至64GB内存的支持。

5.Symmetric multi-processing support(CONFIG_SMP)

使内核支持多处理器。如果用户有多于一个CPU,那么一定要选这项。

6.Maximum number of CPUs(2-32)

用以选择处理器数量。对于单CPU用户来说,选多少都没有意义。

7.General setup

表示通用配置。这里可设置内核对虚拟内存的支持和为System V的进程提供通信机制;通过“Sysctl

support”选项可以动态地更改一些核心参数与变量,而不需要重新启动系统

8.File systems(文件系统)

这里的内容很多,建议在缺省的基础上进行修改。一般需要DOS FAT(FAT16、FAT32)、VFAT,EXT3、NTFS和ISO9660(标准光盘使用的文件系统)支持。

9.Power management options (ACPI、APM)

是高级电源管理。要注意ACPI与APM不能同时使用。如果同时配置了这两者,那么在系统启动时,若发现一个可工作的ACPI设备,那么APM将被关闭,ACPI会被加载

如果想让Linux支持高级电源管理,例如软关机、系统休眠等,需要选择“Power Management support”选项;“Software Suspend(EXPERIMENTAL)”选项可以挂起计算机(类似Windows XP中的休眠),这个功能不需要高级电源管理的支持;“Processor”选项可让处理器在空闲时节省电能,应该选上;“Thermal

Zone”选项在系统温度过高时,及时调整系统的工作状态,以保护CPU(需要硬件的支持)。

10. Bus options(PCI、PCMCIA、EISA、MCA和ISA)

用以设置系统总线。根据主板参数自己进行选择。针对PCI总线的是“PCI support”选项,下面还有ISA和EISA子项,一般都是需要的;“Support for

hot-pluggable devices”选项是对热插拔设备的支持;“PCMCIA/CardBus support”选项支持PCMCIA。

11.Executable file formats表示可执行文件格式,一般全要选上

12.Device Drivers

用来选择设备驱动程序。声卡、显卡、网卡和电视卡等驱动都在这里选择。其中“Plug and Play support”选项支持即插即用;“Block devices”选项支持块设备;“SCSI device support”选项支持SCSI 设备;“Multi-device support(RAID and LVM)”选项支持RAID和逻辑卷;“Networking support”选项支持网络,包括网络协议和网络设备,协议中肯定要“TCP/IP”项,根据自己的网卡选择相应的设备;ISDN上网必需选“ISDN subsystem”选项;“Sound”选项是声卡驱动,有两种选择,一种是ALSA驱动,一种是Open Sound

System驱动,选择支持自己声卡的那种,将之编译进内核;“USB Support”选项该项很重要,平常用的优盘就是一种USB设备;对USB而言,至少需要“Support

for USB”、“USB device filesystem”、“ECHI HCD(USB

2.0)support”、“UCHI HCD(most Intel and VIA)support”、“USB Audio support”、“USB MIDI support”和“USB Mass Storage support”选项。

四、实质:执行了“make ”之后,系统会在include/linux目录下生成一个autoconf.h文件。例如,在配置内核选项时选择支持NTFS文件系统,并把它编译进了内核,那么在.config中就会生成“CONFIG_NTFS_FS=y”这项,相应的在include/linux/autoconf.h中会生成“#define

CONFIG_NTFS_FS 1”这项。因此所有与NTFS文件系统相关的C源文件都会包含include/config/ntfs/fs.h这个头文件。

1.9.1.4 编译内核第二步:编译内核

编译内核的软件环境是kbuild系统,它泛指构建一个完整并能够运行的Linux内核所需要的一切资源。这些资源包括构建程序、脚本、中间件、配置文件和Makefile。

依次输入下面命令,进行编译过程:

make dep;make clean;make bzImage;make

install

make modules;make modules_install

make dep:kbuild调用中间件scripts/mkdep来生成描述与相关核心文件形成依赖关系的.h文件(绝大多数)列表。这个列表保存在.depend中。用户即使不执行这一步,kbuild也会自动执行的。

make clean: 這是清除先前编译产生的诸如.o目标文件等中间文件

make bzImage :bzImage 构建大内核镜像

make install:安装内核。如果用户使用LILO,它会把内核镜像放到正确的位置并且修改LILO的配置,那么用户可以免去手动操作。如果使用别的引导器(例如GRUB),那么不使用这个命令。因为修改需要交互式的手动编辑,自动修改可能会带来一些不可预计的错误,所以编译完毕后用户需要进行一些手动操作(见下面grub部分的介绍)。

在2.6.0中“make install”更加智能,它会依此将arch/i386/boot/bzImage、复制为/boot/vmlinuz-2.6.0,/boot/-2.6.0,并创建vmlinuz-2.6.0的软链接vmlinuz和-2.6.0的软链接。kbuild还会自动创建/boot/,并且修改,以前这一切都要手动才能完成。引用别人的话来说:“2.4.x还是半自动的,而2.6.x是全自动的。”

make modules:编译所有被配置为模块的内核组件:

make modules_install:把所有编译好的内核模块按照功能拷贝到/lib/modules/2.4.23/目录下。

1.9.2 启动新的内核

1.9.2.1 如何启动新的内核

配置内核和编译内核两个步骤完成之后,只是得到了新的bzImage文件、和文件。为了让新的内核发挥作用,必须采取一定的措施,以便让下次计算机启动linux系统的时候,可以使用新的内核。

当然,可以覆盖掉现有的旧的内核,但是为了保证系统的稳定性,一般要保留旧的内核。

一般这个工作是由bootloader完成的。

1.9.2.2 利用lilo

需要修改lilo的配置文件, 文件将看起来如下:

boot=/dev/hda

delay=20

vga=normal

root=/dev/hda1

read-only

image=/boot/vmlinuz1

label=linux

image=/boot/vmlinuz2

label=newlinux

然后运行lilo命令就可以了。

1.9.2.3 利用grub

需要修改grub的配置文件。根据发行版的不同,通常GRUB配置文件会在/etc/、/boot/grub/或/boot/grub/三个地方

典型的文件如下:

―――――――――――――――――――――――

default=0

timeout=10

splashimage=(hd0,1)/grub/image/

title kernel-2.4.22

root (hd0,1)

kernel/vmlinuz-2.4.22 ro root=LABEL=/

initrd /

title kernel-2.4.23

root (hd0,1)

kernel /vmlinuz-2.4.23 ro root=/dev/hda1

initrd /

title kernel-2.6.0

root (hd0,1)

kernel /vmlinuz-2.6.0 ro root=/dev/hda1

initrd /

―――――――――――――――――――――――

重新启动就可以了。

1.10内核源代码的各个目录的功能介绍

1.10.1 早期内核源代码目录

1.10.2 较新的内核源代码目录

1. Documentation

这个目录下面没有内核代码,只有一套有用的文档。但是这些文档的质量不一。有一部分内核文档,例如文件系统,在该目录下有相当优秀而且相当完整的文档;而另外一部分内核,例如进程调度,则根本就没有文档。但是在这里你可以不时地发现自己所最需要的东西。

2. arch

arch目录下的所有子目录中都是体系结构相关的代码。

每个体系结构特有的子目录下都又至少包含三个子目录:

l kernel,存放支持体系结构特有的诸如信号处理和SMP之类特征的实现;

l lib,存放高速的体系结构特有的诸如strlen和memcpy之类的通用函数的实现;

l mm,存放体系结构特有的内存管理程序的实现。

除了这三个子目录以外,大多数体系结构在必要的情况下还都有一个boot子目录,该目录中包含有在这种平台上启动内核所使用的部分或全部平台特有代码。这些启动代码中的部分或全部也可以在平台特有的内核目录下找到。

下面几个是arch目录下的子目录:arch/alpha、arch/arm、 arch/i386、arch/m68k/、arch/mips、arch/ppc/(PowerPC系列CPU的移植)。、arch/sparc、arch/sparc64

3. drivers

这个目录是内核中非常大的一块。实际上,drivers目录下包含的代码占整个内核发行版本代码的一半以上。它包括显卡、网卡、SCSI适配器、软盘驱动器、PCI设备和其他任何你可以说出的Linux支持的外围设备的软件驱动程序。

drivers目录下的一些子目录是平台特有的,例如,zorro子目录中包含有和Zorro总线通讯的代码。而Zorro总线只在Amiga中使用过,因此这些代码必然是Amiga特有的。而其他一些子目录,例如pci子目录,则至少是部分平台无关的。

4. fs

Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。

文件系统可能是本地的物理上可访问的存储设备,例如硬盘或CD-ROM驱动器;在这两种情况下将分别使用ext2和isofs文件系统。文件系统也可能是可以通过网络访问的存储设备,这种情况下使用的文件系统是NFS。

还有一些伪文件系统,例如proc文件系统,可以以伪文件的形式提供其他信息(例如,在proc的情况下是提供内核的内部变量和数据结构)。虽然在底层并没有实际的存储设备与这些文件系统相对应,但是进程可以像有实际存储设备一样处理(NFS也可以作为伪文件系统来使用)。

5. include

这个目录包含了Linux源程序树中大部分的包含(.h)文件。这些文件一般会根据不同类型进行分组:

6. init

这个目录下面的两个文件中比较重要的一个是main.c,它包含了大部分协调内核初始化的代码。

7. ipc

这个目录下的文件实现了System V的进程间通讯(IPC)。

8. kernel

这个目录中包含了Linux中最重要的部分:实现平台独立的基本功能。这部分内容包括进程调度(kernel/sched.c)及创建和撤销进程的代码(kernel/fork.c和kernel/exit.c);

9. lib

lib目录包含两部分的内容。lib/inflate.c中的函数能够在系统启动时展开经过压缩的内核。lib目录下剩余的其他文件实现一个标准C库的有用子集。这些实现的焦点集中在字符串和内存操作的函数(strlen,memcpy和其他类似的函数)及有关sprintf和atoi的系列函数上。

这些文件都是使用C语言编写的,因此在新的内核移植版本中可以立即使用这些文件。一些移植提供了它们独有的高速的函数版本,这些函数通常是经过手工调整过的汇编程序,在移植后的系统使用这些函数来代替原来的通用函数。

10. mm

该目录包含了体系结构无关的内存管理代码。为每个平台实现最底层的原语的体系结构特有的内存管理程序是存储在arch/platform/mm中的。

11. net

这个目录包含了Linux应用的网络协议代码,例如AppleTalk、TCP/IP、IPX等等。

12. scripts

该目录下没有内核代码,它包含了用来配置内核的脚本。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。

1.11常用命令介绍

【参考资料:Linux快速教程.chm和Linux命令大全(修改版).chm】

1.11.1 linux系统的启动和退出

开机启动后,linux系统会提示用户输入用户名和密码,这个和windows系统类似,windows的administrator对应于linux的root。

注销系统可以使用logout或者exit。

关闭linux系统可以使用shutdown命令,如shutdown –r now

1.11.2 linux系统对文件和目录的操作命令

1s命令

ls –l

ls –s

ls –S

cp命令

cp –dpr

mv命令

移动文件;给一个文件重新命名

rm命令

rm -f

rm -r

mkdir命令

rmdir命令

同 rm -r

cd命令

pwd命令

cat命令

输入文件内容或者建立一个文件

find命令

find /home/zhaohui –name hello.c

grep命令

grep foo *.c

more命令

diff命令:进行文件的比较

file命令:辨识文件类型

ln命令:连接文件或目录

touch命令:用来建立一个空文件,或者改变文件或目录时间

1.11.3 linux系统的文档备份和压缩命令

tar命令

tar cvzf *

tar xzvf

gzip命令

gzip –1到6 data.c

gzip -d

unzip命令:在linux下使用它来解压windows下使用winzip压缩的文件。

1.11.4 linux系统的文件权限改变命令


本文标签: 内核 系统 文件 安装