个人工具

UbuntuManual:Ubuntu 基础

来自Ubuntu中文

121.28.97.214讨论2008年10月21日 (二) 09:28的版本 发布版代号

跳转至: 导航, 搜索
序言 Ubuntu 基础 Ubuntu 系统安装提示 Ubuntu指南
发行版升级 Ubuntu 软件包管理 Ubuntu下的 Linux 内核 Ubuntu 小技巧
Ubuntu 系统微调 网络设置 编辑器 版本控制系统
编程 GnuPG Ubuntu 技术支持 附录

第 2 章 - Ubuntu 基础

本章讲述非开发人员需要掌握的 Ubuntu 系统基础知识。有关知识的权威参考,请参阅:

  • Desktop Guide
  • Server Guide
  • Install Guide

列表见 参考资料, 第 15.1 节。

如果你想查阅简要的“how-to”解释文档,可直接跳到 Ubuntu 软件包管理, 第 6 章 或其它相关章节。

本章的内容取自“Ubuntu FAQ”,经过较大的改编,以适于普通 Ubuntu 系统管理者上手。

Ubuntu 文件

目录结构

Ubuntu 软件包位于 Ubuntu 镜像站点 的目录树中,可通过 FTP 或 HTTP 访问它们。

下列目录存在于任何 Ubuntu 镜像站点的 ubuntu 目录下:

dists/::: 本目录包含“发行版”(distributions),此处是获得 Ubuntu 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径。有些旧软件包及 Contens-*.gz Packages.gz 等文件仍在其中。

pool/::: 所有 Ubuntu 发布版及已发布版的软件包的新的物理地址。

indices/::: 维护人员文件和重载文件。

project/::: 大部分为开发人员的资源,如: project/experimental/::: 本目录包含了处于开发中的软件包和工具,它们均处于 alpha 测试阶段。用户不应使用这些软件,因为即使是经验丰富的用户也会被搞得一团糟。 project/orphaned/::: 已不再有人维护的软件包,它们已从发行版中孤立出来。

Ubuntu 发行版

现在在 dists 目录下有三个 Ubuntu 发行版。它们是“hoary”发行版,“breezy”发行版,和“dapper”发行版。有时还有一个“edgy”发行版。其中也包含了一个现不再支持"warty"发行版。


到2007年8月,Ubuntu发行版本又增加了feisty和gutsy。

2008年4月24日,发行Ubuntu 8.04 LTS ,发行代号为:HardyHeron。

hoary 发行版

hoary 2005年4月发布,其发行版软件包入口:

  • hoary/main/:“main”组件包括了自由软件、可以被自由发布的软件和被Ubuntu团队完全支持的软件。其中包括了大多数流行的和稳定的开源软件,当您安装Ubuntu时默认安装的就是这些软件。
  • hoary/restricted/:“restricted”组件是专供普遍用途,而且没有自由软件版权,但依然被Ubuntu团队支持的软件。请注意,因为不能直接修改软件,因而我们可能不能提供完全的技术支持,即便如此,我们还能向实际作者反馈Bug报告。
  • hoary/universe/:“universe”组件是整个自由、开源Linux世界的缩影。在“universe”组件中,你可以找到大多数开源软件,以及在开源版权下的软件,所有这些都是在公共源的基础上建立的。这些软件都是使用“main”中的组件编写的,它们能与“main”组件相安无事地共同运行,但它们没有安全升级的保障。“universe”组件包含了数以千计的软件。虽然是公共的,用户必须明白它们与稳定的Ubuntu核心的软件的差异和不稳定。
  • hoary/multiverse/:multiverse”组件包含了“不自由”的软件,这意味着这些软件不满足 Ubuntu相对于“main”组件的各种版权政策。当您使用这些软件时,如何调整各种权力以及遵重版权所有者的问题,就完全依靠您自己把握了。 这些软件不被我们支持,而且通常不能被修改和更新,您将自己承担任何风险。

现在,作为以上位置的新增功能,实际上新的软件包都存储在pool目录中( pool目录, 第 2.1.10 节)。

breezy 发行版

breezy 2005年10月发布。现在,除了上述目录,新上载的软件包的物理存储位置为pool目录( pool目录, 第 节)。在breezy下同样有main、restricted、universe和multiverse子目录,它们的作用与hoary中的一样。

dapper 发行版

dapper 2006年6月发布。提供了长达3年的支持,新版本以Ubuntu 6.06 LTS(Long Term Support)(长期支持),它针对一些大组织的需求对桌面版和服务器版都做个一定程度上的增强。新上载的软件包的物理存储位置为pool目录( pool目录, 第 2.1.10 节)。在dapper下同样有main、restricted、universe和multiverse子目录,它们的作用与hoary中的一样。

edgy 发行版

edgy 发行版反映了系统的最新开发进展。欢迎广大用户使用并测试这些软件包,同时也提醒你们这些软件包还不完善。使用edgy发行版的好处就是你可以获得Ubuntu项目的最新更新—不过新东西也会出新问题,你得好坏兼收:-)

Ubuntu 发布版其它仓库

存在于dists目录下的物理目录名,例如breezy-updates和breezy-security,就是“附加的仓库”。当某个Ubuntu发行版处于维护阶段。将包的必要升级和安全更新放在附加的仓库里。其附加仓库通常有 ***-updates、***-security、***-proposed、***-backports。

已用过的发布版代号

已使用过的发行版代号有: Ubuntu 4.10 (The Warty Warthog)、 Ubuntu 5.04 (The Hoary Hedgehog)、 Ubuntu 5.10 (The Breezy Badger)、 Ubuntu 6-06 (The Dapper Darke)、Ubuntu 6.10 (The Edgy Eft)、Ubuntu 7.04 (The Feisty Fawn)、Ubuntu 7.10 (The Gutsy Gibbon)、Ubuntu 8.04(The Hardy Heron)。

发布版代号

  • Warty Warthog 多疣的疣猪,
  • Hoary Hedgehog 灰白的刺猬,
  • Breezy Badger 活泼的獾,
  • Dapper Darke 漂亮的鸭子,
  • Edgy Eft 躁动的蜥蜴,
  • Feisty Fawn活泼的小鹿,
  • Gutsy Gibbon勇敢的长臂猿,
  • Hardy Heron勤奋的苍鹭

pool目录

过去,软件包均放在dists目录下相应发行版的子目录中。这种做法产生了许多问题,当镜像站点进行新版本发布时大量带宽被消耗。

现在软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool目录下按属性再分类(main、restricted、universe和multiverse),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。

你可以执行命令apt-cache showsrc mypackagename,查看“Directory:”行获知每个软件包的存放位置。例如:apache软件包存放在pool/main/a/apache/软件包存放在lib*软件包数量巨大,它们以特殊的方式归档:例如,libpaper软件包存放在pool/main/libp/libpaper/。

诸如apt等命令访问的索引文件仍位于dists目录中。

通常,你大可不必注意这些,新版的apt和旧版dpkg-ftp会自动处理它们。

发布源目录结构

在每个主目录树下(dists/dapper/main、dists/dapper/restricted、dists/dapper/universe、dists/dapper/multiverse/,等)按芯片架构又分了子目录,每个子目录中存放着在该芯片架构下编译的二进制软件包。

  • binary-amd64/ AMD64 或 EM64T 架构
  • binary-i386/ 所有的使用 Intel/AMD/等 处理器的PC,
  • binary-powerpc/ Apple Macintosh G3, G4, 和 G5
  • binary-sparc/ Sun UltraSPARC 系统

源代码

Ubuntu 系统中的main,universe组件有源代码,不仅如此,许可证条款规定系统中所有的程序必须和其源代码一起发行,或提供源代码出售。

通常源代码发布在source目录,该目录同时处于所有架构目录中,更新的源码则在pool目录中(参阅 pool目录, 第 2.1.10 节)。对于不太熟悉 Ubuntu 归档目录结构的用户想获得源代码可以试试apt-get source mypackagename命令。

有些软件包,如著名的pine,由于许可证限制,只提供源码包。(最近,pine-tracker软件包提供了一个简易的安装版)安装源码包的方法可参阅 向系统引入软件包, 第 6.4.10 节, 打包, 第 13.10 节教你如何手工创建一个软件包。

restricted和multiverse目录中的软件包可能不提供源代码,因为它们没有正式加入 Ubuntu 系统。

Ubuntu 软件包管理系统

Ubuntu 软件包概述

软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。Ubuntu 软件包采用了和Debian相同的软件包格式,有两种类型的软件包:

  • Binary packages(二进制软件包),它包含可执行文件、配置文件、man/info页面、版权声明和其它文档。这些软件包以 Ubuntu 特定的格式发布(参阅 Ubuntu 软件包格式, 第 2.2.2 节);它们通常使用.deb的扩展名以示区别。这种二进制软件包可使用 Ubuntu 工具dpkg解包,详情见有关帮助页面。
  • Source packages(源码包),包含一个.dsc文件它用于描述源码包(包括下列文件的名称),一个.orig.tar.gz文件它是未经修改的原始源代码压缩文件,以及一个.diff.gz文件它包含了该软件包 Ubuntu 化时所做的修改。dpkg-source工具可用于打包/解包 Ubuntu 源码包,详情可参阅有关帮助页面。

软件包管理系统安装的软件包时需要使用“倚赖关系”,它由软件包维护者声明。这些信息记录在与每个软件包关联的control文件中。例如,包含GNU C编译器(gcc)的软件包依赖于包含链接器和汇编器的binutils软件包。如果用户试图在没有安装binutils的情况下安装gcc,软件包管理系统(dpkg)将会显示一条错误信息,告诉你需要安装binutils,并停止安装gcc。(不过,倔强的用户可以对这个信息视而不见,参阅dpkg(8))。)更多信息,参阅下面的章节 软件包依赖关系, 第 2.2.8 节。

Ubuntu 软件包管理工具可用于:

  • 操作和管理软件包或软件包的局部内容,
  • 帮助那些使用有限容量载体如软盘传输的用户分割软件包,
  • 帮助开发者将开发文件打包成软件包,
  • 帮助用户从远程 Ubuntu 文档站点安装软件包。

Ubuntu 软件包格式

Ubuntu “软件包”,或称之为 Debian 包文件( Debian archive file),包含了可执行文件、库文件、和相关程序的文档。通常 Ubuntu 文件的文件名以.deb结尾。

Ubuntu 二进制软件包内部格式描述见deb(5)帮助页面。所以要操作.deb文件请参阅dpkg-deb(8)。

Ubuntu 软件包命名约定

Ubuntu 软件包命名遵循下列约定:

foo_ver-rev_arch.deb

一般这里的foo是软件包的名称,ver是软件本身的版本号,rev是 Ubuntu 修订版本号,arch是目标架构名称。当然,文件很容易被改名;不过,你也可以通过运行下面的命令来找出文件filename实际是那个软件包:

dpkg --info filename 

Ubuntu 修订版本号由 Ubuntu 开发者或创建这个软件包的人指定。通常,包被修改过之后,会把修改版本号加一,有些也会加上ubuntu的标志以便和Debian区分开来。

保存本地配置

有可能被本机管理员修改的文件保存在/etc/目录中。 Ubuntu策略中规定所有对本地配置文件的修改都可以在软件包升级过程中被保留下来。

在软件包的发布中,如果包含默认的本地配置文件,这个文件就被称为“conffile”(默认配置)。如果不得到管理员的允许,软件包管理系统不会对上次 安装之后被修改过的默认配置进行升级;不过,如果管理员没有改动过默认配置,那么它就会被升级成最新软件包中的版本。这种策略几乎总是合理的,它有益于把 默认配置的改动减到最小。

下面的命令可以列出一个软件包中包含那些默认配置文件:

dpkg --status package 

文件列表位于“Conffiles”的后面。

在《 Ubuntu 策略手册》的“配置文件”一节,可以获得有关conffile(默认配置)文件的更多信息(参见 参考资料, 第 15.1 节)。

Ubuntu 维护脚本

Ubuntu 维护脚本是一种可执行脚本,它在软件包安装之前或之后自动运行。它和一个名叫control的文件一起组成 Ubuntu 包文件的“管理”部分。

这些文件是:

preinst:: 在 Ubuntu 包文件解包之前,运行这个脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。

postinst:: 该脚本的任务是完成 Debian 包文件解包文件的配置工作。通常,“postinst”脚本等待用户输入,或提醒用户,如果他接受当前默认值,要记得软件包安装完后返回重新配置。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。

prerm:: 该脚本负责停止与软件包关联的daemon服务。它在删除软件包关联文件之前执行。

postrm:: 该脚本负责修改软件包链接或文件关联,或删除由它创建的文件。(参阅虚拟软件包, 第 2.2.7 节)。

当前,所有的管理文件都存放在/var/lib/dpkg/info目录。与foo软件包相关的文件,名字以“foo”打头,以“preinst”、“postinst”等为扩展名。目录中的foo.list文件列出了foo软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因Debina版本而异)

软件包优先级

每个 Ubuntu 软件包均被发布者指点了一个优先级,作为软件包管理系统 的一个辅助参数,优先级的值有:

  • Required(必须) 该级别软件包是保证系统正常运行必须的。

包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用dpkg恢复。只安装Required级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。

  • Important(重要) 在任何类Unix系统上均安装有该级别软件包。

系统若缺少这类软件,会运行困难或不好操作。该级别软件包并包括Emacs或X11或TeX或其它大型应用程序,它们只是一些实现系统底层功能的程序。

  • Standard(基本) 该级别软件包是任何Linux系统的标准件,它们组成一个小而精的字符模式的系统。

系统的默认安装就包括了它们。“Standard”级软件包不包括许多大型应用程序,但它包括Emacs(它比其它应用程序更底层)和Tex及LaTeX的精巧版(不支持X)。

  • Optional(推荐) 该级别软件包包括那些你可能想安装的软件,即使对它们并不熟悉,但对它们没有特殊的要求。

它们包括X11,TeX完整发布版和许多应用程序。

  • Extra(额外) 该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为“Optional”级。

请注意软件包描述中“Priority: required”(优先级:必须)、“Section: base”(组件:基本)、“Essential: yes”(必要:是)的区别。“Section: base”(组件:基本)意味着在安装新系统时这个软件包要先于其它所有软件安装。大多数在“Section: base”中的软件包都被打上了“Priority: required”(优先级:必须)标签,或者至少是“Priority: important”(优先级:重要);并且其中的很多也同时具有“Essential: yes”(必要:是)标签。“Essential: yes”意味着要用软件包管理系统的dpkg等程序删除它时,必须给出额外的强制选项才行。比如,libc6、mawk和makedev软件包属于“Priority: required”和“Section: base”,但不是“Essential: yes”。

虚拟软件包

虚拟软件包是一个统称,它代指一组具有相近功能的软件包中的任何一个。例如,tin和trn都是新闻组阅读软件,当系统中某个程序需要使用新闻阅读器时,它们中的任何一个都可以满足要求。因此,这两个软件包一起提供了一个叫做news-reader(新闻阅读器)的“虚拟软件包”。

类似的,许多exim、exim4、sendmail、postfix这样的软件包都提供邮件传输代理的功能。因此,它们在一起提供了一个称为mail-transport-agent(邮件传输代理)的虚拟包。安装了它们中的任何一个,都会满足其它倚赖于邮件传输代理功能的程序的需要。

Ubuntu 有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定一个为首选软件。相关的命令是update-alternatives,更详细的描述参阅 Alternative 命令, 第 6.5.3 节。

软件包依赖关系

Ubuntu 软件包管理系统依赖声明,它描述了这一事实:一些软件包需要其它软件包被安装才能正常运行或运行得更好。

  • 软件包A依赖(depends)软件包B:要运行A必须安装B。在有些情况下,A不仅依赖B,还要求B的特定版本。版本依赖通常有最低版本限制,A更依赖于B的最新版而非某个特定版本。
  • 软件包A推荐(recommends)软件包B:软件包维护者认为所有用户都不会喜欢缺少某些功能的A,而这些功能需要B来提供。
  • 软件包A建议(suggests)软件包B:B中某些文件与 A 的功能相关,并能够增强 A 的功能。这种关系通过声明软件包 B 增强 Enhances 软件包 A 来表示。
  • 软件包A与软件包B冲突(conflicts):如果系统中安装了B那么A无法运行。“Conflicts”常和“replaces”同时出现。
  • 软件包A替换(replaces)软件包B:B安装的文件被A中的文件移除和覆盖了。
  • 软件包A提供(provides)软件包B:A中包含了B中的所有文件和功能。

上述术语使用方法的更详细的信息参阅 Packaging Manualthe Policy Manual

注意,dselect可以对recommendssuggests类软件包进行细操作,apt-get只会简单的下载安装depends类软件包而不管recommendssuggests类软件包。这两个程序均正式使用APT作为其后台。

何为“Pre-depends”

dpkg 总是在配置一个有依赖关系的包之前,先对被依赖的包进行配置。 然而,dpkg 通常将归档文件随意解包,不顾依赖性。 (从归档文件中解包并提取文件,将他们放置到正确的位置。) 如果是 Pre-Depends 包,则在所依赖的其它包被解包和配置之前, Pre-Depends 包不会被解包。 使用这种依赖的目的是为了将依赖复杂性降至最底。

软件包状态

软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用dselect的“Select”菜单,也可以直接调用dpkg)。

它们的意思是:

  • unknown - 用户并没描述他想对软件包进行什么操作。
  • install - 用户希望对软件包进行安装或升级。
  • remove - 用户希望删除软件包,但不想删除任何配置文件。
  • purge - 用户希望完全删除软件包,包括配置文件。
  • hold - 用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。

阻止软件包升级

有两种方法阻止软件包升级,使用dpkg,或者在Woody中使用APT。

使用dpkg,首先导出软件包选择列表:

dpkg --get-selections \* > selections.txt 

接着编辑文件selections.txt,修改想要恢复的软件所在的行,例如libc6,则将:

libc6                       install

改为:

libc6                       hold

保存文件,将它装入dpkg数据库:

dpkg --set-selections < selections.txt 

或者,如果你知道要恢复的软件包名称,执行:

echo libc6 hold | dpkg --set-selections

这个命令将在每个软件包安装过程中保持该软件包不变。

使用dselect也可以达到同样的效果。进入[S]elect屏幕,找到想阻止其升级的软件包,按“=”键(或者“H”)。更改在你退出[S]elect屏幕后立即生效。

Woody中的APT系统有一个新机制来阻止软件包升级,在下载升级档进程中使用Pin-Priority。参阅帮助页面apt_preferences(5),或阅读http://www.debian.org/doc/manuals/apt-howto/或apt-howto软件包。

源码包

源码包发布在source目录中,既可以手工下载可以使用

apt-get source foo 

获取它们(参阅apt-get(8)帮助页面)。

编译源码包

对于foo软件包,从源码编译需要foo_*.dsc、foo_*.tar.gz和foo_*.diff.gz文件(注意,对于由 Debian 开发的软件包,没有.diff.gz文件)。

当你得全了这些文件,如果你这安装了dpkg-dev软件包,运行:

$ dpkg-source -x foo_version-revision.dsc

它将软件包解压到一个名为foo-version的目录。

使用下列命令创建二进制软件包:

$ cd foo-version
$ su -c "apt-get update ; apt-get install fakeroot"
$ dpkg-buildpackage -rfakeroot -us -uc

然后,

# su -c "dpkg -i ../foo_version-revision_arch.deb"

安装新编译的软件包。参阅["../ch-package.zh-cn.html: 向系统引入软件包, 第 6.4.10 节]。

新建 Ubuntu 软件包

创建新软件包的详细信息,参阅 New Maintainers' Guide, 该文档在maint-guide包中,或浏览http://www.debian.org/doc/manuals/maint-guide/。

Ubuntu 系统升级

Ubuntu 的设计目标之一就是提供一个平滑、安全和可靠的升级过程。软件包系统在升级过程中会将重要改变警告系统管理员,在某些情况下,会要系统管理员来做决定。

你也应该阅读发布手记(Release Notes),它存在于所有的 Ubuntu 光盘中,也可以通过互联网访问http://www.Ubuntu.com/releases。

Ubuntu 软件包管理, 第 6 章提供了升级的实用指南,本节只提供一个大纲,由包工具开始。

dpkg

它是操作软件包文件的主要工具;参阅 dpkg(8) 获得完整信息。

dpkg 由几个原始的辅助程序演化而来。

  • dpkg-deb:操作.deb文件。dpkg-deb(1)
  • dpkg-ftp:一个旧的软件包获取命令。dpkg-ftp(1)
  • dpkg-mountable:一个旧的软件包获取命令。dpkg-mountable(1)
  • dpkg-split:将大软件包分割成小包。dpkg-split(1)

dpkg-ftp 和 dpkg-mountable 已被新的APT系统取代。

APT

APT(the Advanced Packaging Tool)是 Ubuntu 软件包管理系统的高级界面,由几个名字以“apt-”打头的程序组成。apt-get、apt-cache和apt-cdrom是处理软件包的命令行工具,它们也是其它用户前台程序的后端,如dselect和aptitude。

更多信息,可安装apt软件包后阅读apt-get(8)、apt-cache(8)、apt-cdrom(8)、apt.conf(5)、sources.list(5)、apt_preferences(5)(woody)以及/usr/share/doc/apt/guide.html/index.html。

另一个资源是APT HOWTO,如果安装了apt-howto包,可在/usr/share/doc/Debian/apt-howto/中找到它。

apt-get upgrade和apt-get dist-upgrade只获取“Depends”类软件包,它忽略“Recommend”和“Suggests”类软件包,不想这样的话,可使用dselect。

dselect

这个程序是 Ubuntu 软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积升级。参阅 dselect, 第 6.2.4 节。

更多信息,可安装install-doc包后阅读/usr/share/doc/install-doc/dselect-beginner.en.html或dselect Documentation for Beginners

不停机系统升级

Ubuntu 系统的内核(文件系统)支持替换使用中的文件。 当一个软件包升级时,如果由该软件包提供的服务在当前运行级下正在运行,则该服务将被重新启动。 Ubuntu 系统不要求用户在 single-user 模式下进行不停机升级。

下载和缓存.deb文件

如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关dpkg-ftp或APT的内容),当你完成软件包安装工作后,可以从系统中删除.deb文件。

如果是使用APT,这些文件会缓存在/var/cache/apt/archives/目录中。你可以在完成安装后删除它们(apt-get clean)或者将它们拷贝到另一个机器的/var/cache/apt/archives/目录中以备以后的安装。

升级记录

dpkg会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在包操作的过程中活跃终端的行为。

最简单的解决方法是在运行dpkg、dselect、apt-get等工具的会话中加入script(1)程序。

Ubuntu 系统引导进程

init程序

同所有的Unix一样, Ubuntu 启动要执行init程序。init的配置文件(/etc/inittab)中指定的第一个执行脚本应该是 /etc/init.d/rcS。

接下来将要发生要看是否安装了 sysv-rc 软件包或 file-rc 软件包。下面假设安装了 sysv-rc 软件包。 (file-rc 含有它自己的 /etc/init.d/rcS 脚本,在 rc 目录里使用文件代替符号链接来控制哪个服务在哪个运行级别启动。)

sysv-rc 软件包里面的 /etc/init.d/rcS 运行 /etc/rcS.d/ 目录下的所有脚本来执行初始化,如: 检查并挂载文件系统、装载内核模块、启动网络服务、设定时钟等。 接着,为了兼容性考虑,它运行/etc/rc.boot/目录下的文件(除了那些文件名中包含“.”的文件),该目录中的脚本是保留给系统管理员使用,不赞成使用该目录。 更多信息参见 系统初始化, 第 9.1 节 和 Debian Policy Manual 中的 System run levels and init.d scripts

Ubuntu 没有使用 BSD 风格的 rc.local 文件。

运行级别

完成系统启动进程后,init启动所有在默认运行级别配置为启动的服务。 默认运行级别由 /etc/inittab 中的 id 给出。 Ubuntu 使用 id=2。

Ubuntu 使用下列的运行级别:

  • 1(单用户模式 single-user mode),
  • 2 到 5(多用户模式 multi-user modes),
  • 0(关闭系统),
  • 6(重启系统)。

运行级7、8和9也能够使用,但是它们的 rc 目录在软件包安装的时候没有。

使用 telinit 命令来转换运行级别。

当进入一个运行级别时,所有在 /etc/rcrunlevel.d/ 目录下的脚本将被执行。 脚本名的第一个字母决定了该脚本的运行方式: 使用 K 开头的脚本,使用 stop 参数来运行。 使用 S 开头的脚本,使用 start 参数来运行。 这些脚本按照它们名字的字母顺序运行;因此,“stop”脚本比“start”脚本先运行。 在 K 或 S 之后的两个数字决定了脚本运行的先后次序,数字小的脚本先运行。

实际上,目录/etc/rcrunlevel.d/中的脚本都是指向/etc/init.d/的符号链接。这些脚本接受 “restart”和“force-reload”作为参数:“force-reload”的方式可以用来在系统启动后,重新启动服务或者强迫它们重新装载它们的配置文件。

例如:

# /etc/init.d/exim4 reload

自定义运行级别

自定义运行级别是一个高级的系统管理任务。 下面的指示面向大部分服务。

在运行级 R 启动 service 服务,创建一个符号链接 /etc/rcR.d/Sxyservice 到目标文件 ../init.d/service。 xy 是序列号,是由软件包在安装的时候分配给服务的。

停止服务,重命名符号链接,将它的名字用 K 开头来代替 S, 它的序列号是100减 xy。 可以使用象 sysv-rc-conf 或 ksysv 这样的运行级别编辑器来方便的修改服务。

在一个特定的运行级别目录,可以将某个服务的 S 符号链接删除来代替重新命名它。 这种作法不停止该服务,但将把该服务留在一种 sysv-rc 初始化系统认为的“漂浮”状态: 当运行级别改变时,该服务即不会启动,也不会停止, 它将保留它原有的状态,不管它是在运行或者没有运行。 注意,处于这种漂浮状态的服务,如果它所属的软件包升级了, 这个服务将启动,不管它在升级前是否运行。 这是当前 Debian 系统一个已知的缺点。 注意:还需要在运行级 0 和 6 之间保留服务的 K 符号链接。 如果删除了一个服务的所有符号链接,在升级该服务的软件包时, 所有的符号链接将恢复到它们的出厂默认模式。

建议对 /etc/rcS.d/ 目录里的符号链接做任何改变。

多样性支持

Ubuntu 提供几种途径,在不破坏系统的前提下满足系统管理员各种要求。

  • dpkg-divert,参阅 dpkg-divert 命令, 第 6.5.1 节。
  • equivs,参阅 equivs 软件包, 第 6.5.2 节。
  • update-alternative,参阅 Alternative 命令, 第 6.5.3 节。
  • make-kpkg可以支持多启动引导。参阅make-kpkg(1)和 Ubuntu 标准方式, 第 7.1.1 节。

/usr/local/目录下的所有文件均属于系统管理员,Ubuntu不会改动它们。/etc下的大部分文件属于conffiles,Ubuntu不会在升级后覆盖它们,除非系统管理员明确要求覆盖。

国际化

Ubuntu 系统是国际化产品,不论是在控制台下还是在X下,它都提供多种语言的字符显示和输入支持。许多文档、帮助页面以及系统消息都被翻译成各种语言。在安装过程中, Ubuntu 提示用户选择安装语言(有时是当地语言变量)。

如果你安装的系统提供的语言特性支持不能满足你的需要,或者你要改变当前语言或安装别的键盘方案以适应你的语言,参阅 本地化(localization), 第 9.7 节。

Ubuntu 和系统内核

参见 Ubuntu下的 Linux 内核, 第 7 章。

编译非 Ubuntu 源码包内核代码

首先你必须了解 Ubuntu policy有关头文件的规定。

Ubuntu C libraries是依据内核头文件最新stable发布版创建的。

跟随内核源码发布的内核头文件位于/usr/include/linux/include/。

如果你编译某个程序所用的内核头文件比libc6-dev提供的头文件还新,在编译时你必须在命令行中加上-I/usr/src/linux/include/。这些情况是存在的,例如,对于automounter daemon(amd)软件包而言,当新内核改变了对NFS的内部操作方式,amd需要知道这些改变。这时就需要引用新的内核头文件。

自定义内核创建工具

对于希望(或必须)使用自定义内核的用户,推荐下载kernel-package软件包。该软件包包含了创建内核包的脚本。有了它,新建 Ubuntu 内核镜像包只需在内核源码目录的一级目录运行

# make-kpkg kernel_image

在内核源码所在目录的顶层,执行下述命令可获得有关帮助

# make-kpkg --help

或阅读make-kpkg(8)帮助页面以及 Ubuntu下的 Linux 内核, 第 7 章。

如果所需的kernel-source-version(version代表内核版本号)包不存在,用户就得从Linux文件站点分别下载最新的(或需要的)内核源码。

有关kernel-package包的用法详述见于/usr/doc/kernel-package/README。

多系统引导器

要使用多系统引导器如grub或loadlin,请将编译好的Linux内核bzimage拷贝到相应的地方(例如/boot/grub或MS-DOS分区)。

制做引导软盘

Ubuntu 的 mkrboot 软件包可以帮你制作一张自定义启动软盘,软件包中的Shell脚本按syslinux格式制作启动软盘。对于那些使用MS-DOS格式化的软盘,其主引导扇区的记录将被修改为直接引导Linux(或是其它在盘中syslinux.cfg文件里的操作系统)。该软件包中的其它脚本可制作急救盘甚至重建基本系统。

模块加载规定

Ubuntu 的modconf软件包提供了一个shell脚本(/usr/sbin/modconf),它可以用来自定义内核模块配置。该脚本使用菜单界面,用户通过它给出系统中可挂载设备驱动的有关细节,它再将这些细节信息生成/etc/modules.conf文件(其中列出了别名aliases和其它参数,用于连接各种模块),该配置文件用来加载/etc/modutils/目录下和/etc/modules(其中列出了需要在系统启动时加载的模块)目录的相关模块。

新版的配置帮助文件 Configure.help 可为构造自定义内核提供帮助,同样,modconf软件包中也有一系列帮助文件(位于/usr/share/modconf/目录下),告诉你如何对模块设定合适的参数。参阅 模块化的 2.4 内核, 第 7.2 节中的例子。

卸载旧内核

uname -ra 可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同。因此你可以使用如下命令删除不想要的内核镜像包:

# dpkg --purge --force-remove-essential linux-image-NNN 

(当然,要将NNN替换成你的内核版本号和修订版号。)