1
目 录第 1章 -序言,.................41.1官方文档1.2文档约定,...............41.3脚本样例 51.4基本设置,...............
1.5Ubuntu发行版( distributions)基本概念 5第 2章 - 基础,...............62.1Ubuntu文件2.2软件包管理系统,...........92.3Ubuntu系统升级,,142.4系统引导进程,...........16
2.5多样性支持,.,172.6国际化,,...........2.7Ubuntu和系统内核 17第 3章 - 系统安装提示,............193.1常规 Linux安装提示3.2Bash设置,...............26
3.3鼠标设置3.4NFS设置,...............293.5Samba设置3.6打印机设置,..............303.7桌面 PC的 CRON 313.8其它主机安装提示,............
第 4章 -Ubuntu指南,,344.1开始了,.............4.2MidnightCommander(MC) 374.3类 Unix工作环境,............394.4类 文本处理 494.5类 Unix文件系统,............52
4.6X窗口系统,,594.7进一步学习,............60第 5章 -发行版升级到 Breezy,Dapper或 Edgy5.1升级到 Hoary...............615.2准备升级工作5.3升级,................61
第 6章 -Ubuntu软件包管理 626.1介绍,................636.2Ubuntu软件包管理基础 646.3生存命令,.............676.4Ubuntu必杀技 706.5其他 Ubuntu的特性,............76
第 7章 -Ubuntu下的 Linux内核 787.1内核编译,...............
2
7.2模块化的 2.4内核,............807.3通过 proc文件系统调整内核 837.42.6版内核和 udev.............84第 8章 -Ubuntu小技巧,.8.1启动系统,,............848.2活动记录,,87
8.3拷贝及创建子目录,............888.4差异备份与数据同步 908.5系统冻结恢复,..............918.6记住这些可爱的小命令8.7需要注意的典型错误,...........107第 9章 -Ubuntu系统微调,
9.1系统初始化,............1079.2访问限制( Restrictingaccess) 1099.3刻录机,...............1129.4X,1169.5SSH.................1309.6邮件 133
9.7本地化( localization),..........1379.8多语言化( Multilingualization,m17n) 145第 10章 -网络设置,...............14610.1IP网络设置基础10.2底层网络设置,.............14810.3命名主机,153
10.4域名服务 (DNS)..............10.5使用 DHCP来配置网络接口 15510.6Debian的高级网络设置,..........15610.7处理内核对接口命名的不一致性 16110.8启动 (triggering)网络设置,.........16210.9多阶段 (Multi-stage)映射 165
10.10网络服务设置,.............16610.11网络故障排除 16810.12建立路由网关,.............第 11章 -编辑器,.,17111.1流行的编辑器,.............11.2应急的编辑器 172
11.3Emacs和 Vim..............第 12章 -系统版本控制 17712.1并行版本系统 (CVS)............12.2Subversion.,181第 13章 -编程,.,............18313.1从哪儿开始,.
13.2Shell.,............18313.3Awk.,188
3
13.4Perl.................18913.5Python 19013.6Make.................19113.7C,19213.8Web.................19613.9准备文档 197
13.10打包,...............200第 14章 -GnuPG 20114.1安装 GnuPG...............14.2使用 20214.3管理 GnuPG...............14.4在应用程序中使用 GnuPG203
第 15章 -Ubuntu技术支持,.............15.1参考资料,20315.2查词意,.............20815.3查找流行的 Debian软件包15.4Debianbug跟踪系统,...........20815.5邮件列表,..
15.6InternetRelayChat(IRC)..........20815.7搜索引擎,...,20915.8网站,,.........附录 A-附录,....,210A.1作者,,..........A.2保证,...,213
A.3反馈,,..........A.4文档格式,..,213A.5Debian迷宫,...........A.6引言,.,214来源,..,...........
4
第 1章 -序 言本书,Ubuntu参考 手册,的 目的 是对 整个 Ubuntu系统 作一 个全 面的 介绍,提 供一 本,安装 之後 的,用户 使用 手册 。本 手册 的读 者应 该愿 意阅 读 shell脚本 ( scripts)。 我 也假定 读者 在阅 读之 前已 经具 备了 类 Unix系统 的基 本操 作技 能。
我决 定 不 在本 书中 解释 所有 的细 节,因 为 你可 以在 manual页,info页或 HOWTO文 档中获 得这 些信 息。 我 希 望能 给读 者提 供实 用的 信息,而 非 全面 的解 释。 因 此 我会 在正 文中 给出实 际的 命令 序列,或 是在 examples/给出 脚本 示例 作为 参考 。在 按照 这些 示例 下达 命令之前,你 必 须要 先理 解其 内容 的含 义。 实 际 的命 令序 列可 能会 依你 的系 统的 具体 情况 而有 细微的 差别 。
书中 的很 多信 息实 际上 是对 在 参考 资料,第 15.1节 中列 出的 众多 权威 参考 文献 的引 用和提 示。 本书 最初 是作 为一 本,快速 参考 手册,来写 的,但 是 现在 增加 了很 多内 容。 尽 管 如此,保 持文 字简短紧凑 ( keepitshortandsimple,KISS)是 我的 指导 思想 。
如果 你是 在寻 找紧 急情 况下 系统 维护 方面 的帮 助,请直 接阅 读 Ubuntu生存 命令,第 6.3节。 1.1官 方文档本书 的最 新官 方版 本可 在 http://wiki.ubuntu.org.cn/UbuntuManual/访问 到。
1.2文 档约定文中 许多 信息 通过 简短 的 bash命令 给出,以 下是 其排 版格 式约 定:#commandinrootaccountroot用户 命令$ user普通 用户 命令
...descriptionofaction命令 动作 描述这些 shell命令 的例 子使 用 PS2=""。 更多 信息 参见 Bash– GNU标准 交互式 shell,第13.2.1节。
参考,· bash(1)表示 Unix风格 manual页。· infolibc表示 GNUTEXINFO信息 。· TheCProgrammingLanguage表示 参 考书目 。· http://www.debian.org/doc/manuals/debian-reference/表示 URL。
· /usr/share/doc/Debian/reference/表示 系统 的 文 件 。文中 用到 了下 列缩 写,· LDP:LinuxDocumentationProject(http://www.tldp.org/)· DDPDebianhttp://www.debian.org/doc/)
5
本文 中的 其它 缩写 会在 使用 前定 义。 文中 只提 供了 LDP文档 的 URL,然 而,LDP文档 已经 被 Ubuntu打 包 。 当这 些包 被安 装 後,LDP文档 会在 /usr/share/doc/HOWTO/里。参阅 参考 资料,第 15.1节。
1.3脚 本样例本文 档的 脚本 样例 需要 通过 网页 访问 下载 。1.4基 本设置如果 你的 系统 是最 小安 装,但你 希望 充分 使用 本文 档,请执 行下 面的 命令 来安 装其 它软 件包,这些 软件 包含 有一 些有 用的 文档 。 #apt-getinstallinfoman-dbdoc-basedhelpaptapt-utilsauto-apt\dpkglessmcsshnano-tinyelvis-tinyvimsash\kernel-package\
manpagesmanpages-devdoc-debiandoc-linux-text\debian-policydevelopers-referencemaint-guideapt-howtoharden-docinstall-doc\libpam-docglibc-docsamba-docexim-doccvsbook\gnupg-doc#apt-getinstalldebian-reference#forSarge,dothistoo:)
对于 Woody版,把 exim-doc-html增加 到上 面的 列表 中。 对于 Sarge版,请 使 用 exim4-doc-html和 exim4-doc-info来代 替 exim-doc包。1.5Ubuntu发 行版( distributions) 基本概念Ubuntu软件 仓库 包含 上千 个软 件包,它 们按 照我 们提 供的 基础 等级 和是 否符 合自 由软 件哲学,被分 成四 种组 件,即,main” ( 主 要 ),,restricted” ( 受 限 ),,universe” (公 共) 和,multiverse” ( 多 元 化 )。Ubuntu软 件 仓 库 被 分 成 四 组,,main”,,restricted”,,universe” 和,multiverse”,按照我 们所 能提 供的 基础 能力 以及 它们 是否 符合 自由 软件 哲学 来划 分。
标准 Ubuntu安装 都采用 main和 restricted的软 件。 你可 以通过 Synaptic软件 管理 器和Aptitude软件 包管 理器 安装 其他 的软 件。 通过 编辑 /etc/apt/sources.list文件,就 可以得到 它们 。如 果要 编辑 sources.list,请 使用,mansources.list” 来获 得更 多信 息。Ubuntu发行 版有 代码 名称,具 体 描述 在 Ubuntu发布 版代 号,第 2.1.7节 中 。 Warty在2004年 10月发 布,在 Warty发布 後,三个 发行 版对 应为 Hoary,Breezy和 Dapper。
订阅 低流 量的 邮件 列表 ubuntu-zh@lists.ubuntu.com,可以 得到 关于 ubuntu的重 要声 明信息 。 参阅 Debian文件,第 2.1节。如果 你想 使用 比发 行版 自带 软件 包更 新的 软件 包版 本,你可 以按 照 发行 版升 级到 Hoary、Breezy或 Dapper,第 5章 的描 述,升级 到一 个新 的发 行版 ; 或者 你只 升级 选择 的软 件
6
包 。 如果 该软 件包 不能 够容 易的 升级,你 可 以按 照 向 Breezy系统 引入 软件 包,第 6.4.10节,的说 明,把该 软件 包向 後移 植到 你现 在所 使用 的发 行版 上。如果 使用 混合 型发 行版,例 如 在 Breezy中加 入 Dapper,或是 在 Hoary中加 入 Breezy,会一 不留 神从 Breezy或 Dapper中下 载像 libc6一 样 的 核 心 软 件 包 。 没有 保证 能够 使 这些软 件包 不含 有 bug,请 你高 度注 意!
运行 Breezy或 Dapper版本 的 Ubuntu意味 着可 能会 遇到 严重 软件 错误 。包 含 一个 稳定 版Ubuntu的多 启动 方案 可有 效控 制风 险,另一 个技 巧是 使用 chroot,详 情参 阅 chroot,第8.6.35节。 後者 可以 实际 在不 同的 终端 同时 运行 不同 版本 的 Ubuntu。在 Ubuntu基础,第 2章 中我 们将 讲解 有关 Ubuntu发行 版的 一些 基本 概念,之 後,我 将向你 介绍 一些 基本 信息 以帮 助你 与最 新软 件快 乐相 处,并 从 restricted和 universe组 件中获 益。 心急 的读 者可 以直 接翻 到 Ubuntu生存 命令,第 6.3节。 祝你 升级 愉快 !第 2章 -Ubuntu基 础本章 讲述 非开 发人 员需 要掌 握的 Ubuntu系统 基础 知识 。有 关知 识的 权威 参考,请 参阅,
· DesktopGuide· Server· InstallGuide列表 见 参考 资料,第 15.1节。
如果 你想 查阅 简要 的,how-to” 解释 文档,可 直 接跳 到 Ubuntu软件 包管 理,第 6章 或 其它相 关章 节。 本章 的内 容取 自,UbuntuFAQ”,经 过较 大的 改编,以 适于 普通 Ubuntu系统 管理 者上 手。2.1Ubuntu文 件
2.1.1目 录结构Ubuntu软件 包位 于 Ubuntu镜像 站点 的目 录树 中,可通 过 FTP或 HTTP访问 它们 。下列 目录 存在 于任 何 Ubuntu镜像 站点 的 ubuntu目录 下:
dists/:::本目 录包 含,发行 版,( distributions),此 处 是 获 得 Ubuntu发布 版本( releases) 和 已 发 布 版 本 ( pre-releases)的 软 件包 的正 规途 径。有 些 旧软 件包 及 Contens-*.gzPackages.gz等文 件仍 在其 中。pool/:::所有 Ubuntu发布 版及 已发 布版 的软 件包 的新 的物 理地 址。
indices/:::维护 人员 文件 和重 载文 件。project/:::大部 分为 开发 人员 的资 源,如,project/experimental/:::本目 录包 含了 处于开 发中 的软 件包 和工 具,它们 均处 于 alpha测试 阶段 。用 户不 应使 用这 些软 件,因为 即使是 经验 丰富 的用 户也 会被 搞得 一团 糟。 project/orphaned/:::已不 再有 人维 护的 软件包,它们 已从 发行 版中 孤立 出来 。
7
2.1.2Ubuntu发 行版现在 在 dists目录 下有 三个 Ubuntu发行 版。 它 们 是,hoary” 发 行 版,,breezy” 发行 版,和,dapper” 发行 版。 有 时 还有 一个,edgy” 发行 版。 其 中也 包含 了一 个现 不再 支持 "warty"发行 版。
到 2007年 8月,Ubuntu发行 版本 又增 加了 feisty和 gutsy。2.1.3hoary发 行版hoary2005年 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节 )。2.1.4breezy发 行版breezy2005年 10月发 布。 现在,除 了上 述目 录,新上 载的 软件 包的 物理 存储 位置为 pool目录 ( pool目录,第 2.1.10节 )。 在 breezy下同 样有 main,restricted,universe和
multiverse子目 录,它们 的作 用与 hoary中的 一样 。2.1.5dapper发 行版dapper2006年 6月发 布。 提供 了长达 3年的 支持,新 版本以 Ubuntu6.06LTS(LongTermSupport)(长期 支持 ),它 针 对一 些大 组织 的需 求对 桌面 版和 服务 器版 都做 个一 定程 度上 的 增强。 新 上 载的 软件 包的 物理 存储 位置为 pool目 录 ( pool目录,第 2.1.10节 )。 在 dapper下同 样有 main,restricted,universe和 multiverse子目 录,它 们 的作 用与 hoary中的 一样。 2.1.6edgy发 行版
edgy发行 版反 映了 系统 的最 新开 发进 展。 欢迎 广大 用户 使用 并测 试这 些软 件包,同 时也 提醒你 们这 些软 件包 还不 完善 。使用 edgy发行 版的 好处 就是 你可 以获得 Ubuntu项目 的最 新 更新 — 不过 新东 西也 会出 新问 题,你得 好坏 兼收,-)
8
2.1.7Ubuntu发 布版其它仓库存在于 dists目录 下的 物理 目录 名,例如 breezy-updates和 breezy-security,就 是,附加的 仓库,。当 某个 Ubuntu发行 版处 于维 护阶 段。 将包 的必 要升 级和 安全 更新 放在 附加 的仓库 里。 其 附 加仓 库通 常有 ***-updates,***-security,***-proposed,***-backports。
2.1.8已 用过的发布版 代 号已使 用过 的发 行版 代号 有,Ubuntu4.10(TheWartyWarthog),Ubuntu5.04(TheHoaryHedgehog),Ubuntu5.10(TheBreezyBadger),Ubuntu6-06(TheDapperDarke)。2.1.9发 布版代号
· WartyWarthog多疣 的疣 猪,· HoaryHedgehog灰白 的刺 猬,· BreezyBadger活泼 的獾,· DapperDarke漂亮 的鸭 子,· EdgyEft躁动 的蜥 蜴
2.1.10pool目 录过去,软 件 包均 放在 dists目录 下相 应发 行版 的子 目录 中。 这 种 做法 产生 了许 多问 题,当 镜像站 点进 行新 版本 发布 时大 量带 宽被 消耗 。 现在 软件 包均 放进 一个 巨大 的,池子 ( pool),,按 照源 码包 名称 分类 存放 。为 了方 便管 理,
pool目录 下按 属性 再分 类 ( main,restricted,universe和 multiverse),分 类 下 面 再 按源码 包名 称的 首字 母归 档。 这 些 目录 包含 的文 件有,运 行于 各种 系统 架构 的二 进制 软件 包,生成 这些 二进 制软 件包 的源 码包 。 你可 以执 行命令 apt-cacheshowsrcmypackagename,查 看,Directory:” 行获 知每 个软 件包的 存放 位置 。例 如,apache软件 包存 放在 pool/main/a/apache/软件 包存 放在 lib*软件包数 量巨 大,它们 以特 殊的 方式 归档,例 如,libpaper软件 包存 放在pool/main/libp/libpaper/。诸如 apt等命 令访 问的 索引 文件 仍位于 dists目录 中。通常,你 大可 不必 注意 这些,新 版的 apt和旧版 dpkg-ftp会自 动处 理它 们。
2.1.11发 布源目录结构在每 个主 目录 树下 ( dists/dapper/main,dists/dapper/restricted、dists/dapper/universe,dists/dapper/multiverse/,等 )按 芯片 架构 又分 了子 目录,每个子 目录 中存 放着 在该 芯片 架构 下编 译的 二进 制软 件包 。
· binary-amd64/AMD64或 EM64T架构· binary-i386/所有 的使 用 Intel/AMD/等 处理 器的 PC,· binary-powerpc/AppleMacintoshG3,G4,和 G5· binary-sparc/SunUltraSPARC系统2.1.12源 代码
9
Ubuntu系统 中的 main,universe组件 有源 代码,不 仅如 此,许可 证条 款 规 定 系统 中所 有的程序 必须 和其 源代 码一 起发 行,或提 供源 代码 出售 。 通常 源代 码发 布在 source目录,该 目录 同时 处于 所有 架构 目录 中,更新 的源 码则在 pool目录 中( 参阅 pool目录,第 2.1.10节 )。 对 于 不 太 熟 悉 Ubuntu归档 目录 结构 的用 户想获得 源代 码可 以试试 apt-getsourcemypackagename命令 。
有些 软件 包,如 着 名的 pine,由 于 许可 证限 制,只 提 供源 码包 。( 最 近,pine-tracker软 件包提 供了 一个 简易 的安 装版 )安 装 源码 包的 方法 可参 阅 向系 统引 入软 件包,第 6.4.10节,打包,第 13.10节教 你如 何手 工创 建一 个软 件包 。restricted和 multiverse目录 中的 软件 包可 能不 提供 源代 码,因为 它们 没有 正式 加入Ubuntu系统 。
2.2Ubuntu软 件包管理系统2.2.1Ubuntu软 件包概述软件 包通 常包 含了 实现 一系 列相 关命 令或 特性 所必 须的 所有 的文 件。 Ubuntu软件 包采 用了和 Debian相同 的软 件包 格式,有 两种 类型 的软 件包,
· Binarypackages(二 进制 软件 包),它 包 含可 执行 文件,配 置 文件,man/info页 面,版权 声明 和 其它 文档 。 这 些软 件包 以 Ubuntu特定 的格 式发 布 ( 参阅 Ubuntu软 件包格 式,第 2.2.2节 ); 它 们 通 常 使 用,deb的扩 展名 以示 区别 。 这 种 二进 制软 件 包可使 用 Ubuntu工具 dpkg解包,详 情见 有关 帮助 页面 。· Sourcepackages( 源 码 包 ),包 含 一 个,dsc文件 它用 于描 述源 码包 ( 包 括下 列文 件的 名 称 ),一 个,orig.tar.gz文件 它是 未经 修改 的原 始源 代码 压缩 文件,以 及一个,diff.gz文件 它包 含了 该软 件包 Ubuntu化时 所做 的修 改。 dpkg-source工具 可用于 打包 /解包 Ubuntu源码 包,详情 可参 阅有 关帮 助页 面。软件 包管 理系 统安 装的 软件 包时 需要 使用,倚赖 关系,,它 由软 件包 维护 者声 明。 这些 信息记录 在与 每个 软件 包关 联的 control文件 中。 例 如,包 含 GNUC编译 器 ( gcc) 的 软 件包 依赖于 包含 链接 器和 汇编 器的 binutils软件 包。如 果用 户试 图在 没有 安装 binutils的情 况 下安装 gcc,软 件包 管理 系统 ( dpkg)将 会显 示一 条错 误信 息,告诉 你需 要安装 binutils,并停 止安装 gcc。( 不 过,倔强 的用 户可 以对 这个 信息 视而 不见,参阅 dpkg(8))。) 更 多 信息,参阅 下面 的章 节 软件 包依 赖关 系,第 2.2.8节 。Ubuntu软件 包管 理工 具可 用于,
· 操作 和管 理软 件包 或软 件包 的局 部内 容,· 帮助 那些 使用 有限 容量 载体 如软 盘传 输的 用户 分割 软件 包,· 帮助 开发 者将 开发 文件 打包 成软 件包,· 帮助 用户 从远 程 Ubuntu文档 站点 安装 软件 包。2.2.2Ubuntu软 件包格式
Ubuntu,软件 包,,或 称之 为 Debian包文 件( Debianarchivefile),包 含 了 可 执 行 文件,库文 件,和相 关程 序的 文档 。通 常 Ubuntu文件 的文 件名 以,deb结尾 。Ubuntu二进 制软 件包 内部 格式 描述见 deb(5)帮助 页面 。所 以要 操作,deb文件 请参阅 dpkg-deb(8)。
10
2.2.3Ubuntu软 件包命名约定Ubuntu软件 包命 名遵 循下 列约 定:fo_ver-ev_arch.deb一般这里的 fo是软件包的名称,ver是软件本身的版本号,rev是 Ubuntu修订版本号,
arch是目标架构名称。当然,文件很容易被改名;不过,你也可以通过运行下面的命令来找 出文件 filename实际是那个软件包:dpkg--infofilenameUbuntu修订 版本 号由 Ubuntu开发 者或 创建 这个 软件 包的 人指 定。 通 常,包 被修 改过 之後,
会把 修改 版本 号加 一,有些 也会 加上 ubuntu的标 志以 便和 Debian区分 开来 。2.2.4保 存本地配置有可 能被 本机 管理 员修 改的 文件 保存 在 /etc/目录 中。 Ubuntu策略 中规 定所 有对 本地 配置文件 的修 改都 可以 在软 件包 升级 过程 中被 保留 下来 。
在软 件包 的发 布中,如 果包 含默 认的 本地 配置 文件,这 个文 件就 被称 为,conffile” (默 认配置 )。 如 果不 得到 管理 员的 允许,软 件包 管理 系统 不会 对上 次 安装 之後 被修 改过 的默 认配置 进行 升级 ; 不 过,如 果 管理 员没 有改 动过 默认 配置,那 么 它就 会被 升级 成最 新软 件包 中的版 本。 这种 策略 几乎 总是 合理 的,它有 益于 把 默认 配置 的改 动减 到最 小。下面 的命 令可 以列 出一 个软 件包 中包 含那 些默 认配 置文 件:
dpkg--statuspackage文件 列表 位于,Conffiles” 的後 面。在,Ubuntu策略 手册,的,配置 文件,一节,可 以获 得有关 conffile(默 认配 置) 文件的更 多信 息( 参见 参考 资料,第 15.1节 )。
2.2.5Ubuntu维 护脚本Ubuntu维护 脚本 是一 种可 执行 脚本,它 在软 件包 安装 之前 或之 後自 动运 行。 它和 一个 名叫control的文 件一 起组 成 Ubuntu包文 件的,管理,部分 。这些 文件 是:
preinst::在 Ubuntu包文 件解 包之 前,运行 这个 脚本 。许 多,preinst” 脚本 的任 务是 停止作 用于 待升 级软 件包 的服 务,直到 软件 包安 装或 升级 完成 。 postinst::该脚 本的 任务 是完 成 Debian包文 件解 包文 件的 配置 工作 。通 常,,postinst”脚本 等待 用户 输入,或 提 醒用 户,如 果 他接 受当 前默 认值,要 记 得软 件包 安装 完後 返回 重 新配置 。许 多,postinst” 脚本 负责 执行 有关 命令 为新 安装 或升 级的 软件 重启 服务 。
prerm::该脚 本负 责停 止与 软件 包关 联的 daemon服务 。它 在 删除 软件 包关 联文 件之 前执 行 。postrm::该脚 本负 责修 改软 件包 链接 或文 件关 联,或 删 除由 它创 建的 文件 。( 参阅 虚拟 软 件包,第 2.2.7节 ) 。
1
当前,所 有的 管理 文件 都存 放在 /var/lib/dpkg/info目录 。与 foo软件 包相 关的 文件,名字以,foo” 打头,以,preinst”,,postinst” 等为 扩展 名。 目 录中的 foo.list文件 列 出了 foo软件 包安 装的 所有 文件 。( 注 意这 些文 件的 位置 在由 dpkg来确 定,可能 会因 Debina版本 而异 ) 2.2.6软 件包优先级每个 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” 。
2.2.7虚 拟软件包虚拟 软件 包是 一个 统称,它 代 指一 组具 有相 近功 能的 软件 包中 的任 何一 个。例 如,tin和 trn都是 新闻 组阅 读软 件,当系 统中 某个 程序 需要 使用 新闻 阅读 器时,它 们中 的任 何一 个都 可以满 足要 求。 因 此,这 两个 软件 包一 起提 供了 一个 叫做 news-reader(新 闻阅 读器 ) 的,虚拟软 件包,。
12
类似 的,许多 exim,exim4,sendmail,postfix这样 的软 件包 都提 供邮 件传 输代 理的 功能 。因此,它 们 在一 起提 供了 一 个称为 mail-transport-agent(邮 件传 输代 理) 的 虚 拟包 。 安装了 它们 中的 任何 一个,都 会满 足其 它倚 赖于 邮件 传输 代理 功能 的程 序的 需要 。 Ubuntu有个 机制,如 果系 统中 提供 同种 虚拟 包的 软件 包安 装了 多个,系 统管 理员 可以 指定一个 为首 选软 件。相 关 的命 令是 update-alternatives,更 详 细的 描述 参阅 Alternative命令,第 6.5.3节。2.2.8软 件包依赖关系Ubuntu软件 包管 理系 统依 赖声 明,它描 述了 这一 事实,一 些软 件包 需要 其它 软件 包被 安装才能 正常 运行 或运 行得 更好 。
· 软件包 A依 赖 ( depends)软 件包 B:要 运行 A必须 安装 B。在 有些 情况 下,A不仅依赖 B,还 要求 B的特 定版 本。 版 本依 赖通 常有 最低 版本 限制,A更依 赖于 B的最 新版而 非某 个特 定版 本。· 软件包 A推 荐 ( recommends)软 件包 B:软 件包 维护 者认 为所 有用 户都 不会 喜欢 缺少某 些功 能的 A,而 这些 功能 需要 来提 供。· 软件包 A建 议 ( suggests) 软 件包 B,中某 些文 件与 A的功 能相 关,并 能 够增 强 A
的功 能。 这种 关系 通过 声明 软件 包 增 强 Enhances软件 包 A来表 示。· 软件包 A与软 件包 B冲 突 ( conflicts),如 果系 统中 安装了 B那么 A无 法 运 行 。,Conflicts” 常和,replaces” 同时 出现 。· 软件包 A替 换 ( replaces)软 件包 B,B安装 的文 件被 A中的 文件 移除 和复 盖了 。· 软件包 提 供 ( provides)软 件包,A中包 含了 B中的 所有 文件 和功 能。
上述 术语 使用 方法 的更 详细 的信 息参 阅 PackagingManual和 thePolicyManual。注意,dselect可以对 recommends和 suggests类软 件包 进行 细操 作,apt-get只会 简单 的下载 安装 depends类软 件包 而不管 recommend和 suggests类软 件包 。这 两个 程序 均正 式使用 APT作为 其後 台。
2.2.9何 为,

Pre-depends”

dpkg总是 在配 置一 个有 依赖 关系 的包 之前,先 对被 依赖 的包 进行 配置 。 然而,dpkg通常将归 档文 件随 意解 包,不顾 依赖 性。 (从 归档 文件 中解 包并 提取 文件,将 他们 放置 到正 确的 位 置 。) 如果 是 Pre-Depends包,则 在所 依赖 的其 它包 被解 包和 配置 之前,Pre-Depends包不 会被 解包 。 使用 这种 依赖 的目 的是 为了 将依 赖复 杂性 降至 最底 。2.2.10软 件包状态软 件 包 有 各 种 状 态,,unknown”,,install”,,remove”,,purge” 和,hold” 。 这 些,希望,标记 描述 了用 户打 算如 何操 作这 些软 件包 ( 既 可以 使用 dselect的,Select” 菜单,也 可 以直接 调用 dpkg) 。它们 的意 思是,
· unknown-用户 并没 描述 他想 对软 件包 进行 什么 操作 。· install用户 希望 对软 件包 进行 安装 或升 级。· remove-用户 希望 删除 软件 包,但不 想删 除任 何配 置文 件。· purge用户 希望 完全 删除 软件 包,包括 配置 文件 。· hold-用户 希望 软件 包保 持现 状,例如,用 户希 望保 持当 前的 版本,当 前的 状态,
13
当前 的一 切。2.2.11阻 止软件包升级有两 种方 法阻 止软 件包 升级,使用 dpkg,或 者在 Woody中使用 APT。
使用 dpkg,首 先导 出软 件包 选择 列表,dpkg--get-selections\*>selections.txt接着 编辑 文件 selections.txt,修 改想 要恢 复的 软件 所在 的行,例如 libc6,则 将:
libc6install改为,libc6hold
保存 文件,将 它装入 dpkg数据 库:dpkg--set-selections<selections.txt或者,如 果你 知道 要恢 复的 软件 包名 称,执行,
echolibc6hold|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软件 包。
2.2.12源 码包源码 包发 布在 source目录 中,既可 以手 工下 载可 以使 用apt-getsourcefoo
获取 它们 (参阅 apt-get(8)帮 助 页 面 )。2.2.13编 译源码包对于 foo软件 包,从 源 码编 译需要 foo_*.dsc,foo_*.tar.gz和 foo_*.diff.gz文 件 ( 注 意,对于 由 Debian开发 的软 件包,没 有,diff.gz文 件 )。
14
当你 得全 了这 些文 件,如果 你这 安装了 dpkg-dev软件 包,运行,$dpkg-source-xfoo_version-revision.dsc它将 软件 包解 压到 一个 名为 foo-version的目 录。
使用 下列 命令 创建 二进 制软 件包,$cdfoo-versionsu-c"apt-getupdate;apt-getinstallfakeroot"$dpkg-buildpackage-rfakeroot-us-uc
然後,#su-c"dpkg-i../foo_version-revision_arch.deb"安装 新编 译的 软件 包。 参阅 ["../ch-package.zh-cn.html:向系 统引 入软 件包,第 6.4.10
节 ]。2.2.14新 建 Ubuntu软 件包创建 新软 件包 的详 细信 息,参阅 NewMaintainers'Guide,该文 档在 maint-guide包 中,或浏览 http://www.debian.org/doc/manuals/maint-guide/。
2.3Ubuntu系 统升级Ubuntu的设 计目 标之 一就 是提 供一 个平 滑,安全 和可 靠的 升级 过程 。软 件包 系统 在升 级过程中 会将 重要 改变 警告 系统 管理 员,在某 些情 况下,会 要系 统管 理员 来做 决定 。 你也 应该 阅读 发布 手记 ( ReleaseNotes),它 存 在 于 所 有 的 Ubuntu光盘 中,也 可 以通 过 互联网 访问 http://www.Ubuntu.com/releases。Ubuntu软件 包管 理,第 6章提 供了 升级 的实 用指 南,本 节只 提供 一个 大纲,由 包 工具 开 始 。2.3.1dpkg
它是 操作 软件 包文 件的 主要 工具 ;参 阅 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系统 取代 。
15
2.3.2APTAPT( theAdvancedPackagingTool) 是 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。另一 个资 源是 APTHOWTO,如 果安 装了 apt-howto包,可在 /usr/share/doc/Debian/apt-howto/中找 到它 。
apt-getupgrade和 apt-getdist-upgrade只 获 取,Depends” 类 软 件 包,它 忽 略,Recommend”和,Suggests” 类软 件包,不 想这 样的 话,可使用 dselect。2.3.3dselect这个 程序 是 Ubuntu软件 包管 理系 统中 菜单 驱动 的用 户界 面。特 别适 用于 首次 安装 和大 面 积升级 。参 阅 dselect,第 6.2.4节。更多 信息,可 安装 install-doc包後 阅读 /usr/share/doc/install-doc/dselect-beginner.en.html或 dselectDocumentationforBeginners。2.3.4不 停机系统升级
Ubuntu系统 的内 核 ( 文 件系 统) 支 持 替换 使用 中的 文件 。 当一 个软 件包 升级 时,如 果由 该软件 包提 供的 服务 在当 前运 行级 下正 在运 行,则 该 服务 将被 重新 启动 。 Ubuntu系统 不要 求用户 在 single-user模式 下进 行不 停机 升级 。2.3.5下 载和缓存,deb文 件如果 你手 工下 载包 文件 到硬 盘( 这 完全 没有 必要,请 阅 读上 面有关 dpkg-ftp或 APT的内 容 ),当你 完成 软件 包安 装工 作後,可 以从 系统 中删 除,deb文件 。如果 是使用 APT,这 些 文件 会缓 存在 /var/cache/apt/archives/目录 中。 你 可 以在 完成 安 装後删 除它 们( apt-getclean)或 者将 它们 拷贝 到另 一个 机器 的 /var/cache/apt/archives/目录 中以 备以 後的 安装 。
2.3.6升 级记录dpkg会对 软件 包的 解包,配 置,删除,完 全删 除进 行记 录,但不 能( 目前 是这 样) 记录 在包操 作的 过程 中活 跃终 端的 行为 。 最简 单的 解决 方法 是在 运行 dpkg,dselect,apt-get等工 具的 会话 中加入 script(1)程序 。
2.4Ubuntu系 统引导进程2.4.1init程 序同所 有的 Unix一样,Ubuntu启动 要执行 init程序 。 init的配 置文 件( /etc/inittab)
16
中指 定的 第一 个执 行脚 本应 该是 /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节 和 DebianPolicyManual中的 Systemrunlevelsandinit.dscripts
Ubuntu没有 使用 BSD风格 的 rc.local文件 。2.4.2运 行级别完成 系统 启动 进程 後,init启动 所有 在默 认运 行级 别配 置为 启动 的服 务。 默认 运行 级别 由/etc/inittab中的 id给出 。 Ubuntu使用 id=2。
Ubuntu使用 下列 的运 行级 别:· 1(单 用户 模式 single-usermode),· 2到 5(多 用户 模式 multi-usermodes),· 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/exim4reload
2.4.3自 定义运行级别自定 义运 行级 别是 一个 高级 的系 统管 理任 务。 下面 的指 示面 向大 部分 服务 。在运 行级 R启动 service服务,创 建一 个符 号链 接 /etc/rcR.d/Sxyservice到目 标文 件../init.d/service。 xy是序 列号,是 由软 件包 在安 装的 时候 分配 给服 务的 。
17
停止 服务,重 命 名符 号链 接,将 它的 名字 用 K开头 来代 替 S,它的 序列 号是 100减 xy。 可以使 用象 sysv-rc-conf或 ksysv这样 的运 行级 别编 辑器 来方 便的 修改 服务 。在一 个特 定的 运行 级别 目录,可 以 将某 个服 务的 S符号 链接 删除 来代 替重 新命 名它 。 这 种作法 不停 止该 服务,但 将 把该 服务 留在 一种 sysv-rc初始 化系 统认 为的,漂浮,状态,当运行 级别 改变 时,该服 务即 不会 启动,也 不会 停止,它将 保留 它原 有的 状态,不 管它 是在运行 或者 没有 运行 。 注意,处 于 这种 漂浮 状态 的服 务,如 果 它所 属的 软件 包升 级了,这 个服务 将启 动,不管 它在 升级 前是 否运 行。 这是 当前 Debian系统 一个 已知 的缺 点。 注 意,还需 要在 运行 级 0和 6之间 保留 服务 的 K符 号 链 接 。 如果 删除 了一 个服 务的 所有 符号 链接,在升 级该 服务 的软 件包 时,所有 的符 号链 接将 恢复 到它 们的 出厂 默认 模式 。不 建议 对 /etc/rcS.d/目录 里的 符号 链接 做任 何改 变。
2.5多 样性支持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不会 在升 级後 复盖 它们,除 非系 统管 理员 明确 要求 复盖 。
2.6国 际化Ubuntu系统 是国 际化 产品,不 论是 在控 制台 下还 是在 X下,它都 提供 多种 语言 的字 符显 示和 输 入 支 持 。许 多 文 档,帮 助 页 面 以 及 系 统 消 息 都 被 翻 译 成 各 种 语 言 。在 安 装 过 程 中,Ubuntu提示 用户 选择 安装 语言 (有 时是 当地 语言 变量 )。
如果 你安 装的 系统 提供 的语 言特 性支 持不 能满 足你 的需 要,或 者你 要改 变当 前语 言或 安装 别的键 盘方 案以 适应 你的 语言,参 阅 本地 化( localization),第 9.7节。2.7Ubuntu和 系统内核参见 Ubuntu下的 Linux内核,第 7章。
2.7.1编 译非 Ubuntu源 码包内核代码首先 你必 须了 解 Ubuntupolicy有关 头文 件的 规定 。UbuntuClibraries是依 据 内 核 头文 件最新 stable发布 版创 建的 。
跟随 内核 源码 发布 的内 核头 文件 位于 /usr/include/linux/include/。如果 你编 译某 个程 序所 用的 内核 头文 件比 libc6-dev提供 的头 文件 还新,在 编 译时 你必 须 在命令 行中 加上 -I/usr/src/linux/include/。 这 些 情况 是存 在的,例 如,对于 automounterdaemon( amd)软 件包 而言,当 新内 核改 变了对 NFS的内 部操 作方 式,amd需要 知道 这些 改变。 这时 就需 要引 用新 的内 核头 文件 。
18
2.7.2自 定义内核创建 工 具对于 希望 (或 必须 )使 用自 定义 内核 的用 户,推荐 下载 kernel-package软件 包。 该软 件包包含 了创 建内 核包 的脚 本。 有 了 它,新 建 Ubuntu内核 镜像 包只 需在 内核 源码 目录 的一 级 目录运 行
#make-kpgkernel_image在内核源码所在目录的顶层,执行下述命令可获得有关帮助 #make-kpg-help或阅读 maekpg(8)帮助页面以及 Ubuntu下的 Linux内核,第 7章。如果 所需的 kernel-source-version( version代 表 内 核 版 本 号 )包 不 存 在,用 户 就 得 从 Linux
文件 站点 分别 下载 最新 的( 或需 要的 )内 核源 码。 有关 kernel-package包的 用法 详述 见于 /usr/doc/kernel-package/README。2.7.3多 系统引导器要使 用多 系统 引导 器如 grub或 loadlin,请 将编 译好的 Linux内核 bzimage拷贝 到相 应的地方 (例 如 /boot/grub或 MS-DOS分 区 )。2.7.4制 做引导软盘Ubuntu的 mkrboot软件 包可 以帮 你制 作一 张自 定义 启动 软盘,软 件包 中的 Shell脚本按
syslinux格式 制作 启动 软盘 。对 于那 些使用 MS-DOS格式 化的 软盘,其 主引 导 扇区 的记 录将被 修改 为直 接引导 Linux(或 是其 它在 盘中 syslinux.cfg文 件 里 的 操 作 系 统 )。 该 软 件 包中的 其它 脚本 可制 作急 救盘 甚至 重建 基本 系 统。2.7.5模 块加载规定
Ubuntu的 modconf软件 包提 供了 一个 shell脚本 ( /usr/sbin/modconf),它 可 以 用 来 自 定义内 核模 块配 置。 该脚 本使 用菜 单界 面,用户 通过 它给 出系 统中 可挂 载设 备驱 动的 有关 细节,它 再将 这些 细节 信息 生成 /etc/modules.conf文件 ( 其 中列 出了 别名 aliases和其 它 参数,用 于 连接 各种 模块 ),该 配置 文件 用来 加载 /etc/modutils/目录 下和 /etc/modules( 其中列 出了 需要 在系 统启 动时 加载 的模 块) 目录 的相 关 模块 。
新版 的配 置帮 助文 件 Configure.help可为 构造 自定 义内 核提 供帮 助,同 样,modconf软 件包中 也有 一系 列帮 助文 件( 位于 /usr/share/modconf/目录 下),告诉 你如 何对 模块 设定 合适的 参数 。参 阅 模块 化的 2.4内核,第 7.2节中 的例 子。2.7.6卸 载旧内核
uname-ra可用 来检 查当 前运 行的 内核 版本,以 确 定是 否与 你打 算卸 载的 内核 版本 相同 。 因此你 可以 使用 如下 命令 删除 不想 要的 内核 镜像 包,#dpkg--purge--force-remove-essentiallinux-image-NNN(当 然,要将 NNN替换 成你 的内 核版 本号 和修 订版 号。)
19
第 3章 -Ubuntu系 统 安 装 提 示Ubuntu的官 方安 装文 档位 于 http://doc.ubuntu.com/ubuntu/install/,里 面包 含了amd64,hppa,i386,ia64,powerpc和 sparc的安 装文 档。 中文 翻译 在http://wiki.ubuntu.org.cn/ubuntu/install/
3.1常 规 Linux安 装提示如果 你在 寻找 精简 的 Ubuntu安装 光盘,请 别忘 记检 查http://archive.ubuntu.com/ubuntu/dists/{发行 版 }/main/installer架构 }/current/images/netboot/。
使用 最新 的开 发版 的 Ubuntu会增 加遇 到严 重软 件错 误的 风险 。在 机 器上 安装 一个 稳定 版 本的 Ubuntu然后 使用 多重 启动 方案 可有 效控 制风 险。 或 者 使用 更安 全的 chroot技 巧,参 阅chroot,第 8.6.35节。 后者 可实 现同 时在 不同 的控 制台 运行 多种 版本 的 Ubuntu3.1.1硬 件兼容性
Linux兼容 绝大 多数 PC硬件,而 且 几乎 可以 安装 在任 何系 统架 构上 。 对 我而 言它 的安 装 过程和 Windwos95/98/Me一样 简单 。可 兼容 的硬 件列 表也 在不 断增 加。如果 你有 一部 笔记 本电 脑,可以 去 LinuxonLaptops查找 对应 品牌 和型 号的 安装 指导 。我推 荐的 台式 机硬 件通 常,比较 保守,,
· 用于 工作 目的 时最 好选 SCSI而不 是 IDE,IDE/ATAPIHD适于 个人 使用 。· IDE/ATAPICD-ROM(或 CD-RW) 。· 最好 选 PCI而不 是 ISA,特别 是网 卡 (NIC)。· 选用 便宜 的 NIC。 TulipforPCI,NE2000forISA都不 错。· 初学 Linux安装 时避 免使 用 PCMCIA( 笔 记 本 电 脑 )。· 别使 用 USB键盘,鼠 标,.....除非 你想 证明 自己 的实 力。
如果 你的 机器 特别 慢,最好 把硬 盘插 到另 一个 速度 快些 的机 器上 安装 。 3.1.2确 定 PC硬 件和芯片组在安 装过 程中,可 能 会要 你确 定电 脑的 硬件 或芯 片组 等。 有 时 了解 这些 信息 并非 易事,这 儿有个 方法,
· 打开 机箱 亲自 看看 。· 记下 显卡 芯片,网 卡芯 片,串口 和 IDE端口 周围 的芯 片上 印的 数字 。· 记下 印在 PCI和 ISA插卡 背面 的名 称。3.1.3在 Ubuntu下 确定 PC硬 件在 Linux系统 中使 用下 列命 令,可获 得机 器当 前使 用的 硬件 及配 置的 相关 信息 。$pager/proc/pci/proc/interrupts$pager/proc/ioports
20
$pager/proc/bus/usb/devices在安 装过 程中 按 Alt-F2进入 控制 台,可运 行这 些命 令获 得帮 助。在最 初的 安装 结束 之后,通 过安 装可 选的 软件 包,比如 pciutils,usbutils和 lshw,你就可 以获 得更 多的 系统 信息 。
$lspci-v|pagerlsusb典型 的中 断用 途 *IRQ0:timeroutput(8254)
IRQ1:keyboardcontroller*IRQ2:cascadetoIRQ8– IRQ15onPC-ATIRQ3:secondaryserialport(io-port=0x2F8)(/dev/ttyS1)*IRQ4:primary(io-port=0x3F8)(/dev/ttyS0)IRQ5:free[soundcard(SB16:io-port=0x220,DMA-low=1,DMA-high=5)]*IRQ6:floppydiskcontroller(io-port=0x3F0)(/dev/fd0,/dev/fd1)
IRQ7:parport(io-port=0x378)(/dev/lp0)*IRQ8:rtcIRQ9:softwareinterrupt(int0x0A),redirecttoIRQ2*IRQ10:free[networkinterfacecard(NE2000:io-port=0x300)]IRQ11:[(SB16-SCSI:io-port=0x340,SB16-IDE:io-port=0x1E8,0x3EE)]*IRQ12:PS/2Mouse
IRQ13:free(was80287mathcoprocessor)*IRQ14:primaryIDEcontroller(/dev/hda,/dev/hdb)IRQ15:secondary(/dev/hdc,/dev/hdd)对于 旧的 非 PnPISA卡,你 可 能需 要在 BIOS中设 定 IRQ5,IRQ10和 IRQ11为非 PnP设备。
对于 USB设备,它 们在 /proc/bus/usb/devices中以 Cls=nn的形 式列 出:*Cls=00:UnusedCls=01Audio(speakeretc.)*Cls=02:Communication(MODEM,NIC,...)Cls=03HID(HumanInterfaceDevice:KB,mouse,joystick)
*Cls=07:PrinterCls=08Massstorage(FDD,CD/DVDdrive,HDD,Flash,...)*Cls=09:Hub(USBhub)Cls=255Vendorspecific如果 设备 类别 ( deviceclass)不 是 255,则 Linux可支 持该 设备 。
3.1.4在 其它 OS下 确定 PC硬 件还可 从其 它操 作系 统中 获取 硬件 信息 。 安装 其它 商业 版 Linux,当 前它 们在 硬件 侦测 方面 做得 比 Debian好。
21
安装 Windows。用 鼠标 右键 点,我的 电脑,在菜 单中 选属 性 /设备 管理,可 获得 硬件 配置 信息。 记 下 所有 的资 源信 息如 IRQ,I/O端口 地址 和 DMA。 有 些 旧的 ISA卡可 能要 在 DOS下配置 。 3.1.5Lilo神 话"Lilo受限 于 1024柱面 。 "大错 特错 !
Ubuntu之后 使用 的新 版 lilo支持 lba32。 只 要 主板 的 BIOS版本 支持 lba32,lilo就 可以突 破 1024柱面 的限 制。如果 你使 用的 是旧 版 lilo.conf,请 确定 在你 的 lilo.conf文件 开头 的某 处加 了一 行命 令指示 系统 读取,lba32” 。参 阅 /usr/share/doc/lilo/Manual.txt.gz。
3.1.6GRUBGNUHurd项目 组提 供的 新的 系统 引导 工具 grub可使 用于 DebianWoody系统 。<pre><nowiki>要编 辑 GRUB菜单,可 编辑 /boot/grub/menu.lst文件 。参 阅 设置 GRUB启动 参数,第
8.1.6节获 取有 关启 动参 数设 置信 息,它和 lilo的设 置方 法不 太一 样。3.1.7选 择引导软盘你可 以使 用 bootcd包,来制 作一 个可 以启 动的 软盘,当 然我 们更 推荐 你直 接使用 LiveCD来作 为维 护系 统的 工具 。 对 于 最新的 dapper版本,你 可以 直接 使用 DesktopCD从光 盘启 动来维 护,或者 安装 系统 。 3.1.8安 装系统这方 面的 官方 文档 在 http://doc.ubuntu.com/ubuntu/install/i386,中 文翻 译在,http://wiki.ubuntu.org.cn/ubuntu/install/i386
在安 装 /dev/hda的 mbr时,我 喜 欢将 lilo装在 诸如 /dev/hda3的位 置,这 样 做可 以 减小引 导信 息被 覆盖 的风 险。 下面 是我 在安 装过 程中 所做 的选 择。 *MD5passwords"yes"
shadowpasswords"yes"*Install"advanced"(dselect**)andselect**取消 emacs(如果 它被 选中 了 ),nvi,tex,telnet,talk(d);选上 mc,vim,nano-tiny和 elvis-tiny任选 一个 。参阅 dselect,第 6.2.4节。 即使 你是 个 Emacs迷也 不要 在安 装阶 段使 用它,nano可满足你 的需 要。也 不要 安装 其它 庞大 的软 件包 如 Tex( Potato曾在 此阶 段设 置它 为默 认安 装 ) 。
参阅 应急 的编 辑器,第 11.2节了 解此 时安 装 nano-tiny或 elvis-tiny的原 因。*在每 个软 件包 安装 对话 框中,回 答所 有的 配置 提问 均 =,y” (替 换当 前值 )exim:选第 2项,因为 我使 用 ISP的 SMTP服务 器发 送邮 件。有关 dselect的更 多信 息,参阅 dselect,第 6.2.4节。
3.1.9网 络所需的主机 名 和 IP地 址
2
LAN配置 的例 子( Csubnet:192.168.1.0/24),<pre><nowiki>Internet|+---外部 ISP提供 POP服务 (使 用 fetchmail访问 )
|AccesspointISP提供 DHCP服务 和 SMTP中继 服务|,Cablemodem(Dialup)|,LAN网关 外部 端口,eth0( IP由 ISP的 DHCP提供 )
使用 老式 笔记 本电 脑( IBMThinkpad,486DX250MHz,20MBRAM)运行 Linux2.4内核,提 供 ext3文件 系统 支持运行,ipmasq” 软件 包( 安装 它的 补丁,NAT和 firewall)运行,dhcp-client” 软件 包配 置 eth0(覆 盖 DNS的设 定)运行,dhcp” 软件 包配 置 eth1运行,exim” 作为 smarthost( mode2)
运行,fetchmail” 设一 个较 长的 时间 值( fallback)运行,bind” 作为 高速 域名 服务 器,在从 LAN连入 Internet时作为 认证 域名 服务 器,在从 LAN中连 入网 中某 个域 时运行,ssh” 使用 端口 22和 8080(从 任何 地点 连接 )运行,squid” 作为 缓存 服务 器连 接 Debian包文 档服 务器 ( APT需要 连接 它)LAN网关 内部 端口,eth1( IP=192.168.1.1,固 定)
|+---LANSwitch(100baseT)---+| |LAN中一 些固 定 IP客户 端 LAN中一 些 DHCP客户 端(IP==192.168.1.2-127,固定 )(IP==192.168.1.128-200,动态 )
参阅 网络 设置,第 10章 了解 更多 网络 设置 方面 的信 息。 参阅 建立 路由 网关,第 10.12节 了解 更多 LAN网关 服务 器设 置方 面的 信息 。3.1.10用 户帐号为了 让机 器访 问起 来有 一致 的感 觉,我的 系统 中开 头几 个帐 号通 常是 不变 的。
我首 先创 建的 用户 帐号 名是,admin” ( uid=100)。 我 通过 该帐 号转 发所 有的 rootemail。该帐 号加 入到 adm用户 组 ( 参阅,为什 么 GNUsu命令 不支 持 wheelgroup”,第 9.2.2节 ),这 个 用 户 组 为 成 员 提 供 大 量 root特权 的命 令,通 过 su或 sudo命令 就能 使用 PAM。详情 参阅 添加 一个 用户,第 4.1.3节。3.1.11创 建文件系统
3.1.11.1硬 盘分区我更 喜欢 将不 同的 目录 树分 别装 在不 同的 分区 下,这样 可以 将系 统崩 溃造 成的 损失 减到 最 小。 例如,/ ==(/+/boot+/bin+/sbin)
==50MB+
23
/tmp==100MB+/var/home==100MB+/usr700MB+withX/usr/local==100MB
/usr目录 的大 小很 大程 度上 取决 于 Xwindow应用 程序 和文 档的 数目 。如 果只 运行 控制 台终端 /usr可以 小到 300MB,但 如果 你装 了大 量 Gnome应用 程序 2GB-3GB也很 正常 。当/usr/增长 得太 大,将 /usr/share/移到 别的 分区 是最 有效 的解 救方 法。 对 新 的 Linux2.4内核 包,/目录 的大 小可 能要 超过 200MB。例如,当 前我 的 Internet网关 服务 器的 硬盘 使用 情况 如下 (由 df-h命 令 输 出 ):
FilesystemSizeUsedAvailUse%Mountedon/dev/hda3300M106M179M38%//dev/hda7100M12M82M13%/home/dev/hda8596M53M513M10%/var/dev/hda6100M834k94M1%/var/lib/cvs/dev/hda9596M222M343M40%/usr
/dev/hda10130M436M23%/var/cache/apt/archives/dev/hda111.5G204M1.2G14%/var/spool/squid(有 块大 空间 留给 /var/spool/squid作为 下载 软件 包时 代理 服务 器的 缓冲 区。)下面 的 fdisk-l输出 提供 了一 个分 区分 配方 案:
#fdisk-l/dev/hda#comment/dev/hda11 41309928+6FAT16#DOS/dev/hda2428432508083Linux(notused)/dev/hda3* 85126317520#Main/dev/hda412762938026805Extended
/dev/hda5143128488+82Linuxswap/dev/hda6144157105808+83/dev/hda7158171Linux/dev/hda8172253619888+83/dev/hda9254335Linux/dev/hda10336417619888+83
/dev/hda114186291602688+Linux里面 有一 个未 使用 的分 区。 留作 安装 第二 个 Linux或为 增长 的目 录树 提供 扩充 余地 。3.1.11.2挂 载文件系统下面 的 /etc/fstab文件 可完 成上 述分 区的 挂载 工作,#/etc/fstab:静态 的文 件系 统信 息。#filesystemmountpointtypeoptionsdumppass/dev/hda3/ ext2defaults,errors=remount-ro01
/dev/hda5noneswapsw 0
24
proc/procprocdefaults0/dev/fd0/floppyautodefaults,user,noauto/dev/cdrom/cdromiso9660defaults,ro,user,noauto0#各分 区保 持独 立/dev/hda7/homeext2defaults02
/dev/hda8/var/dev/hda6/var/lib/cvsext2defaults02#noatime会提 高读 取文 件时 的访 问速 度/dev/hda9/usrext2defaults,noatime02/dev/hda10/var/cache/apt/archivesext2defaults
#为代 理缓 存设 置的 大分 区/dev/hda11/var/spool/squidext2rw 02#备份,可 启动,DOS/dev/hda1/mnt/dosvfatrw,noauto0#作为 备份 用的 可启 动的 Linux系统 (未 设置 )
/dev/hda2/mnt/linuxext2rw,noauto0#nfs挂载 点mickey://mnt/mickeynfsro,noauto,intr0goofy://mnt/goofy#minnie://mnt/minniesmbfsro,soft,intr,credentials={filename}02
对于 NFS,我 使 用 noauto,intr以及 默认 的 hard项。 如 果 有死 连接,挂 载 进程 可能 会 死掉,可以 使用 Ctrl-C恢复 。对于 使用 Samba连接 的 Windows机器 ( smbfs),rw,auto,soft,intr是个 好方 案,参阅Samba设置,第 3.5节。
对 于 软 驱,使 用 noauto,rw,sync,user,exec可以 防止 因退 盘前 未执 行卸 载命 令而 造成 文 件损坏,但 它会 降低 写盘 速度 。 3.1.11.3自 动挂载自动 挂载 的要 点:
· 加载 vfat模块,从 而 /etc/auto.misc可使 用 -fstype=auto参数,#在试 图访 问软 驱之 前 modprobevfat...或者 使这 个设 置自 动完 成,#echo"vfat">>/etc/modules...重启 系统 。
· 设置 /etc/auto.misc如下,floppy-fstype=auto,sync,nodev,nosuid,gid=100,umask=000:/dev/fd0...此处 gid=100表示,users” 。· 在 /home/user中创 建链 接文 件 cdrom和 floppy,分 别指 向
/var/autofs/misc/cdrom和 /var/autofs/misc/floppy。
25
· 将 user加入,users” 用户 组。3.1.11.4挂 载 NFS外部 LinuxNFS服务 器 ( goofy) 处 于 防火 墙 ( gateway) 之 后 。 在 我 的 LAN内部,安 全 策略非 常宽 松,因为 只有 我自 己一 个用 户。 为了 访问 NFS,NFS服务 器端 要按 如下 方式 加上
/etc/exports:#/etc/exports:theaccesscontrollistforfilesystemswhichmaybeexportedtoNFSclients.Seeexports(5)./(rw,no_root_squash)
除安 装和 激活 NFS服务 器及 客户 机的 软件 包外,这 一步 对激 活 NFS服务 器也 是必 要的 。为了 简洁 明了,我 通常 创建 一个 单独 的 2GB分区,用 它进 行实 验或 玩玩 别的 Linux系 统 。我有 选择 的共 享了 两个 系统 的 swap和 /tmp分区 。 多 分 区方 案很 难满 足这 种要 求。 如 果 只想装 一个 运行 简单 控制 台模 式的 系统,分 区留 500MB就绰 绰有 余了 。
3.1.12DRAM内 存指导下列 是有 关 DRAM的简 单指 导。4MB:Linux内核 运行 的最 低配 置。16MB:控制 台系 统运 行的 最低 配置 。
32MB:简单 X系统 运行 的最 低配 置。64MB:GNOME/KDE系统 运行 最低 配置 。128MB:流畅 运行 GNOME/KDE。256MB:如果 你银 子充 裕干 嘛不 呢? DRAM很便 宜了 。使用 启动 选项 mem=4m(或 liloappend="mem=4m")可 以看 看只 用 4MB内存 时系 统如 何运行。 如果 机器 的 BIOS比较 旧且 内存 数大 于 64MB启动 时就 得加 lilo启动 参数 。3.1.13Swap空 间我按 下面 的指 导原 则来 划分 swap空间,
· 每个 swap分区 均 <128MB(使 用旧版 2.0内 核 ),<2GB(使 用最 新内 核)· 总容 量 =(机 器内 存大 小的 1到 2倍) 或( 128MB到 2GB之间 )· 将它 们分 散于 不同 的硬 盘,在 /etc/fstab中可 使用 sw,pri=1选项 挂载 它们 。这样可 确保 内核 以 RAID方式 使用 swap分区,最 大限 度地 发挥 swap的性 能。· 如果 可能,使 用硬 盘中 间的 扇区 。
尽管 你不 一定 真的 需要,但 为系 统设 置多 一些 swap空间 ( 128MB)总 要好 点,至少 运行 有内存 漏洞 的坏 程序,系 统会 先慢 下来 而不 是马 上死 机。 3.2Bash设 置我按 自己 的喜 好修 改 shell启动 脚本,
/etc/bash.bashrc换成 你的 喜好/etc/profile保持 发布 版设 定 (\w->\W)
26
/etc/skel/.bashrc换成 你的 喜好/etc/skel/.profile换成 你的 喜好/etc/skel/.bash_profile换成 你的 喜好~/.bashrc换成 你的 喜好,会 改变 所有 用户 的设 置~/.profile换成 你的 喜好,会 改变 所有 用户 的设 置~/.bash_profile换成 你的 喜好,会 改变 所有 用户 的设 置可以参考我提供的脚本样例。我喜欢系统看起来清清楚楚,所以将 umask设为 02或 02。PATH依次由以下配置文件设定:/etc/login.defs-在 shell之前 设定 PATH/etc/profile(会 调用 /etc/bash.bashrc)~/.bash_profile(会 调用 ~/.bashrc)
3.3鼠 标设置3.3.1PS/2鼠 标对于 ATX主板 上使 用 PS/2接口 的鼠 标,信号 通路 如下,
mouse->/dev/psaux->gpm->/dev/gpmdata=/dev/mouse->X这里,创 建 指向 /dev/gpmdata的符 号链 接 /dev/mouse,有 助 于 简 化 配 置 操 作 。( 例 如,如果你 决定 不再 使用 gpm服务,只 需在 删掉 gpm服务 后,将符 号链 接 /dev/mouse指向/dev/psaux。 )
信号 通路 使得 对键 盘和 鼠标 插拔 操作,只 要重 启 gpm就可 以生 效,不必 重启 X!处于 gpm输出 与 X输入 之间 的信 号通 路协 议有 两种 执行 方式,,ms3” (使 用 Microsoft3-buttonserialmouse协议 )和,raw” (对 于已 连接 的鼠 标使 用相 同的 协议 ),此 处选 择的协议 将决 定 X配置 中使 用的 协议 。
目前 dapper发行 版并 没有 默认 安装 gpm,如 果需 要使 用它,手 工安 装如 下:sudoapt-getinstallgpm下面 我将 示范 一下 如何 配置 Logitech3-button(传统 Unix风格 的鼠 标) PS/2鼠标,
3.3.1.1使 用 ms3协 议方式/etc/gpm.conf|/etc/X11/xorg.conf=========================+======================================device=/dev/psaux|Section"InputDevice"responsiveness=Identifier"ConfiguredMouse"
repeat_type=ms3|Driver"mouse"type=autops2Option"CorePointer"append=""| "Device""/dev/mouse"sample_rate=Option"Protocol""IntelliMouse"|EndSection
27
如果 使用 这种 方式,设 置鼠 标类 型只 需编 辑 gpm.conf,X的设 置将 保持 不变 。参 阅 我的样例 脚本 。 3.3.1.2使 用 raw协 议方式/etc/gpm.conf|/etc/X11/xorg.conf
=========================+======================================device=/dev/psaux|Section"InputDevice"responsiveness=Identifier"ConfiguredMouse"repeat_type=raw|Driver"mouse"type=autops2Option"CorePointer"append=""| "Device""/dev/mouse"
sample_rate=Option"Protocol""MouseManPlusPS/2"|EndSection如果 使用 这种 方式,设 置鼠 标类 型可 编辑 gpm.conf,同 时也 会改 变 X的设 置。3.3.1.3如 何设置不同的鼠标
gpm的设 备类 型 autops2可以 自动 检测 出市 面上 大多 数 PS/2鼠标 。不 幸的 是它 也不 是万能的,而 且目 前的 发布 版中 并不 包括 它,这时 可在 gpm.conf中试 试 ps2或者 imps2。想看看 gpm支持 哪些 类型 的鼠 标可 输入,gpm-thelp。参 阅 gpm(8)。如果 使用 的是 2键 PS/2鼠标,可 选 上 X协议 的 Emulate3Buttons项。 协 议 中 2键鼠 标和 3键鼠 标的 区别 在于 每次 按下 中间 键时,是 自动 检测 还是 自动 模拟 信号 传给 gpm。
对于 在 X协议 使用 raw协议 方式,第 3.3.1.2节 或不 使用 gpm,可 使用 下面 的设 置:· IntelliMouse:串口 鼠标 ( gpm转换 器使 用,ms3” )· PS/2:PS/2鼠标 (通 常首 先试 试这 项)· IMPS/2:任何 PS/2鼠标 ( 2键,3键或 滚轴 鼠标 )· MouseManPlusPS/2:LogitechPS/2鼠标
·,..更多 信息 可浏 览 MouseSupportinXFree86。典型 的 Microsoft滚轴 鼠标,有 报导 说这 样设 置最 好:
/etc/gpm.conf|/etc/X11/XF86Config-4=========================+======================================device=/dev/psaux|Section"InputDevice"responsiveness=Identifier"ConfiguredMouse"repeat_type=raw|Driver"mouse"type=autops2Option"CorePointer"
append=""| "Device""/dev/mouse"sample_rate=Option"Protocol""IMPS/2"|Option"Buttons""5""ZAxisMapping""45"|EndSection
对于 某些 最新 的 Toshiba超薄 笔记 本,在 System-Vinit脚本 中设 置 gpm先于 PCMCIA
28
激活 可防 止系 统锁 死。 听起 来古 怪不 过这 是真 的。 3.3.2USB鼠 标请确 定你 设置 了所 有必 须的 kernel选项,并 在编 译的 时候 编入 内核 或编 成模 块了,
· 在,InputCoreSupport” 选项 下:o"Inputcoresupport"(CONFIG_INPUT,input.o),"Mousesupport"(CONFIG_INPUT_MOUSEDEV,mousedev.o),· 在,USBsupport” 选项 下:
o"SupportforUSB"(CONFIG_USB,usbcore.o),"PreliminaryUSBdevicefilesystem"(CONFIG_USB_DEVICEFS),o"UHCI"or"OHCI"(CONFIG_USB_UHCI||CONFIG_USB_UHCI_ALT||CONFIG_USB_OHCI,usb-uhci.o||uhci.o||usb-ohci.o),o"USBHumanInterfaceDevice(fullHID)support"(CONFIG_USB_HID,hid.o),and
o"HIDinputlayersupport"(CONFIG_USB_HIDINPUT)这儿,模 块的 名称 为小 写。 如果 你没 使用 devfs,则 需按 下面 的方 法创 建一 个设 备节 点 /dev/input/mice:
#cd/devmkdirinput#mknodinput/micec1363对于 典型 的滚 轴 USB鼠标,配 置如 下:
/etc/gpm.conf|/etc/X11/XF86Config-4=========================+======================================device=/dev/input/mice|Section"InputDevice"responsiveness=Identifier"GenericMouse"repeat_type=raw|Driver"mouse"type=autops2Option"SendCoreEvents""true"
append=""| "Device""/dev/input/mice"sample_rate=Option"Protocol""IMPS/2"|Option"Buttons""5""ZAxisMapping""45"|EndSection
更多 信息 可浏 览 theLinuxUSBProject。3.3.3触 摸屏( Touchpad)尽管 触摸 屏在 笔记 本电 脑上 默认 是模 拟 2键 PS/2鼠标 的行 为,仍可 从 tpconfig软件 包获得 对这 类设 备的 完全 操控 。例 如在 /etc/default/tpconfig中设 置 OPTIONS="--
tapmode=0"可屏 蔽讨 厌的,clickbytap” 行为 。 按 如 下方 法设 置 /etc/gpm.conf可以 控制台 下使 用触 摸屏 和 USB外接 鼠标 。
29
device=/dev/psauxresponsiveness=repeat_type=ms3type=autops2append="-M-m/dev/input/mice-tautops2"sample_rate=
3.4NFS设 置安装 NFS要设 置 /etc/exports。#apt-getinstallnfs-kernel-serverecho"/*.domainname-for-lan-hosts(rw,no_root_squash,nohide)"\
>>/etc/exports详情 见我 的样 例脚 本,3.5Samba设 置参考 资料,· http://www.samba.org/· samba-docpackage以,share” 方式 安装 Samba比较 容易,因 为 安装 过程 会创 建 WfW-type共享 驱动 器。 但 最好使 用,user” 模式 来配 置它 。可以 用 debconf或 vi来设 置 Samba:#dpkg-reconfigure--priority=lowsambavi/etc/samba/smb.conf
详情 参阅 我的 脚本 样例,可通 过 smbpasswd向 smbpasswd文件 添加 一个 新用 户:#smbpasswd-ausername
确保 使用 的加 密密 码有 恰当 的兼 容性 。 按下 表中 相应 的值 设定 oslevel(数 字越 大,服务 器的 优先 级越 高):0:Sambawithalooseattitude(willneverbecomeamasterbrowser)1:WfW3.1,Win95,Win98,Win/Me?
16:WinNTWS3.5117:4.032:WinNTSVR3.5133:4.0255:Sambawithmightypower
确认 用户 是共 享目 录所 属组 的成 员,并且 对目 录赋 予了 执行 权限 。
30
3.6打 印机设置传统 打印 方法 是 lpr/lpd。 新 的 CUPS系 统 ( CommonUNIXPintingSystem) 提 供 了另 一 方法 PDQ,详 情参 阅 LinuxPrintingHOWTO。3.6.1lpr/lpd
对于 lpr/lpd的打 印缓 冲池 ( typespoolers)( lpr,lprng和 gnulpr),如 果 它 们 连 接 的是 PostScript或 text-only打印 机( 最基 本的 打印 机) 可按 如下 方式 设置/etc/printcap:lp|alias:\:sd=/var/spool/lpd/lp:\
:mx#0:\:sh:\:lp=/dev/lp0:上述 各行 的意 思是,
· Headline:lp– spool名称,alias=alias· mx#0– 不限 最大 文件 尺寸· sh– 不打 印页 眉· lp=/dev/lp0– 本地 机印 机,或 port@host远程 打印 机如果 连接 的是 台 PostScript打 印 机,上 述 设 置 就 够 用 了 。如 果 是 Windows机器 通过 Samba
打印,上 述设 置也 适用 于任 何 Windows支 持 的 打 印 机( 不 支 持 双 向 通 信 )。你 必 须 在 Windows环境 中对 打印 机做 相应 的配 置。 如果 你没 有 PostScript打印 机,就 得 用 gs安装 过滤 系统 。 有 很多 自动 配置 工具 可用 于 配置 /etc/printcap,可 选择 下列 任何 一组,
· gnulpr,( lpr-ppd)和 printtool— 我用 这种· lpr和 apsfilter· 和 magicfilter· lprng和 lprngtool· 和 apsfilter· lprng和 magicfilter
想运 行 GUI配置 工具 如 printtool,需 要 root权限,参 阅 X下获 取 root权限,第9.4.12节。 printtool可创 建打 印缓 冲池,它 使用 gs模拟 PostScript打印 机,所以 要使用 PostScript打印 驱动 来访 问它 们。 在 Windows端,,AppleLaserWriter” 是标 准件 。3.6.2CUPS?
使用 aptitude安装 CommonUNIXPrintingSystem(或 CUPS?)和 所有 位于 "Tasks"->"Servers"->"PrintServer".(Sarge)下的 软件 包。 为了 得到 最佳 的结 果,你需 要对aptitude进行 如下 的设 置,"F10"->"Options"->"Dependencyhandling"->"[X]InstallRecommendedpackagesautomatically".KDE和 Gnome桌面 系统 提供 了简 易的 打印 机设 置。 如 果 安装 了 swat,你 也可 以用 任何 一 种浏览 器来 设置 。
31
$mybrowserhttp://localhost:631举个 例子,将 你的 打印 机联 接到 可访 问打 印机 列表 中,· 在主 页面 上点 击,Printers”,然 后点,AddPrinter”,· 输入 用户 名和 密码,进 入,root”,
· 按提 示添 加打 印机,· 返回,Printers” 页面,点,ConfigurePrinter”,· 设定 打印 纸尺 寸,分辨 率和 其它 参数 。更多 信息 可浏 览 http://localhost:631/documentation.html和http://www.cups.org/cups-help.html。
对于 2.4内核,参 见 并行 端口 支持,第 7.2.6节。3.7桌 面 PC的 CRONVixiecron是计 划任 务默 认安 装的 软件 。 除非 系统 是 7× 24小时 连续 运行,该 软件 并不能够 很好 的工 作。 对于 桌面 PC,需要 在安 装 cron软件 包的 基础 上再 安装 anacron来 解决这 个问 题。 fcron软件 包可 以作 为 anacron软件 包的 一个 替代 。参见 日程 安排 ( cron,at),第 8.6.27节 来配 置 CRON。3.8其 它主机安装提示
3.8.1初 始化安装完成 后 再安装其他 软 件包到现 在,你已 经拥 有一 个小 巧但 功能 颇强的 Debian。接 下来,可 以安 装那 些较 大的 软件 包了。 · 运行 tasksel。参 阅 安装 tasks,第 6.2.2节。
可按 需选 择,oEnd-user– XwindowsystemDevelopment– CandC++o – PythonDevelopment– Tcl/Tk
oMiscellaneous— TeX/LaTeXenvironment对于 其他 软件 包,我 喜 欢把 tasksel作为 安装 指导 来用,查 看 <TaskInfo>了解 有关 任务 的安 装列 表 然后 用 dselect来选 择安 装。· 运行 dselect。
在此,你 最想 做的 事就 是选 择钟 爱的 编辑 器和 其它 需要 的程 序。 你可 以同 时安 装 Emacs的多个 变种 。 参 阅 dselect,第 6.2.4节 和 流行 的编 辑器,第 11.1节 。 你也 可以 将某 些默认 的软 件包 替换 成特 定版 本。 olynx-ssh(而不 是 lynx)...
32
·,..我通 常编 辑 /etc/inittab来简 化关 机步 骤。...#WhattodowhenCTRL-ALT-DELispressed.
ca:12345:ctrlaltdel:/sbin/shutdown-t1-a-hnow...3.8.2模 块在初 始安 装期 间可 进行 设备 驱动 模块 配置 。以 后还 可使 用 modconf进行 配置,它 是基 于菜单界 面的 工具,可 用 来配 置那 些在 初始 安装 时未 曾配 置的 模块 或完 成新 内核 安装 后的 配置 工作。 所 有 预 加 载 ( preloading)模 块 的名 称要 加入 到 /etc/modules列表 。也 可 以使 用 lsmod和depmod进行 手工 控制 。
对于 2.4版内 核别 忘了 在 /etc/modules中加 上几 行来 处理 IP伪装 ( FTP等 )。 参 阅 模块化 的 内核,第 7.2节,特别 是 网络 功能,第 7.2.3节。3.8.3CD-RW基 本步骤对于 在 2.4版内 核中 使用 IDE接口 的 CD-RW,编 辑下 列文 件:
/etc/lilo.conf(添加 append="hdc=ide-scsiignore=hdc",执行 lilo激活 )/dev/cdrom(创建 链接 #cd/dev;ln-sfscd0cdrom)/etc/modules加入 "ide-scsi"和 "sg"。如 果需 要可 再加 上 "sr"。 )详情 参阅 刻录 机,第 9.3节。
3.8.4多 内存和关机自 动 断电编辑 /etc/lilo.conf,设 置 启动 提示 参数 如下,实 现 识别 大内 存 ( 适 用于 2.2版内 核) 和关机 自动 断电 (适 用于 APM),append="mem=128Mapm=onapm=power-offnoapic"
执行 lilo完成 上述 设置 。 对 称 多处 理器 内核 ( SMP-kernel) 需 要 apm=power-off,而 对 我那堆 糟糕 的 SMP硬件 而言 noapic也是 需要 的。 系统 启动 时,在启 动提 示符 后直 接输 入这些参 数效 果也 一样 。参 阅 其它 用于 启动 提示 符的 技巧,第 8.1.5节。在 2.4版内 核中,如 果 APM是作 为模 块编 译的,可 在系 统启 动后 运行 #insmodapmpower_off=1或设 置 /etc/modules:
#echo"apmpower_off=1">>/etc/modules还可 以这 样,编 译 新版 内核 时加 入 ACPI支持 可达 到同 样的 效果,而 且这 种方 式更 适合 SMP(只 有较 新的 主板 才支 持 ACPI)。 对 于 较 新 的 主 板 2.4版内 核可 以直 接检 测到 大内 存。
3
CONFIG_PM=yCONFIG_ACPI=y...CONFIG_ACPI_BUSMGR=mCONFIG_ACPI_SYS=m
在 /etc/modules中按 如下 顺序 添加 参数,ospm_busmgrospm_system或者 重新 编译 内核,在 配 置时 将上 述内 核选 项均 设为,y” 。 总 之,有 了 ACPI支持 就不 再 需要任 何启 动提 示参 数。 3.8.5无 法访问某些站 点 的怪问题如果 内核 开启 ECN,对 于 某 些 使 用 劣 质 路 由 器 的 站 点,会 出 现 无 法 访 问 的 问 题 。新 的 dapper发行 版默 认关 闭了 ECN,检 查 ECN状态 可使 用:
#cat/proc/sys/net/ipv4/tcp_ecn...或#sysctlnet.ipv4.tcp_ecn将它 关闭,
#echo"0">/proc/sys/net/ipv4/tcp_ecn...或#sysctl-wnet.ipv4.tcp_ecn=0每次 启动 时禁 止 TCPECN,可 编辑 /etc/sysctl.conf,加 上:
net.ipv4.tcp_ecn=03.8.6PPP拔 号设置安装 pppconfig软件 包,设置 PPP拨号 访问 。
#apt-getinstallpppconfigpppconfig...按提 示配 置 PPP拨号#adduseruser_namedip...允许 进行 PPP拨号 访问用户 ( user_name)进 行 PPP拨号 访问,$ponISP_name#开始 PPP访问,接 通你 的 ISP...享受 Internet$poffISP_name#停止 PPP访问,ISP_name可选详情 参阅 设置 PPP接口,第 10.2.4节。
34
ADSL用户 使用 pppoeconf,来 配置 PPPOE拨号 访问 。#apt-getinstallpppoeconfpppoeconf...按提 示配 置 PPPoe拨号
3.8.7/etc/中 的其它配置文 件Ubuntu标准 安装 不包 含 /etc/cron.deny文件,想 添加 可拷 贝 /etc/at.deny。第 4章 -Ubuntu指 南这一 节为 真正 的新 手提 供一 个熟 悉的 Ubuntu世界,如 果您 已经 使用 了一 段时 间的类 unix操作 系统,那 么您 应该 已经 了解 我在 这里 所说 的一 切。 那么 请用 这个 来做 一个 实战 检验 。 4.1开 始了在您 的电 脑上 安装 完 Ubuntu系统 以后,您 需 要学 习一 点东 西以 便使 用它,让 我们 来给 您 做一个 快速 的培 训。 4.1.1用 超级用户登录 到 命令提示符在重 新启 动系 统的 时候,您 处 在一 个图 形的 登录 界面,或 者 字符 界面 的登 录界 面,这 个 取 决于您 初始 安装 时所 选择 的发 行版 本,简单 的说,如 果您 现在 处在 图形 登录 界面,那么 按下
Ctrl-Alt-F1来获 得字 符界 面。假设 您的 主机 名是 foo,那么 登录 提示 符看 起来 是这 样的,foologin:
输入 用户 名也 就是 你安 装时 设置 的用 户名,我 们 假设 用户 名为 ubuntu,如 果采 用 oem方 式安装,则 用户 名为 oem,然 后按 回车 键,然后 会提 示输 入密 码,就是 您在 安装 过程 中所 输入的 密码 。 在 Ubuntu系统 中,按 照 Unix的习 惯,密 码 是不 可见 的。 然 后系 统就 会输 出 欢迎 信息 而且 给出 $的命 令提 示符 等待 您的 输入 。foologin:ubuntu
Password:Linuxbackup2.6.15-25-686#1SMPPREEMPTWedJun1411:34:19UTC2006i686GNU/LinuxTheprogramsincludedwiththeUbuntusystemarefreesoftware;theexactdistributiontermsforeachprogramdescribedinthe
individualfilesin/usr/share/doc/*/copyright.UbuntucomeswithABSOLUTELYNOWARRANTY,totheextentpermittedbyapplicablelaw.Youhavenewmail.
35
Lastlogin:TueJul413:24:052006ontty3ubuntu@foo:~$现在 输入 sudo-sH,会 再次 输入 密码,输 入相 同的 登录 密码 后,回 车,切 换 到 root帐 号,
ubuntu@foo:~$sudo-sHsudo:pleaseusesinglecharacteroptionsPassword:root@@foo:~#
您现 在已 经准 备好 通过 root的命 令提 示符 进行 系统 的管 理。这个 root帐户 也被 称为 超级 用户或 者特 权用 户。 拥有 这个 帐户,您 将可 以做 任何 事情,· 读,写和 删除 任何 文件 而不 用去 理会 它们 所要 求的 权限· 设置 文件 的归 属,以及 系统 里面 任何 文件 的访 问权 限· 登录 到任 何帐 户而 不需 要他 们的 密码通过 和别 人共享 root用户 的密 码来 共享 root帐户 是一 个非 常糟 糕的 想法 。而 使 用程 序比 如sudo(8)是共 享管 理权 限的 好方 法。请注 意,优 先 使用 非特 权用 户登 录被 认为 是一 个好的 Unix习惯,哪 怕是 您要 进行 管理 活动,在必 要的 时候 您也 可以 使用 sudo,super,或者 su-c来 获得 有限的 root权 限 。 See更 安全地 工作 – sudo,第 9.2.4节,
4.1.2设 置最小的新手 环 境我认 为学 习一 个电 脑系 统就 像学 习一 门新 的外 语。尽 管 书本 指南 是有 帮助 的,但 是 您需 要 练习使 用帮 助工 具。 在这 个情 况下,我 认为 安装 一些 额外 的软 件包 是一 个好 主意,比 如 mc,vim,lynx,doc-linux-text,anddebian-policy.
#apt-getupdate.#apt-getinstalmcvimlynxdoc-linux-textdebian-policy.如果您已经安装了这些软件包,那么什么都不需要安装了。 4.1.3添 加一个用户在安 装过 程中,您 通常 已经 创建 了一 个非 特权 用户 来接 收发 送给 root帐户的 e-mail。 因此您 也不 希望 用这 个特 殊的 帐户 来进 行下 面的 训练,那 么您 需要 创建 另外 一个 帐户 。 假设 您希 望新 帐户 的名 字叫 penguin,输入,root@foo:root#adduserpenguin
...回答 所有 的问 题这样 就可 以了 。 在更 进一 步之 前,我们 先来 学习 一点 东西
36
4.1.4在 不同的控制台 之 间切换在默 认的 Ubuntu系统 中,有 6个独 立的 伪终 端,比 如,您 可以把 PC的 VGA字符 终端 当作 6个可 以选 择的 VT-100终端 来使 用。 从一 个切 换终 端到 另外 一个,你 只需 要同 时按 下左 Alt键 和 F1–,F6键。 任 何 一个 伪终 端都 可以 让不 同的 用户 独立 登录 。 多 用户 环境 是 Unix的一个 很优 秀的,使 人迷 恋的 特性 。
如果 你偶 然的 在装有 X装口 系统 的系 统上 按下了 Alt-F7,控 制台 就会 切换 到图 形界 面,然后 再按下 Ctrl-Alt-F1可以 重新 回到 字符 界面 。您 可以 尝试 在在 不同 的控 制台 之间 切换,然后 再换 回到 原来 的那 个,您慢 慢就 会习 惯于 这样 做。4.1.5怎 样关闭机器就像 任何 其它 现代 的操 作系 统一 样,任何 文件 操作 都会 在内 存当 中缓 存数 据,Ubuntu操作系统 也需 要一 个适 当的 过程,让 电脑 电源 关闭 之前 保证 这些 文件 的一 致性,您 可以 在 root命令 提示 符下 使用 下面 的命 令来 关闭 系统 。 #shutdown-hnow
上面 是在 正常 的多 用户 模式 下面 的方 法。 如果 您是 处在 单用 户模 式,您可 以在 root用户 的命令 提示 符下 使用 下面 的命 令,#poweroff-i-f
可选 择的 其它 方式,比 如您 可以用 Ctrl-Alt-Delete来关 闭系 统默认 系统 会自 动关 闭电 源,如果 APM和 ACPI选项 在 BIOS和 Linux内核 里面 都配 置有 问题的话,等 待 系统 在屏 幕上 输出 "Systemhalted"之后 您就 可以 关闭 电源 了。 可 以 看 多内 存 和关机 自动 断电,第 3.8.4节获 得详 细信 息。
4.1.6玩 的时间现在 您已 经准 备好 使用 Ubuntu系统 了,而 不 用担 心有 任何 冒险,因 为您 使用 的非 特权 用 户penguin。让我 们先 登录 到 penguin用 户 。 如果 您现 在正在 root用户 的命 令提 示符 下面,输 入 exit
在 root用户 提示 符下 面关闭 root的 shell以后 我们 就返 回了 ubuntu用 户 提 示 符,再 次 输入 exit,返 回 登录 提示 符。 输 入 您刚 创建 的新 用户名 penguin和对 应的 密码 。 您将 会 获得如 下的 命令 提示 符 penguin@foo:penguin$
从现 在开 始,为了 简单 起见 我们 将使 用简 化的 命令 提示 符,我们 将使 用,· #:root的命 令提 示符· $非特 权用 户的 命令 提示 符我们 将先 用简 单的 方法 MidnightCommander(MC),第 4.2节来 学习 Ubuntu,稍后 使用
37
较好 的方 法 类 Unix工作 环境,第 4.3节。4.2MidnightCommander(MC)MidnightCommander(MC)是 Linux控制 台和 其它 终端 环境 中的 GNU,瑞士 军刀,。 这 给 予 了新手 一个 菜单 驱动 控制 台的 体验,它比 Unix标准 命令 容易 学的 多。
用命 令来 研究 Ubuntu系统 。 这 是 最好 的学 习方 法。 请 不 使用 键盘 而只 用鼠 标和 回车 键来 访问下 面的 地址,· /etc和它 的字 目录 。· /var/log和它 的字 目录 。· /usr/share/doc和它 的字 目录 。
· /sbinand/bin4.2.1提 高 MC为了让 MC在退 出的 时候 改变 工作 目录,您 需要 修改 ~/.bashrc(或 者 /etc/bash.bashrc,查看,bashrc),使 用 -P选项 在它 的 手册 里面 可以 获取 更详 细的 信息 mc(1).
4.2.2启 动 MC$mc在 MC中用 户可 轻而 易举 使用 菜单 完成 所有 的文 件操 作。 可 以按 F1获得 帮助,您 可以 只用 鼠标和 功能 键来 操作 MC。4.2.3MC里 的文件管理器默认 状态 下,所有 文件 列于 两个 目录 面板 。一 种实 用的 方式 是将 右边 窗口 设定 为,information”,用 来 查看 文件 访问 权限 等信 息。 下 面是 一些 基本 的击 键。 如果 gpmdaemon
在运 行,你还 可以 使用 鼠标 。(在 MC中进 行剪 切和 粘贴 操作 时别 忘了 按下 shift键 。)· F1:帮助 菜单· F3:内置 文件 阅读 器· F4:内置 编辑 器· F9:激活 折叠 菜单
· F10:退出 MidnightCommander· Tab:在两 个窗 口间 移动· Insert:为多 文件 操作 生成 文件 如拷 贝· Del:删除 文件 (小 心 — 请设置 MC为安 装删 除模 式)· Cursorkeys:与各 自的 名字 一致
4.2.4MC里 的命令行技巧· cd命令 可改 变焦 点屏 幕中 的目 录位 置。· Control-Enter或 Alt-Enter可以 将文 件名 拷贝 到命 令行 。在 编辑 命令 行时 可与 cp或 mv命令 结合 使用 。· Alt-Tab显示 焦点 文件 所属 文件 或目 录的 文件 名
38
· 可指定 MC两个 目录 窗口 的起 始目 录; 例如 mc/etc/root。· Esc+numberkey=====Fn(例 如 Esc+'1'=====F1,etc.;Esc+'0'====F10)· Esc-key====Alt-key(==Meta,M-);例如 Esc+'c'等价于 Alt-c4.2.5MC里 面的编辑器内置 编辑 器的 剪切 -粘贴 方式 很有 意思 。 按 F3在起 始处 做标 记,再 次按 F3在终 止处 做标 记,这时 中间 的选 中部 分会 高亮 显示 。 然 后 你可 以移 动光 标到 某处 按下 F6,被 选中 部分 就会 移到该 处。 如果 你按 下的是 F5,选 中部 分就 会拷 贝到 该处 。 F2用来 存盘,F10退出,所 有方向键 的作 为和 它们 的名 字一 样直 观。 该编 辑器 可直 接打 开某 个文 件:
$mc-efilename_to_editmcedit虽然 它不 是多 窗口 编辑 器,但 你 可利用 Linux多控 制台 的特 性达 到相 同的 效果 。 要 在窗 口 间进行 拷贝 操作,可 使用 Alt-Fn切换 虚拟 控制 台,然 后使 用,File->Insertfile” 或,File-
>Copytofile” 将一 个文 件中 的内 容拷 贝到 另一 个文 件。可指 定任 何外 部编 辑器 作为 内置 编辑 器。 许多 程序 使用 环境 变量 EDITOR或 VISUAL来决 定使 用哪 个编 辑器 。 如 果 你用 不惯 vim,可 在~/.bashrc中加 上几 行来 指定 新的 mcedit:
...exportEDITOR=mceditVISUAL=mcedit...
我强 烈推 荐将 它们 设定为 vim。在 Linux/Unix世界 里就 该使用 vi(m)命令 。4.2.6MC里 的阅读器非常 精巧 的阅 读器 。 它 是 在文 档中 搜索 单词 的利 器。 在 /usr/share/doc目录 下我 总是 用它,面对 大量的 Linux资料 用它 浏览 是最 快的 方法 。阅 读器 可以 直接 找开 文件,
$mc-vfilename_to_view4.2.7MC的 自动启动特性在文 件上按 Enter,会 激活 相关 的程 序操 作该 文件 。这是 MC的一 个极 方便 的特 点。
executablefile:执行 命令man,html将文 件内 容传 入阅 读器 程序tar,gz,debfile:象浏 览子 目录 一样 浏览 它的 内容
39
为了 使这 些阅 读器 和虚 拟文 件的 属性 能够 被查 看,不 要 将可 阅读 文件 设成 可执 行文 件。 可 在MC文件 菜单 中改 变文 件属 性或 使用 chmod命令 。4.2.8MC里 的 FTP虚 拟文件系统MC可通过 FTP访问 文件 。按 F9转到 菜单 栏,输入 ’ p’ 激活 FTP虚拟 文件 系统 。按
username:passwd@hostname.domainname格式 输入 URL,远 程文 件目 录就 会以 本地 目录 的方式显 示出 来。 在 URL里试 着用 http.us.debian.org/debian来浏览 Debian存 档 文 件 。看 Ubuntu文件,第2.1节 就知 道这 些是 怎么 被识 别的 了。
4.3类 Unix工 作环境尽管 MC让您 能够 做绝 大多 数的 事情,但 是利用 shell来学 习命 令行 工具,和 熟悉类 Unix系统 的工 作环 境还 是很 重要 的。4.3.1特 殊的按键组合在类 Unix环境 里,有一 些按 键有 特殊 的意 思。· Ctrl-U:擦除 一行 光标 前面 的部 分。· Ctrl-H:擦除 光标 前面 的一 个字 符。· Ctrl-D:终止 输入 。( 退出 shell,如 果您 正在 使用 shell的 话 )。· Ctrl-C:终止 当前 正在 运行 的程 序。
· Ctrl-Z:暂停 程序 。 (把它 放到 后台 运行 请看 command&,第 4.3.10.1节)· Ctrl-S:停止 向屏 幕输 出。· Ctrl-Q:重新 激活 向屏 幕输 出。默认的 shell,bash,有历 史编 辑和 tab补齐 功能 。
· up-arrow:开始 历史 命令 搜索 。· Ctrl-R:开始 增量 历史 命令 搜索 。· TAB:完整 的把 文件 名输 入到 命令 行。· Ctrl-VTAB:输入 TAB而不 是扩 展命 令行 。其他 一些 需要 记住 的按 键组 合。
· Ctrl-Alt-Del:挂起 或者 重新 启动 系统 初始 化安 装完 成后 再安 装其 他软 件包,第3.8.1节,· Left-click-and-dragmouse:选择 并且 拷贝 到剪 贴板 。· Clickmiddlemousebutton:使用 剪贴 板的 内容 粘贴 。· Meta-key(Emacsterminology)传统 的是 使用 Left-Alt-key.但是 有些 系统 使用Windows-key实现 Meta-key.
这里,为 了在 Linux字符 界面 下使 用鼠 标,您 需 要使用 gpm服务 。 查看 鼠标 设置,第 3.3节。 4.3.2基 本 Unix命 令让我 们来 学习 基本的 Unix命令 。 使用 非特 权用 来执 行下 面的 所有 的命 令。 penguin:
40
· pwdo显示 当前 工作 路径 。· whoami
o显示 当前 用户 名。· filefooo显示 foo文件 的属 性。
· type-pcommandnameo显示 命令 commandname所的 的地 方。which也可 以用 来做 这个,
· typecommandnameo显示 命令 commandname的信 息。· aproposkey-word
o找到 和 key-word相关 的命 令。man-k也可 以做 到· whatiscommandnameo显示 该命 令的 一句 话帮 助。 commandname.
· man-acommandnameo显示 命令 的解 释信 息。 commandname.(Unixstyle)· infocommandname
o显示 很长 的命 令解 释 commandname.(GNUstyle)lso列出 目录 内容 (非以,开始 的文 件和 目录 )
· ls-ao列出 目录 内容 (所 有的 文件 和目 录)· ls-A
o列出 目录 内容 。( 几 乎所 有的 文件 和目 录,略去 ".."and".")
41
· ls-lao列出 目录 所有 文件 和目 录的 详细 信息 。查 看 Ubuntu中的 文件 系统 概念,第4.5.2节。· ls-d*
o列出 当前 目录 下的 目录 名称,而 不是 目录 下的 内容 。· lsoffooo显示 文件 foo的打 开状 态。
· mkdirfooo在当 前目 录下 创建 一个 新的 目录 foo。· cdfoo
o切换 到当 前目 录下 或者 在变量 CDPATH中列 出来 的目录 foo。在 builtins(7)查看 命令 cd。· cd/o切换 到根 目录 。
· cdo切换 到用 户主 目录 。· cd/foo
o切换 到绝 对路 径 /foo所指 定的 目录 。· cd..o切换 到上 一级 目录 。
· cd~fooo切换 到用 户主 目录 下的 foo目录 去。· cd-
o切换 到上 一次 所去 的目 录。· </etc/motdpagero使用 默认 的分 页程 序查 看文 件 /etc/motd的内 容,参 照 command<foo,第4.3.10.9节。
42
· touchjunkfileo创建 一个 空文件 junkfile。· cpfoobar
o拷贝 一个 已有 的文件 foo到新 文件 bar。· rmjunkfileo删除 文件 junkfile
· mvfoobaro把已 有的 文件 foo重命 名为 bar· mvfoobar/baz
o把已 有的 文件 foo移动 到新 位置 并重 命名为 bar/baz。目录 bar必 须 存 在 。· chmod600fooo让已 经存 在的 文件 foo其他 人不 能读 写。( 所有 人都 不 能 执 行 )。
· chmod644fooo使文件 foo其他 的人 可以 读,但是 不能 写。( 所有 人 都不 能执 行)· chmod755foo
o使文件 foo其他 的人 能读 不能 写。( 所有 人都 可以 执行 )· topo全屏 显示 进程 信息 。输 入,q” 退出 。
· psaux|pagero用 BSD风格 输出 所有 正在 运行 的进 程的 信息 。参 照 command1|command2,第 4.3.10.2节。· ps-ef|pager
o用 system-V风格 来输 出所 有正 在运 行的 进程 的信 息。· psaux|grep-e"[e]xim4*"o显示 exim4进程,或 者 运行 exim的进 程。 输入 mangrep可以从 grep(1)的手册 页学 习正 则表 达式 。
· psaxf|pager
43
o用 ASCCI艺术 形式 来显 示运 行所 有进 程信 息。· kill1234o杀死 进程 号为 1234的进 程。 查看 中止 一个 进程,第 8.5.1节。
· grep-e"pattern"*.htmlo找到 当前 目录 下面 所有 以,html结尾 的文 件中 含有 "pattern"的行,并 显示它们 。· gzipfoo
o用 Lempel-Ziv(LZ77)压缩 算法 压缩 foo,生成 foo.gz。· gunzipfoo.gzo将文件 foo.gz解压 缩生成 foo。
· bzip2fooo将文件 foo.bz2解压 缩生成 foo。· tar-xvvffoo.tar
o从打 包文件 foo.tar解出 文件 来。· tar-xvvzffoo.tar.gzo从打 包压 缩的 文件 foo.tar.gz中解 开文 件。
· tar-xvvf--bzip2foo.tar.bz2o从文件 foo.tar.bz2解压 缩文 件。· tar-cvvffoo.tarbar/
o把目录 bar/的内 容打 包存 放到 foo.tar存档 中。· tar-cvvzffoo.tar.gzbar/o把目录 bar/的内 容打 包并 且压 缩存 放到 foo.tar.gz存档 中。
· tar-cvvf--bzip2foo.tar.bz2bar/o把目录 bar/中的 内容 打包 存放到 foo.tar.bz2存档 里面 。· zcatREADME.gz|pager
o实用 默认 的分 页显 示程序 pager来显 示压 缩文件 README.gz中的 内容 。
4
· zcatREADME.gz>fooo使用 文件 README.gz解开 后的 内容 创建 一个 文件 foo。· zcatREADME.gz>>foo
o把文件 README.gz解开 后的 内容 追加 到文件 foo的后 面( 如果 文件 不存 在 的话,就 会 创 建 一 个 )。· find.-namepatterno用 shell找到 匹配 pattern的 文 件 名 ( 慢 一 些 )。
· locate-d.patterno用 shell找到 匹配 pattern的文 件名 ( 使 用已 有的 规则 的数 据库,快 一 些) 。请用 上面 的这 些命 令来 查看 您的 系统 的目 录和 其他 的信 息,以 此 来熟 练一 些操 作。如 果 您 对上面 的这 些控 制台 命令 有任 何不 明白 的地 方,请 首 先阅 读帮 助手 册,比 如 下面 的命 令就 是 好的开 始,$manmanbash$manls
现在 也是 时候 启动 vim然后 按下 F1键了 。 您 最 少也 应该 阅读 开始的 35行。 然 后 把光 标移 动到 |tutor|,再 按下 Ctrl-]就可 以做 在线 测试 了。 查看 编辑 器,第 11章可 以学 到更 多关于编 辑器 的知 识。 请注 意许 多来 自于 GNU和 BSD的类 Unix命令 都会 在您 进行 如下 操作 的时 候( 或者 您没 有给出任 何参 数) 给出 简单 的帮 助:
$commandname--help-h您也 可以 参照 Ubuntu小技 巧,第 8章里 的例 子来 进行 自我 测试 。
4.3.3命 令执行现在 您已 经比 较了 解应 该如 何使 用 Ubuntu系统 了。让 我们 来更 深入 的了 解 Ubuntu系统 的命令 执行 结构 。 4.3.4简 单的命令一个 简单 的命 令是 如下 面的 序列 · 可变 的声 明 (可选 )
45
· 命令 的名 字· 参数 (可选 )· 重定 向 可选,>,>>,<,<<,等等 )· 控制 操作 (可选 &&||;换新 行 >,;,&,(,)想了 解更 多复 杂命 令的 解释 和应 用请 查看 命令 行处 理,第 13.2.6节。
4.3.5命 令执行和环境 变 量典型 的使用 shell来执 行命 令情 况如 下:$dateSunOct2608:17:20CET2003
$LC_ALL=fr_FRdatedimoct2608:17:39CET2003这里 date程序 是在 前台 执行 的。 环境 变量 LC_ALL是:
· 取消 设置 (系统 默认 的和 C)作为 第一 个命 令· 设置 为 fr_FR(Frenchlocale)作为 第二 个命 令。绝大 多数 的命 令并 没有 预先 定义 各种 环境 变量 。像 上面 的例 子选 择如 下方 式,$LC_ALL=fr_FR
datedimoct2608:17:39CET2003正如 您所 看到 的,命令 的输 出和 环境 变量 设置 有关,上 面产 生的 是法 语输 出。 如果 您 想这个环 境变 量在 子进 程中 也能 够得 到继 承的 话( e.g.,执行 shell脚 本 的 时 候 ),您 需 要 使用下面 的方 式。 $exportLC_ALL4.3.6命 令搜索路径当您在 shell提示 符里 面输 入一 个命 令的 时候,shell就会在 PATH环境 变量 所列 出的 目录里面 去查 找。 PATH环境 变量 的值 也被 叫做 shell的查 找目 录。在默 认安 装的 Debian中,用户的 PATH环境 变量 里面 也许 没有 包含 /sbin/。因 此如 果您 想运行 一些 命令 比如 /sbin/目录 下的 ifconfig,您 就 必须 在 PATH环境 变量 里面 包含 它。 PATH环境 变量 一般 是在 初始 化文 件 ~/.bash_profile里面 设置 的,参 看 Bash设置,第 3.2节 。
4.3.7命 令行选项一些 命令 带有 参数,参 数部 分以 -或者 --开始 的被 称做 选项 。可 以用 来控 制命 令的 行为 。$dateMonOct2723:02:09CET2003
46
$date-RMon,27Oct200323:02:40+0100这里 命令 行参 数 -R改变 了命令 date的表 现以 让它 输出 符合 RFC-2822的日 期字 符串 。
4.3.8Shell通 配符通常 您需 要用 命令 来处 理一 组文 件,但 是 您又 不想 输出 所有 的文 件名 。 shell通 配符 使得 这个成 为可 能。 · *
o这个 匹配 0个或 者多 个字 符。它不 会匹 配以 "."开始 的文 件名,·?o这个 仅匹 配一 个字 符。
· [...]o这个 匹配 []里面 的某 个字 符。· [a-z]
o这个 匹配 字符 a到 z之间 的某 个字 符。· [^...]o这个 匹配 任意 不包 含在 []里面 的字 符( 不包 含字 符 "^").
作为 练习 。请 尝试 着运 行下 面的 命令 并思 考一 下,$mkdirjunk;cdjunk;touch1.txt2.txt3.c4.h.5.txtecho*.txt*****txt2.txt$echo*
*****txt2.txt3.c4.h$echo*.[hc]*****c4.h$echo.******...5.txt$echo.[^.]*
.5.txt$echo[^1-3]******h$cd..;rm-rfjunk
4.3.9命 令返回值
47
每个 命令 都返 回一 个值 和它 返回 的状 态。 · 返回 0表示 命令 被正 确执 行· 返回非 的值 表示 命令 没有 正确 执行 。返回 值可 以在 命令 执行 后马 上用 shell用变 量 $?来访 问。
$[1===1];echo$?0$[1===2];echo$?1
请注 意,在 shell中的 逻辑 上下 文中 使用 这些 返回 值的 时候 success被看 做逻 辑值 TRUE。这个 多少 有一 点不 直观,因为 success等价 于值 zero。参看 Shell条件 表达 式,第 13.2.5节。4.3.10典 型的命令序列在我 们阅 读了 这些 惯用的 shell命令 以后,让 我们 试者 记住 它们 。参 看 Shell参数,第13.2.3节,Shell重定 向,第 13.2.4节,Shell条件 表达 式,第 13.2.5节,和 命令行处 理,第 13.2.6节。4.3.10.1command&
command在子 shell的 background运行 。 后 台 任务 让多 成程 序能 够运 行在 一个 shell里面 。管理 这些 后台 任务 的请 求需要 shell内建 的,jobs,fg,bg,和 kill。请 查看 bash(1)这一小 节中 的 "SIGNALS","JOBCONTROL","SHELLBUILTINCOMMANDS".的相 关内 容。4.3.10.2command1|command2
command1的标 准输 出被 直接 输入 到 command2的标 准输 入。 两个 命令 都可 能 并 行 地 运 行 。这个 被称作 pipeline。4.3.10.3command1;command2command1command2被有 序的 执行 。
4.3.10.4command1&&command2command1如果 执行 成功 的话 那么 再执行 command2。只 有当 command1并 且 command2都运 行成功 的话 上面 的命 令序 列才 会成 功返 回。 4.3.10.5command1||command2
command1被 执 行 以 后,如 果 不 成 功 的 话,command2也会 被执 行。当 command1或 者 command2有一 个执 行成 功的 话,上面 的序 列就 会返 回真 值。 4.3.10.6command>foo
48
把 command的标 准输 出重 定向 到文件 foo。( 覆 盖 内 容 )4.3.10.7command>>foo把 command的标 准输 出重 定向 到文件 foo。( 追 加 )
4.3.10.8command>foo2>&1同时把 command的标 准输 出和 标准 出错 信息 重定 向到 文件 foo。4.3.10.9command<foo
把 command的标 准输 入重 定向 到一 个文件 foo。$</etc/motdpager...(thegreetings)$pager</etc/motd...(thegreetings)
$pager/etc/motd...(thegreetings)$cat/etc/motd|pager...(thegreetings)
尽管 上面 4个方 法都 显示 同样 的内 容,但 是 最后 一个 多运 行了 cat命令 。 而 且不 必要 的浪 费了资 源。 4.3.11命 令别名您可 以给 一个 命令 序列 起一 个别 名。 比如,
$aliasla='ls-la'现在,la就成 了 ls-la命令 的简 写用 来列 出所 有文 件的 详细 信息 。您可 以用 type来显 示命 令的 详细 路径 或者 其他 身份 。比 如:
$typelslsishashed(/bin/ls)$typelalaisaliasedto`ls-la'$typeechoechoisashellbuiltin
$typefilefileis/usr/bin/file这里 ls在最 近被 查找 过了,而 file没有,因此 ls被 "hashed",i.e.,shell有一 个内 部 的记录 可以 用来 快速 的找到 ls的地 址。
49
4.4类 Unix文 本处理在类 Unix的系 统中,有几 个文 本处 理工 具经 常用 到。· 非正 则表 达式 的方 法有,
ohead显示 文件 的开 始部 分。tail显示 文件 的结 尾部 分。osort给文 件中 的每 一行 排序 。uniq删除 文件 中重 复的 行。otr转换 或者 删除 字符 。diff把文 件中 的内 容一 行一 行的 比较 。
· 基本 的正 则表 达式 Basicregularexpression(BRE):ogrep按模 式匹 配文 本。ed一个 原始 的行 编辑 器。osed一个 流编 辑器 。vi一个 屏幕 编辑 器。
oemacs一个 屏幕 编辑 器。· 扩展 的正 则表 达式 Extendedregularexpression(ERE)isused:oegrep按模 式匹 配文 本。awk进行 简单 的文 本处 理。 查看 Awk,第 13.3节,
operl做非 常难 以想 像的 文本 处理 。 查看 Perl,第 13.4节,查看 正规 表达 式的 置换,第 8.6.13节,精巧 的管 道命 令辅 助脚 本,第 8.6.18节,and短小的 Perl脚本,第 8.6.20节 可以 找到 一些 脚本 的例 子。4.4.1正 则表达式正则 表达 式用 在很 多文 本处 理工 具里 面。 它们和 shell的通 配符 比较 相似 (查 看 Shell通配符,第 4.3.8节),但是 它们 更复 杂也 更强 大。正则 表达 式是 由文 本字 符和 元 字符 组成 的,用 来 描述 匹配 模式 。元 字符 是有 特殊 意义 的字 符 。它们 有两 种主 要的 形式 BRE和 ERE,主 要取 决于 类 Unix文本 处理,第 4.4节里 面是 如 何描述 的。
在扩 展的 正则 表达 式( EREs)里 面 元 字符 包括 "\.[]^$*+?(){}|"。正 则表 达式表 示,· co这个 用来 匹配 非元 字符 "c".
· \co这个 用来 匹配 原本 的字 符 "c".·,
50
o这个 用来 匹配 任意 字符 包括 换行 符。· ^o这个 用来 匹配 字符 串的 开始 。
· $o这个 用来 匹配 字符 串的 结尾 。· \<
o这个 用来 匹配 一个 单词 的开 始。· \>o这个 用来 匹配 一个 单词 的结 尾。
· [abc...]o这个 字符 序列 用来 匹配 "abc..."中的 任意 字符 。· [^abc...]
o这个 否定 的字 符序 列匹 配所 有的 字符 除了 "abc...".· r*o这个 匹配 以 "r"开始 的后 面有 0个或 者多 个字 符的 字符 串。
· r+o这个 匹配 以 "r"开始 的后 面有 一个 或者 多个 字符 的表 达式 。· r?
o以 "r"开始 后面有 0个或者 1个其 他的 字符 。· r1|r2o匹配 "r1"或者 "r2"。
· (r1|r2)o匹配 "r1"或者 "r2"并且 把它 当作 一个 分 类 正则 表达 式。在 BREs里面 元 字符 "+?(){}|"不再 具有 它们 特殊 的含 义,而 是使 用的 有反 斜杠 的版 本"\+\?\(\)\{\}\|"。因 此分 组 (r1|r2)需要 被表 示成 \(r1|r2\)。 因为 emacs,虽 然基本 上是 BRE,但 是 它 把 "+?"当作 元字 符。因 此 不需 要特 别表 示它 们。查 看 替换 表达 式,第4.4.2节来 了解 构造 分组 是如 何使 用的 。
51
举个 例子,grep可以 用正 则表 达式 来搜 索文 本:$egrep'GNU.*LICENSE|Yoyodyne'/usr/share/common-licenses/GPLGNUGENERALPUBLICLICENSEGNUGENERALPUBLICLICENSEYoyodyne,Inc.,herebydisclaimsallcopyrightinterestintheprogram
4.4.2替 换表达式在替 换表 达式 里面,下 面的 字符 有特 殊的 含义,· &
o这个 会替 换正 则表 达式 所匹 配的 部分 。(在 emacs里面 用 \&)· \no这个 会替换 n-th括 号 正则 表达 式所 匹配 的内 容。
在 Perl里面,$n替换 了 \n,&也没 有特 殊的 含义 。举个 例子,$echozzz1abc2efg3hij4|\sed-e's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
zzz=1abc2efg3hij4=$echozzz1abc2efg3hij4|\sed-e's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'zzzefg3hij4===1abc$echozzz1abc2efg3hij4|\perl-pe's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
zzzefg3hij4===1abc$echozzz1abc2efg3hij4|\perl-pe's/(1[a-z]*)[0-9]*(.*)$/=&=/'zzz=&=
请特 别注 意这 些 括 号 正则 表达 式的 格式,以 及 这些 被匹 配的 文本 在文 本处 理工 具里 面是 如 何使用 的。 这些 正则 表达 式可 以用 来控 制光 标的 运动 和编 辑器 里面 的文 本替 换。 请阅 读所 有相 关手 册来 学习 这些 命令 。
4.5类 Unix文 件系统在 GNU/Linux和其 他的类 Unix操作 系统 里面 文 件 都被 放在 目 录 。 所有 的 文 件 和 目 录 都被排列 在一 棵很 大的 树里 面,即文 件层 次树,他 的根 是 /。这些 文件 和目 录可 以跨 多个 设备 。 mount(8)命令 可以 把一 些设 备挂 载到 文件 系统 树里 面来 。
52
反之 umount(8)可以 把设 备卸 载。4.5.1Unix文 件基础这里 是一 些最 基础 的:
· 文件 名是 区分 大小 写的,MYFILE和文件 MyFile是 不 同 的文 件。· 根目 录指 的是 /不要 把这 个,root” 和 root用户 相混 淆了 。 参 看 用超 级用 户登 录 到命令 提示 符,第 4.1.1节。· 任何 目录 都有 一个 可以 由任 意字 母或 者符 号组 成的 名字,但 是 /是 例 外 。 [31]根 目录是 一个 例外,它 的名 字是 /(读 做,slash"或者 根目 录) 它不 能被 重命 名。· 任何 一个 目录 都是 有下 面几 种形 式给 出的,完 全限制的文件名,绝 对文件名,或 者路 径,给 出所 有需 要经 过的 目录 序列 。这 三种 形式 是等 价的 。所 有的 绝对 文件 名都以 /目录 开始,在 目录 和目 录或 者目 录和 文件 之间 用 /隔开 。 最 开始 的 /是一 个目 录 的名字,但 是后 面的 仅仅 是文 件名 的分 隔符 。上面 的这 些话 看起 来让 人很 费解 。那 么看 看下 面的 例子 吧:
/usr/share/keytables/us.map.gz这就 是一 个完 整限 制的 文件 名; 有 些人 把它 叫做 路 径 。 然 而 人们 经常 单独把 us.map.gz作为文 件名 。
· 根目 录有 很多 分支,比 如 /etc/和 /usr/。这 些子 目录 又分 出很 多子 目录 来,比如/etc/init.d/和 /usr/local/。 所有 的加 起来 被称 作 目 录树 。您可 以想 像,一个 绝对 文件 名就 是从 树的 根基 (/)到一 个分 支的 末端 (文 件) 的路 由。 您也会听 到别 人把 目录 树叫 做 家 庭 树,这样 子目 录就 有 双 亲,路 径就 显示 了所 有文 件完 整的 血缘 关 系 。 除此 之外,还 有相 对路 径,它 从 其它 的地 方开 始而 不是 根目 录。 您 可能 还记 得,./
指的 是上 一级 目录 。 · 没有 哪一 个目 录是 和物 理设 备紧 密关 联的,比 如 您的 磁盘 。这 个和 DOS,CP/M,Windows系统 不一 样的,它 们 所有 的路 径都 是以 一个 设备 名开 始的,比如 C:\,参 看 Ubuntu中的 文件 系统 概念,第 4.5.2节。
关于 文件 层次 的详 细信 息以 及最 好的 操作 练习 可以 在这 里找到 FilesystemHierarchyStandard。作 为一 个初 学者,您 需要 记住 下面 的事 实:· /o简单 的一 个 /表示 根目 录。
· /etc/o这个 是大 多数 系统 配置 文件 存放 的地 方。· /var/log/
o这个 是系 统日 志存 放的 地方 。
53
· /home/o这个 目录 是存 放所 有非 特权 用户 的主 目录 的。4.5.2Ubuntu中 的文件系统概念按照 Unix的传 统,Ubuntu为存 放物 理数 据的 磁盘 或者 其它 存储 设备,还 有这 些硬 件设 备之间 的交 互提 供文 件系 统,比如 控制 台屏 幕和 远程 串行 终端 就用 联合 的方 式表 示。 每个在 Ubuntu系统 上的 文件,目 录,命名 管道,或 者物 理设 备都 有一 个数 据结 构被 称作inode,它 被 用来 描述 设备 用用 的属 性,比 如设 备所 有者,所 属 于的 组,上次 访问 时间 等 等 。参看 /usr/include/linux/fs.h来获得 structinode在 DebianGNU/Linux系统 中的 详细 信息。 这些 表现 出来 的统 一的 物理 入口 是非 常强 大的,因 为它 们使 得可 以使 用同 样的 命令 和同 样 的操 作来 访问 完全 不同 的设 备。 您所 有的 文件 都可 以在 一个 次方 上面,----或者 您有 20个磁 盘,有些 是在 网络 上其 它的 计算机 上面,在 GNU/Linux系统 中每 个文 件和 目录 都与 其拥 有者 (主 人) 和拥 有组 相关 联。所有 的文 件信 息都 保存 在一 个称为 inode的数 据结 构中 。4.5.3文 件和目录的访 问 权限文件 和目 录的 访问 权限 对如下 3类用 户进 行了 分别 定义,
· 文件 拥 有者 (u),· 文件 拥有 者所 在 用 户组 中的 其它 成员 (g),和· 所有 其 它 用户 (o)。每个 文件 均拥 有下 列三 种权 限:
· read(r):查看 文件 内容· write(w):修改 文件· execute(x):如同 命令 一样 执行 文件每个 目录 均拥 有下 列三 种权 限:
· read(r):列出 目录 内容· write(w):在目 录中 增删 文件· execute(x):访问 目录 中的 文件在此,对 目 录的 execute权限,不 仅 意味 着允 许查 看目 录下 文件 的内 容,还 允许 查看 文件 的其它 信息 如文 件大 小,修改 时间 。
ls可用 来显 示目 录和 文件 的这 些信 息。 参 阅 ls(1)。 使用 ls的 -l选项,就 会 按如 下顺 序 显示下 列信 息,· 文 件类型 (第 1个字 符)o-:普通 文件
d:目录
54
ol:符号 链接c:字符 型设 备节 点ob:块设 备节 点p:命名 管道os:套接 字
· 文件 访问 权 限 (接 下来的 9个字 符,每 3个一 组依 次代表 user,group和 other) 。· 文件 的 硬 链接数· 文件 拥有 user的用 户名· 文件 所属 group的用 户组 名· 文件 的字 符数 大 小 (bytes)· 文件 的 时 间和日期 (mtime)
· 文件 的 名 称在 root账号 下可 使用 chown改变 文件 的拥 有者 。要 改变 文件 的所 属组,可 以文 件拥 有者 或的身 份运行 chgrp。要 改 变目 录的 访问 权限,可 以 文件 拥有 者或 root的身 份运行 chmod。#chownnewownerfoo
chgrpnewgroup#chmod[ugoa][+-=][rwx][,...]foo细节 请参 见 chown(1),chgrp(1)和 chmod(1)。
例如,可以 root帐号 下创 建一 个目 录树,并 使其 拥有 者为 foo,所 属组为 bar:#cd/some/location/chown-Rfoo:bar.#chmodug+rwX,o=rX.
下面是 3个更 特殊 的权 限:· setuserID(s或 S代替 user'sx),· group或 代替 group's· stickybit(t或 T代替 other'sx).
在此,如 果 隐藏 在特 殊权 限后 面的 执行 权限 标位 没有 设置,则 ls-l的输 出中,这 些 标识 位将使 用大 写字 母。 为可 执行 文件 设置 setuserID位将 允许 用户 以该 文件 拥有 者的 ID来执 行该 文件 (例 如以root身份 )。 同 样,为 可执 行文 件设置 setgroupID将允 许用 户以 该文 件所 属组的 ID来 执行该 文件 ( 例 如以 root身份 )。 因 为 这些 设置 将引 起安 全风 险,所 以 使用 这些 特性 时要 格 外小心 。 为目 录设置 setgroupID,则 该 目录 会使用 BSD-like文件 创建 方案,即 目 录中 所有 新创 建的文 件均 属于 该目 录所 属的 group。为目 录设置 stickybit可防 止非 文件 拥有 者移 动目 录中 的文 件。 为确 保全 局可 写目 录如
/tmp或组 可写 目录 中的 文件 内容 不被 修改,不 仅要 关闭 文件 的 写 权限,还 应设 置目 录的stickybit,否 则,任 何 对该 目录 有写 权限 的用 户均 可以 将该 文件 移动 到别 处,然 后在 原 地
5
创建 一个 同名 文件 。 这儿 有一 些有 关文 件权 限的 有趣 例子 。 $ls-l/etc/passwd/etc/shadow/dev/ppp/usr/sbin/pppdcrw-rw----1rootdip108,0Jan1813:32/dev/ppp
-rw-r--r--root10512608:29/etc/passwd-rw-r-----1rootshadow746Jan/etc/shadow-rwsr-xr--dip234504Nov2403:58/usr/sbin/pppd$ls-ld/tmp/var/tmp/usr/local/var/mail/usr/srcdrwxrwxrwt4rootroot4096Feb916:35/tmpdrwxrwsr-x10staffJan1813:31/usr/local
3rootsrc40961908:36/usr/srcdrwxrwsr-x2 mailFeb222:19/var/maildrwxrwxrwt3rootroot4096Jan2502:48/var/tmp在 chmod(1)命令 里,有一 种替 代的 数字 模式 来描 述文 件权 限。 这种 数字 模式 使用 3到 4
个八 进制 数字 (以 8为 基 )。 每个 数字 相应 如下,· 第一 个可 选数 字,setuserID(=4),setgroupID(=2)和 stickybit(=1)之和· 第二 个数 字,user的 read(=4),write(=2)和 execute(=1)权限 之和· 第三 个数 字,同上,用 于 group
· 第四 个数 字,同上,用 于 other这听 起来 复杂,但 实 际上 相当 简单 。 从 ls-l命令 的输 出中,看 第 ( 2-10) 列,把 它 们 作为二 进制 (以 2为 基 ) 文 件 权 限 (,-” 表示,0”,,rwx” 表示,1” ) 的 表 示方 式来 读,这种数 字模 式值 将使 你理 解八 进制 (以 8为基 )的 文件 权限 表示 。 例如,尝 试:
$touchfoobarchmodu=rw,go=rfoo$ 644barls-lfoo-rw-r--r--1penguinpenguin0Nov323:30foobar
默认 的文 件权 限掩 码使 用 shell内建 命令 umask设置 。 参见 builtins(7)。4.5.4时 间戳GNU/Linux的文 件有 3种类 型的 时间 戳:
· mtime:修改 时间 (ls-l),· ctime状态 改变 时间 (ls-lc),以 及· atime:最近 访问 时间 -lu).注意 ctime并非 文件 创建 时间 。
· 覆盖 一个 文件 会改 变所 有三 类时间 mtime,ctime和 atime所有 三类 时间 。· 改变 文件 的访 问权 限或 拥有 者会 改变 文件的 和 atime。
56
· 读文 件会 改变 文件的 atime。注意,在 Debian系统 中,即 便 是简 单的 读文 件通 常会 引起 文件 的写 操作,从 而更新 inode上的 atime信息 。 使用 noatime选项 来挂 载文 件系 统,可 使用 系统 忽略 该操 作,从 而 加速 文件的 访问 和读 取。 参阅 mount(8)。
使用 touch(1)命令 来改 变存 在文 件的 时间 戳。4.5.5链 接在 2种方 法将 文件 foo关联 到不 同的 文件名 bar。
· hardlink(硬 链接 )相 当于 现存 文件 的另 一个 名字 。 (lnfoobar),· symboliclink(符 号链 接),或者,symlink”,是 通过 名字 指向 另外 一个 文件 的特殊文 件。 (ln-sfoobar)。下面 的例 子显 示了 链接 数的 改变 和使用 rm命令 时产 生的 微妙 差异 。
$echo"OriginalContent">fools-lfoo-rw-r--r--1osamuosamu4Feb922:26foo$lnfoobar#硬链 接-sfoobaz符号 链接$ls-lbarbaz
-rw-r--r--2osamuosamu4Feb922:26barlrwxrwxrwx1 3 22:28baz->foo-rw-r--r--2osamuosamu4Feb922:26foo$rmfooecho"NewContent">foo$catbar
OriginalContent$catbazNewContent上例 中符 号链 接均 拥有 名义 上的 文件 访问 权限,rwxrwxrwx”,它 们的 有效 访问 权限 均由 它 们所指 向的 文件 来定 义。 · 链接 到它 所属 的目 录,因 此 任何 新目 录的 链接 数都从 2开 始 计 算 。,.链接 到父 目 录,因些 目录 链接 数会 随新 的子 目录 数的 增长 而增 长。4.5.6命 名管道( FIFOs)
命名 管道 是一 个行 为象 一个 管道 的文 件。 把 某 些东 西放 入命 名管 道文 件,它 从 另外 的一 端 出来。 因 此,它 被 称为 FIFO,或 First-In-First-Out,首 先 放入 管道 的东 西将 首先 从另 外 一端出 来。 如果 写东 西到 一个 命名 管道,在 写 的东 西在 管道 被读 出之 前,写 的 进程 不会 中止 。 如 果 从 一个命 名管 道读,读 的进 程在 中止 之前,一 直处 于等 待状 态,直到 有东 西可 以读 为止 。命 名管道 的大 小始 终为 零 ---它 不 储 存 数 据,象 shell|一 样,它 仅 仅 连 接 两 个 进 程 。然 而,这个管 道有 一个 名字,两 个进 程没 有必 要在 同一 个命 令行 运行,或 者由 同一 个用 户运 行。
57
做下 面的 操作 来尝 试,$cd;mkfifomypipeecho"hello">mypipe&#放入 后台[1]5952$ls-lmypipe
prw-r--r--1penguinpenguin02003-11-0623:18mypipe$catmypipehello[1]+Doneechohello>mypipe$lsmypipeprw-r--r--1penguinpenguin02003-11-0623:20mypipe
$rmmypipe4.5.7套 接字套接 字类 似于 命名 管道 ( FIFO),它 允 许 进 程 交 换 信 息 。 对于 套接 字,那 些进 程不 必要 在 同时运 行,也 没 有必 要是 同一 个祖 先进 程的 子进 程。 它是 进程 间通 讯的 端点 。 信息 交换 可 以通过 网络 发生 在不 同的 主机 之间 。 4.5.8设 备文件设备 文件 是系 统上 物理 的或 者虚 拟的 设备,比 如说 硬盘,显 卡,显示 器或 者键 盘。 一个 虚拟设 备的 例子 是控 制台,由 /dev/console表示 。有两 种类 型的 设备,· 字 符设备
o一次 能够 访问 一个 字符,那 就是 说,从设 备读 或者 写的 最小 的数 据单 元是一个 字符 ( byte) 。· 块 设备 o一定 是访 问一 个叫 块的 大单 元,它含 有许 多字 符。 硬盘 是一 个块 设备 。
设备 文件 可以 被读 写,尽 管 设备 文件 包含 二进 制数 据,而 这 些二 进制 数据 对人 类来 说是 费 解的乱 码。 向设 备文 件直 接写 数据,有 时 侯对 解决 硬件 连接 故障 有用 。 比如 说,将 一个 文 本文件 导出 到打 印机 设备 /dev/lp0,或者 发送 调制 解调 器命 令到 一个 适当 的串 口/dev/ttyS0。 但是,除 非是 慎重 的操 作,它有 可能 造成 一个 大的 破坏 。 所以 请小 心。4.5.8.1/dev/null等 等
/dev/null是一 个特 殊的 设备 文件,它 忽略 写给 它的 任何 东西 。 如果 不需 要某 些东 西,把它扔 到 /dev/null。 它本 质上 是一 个无 底洞 。 如果 从 /dev/null读东 西,将会 立即 得到文件 结束 符( EOF) 。/dev/zero是类 似的,只 是 从它 读的 话,将 会 得到 \0字符( 不与 数字 零的 ASCII码相 同 ) 。参阅 空文 件,第 8.6.34节。
58
4.5.8.2设 备号按例 子执 行 ls,将 显示 设备 号。$ls-l/dev/hda/dev/ttyS0/dev/zerobrw-rw----1rootdisk3,0Mar142002/dev/hda
crw-rw----dialout4,64Nov1509:51/dev/ttyS0crw-rw-rw-1rootroot1,5Aug3103:03/dev/zero在这 里:
· /dev/hda主设 备号 为 3,次 设备 号为 0。 属于 disk组的 用户 有读 写访 问权 。· /dev/ttyS0主设 备号 为 4,次 设备 号为 64。 属于 dialout组的 用户 有读 写访 问权。· /dev/zero主设 备号 为 1,次设 备号 为 5。 所有 人都 有读 写访 问权 。在老 的系 统中,安 装过 程使 用 /sbin/MAKEDEV命令 来创 建设 备号 。 参阅 MAKEDEV(8)。
在新 的系 统中,/dev下的 文件 系统 通过 设备 文件 系统 自动 生成,设备 文件 系统 与 /proc文件 系统 类似 。 4.5.9/proc文 件系统/proc文件 系统 是一 个伪 文件 系统,它 包含 系统 信息 和正 在运 行的 进程 信息 。
当注 意到 一个 特殊 的文 件 /proc/kcore时,人 们 经 常 恐 慌,因 为 它 通 常 很 巨 大 。 该 文 件 (或多或 少) 是 计 算机 内存 的一 个拷 贝。 它被 用来 调试 内核,实际 上它 并不 存在,所 以 不必 担心它 的大 小。 参阅 通过 proc文件 系统 调整 内核,第 7.3节 和 proc(5)。
4.6X窗 口系统参阅 X,第 9.4节。4.6.1启 动 X窗 口系统
X窗口 系统 能够 使用 类似 xdm的图 形登 录守 护启 动,或 者在 控制 台下 输入 如下 的命 令启 动,$execstartx4.6.2X窗 口系统下的菜单
X环境 能够 与许 多窗 口管 理器 协作,各 个窗 口管 理器 的用 户界 面有 很大 不同 。 请记 住,右击根 窗口 将显 示一 个选 择菜 单。 这个 功能 总是 存在 。 · 得到 shell命令 提示 符,从菜 单启 动 Xterm:o"XShells"-->"XTerm".
59
· 浏览 有图 形的 网页,从 菜单 启动 Mozilla:o"Apps"-->"Net"-->"MozillaNavigator".· 浏览 有图 形的 PDF文件,从 菜单 启动 Xpdf:
o"Apps"-->"Viewers"-->"Xpdf".如果 没有 发现 菜单 条目,请 安 装适 当的 软件 包。 参 阅 Ubuntu软件 包管 理基 础,第 6.2节 。4.6.3X窗 口系统键盘序列当运 行 X窗口 系统 时,下面 是一 些需 要记 住的 重要 键盘 序列 。· Ctrl-Alt-F1到 F6:切换 到其 它伪 终端 (从 X系统,DOSEMU等 。)· Alt-F7:切换 回 X窗口· Ctrl-Alt-minus:改变 X窗口 的屏 幕解 析度 (减 号为 数字 键盘 的键 )· Ctrl-Alt-plus:在 X窗口 内以 相反 的方 向改 变屏 幕解 析度( 加 号为 数字 键盘 的键 )
· Ctrl-Alt-Backspace:中止 X服务 器程 序· Alt-X,Alt-C,Alt-V:通常 在 Windows/Mac下与 Ctrl-键联 合的 粘贴,拷 贝 和 剪切键,在 NetscapeComposer等程 序中,使 用 Alt-键代 替。4.7进 一步学习目前,推 荐阅 读来 自 TheLinuxDocumentationProject:Guides的关 键用 户手 册。· "TheLinuxSystemAdministrators'Guide",o覆盖 了系 统运 行,处理 用户 账号,备 份和 配置 系统 的各 个方 面的 内容 。 软件 包,sysadmin-guide
o文件,/usr/share/doc/sysadmin-guide/html/index.html网址,http://www.tldp.org/LDP/sag/index.html· "TheLinuxNetworkAdministrator'sGuide,SecondEdition",o在 Linux环境 下网 络管 理的 简单 参考软件 包,(notavailable)o文件,(notapplicable)网址,http://www.tldp.org/LDP/nag2/index.html· "Linux:RuteUser'sTutorialandExposition"
o覆盖 GNU/Linux系统 管理 的精 装书 (有 在线 版)作者,PaulSheero出版,PrenticeHall软件 包,rutebook(从 non-free)o文件,/usr/share/doc/rutebook/
更多 资源 参阅 Ubuntu技术 支持,第 15章。
60
第 5章 -发 行 版 升 级 到 Brezy,Daper或 Edgy升级 的官 方发 布通 知位 于 http://www.ubuntu.com/ubuntu/releases和http://www.ubuntu.com/news( 不 断 更 新 中 )。将系 统升 级到 Breezy,Dapper或 Edgy需要 几个 步骤,而 且必 须按 照下 面的 顺序,
· 升级 到 Hoary(如 果你 的系 统比 Hoary要旧 )· 升级 到 Breezy· 升级 到 Dapper· 升级 到 EdgyUbuntu不支 持省 略中 间发 布的 升级
5.1升 级到 Hoary升级 系统 到 Hoary。#apt-getupgradedist-upgrade
5.2准 备升级工作你可 以用 通过 网络 获取 软件 包的 方式 来将 一个 版本 升级 到另 外的 一个 版本 。 这可 以通 过如下的 方法 来做 。 生成 一个 干净 的 stable版存 储列 表:
#cd/etc/aptcp-fsources.listsources.list.old#:>sources.listapt-setupnoprobe
如果 你想 升级 到 Breezy,你 需要 增加 Breezy版的 存储 源到 这个 新的 列表 。 如果 你想 升级到 Dapper,你 还需 要增 加 Dapper版的 存储 源。#cd/etc/aptgrep-e"^deb"sources.list>srcs#:>sources.list
cp-fsrcssources.list#sed-e"s/breezy/dapper/"srcs>>sources.list#apt-getupdateinstallaptapt-utils
调整 /etc/apt/sources.list和 /etc/apt/preferences的艺 术请 参阅 Ubuntu软件 包管理基 础,第 6.2节 。
61
5.3升 级在按 照描 述的 方法 正确 的设 置 /etc/apt/sources.list和 /etc/apt/preferences文件后,你便 可以 开始 升级 了。 软件 包的 实质 性信 息请 参见 Ubuntu软件 包管 理,第 6章,如果 你遇 到问 题,请查 看 APT
升级 错误 以及 解决 方法,第 6.3.2节。5.3.1使 用 dselect如果 系统 在许 多软 件包 都包 含了 -dev等软 件包,推 荐使 用下 面的 dselect操作 方法 进行控制 软件 包的 细化 操作 。
#dselectupdate#升级 前请 先完 成这 步select选择 附加 软件 包运行 dselect时当 前所 有软 件包 均被 选中,dselect会提 示你 基于 Depends,Suggests和Recommends的附 加软 件包,如 果不 想添 加任 何软 件包,只 需输 入 Q退出 dselect。
#dselectinstall在安 装过 程中,必 须 回答 一些 有关 软件 包配 置的 问题,准 备 好你 的笔 记本 花点 时间 处理 它 们 。参阅 dselect,第 6.2.4节。
使用 dselect。 它 能干得不赖,)5.3.2使 用 apt-get#apt-getupdate-tbreezyupgrade
#apt-getdist-upgrade-tdapperupgrade#apt-getdist-upgrade-tedgyupgrade#apt-getdist-upgrade
一旦 你的 系统 到达 hoary,使 用 aptitude代替 apt-get是 明 智 的 。( aptitude接受 apt-get所接 受的 许多 选项,包 括上 面列 出的 那些 选项 。)升级 到目 前 dselect的设 置:#apt-getdselect-upgrade
参阅 软件 包依 赖关 系,第 2.2.8节。
62
第 6章 -Ubuntu软 件 包 管 理高级 包管 理工 具 aptitude是目 前首 选的 字符 界面 的 APT前 端 程 序 。 它会 记住 哪些 包是 你安装 的,哪 些是 为了 满足 依赖 关系 而安 装的 ; 在 不 被已 安装 包需 要的 情况下 aptitude会 自动卸 载后 者。 它内 建一 套高 级的 包过 滤器,但 是比 较难 上手 。
synaptic是目 前首 选的 基于 GTK的图 形化 APT前端 程序 。它 的包 过滤 器比 aptitude的好用 多了 。它 包含 了对 DebianPackageTags的实 验性 支持 。为了 减少 Ubuntu仓库 的网 络负 担和 加快 你下 载的 速度,你 应该 从 Ubuntu镜像 下载 。如果 你需 要在 你本 地网 络的 许多 台机 器上 安装 相同 的包 。在 使用 APT下载 包的 时候,请 考虑使 用 squid来设 置本 地 HTTP代理 。必 要的 话,可以 设置 环境 变量 http_proxy或者 在/etc/apt/apt.conf里面 设置 http的值 。尽管 apt_preferences(5)中描 述的 APT的 pinning功能 非常 强大,但 造 成的 影响 是难 以察觉 和管 理的 。你 应该 把它 作为 一个 高级 功能 来看 待。
在 chroot,第 8.6.35节 中描 述的 使用 方法 非常 适合 于需 要同 时确 保系 统的 稳定 性和 使用最 新软 件的 情况 。 6.1介 绍如果 你没 有精 力阅 读完 所有 的开 发者 文档,那 么先 看看 本章 的内 容,然后 开始 体验 Ubuntu
的威 力吧,-)6.1.1主 要的包管理工 具dpkg– Debian包安 装工 具apt-get– APT的命 令行 前端
aptitude– 的高 级的 字符 和命 令行 前端synaptic– 图形 界面 的 APT前端dselect– 使用 菜单 界面 的包 管理 工具tasksel– Task安装 工具这些 工具 不是 用来 取代 对方 的,比如 dselect同时 使用 APT和 dpkg。APT使用 /var/lib/apt/lists/*来跟 踪可 用的 软件 包,而 dpkg使用 的是/var/lib/dpkg/available。 如 果 你使 用了 aptitude或者 其他 APT前端 来安 装软 件包,同时你 希望 使用 dselect来安 装软 件包,请 不要 忘记 使用 dselect菜单 上的 [U]pdate(或者运 行 "dselectupdate")来更 新 /var/lib/dpkg/available。
在处 理依 赖关 系上 apt-get会自 动下 载安 装依 赖的 软件 包,但是 不会 处理 所安 装软 件推 荐的或 者建 议的 软件 包。 相反 aptitude可以 设置 成安 装所 安装 软件 推荐 的或 者建 议的 软件 包。dselect给使 用者 列出 所安 装软 件推 荐或 建议 的软 件包,可 以 进行 单独 选择 。 参阅 软件 包依赖 关系,第 2.2.8节,
63
6.1.2方 便的工具dpkg-reconfigure-重新 配置 已安 装的 软件 包(如 果它 是使 用 debconf进行 配置 的)dpkg-source-管理 源码 包dpkg-buildpackage自动 生成 包文 件
apt-cache-在本 地缓 冲区 检查 包文 件6.2Ubuntu软 件包管理基础6.2.1设 置 APT
参考 准备 升级 工作,第 5.2节 来设 置 sources.list。 请参 考 Ubuntu系统 安装 提示,第 3章,发行 版升 级到 Breezy,Dapper或 Edgy,第 5章,和 应急 的编 辑器,第 11.2节,6.2.2安 装 tasks
你可 以安 装一 些软 件包 集合,这 些 集合 是由 使 Ubuntu系统 满足 某些 特定 用途 的典 型软 件 包组成 的。 这些 集合 被称 为,tasks” 。在初 始化 安装 中,安 装 tasks最简 单的 方法 就是 使用 tasksel。 注意 在使 用之 前,你 需 要运行
dselectupdate建议 使用 aptitude来安 装 tasks。 它能 让你 在选 择好 tasks并准 备安 装之 前,删除tasks中的 某些 软件 包。
6.2.3aptitudeaptitude是全 新的 可菜 单操 作的 包安 装工 具,和 dselect类似,但 是是 针对 APT从头 设计的 。从 大多 数参 数来 讲,aptitude完全 可以 作为 apt-get的一 个兼 容的 代替 品。 参阅aptitude(1)和 /usr/share/doc/aptitude/README.
一旦 开始 使用 aptitude,你 最好 继续 使用 它,而不 是选 择其 他替 代工 具。 否则 你将 失去aptitude包存 的软 件安 装清 单,你就 不能 享受 自动 删除 多余 软件 包的 功能 了。全屏 状态 下 aptitude接受 单键 的命 令,大多 数是 小写 的。 主要 的几 个功 能键 如下,按键 动作
F10菜单? 按键 命令 帮助 (完 整的 清单 )u 更新 软件 包信 息+ 标记 软件 包为 升级 或者 新安 装- 标记 软件 包为 删除 (保 留配 置文 件)_ 标记 软件 包为 完全 删除 (删 除配 置文 件)
===保持 软件 包的 当前 版本,阻 止其 被升 级U 标记 所有 可以 升级 的软 件包 为升 级
64
g 下载 和安 装选 择的 软件 包q 退出 当前 屏幕,保 存改 变x 退出 当前 屏幕,忽 略改 变Enter查看 一个 软件 包的 信息C 查看 一个 软件 包的 更新 日志l 改变 软件 包树 状显 示限 制
/ 搜索 第一 个匹 配的 软件 包\ 重复 最后 一次 搜索和 apt-get一样,aptitude安装 软件 包的 时候 自动 解决 依赖 问题 。 aptitude还能 安装即将 安装 的软 件包 推荐 或者 建议 的软 件包 。你 通过 F10->选项 ->处理 依赖 关系 在菜 单上更 改这 一默 认设 置。 aptitude的其 他特 点如 下:· aptitude能访 问所 有版 本的 软件 包。· 的动 作记 录在 /var/log/aptitude。
· aptitude能轻 松的 追踪 陈旧 的和 本地 建立 的软 件包,并 在,过期 的和 在本 地创 建 的软件 包,上列 出。· aptitude内建 强大 的包 搜索 和显 示功 能。 熟 悉 mutt的用 户很 容易 上手,因 为这 个显示 方法 的灵 感来 源于 mutt。 参阅 /usr/share/doc/aptitude/README中的,SEARCHING,LIMITING,ANDEXPRESSIONS”· aptitude在全 屏状 态下 有嵌 入的 su功能 。 普 通用 户都 可以 执行,直 到安 装或 删 除软件 的时 候再 取得 管理 员权 限。6.2.4dselectdselect一直 是主 要的 包维 护工 具。 你可 以考 虑用 aptitude代替 。
当你 启动 程序 的时 候,dselect会自 动选 择所 有,Required”,Important” 和,Standard”的包 。 dselect的用 户界 面是 有些 奇怪,但 是 大部 分人 已经 习惯 了。 它有 四个 主要 命令,(指 令都 是 大 写 的 !):
按键 动作Q 退出 。确 认当 前的 选择 并退 出。(忽略 依赖 关系 )R 撤销 ! 我不 是那 个意 思。D 不管 他! 我不 管你 dselect怎么 想的,照 做就 好了 !U 都照 建议 的来 做使用 D和 Q,你 可以 选择 有冲 突的 选项 。请 小心 使用 这个 命令 。在 /etc/dpkg/dselect.cfg中加 上一 行,expert” 来减 少干 扰。如果 你的 机器 运行 dselect的速 度很 慢,你 可以 考虑 在速 度快 一点 的机 器上 运行 dselect,确定 你要 安装 的软 件包 之后,在 慢的 机器 上通 过 apt-get来安 装它 们。
65
6.2.5使 用 APT来 维护发行版本请编 辑 /etc/apt/preferences并加 入以 下内 容来 维持 系统 为 dapper版本,Package:*Pin:releasea=edgy
Pin-Priority:800Package:*Pin:releasea=dapperPin-Priority:600
更多 复杂 的例 子请 参考 apt_preferences(5),可 以让 您做 更多 的事 情,例如 安装 edgy的软件 包的 同时 还能 把系 统维 持在 dapper。关于 限制 特定 软件 在特 定版 本上,而 其 他软 件随 系统 升级 的设 置在 examplessubdirectory找到,即 preferences.dapper和 preferences.edgy。
如果 你混 用不 同的 发行 版本,例 如 dapper和 breezy或 edgy和 dapper,你终 究还 是会 安装上 dapper或 edgy版本 的核 心软 件,例如 libc6,这样 作无 法确 保系 统中 没有 臭虫 。你需要 特别 小心 。 另外 一个 例子,preferences.breezy,会 强制 降级 所有 的软 件到 breezy。
Ubuntu不支 持将 某个 软 件包 降级 到先 前的 发行 版本 。然 而在 新的 软件 包出 问题 时,你会 发现你 不得 不安 装旧 的可 用的 软件 包。你 可以 在本 地的 /var/cache/apt/archives/或远 端 的http://archive.ubuntu.com/中找 到先 前的 版本 。请 参 考 使用 dpkg救助,第 6.3.3节 。从某 个 发 行版本 降级 到先 前的 发行 版本 也是 不被 支持 的,而 且 这样 做往 往造 成很 多问 题。 不过你 愿意 冒险 的话,作 为最 后的 手段 这样 做也 是值 得的 。
6.2.6aptitude,apt-get和 apt-cache命 令还是 以上 面使 用 testing发行 版的 用户 为例,可使 用下 列命 令来 管系 统:· aptitudeupgrade(或 apt-getupgrade或 aptitudedist-upgrade或 apt-getdist-upgrade)
这样 就会 跟随 dapper版本 — 它们 会跟 踪 dapper版本 的更 新情 况,对 系统 上所 有软 件 包进行 升级,并 从 处重 新分 析依 赖关 系并 安装 相关 的包 。· apt-getdselect-upgrade这个 命令 跟踪 dapper版本 — 根据 dselect的选 择对 系统 上的 软件 包进 行升 级。
· aptitudeinstallpackage/edgy从 edgy中安 装 package,并 由 dapper版本 提供 安装 依赖 的包 。· aptitudeinstall-tedgypackage
6
通过 设置 edgy的 Pin-Priority为 990,可 以从 edgy处安 装 package及其 依赖 的包 。· apt-cachepolicyfoobar...检查 foobar...软件 包的 状态 。
· aptitudeshowfoobar...|less(或 apt-cacheshowfoobar...|less)查看 foobar...软件 包的 有关 信息 。· aptitudeinstallfoo=2.2.4-1
安装 foo软件 包的 特定 版本 2.2.4-1。· aptitudeinstallfoobar-安装 foo软件 包并 删除 bar软件 包。
· aptituderemovebar删除 bar软件 包,但保 留其 配置 文件 。· aptitudepurgebar
删除 bar软件 包及 其所 有配 置文 件。在上 面的 例子 中使 用 -u选项 的作 用是 在实 际升 级之 前将 所有 将要 升级 的软 件包 列出,并 提示用 户确 认。 下面 的操 作可 将 -u设置 为默 认行 为:$cat>>/etc/apt/apt.conf<<.
//Alwaysshowpackagestobeupgraded(-u)APT::Get::Show-Upgraded"true";.使用 --no-act可进 行模 拟升 级,并不 是进 行真 正的 升级 行为 。
6.3Ubuntu生 存命令掌握 了这 些知 识,你就 能够 享受 无尽 的,升级,了,-)6.3.1检 测程序错误寻 求 帮助如你 使用 某个 软件 包出 现问 题,在寻 求帮 助或 发送 错误 报告 之前 请确 认查 看过 下列 站点 (lynx,links和 w3m都很 好用 ):$lynxhttps://launchpad.net/distros/ubuntu/+bugs/https://launchpad.net/distros/ubuntu/+bugs/package-name#如果 你知 道软件包 的名 字
$lynxhttps://launchpad.net/distros/ubuntu/+bugs/bugnumber#如果 你知 道错误序 号
67
在 Google( www.google.com)中 使用 关键 字,site:launchpad.net” 搜索 。如有 疑问,可 阅读 帮助 文件 。设 置 CDPATH如下,exportCDPATH=.:/usr/local:/usr/share/doc然后输入
$cdpackagenamepagerREADME.Debian#如果 存在 的话$mc更多 技术 支持 资源 列在 Debian技术 支持,第 15章。
6.3.2APT升 级错误以及解决方 法从 edgy/dapper进行 升级 时可 能出 现 升级,第 5.3节 中提 到的 软件 包关 联问 题。多 数 情况下,是 因为 升级 的软 件包 所需 的新 增的 关联 包没 有安 装。 可使 用如 下方 法解 决,#aptitudedist-upgrade
如果 这招 无效,可 以重 复下 面的 方法 至到 问题 解决,#aptitude-fupgrade#即使 遇到 错误 也继 续 upgrade...或#aptitude-fdist-upgrade#即使 遇到 错误 也继 续 dist-upgrade
一些 的确 存在 问题 的升 级脚 本会 引起 持续 出错 。最 好 的解 决方 法是 检查 该软 件包 的安 装脚 本/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal}然后 运行,#dpkg--configure-a#配置 所有 安装 的软 件包如果 脚本 报告 缺少 配置 文件,查 看一 下 /etc中相 关的 配置 文件 。如 果配 置文 件有,dpkg-new扩展 名( 或其 它类 似的 扩展 名),去掉 ( mv)它 的扩 展名 。从 edgy/dapper进行 升级 时可 能出 现软 件包 关联 问题 。可 用这 个方 法智 取:#aptitude-finstallpackage#重载 坏关 联还可 以用 equivs包来 解决 此类 问题 。参 阅 /usr/share/doc/equivs/README.Debian和equivs软件 包,第 6.5.2节。6.3.3使 用 dpkg救 助如果 你在 使用 APT的时 候遇 到死 胡同 了,那么 可以 从 Ubuntu的镜 像站 点下 载软 件包 并使
68
用 dpkg来安 装。 如 果 你不 能访 问网 络,可 以 在 /var/cache/apt/archives/中找 到被 缓 存的软 件包 。 #dpkg-ifetchmail_6.2.5-4_i386.deb
如果 你用 这种 方法 安装 软件 包,但 是 遇到 了依 赖问 题安 装失 败了,并 且你 确实 需要 安装 这 个软件 包。 你可 以用 dpkg的 --ignore-depends,--force-depends和其 他参 数来 安装 软件包。 dpkg(8)有更 详细 的介 绍。6.3.4恢 复软件包选择 状 态的数据如果 /var/lib/dpkg/status因为 某种 原因 坏掉 了,Ubuntu系统 将会 完全 丢失 软件 包选 择状 态 的 数 据 。赶 快 到 /var/lib/dpkg/status-old或 /var/backups/dpkg.status.*下找 找旧的 /var/lib/dpkg/status文件 。将 /var/backups/放在 其它 的分 区是 个好 习惯,因 为该 目录 包含 了许 多非 常重 要的 系统 数据。
如果 旧的 /var/lib/dpkg/status文件 也坏 了,仍可 以从 /usr/share/doc/下的 目录 进行恢复 这些 信息 。 #ls/usr/share/doc|\grep-v[A-Z]|\'^texmf$'|\
grep-v'^debian$'awk'{print$1"install"}'|\dpkg--set-selections#dselect--expert#重新 安装 系统,如 果需 要的 话去 除一 些选 项
6.3.5/var崩 溃之后如何恢复 系 统/var目录 包含 着定 时更 新的 数据 如 mail,它 们 很容 易遭 破坏 。 将 目录 放到 别的 分区 可降 低风险,如 果最 坏的 事情 发生 了,可以 通过 重建 /var目录 来挽 救 Ubuntu系统 。从相 同或 旧版 本的 最简 Ubuntu系统 中取 得 /var目录 的内 容框 架,例如 var.tar.gz,然后它 放入 受损 系统 的 root目录,接 着#cd/mvvarvar-old#如果 里面 还有 其他 有用 资料 的话#tarxvzfvar.tar.gz使用 Woody框架 文件aptitude#或是 用 dselect
上述 步骤 可使 系统 恢复 工作 。使 用 恢复 软件 包选 择状 态的 数据,第 6.3.4节 中描 述的 技术加 速软 件包 选择 数据 的恢 复。( [FIXME]:该 过程 需要 更多 的实 践来 检验 )6.3.6为 无法启动的系 统 安装软件包使用 Ubuntu急救 软盘 /CD或从 多启 动 Linux系统 其它 分区 启动 。 参阅 启动 系统,第
69
8.1节,将无 法启 动的 系统 挂载 到 /target并使 用 dpkg的 chroot安装 模式 。#dpkg--root/target-ipackagefile.deb接下 来就 可以 着手 配置 并解 决问 题。
如是 只是 由于 lilo损坏 而造 系统 无法 启动,可 使用 标准 Ubuntu急救 盘启 动。 假设 你的root分区 位于 /dev/hda12且想 使用 runlevel3,在 启动 提示 符输 入:boot:rescueroot=/dev/hda123
这样,你 就可 以使 用软 盘中 内核 启动 系统,新 系统 的功 能基 本齐 全。( 可能 丢失 某些 内核 特 性或 模块 ) 6.3.7如 果 dpkg命 令出错怎么办如果 dpkg损坏 就不 能安 装任 何,deb文件 。下 面的 操作 可帮 助你 修复 这种 状况 。( 在 第一行,你可 将,links” 替换 成你 喜欢 的浏 览器 。)$linkshttp://archive.ubuntu.com/ubuntu/pool/main/d/dpkg/...下载 完好 的 dpkg_version_arch.deb$supassword:*****
#arxdpkg_version_arch.debmvdata.tar.gz/data.tar.gz#cd/tarxzfvdata.tar.gz
对 i386,亦 可用 http://packages.ubuntu.com/dpkg作为 URL。6.4Ubuntu必 杀技有了 这些 命令 的 启 迪,你 将会 从无 休止 的升 级冲 突的 地狱 中解 放出 来,达到 Ubuntu天 堂 。:-)
6.4.1文 件信息在已 安装 的软 件包 中许 找特 定文 件所 属的 软件 包,$dpkg{-S|--search}pattern
或者 搜索 Ubuntuarchive:$wgethttp://archive.ubuntu.com/ubuntu/dists/dapper/Contents-i386.gzzgrep-epatternContents-i386.gz或是 用专 门的 软件 包命 令:
70
#aptitudeinstalldlocate和 slocate冲突 ( locate的安 全版 本)$dlocatefilename#dpkg-L和 dpkg-S的高 效代 替品...#aptitudeinstallauto-apt#请求 式软 件包 安装 工具auto-aptupdate为 auto-apt建立 db文件
$ searchpattern#在所 有软 件包 中搜 索 pattern,不 论安 装与 否6.4.2软 件包信息搜索 并显 示包 文件 的信 息。 编辑 /etc/apt/sources.list,让 APT指向 正确 的包 文件 。如果想 了解 dapper/edgy中的 相应 软件 包与 当前 系统 安装 的软 件包 有何 差别,使 用 apt-cachepolicy— 更好 。#apt-getcheck#更新 缓冲 区并 检查 损坏 的软 件包$apt-cachesearchpattern按文 本描 述搜 索软 件包
policypackage#软件 包的 priority/dists信息$apt-cacheshow-a显示 所有 dists中软 件包 描述 信息showsrcpackage#显示 相应 源码 包的 信息$apt-cacheshowpkg软件 包调 试信 息#dpkg--audit|-C#搜索 未完 成安 装的 软件 包${-s|--status}package...#已安 装软 件包 描述
dpkg-lpackage...#已安 装软 件包 的状 态( 每个 占一 行)$-L 列出 软件 包安 装的 文件 的名 称你也 这可 这样 查看 软件 包信 息( 我用 mc浏 览 ):
/var/lib/apt/lists/*/var/lib/dpkg/available比较 下面 的文 件可 以确 切了 解最 近的 安装 过程 对系 统造 成了 那些 改变 。
/var/lib/dpkg/status/var/backups/dpkg.status*6.4.3使 用 APT无 人执守安装使用 APT无人 执守 安装,要 在 /etc/apt/apt.conf中加 上一 行,/etc/apt/apt.conf:Dpkg::Options{"--force-confold";}另一 种等 价的 方法 是运 行 apt-get-q-ypackagename。这 种方 法可 能产 生严 重的 负作 用,
所以 使用 起来 要小 心。 参阅 apt.conf(5)和 dpkg(1)。安装 完毕 以后,可 以用 重新 配置 已安 装的 软件 包,第 6.4.4节 中的 方法 配置 特定 的软 件
71
包。 6.4.4重 新配置已安装 的 软件包使用 下列 方法 重新 配置 已安 装的 软件 包。
#dpkg-reconfigure--priority=mediumpackage[...]--all#重新 配置 所有 的软 件包#dpkg-reconfigurelocales生成 额外 的 locales--p=lowxserver-xfree86#重新 配置 X服务 器如果 你想 永久 改变 debconf对话 框模 式,可这 么做 。某些 程序 用于 生成 特殊 的配 置脚 本。 apt-setup-创建 /etc/apt/sources.listinstall-mbr安装 主引 导( MasterBootRecord)管 理器
tzconfig-设定 本地 时间gpmconfig设置 gpm鼠标 daemonsambaconfig-在 Potato中配 置 Samba( Woody使用 debconf来配 置)eximconfig配置 Exim(MTA)texconfig-配置 teTeXapacheconfig配置 Apache(httpd)
cvsconfig-配置 CVSsndconfig配置 声音 系统...update-alternatives-设定 默认 启动 命令,例 如设 定 vi启动 vimupdate-rc.dSystem-Vinit脚本 管理 工具update-menus-Debian菜单 系统
...6.4.5删 除和清除软件 包删除 软件 包但 保留 其配 置文 件:
#aptituderemovepackage...dpkg--remove删除 软件 包并 清除 配置 文件,
#aptitudepurgepackage...dpkg--purge6.4.6阻 止旧软件包升 级举 个 例 子,要 阻 止 libc6和 libc6-dev通过 dselect或使 用 aptitudeinstallpackage命令 升级,可 执行,
72
#echo-e"libc6hold\nlibc6-devhold"|dpkg--set-selections这种 方法 不影 响 aptitudeinstallpackage命令 操作 。要 阻止 aptitudeupgradepackage或 aptitudedist-upgrade命令 对软 件包 执行 的强 制自 动降 级行 为,可在/etc/apt/preferences中加 上:
Package:libc6Pin:releasea=dapperPin-Priority:2000这 里,Package:” 后不 能使 用通 配符 如,libc6*”,如 果 要保 持所 有与 glibc源码 包相 关 的二进 制包 的版 本同 步,可以 明确 的列 出它 们。 该命 令可 以显 示处 于,阻止,状态 的软 件包,dpkg--get-selections"*"|grep-e"hold$"
6.4.7breezy/dapper/edgy混 合系统apt-show-versions可以 列出 发行 版中 可用 软件 包的 版本 。$apt-show-versions|fgrep/dapper|wc...你有 多少 testing软件 包
$apt-show-versions-u...列出 可升 级的 软件 包$aptitudeinstall`apt-show-versions-u-b|fgrep/edgy`...将所 有 edgy软件 包升 级到 最新 版本
6.4.8删 除缓存包文件使用 APT安装 软件 包会 在 /var/cache/apt/archives目录 留下 缓存 文件,要 清 除这 些文 件可使 用,#aptitudeautoclean#仅删 除无 用的 包
clean删除 所有 的包6.4.9记 录 /拷 贝系统配置对软 件包 选择 情况 进行 本地 备份,
$dpkg--get-selections"*">myselections#或使 用 \*"*"使 myselections包含 那些 被指 定,完全 删除 ( purge),的文 件。你可 将这 个文 件发 送到 另一 台电 脑并 在那 儿按 文件 中的 选择 进行 软件 包安 装。
73
#dselectupdatedpkg--set-selections<myselections#apt-get-udselect-upgrade#或者 dselectinstall6.4.10向 breezy系 统引入软件包对 breezy系统 进行 部分 升级,在 软 件运 行环 境中 重新 编译 源码 的确 是个 诱人 的想 法,这 样可以 避免 由于 关联 关系 不得 不对 大量 软件 包升 级。 首先,将 下列 镜像 源加 入 /etc/apt/sources.list:deb-srchttp://archive.ubuntu.com/ubuntudapper\mainmultiverserestricteduniverse
deb-srchttp://archive.ubuntu.com/ubuntuedgy\mainmultiverserestricteduniverse由于 屏幕 输出 的限 制,上 述 每条 deb-src命令 均分 成了 2行,实 际 上在 sources.list中它们 均为 单行 。
然后 下载 源码 并在 本地 生成 软件 包,$apt-getupdate#更新 软件 包搜 索列 表sourcepackage$dpkg-source-xpackage.dsccdpackage-version
...查找 需要 的软 件包 (编 译所 需的 关联 包列 在,dsc文件 中) 并安 装它 们,你还 需要,fakerroot” 软件 包。$dpkg-buildpackage-rfakeroot…… 或者 (没 有签 名)
$dpkg-buildpackage-rfakeroot-us-uc#如果 需要,再 使用,debsign”…… 然后 安装$su-c"dpkg-ipackagefile.deb"
通常,需 要 安装 一些 带,-dev” 后缀 的软 件包 以满 足关 联关 系。 debsign在 devscripts软件包 中。 auto-apt可以 轻松 解决 这些 关联 问题 。 请 使 用 fakeroot,如 是 没有 必要,就 别 使用 root帐号 。现在,这 些关 联问 题已 被简 化。 例如,编 译 pine源码 包:
#apt-getbuild-deppinesource-b6.4.11本 地软件包文件为了 创建 与 APT和 dselect系统 兼容 的本 地软 件包 文件,需 要创 建 Packages,包 中文 件
74
要放 在特 定的 目录 树中 。 Ubuntu官方 包文 件喜 欢存 放于 本地 deb仓库,下 面就 来创 建仓 库:#aptitudeinstalldpkg-devcd/usr/local
#install-dpool#软件 包存 放的 物理 地址dists/edgy/main/binary-i386#ls-1pool|sed's/_.*$/prioritysection/'|uniq>override编辑 override#调整 priorityandsection#dpkg-scanpackagespooloverride/usr/local/\>dists/edgy/main/binary-i386/Packages
#cat>dists/unstable/main/Release<<EOFArchive:edgyVersion:3.0Component:mainOrigin:LocalLabel:
Architecture:i386EOF#echo"debfile:/usr/localunstablemain"\>>/etc/apt/sources.list
还有 一种 快速 但是 肮脏 的方 法来 创建 本地 deb仓库,#aptitudeinstalldpkg-devmkdir/usr/local/debian#mv/some/where/package.deb/usr/local/debiandpkg-scanpackages/usr/local/debian/dev/null|\
gzip->/usr/local/debian/Packages.gz#echo"debfile:/usr/local/debian./">>/etc/apt/sources.list在 /etc/apt/sources.list中设 置相 应镜 像源 入口 地址,就 可 以通 过 HTTP或 FTP方式 远程访 问存 放在 其中 的包 文件 了。
6.4.12转 换或安装外来的二进制软 件 包alien可将 其它 格式 的二 进制 软件 包如 Redhat的 rpm,Stampede的 slp,Slackware的tgz和 Solaris的 pkg等转 化成 Ubuntu的 deb格式 软件 包,如果 你想 在自 己的 系统 上使用 别的 Linux发行 版中 的软 件包,可 使 用 alien将它 转化 成系 统首 选的 软件 包格 式后 安装。 alien还支 持 LSB的软 件包 。
6.4.13自 动安装命令auto-apt是一 种请 求式 软件 包安 装工 具。$sudoauto-aptupdate...升级 数据 库
$auto-apt-x-yrun
75
进入 auto-apt模式,/bin/bash退出 这个 命令 继而 退出 auto-apt模式 。$less/usr/share/doc/med-bio/copyright#访问 不存 在的 文件...安装 提供 了这 个文 件的 软件 包。 同样 安装 依赖 的包
6.4.14校 验已安装的软件包debsums可以 校验 已安 装软 件包 的 MD5编码,对 某 些软 件包 没有 可用 的 MD5编码,系 统 管理员 可使 用一 个临 时的 解决 办法,#cat>>/etc/apt/apt.conf.d/90debsums
DPkg::Post-Install-Pkgs{"xargs/usr/bin/debsums-sg";};^DperJoergWendlandjoergland@debian.org(untested).
6.4.15优 化 sources.list简而 言之,我 尝试 过用 各种 优化 方法 来创 建 sources.list,但 任何 一种 方法 对我 这个 住在美国 的人 来说 都没 有明 显的 改善 。最 后我 还是 用 apt-setup手工 选择 近一 点的 站点 。apt-spy会根 据站 点回 应时 间和 带宽 自动 创建 sources.list。 netselect-apt会创 建一 个更完 整的 sources.list文件,但 它 使用 更落 后的 方法 来选 择镜 像站 点 ( 比较 ping时 间 ) 。#aptitudeinstallapt-spycd/etc/apt;mvsources.listsources.list.org#apt-spy-ddapper-lsources.apt
6.5其 他 Ubuntu的 特性6.5.1dpkg-divert命 令使用 文件 转 移 ( diversions)的 方 法 可 以 强 令 dpkg将文 件安 装到 转 移 目录 而非 默认 目 录 。对于 某个 引起 冲突 的文 件,可 以 在 Ubuntu软件 包脚 本中 使用 Diversions将它 安装 到别 的目录 。系 统管 理员 还可 以使 用 diversion来重 载软 件包 配置 文件,或 者用 来保 留某 些旧 配置文 件 ( 这些 文件 没有 在 conffiles中登 记) 当 安 装新 版软 件时 这些 文件 会被 覆盖 。( 参 阅保存 本地 配置,第 2.2.4节 )。#dpkg-divert[--add]filename#添加,转移,--remove删除,转移,
记住,不 到万 不得 已不 要使 用 dpkg-divert。6.5.2equivs软 件包如果 你从 源码 编译 程序,最 好 将它 做成 本地 Ubuntu化软 件包 ( *.deb)。 最 新 的 方 法 是 使 用
76
equivs。Package:equivsPriority:extraSection:adminDescription:CircumventingDebianpackagedependencies
ThisisadummypackagewhichcanbeusedtocreateDebianpackages,whichonlycontaindependencyinformation.6.5.3Alternative命 令如果 想用 vi来启 动 vim,请 用 update-alternatives:#update-alternatives--displayvi...#update-alternatives--configviSelectionCommand
-----------------------------------------------1 /usr/bin/elvis-tiny2 /usr/bin/vim*****+3 /usr/bin/nviEntertokeepthedefault[*],ortypeselectionnumber:2
Ubuntualternatives系统 中的 这些 项目,都 是以 符号 连接 的形 式存 放在/etc/alternatives下的 。想设 置你 喜爱 的 Xwindow环境,执 行 update-alternatives来指 定 /usr/bin/x-session-manager和 /usr/bin/x-window-manager。详 情 参 阅 自定 义 X会话,第 9.4.5.1节。
/bin/sh是指 向 /bin/bash或 /bin/dash的链 接。 想兼 容旧 的 Bash脚本,使 用/bin/bash比较 保险,但 更 好还 是使 用 /bin/dash,因 为 它 更 符 合 POSIX标 准 。 升 级 到 2.4版 Linux内核,系 统一 般将 它设 置为 。6.5.4运 行级别 Runlevel
安装 好之 后,大部 分 Ubuntu软件 包的 服务 被设 定为 在 runlevel2到 5时 运 行 。 所 以,在没 有定 制过 的 Ubuntu系统 中,runleve2,3,4,5,6是没 有区 别的 Ubuntu保留 这 些给本 地管 理员 使用 。 自定 义运 行级 别,第 2.4.3节 说明 如何 定制 runlevels。 这样 的runlevels系统 和其 他流 行的 GNU/Linux发 行 版 本 完 全 不 同 。 你可 能要 做的 改变 之一 就 是取消 runlevel2上的 xdm和 gdm,使得 在完 成启 动之 后 X显示 管理 去不 会自 动 启动 ;然后你 可以 通过 切换 到 runlevel3来启 动 X显示 管理 器。
参阅 运行 级别,第 2.4.2节 来获 得更 多关 于 runlevels的信 息。6.5.5停 止 daemon服 务Ubuntu发行 版非 常注 重系 统安 全,并期 望系 统管 理员 能担 此重 任。 它将 系统 的易 用性 放在
7
了第 二位,许 多 daemon服务 都定 位在 最高 安全 级别,因 而,默 认 安装 状态 下系 统只 启动 最少的 (甚 至没 有) 可用 的服 务。 如果 拿不 定把 握( 有关 Exim,DHCP...),可 执 行 psaux或检 查 /etc/init.d/*和/etc/inetd.conf下的 内容,还 可 以使 用 用 PAM来控 制登 录,第 9.2.1节 中提 到的 方 法检查 /etc/hosts.deny。 pidof命令 也很 有用 (参 阅 pidof(8))
在 Ubuntu系统 中,默认 状态 下 X11不允 许 TCP/IP(远 程) 连接 。参 阅 在 TCP/IP中使用 X,第 9.4.6节,但 是 使用 SSH进行 X传送 是允 许的,参 阅 联接 远程 的 X服务 器 –ssh,第 9.4.8节。 第 7章 -Ubuntu下 的 Linux内 核
Ubuntu使用 自己 的方 法来 编译 内核 及相 关模 块。 参阅 Ubuntu和系 统内 核,第 2.7节。7.1内 核编译UbuntuEdgy发行 版中 的 gcc,binutils和 modutils可用 来编 译最 新的 Linux内 核 。 这方面 的官 方信 息,参 阅 /usr/share/doc/kernel-package/README.gz,特 别是 文件 的后 半 部分。 内核 编译 是个 很困 难的 议题,由 于 目标 在不 断的 变化,即 使是 最受 人尊 敬的 开发 者也 会有 不同的 见解 。 对于 单机 内核 编译,initrd不是 必须 的。 我用 它是 希望 我新 编译 的内 核与 相应 的内 核镜 像一模 一样 。如 果使 用,请 先阅 读一 下 mkinitrd(8)和 mkinitrd.conf(5)。7.1.1Ubuntu标 准方式关心 一下 有关 kernel-package,gcc,binutils和 modutils的错 误报 告。 在需 要时 使用较新 的版 本。
在 Ubuntu系统 中用 源码 编译 自定 义内 核要 特别 小心 。用 make-kpkg的 --append_to_version选项 来创 建多 重内 核镜 像比 较安 全。#apt-getinstalldebhelpermodutilslibncurses5-devlinux-source-2.6.15#使用 最新 版本#apt-getinstallfakeroot
vi/etc/linux-pkg.conf#输入 我的 名字 和 email$cd/usr/src创建 目录tar--bzip2-xvflinux-source-2.6.15.tar.bz2$cdlinux-source-2.6.15#如果 这是 你的 内核 源码cp/boot/config-2.4.18-386.config将当 前配 置设 定为 默认 配置$makemenuconfig#按自 己的 喜好 来定 制
make-kpkgclean必须 执行 这步 (per:manmake-kpkg)$fakerootmake-kpkg--append_to_version-486--initrd\--revision=rev.01kernel_image\modules_image#modules_image可以 是 pcmcia-cs*等。
78
$cd..#dpkg-ilinux-image*.debpcmcia-cs*.deb#安装make-kpkgkernel_image实际 上执 行了 makeoldconfig和 makedep。如 果没 使用initrd就不 要使 用 --initrd选项 。
如果 想加 载 pcmcia-cs模块 或内 核 pcmcia源码 中没 有的 模块,应 该在 makemenuconfig后 选,Generalsetup— >” 进 入,PCMCIA/CardBussupport— >”,配 置,<>PCMCIA/CardBussupport” 选项 (例 如,取消 复选 项)。对于 SMP机器,参 照 kernel-pkg.conf(5)的说 明设 置 CONCURRENCY_LEVEL。
7.1.2经 典方式从下 列地 址获 得干 净的 源代 码,· Linux:http://www.kernel.org/· pcmcia-cs:http://pcmcia-cs.sourceforge.net/
或使 用 Ubuntu所附 的等 价的 源代 码:#cd/usr/srctarxfvzlinux-whatever.tar.gz#rm-rflinuxln-slinux-whateverlinux
#tarxfvzpcmcia-cs-whatever.tar.gzln-spcmcia-cs-whateverpcmcia#cdlinuxmakemenuconfig...配置 内核 选项,..#makedep
bzImage...编辑 lilo/grub...移动 /usr/src/linux/arch/i386/boot/bzImage到 boot....../sbin/liloorwhateveryoudoforgrub#makemodules;makemodules_installcd../pcmcia
#makeconfigall#makeinstall...添加 需要 的模 块名 称到 /etc/modules#shutdown-rnow...启动 到新 内核,..
7.1.3内 核头文件绝大 多数,普通,程序 不需 要内 核头 文件,事 实 上如 果直 接引 用它 们会 出错 。 这 些 程序 应 该引用 那些 编 译 glibc所用 的头 文件,它 们位 于 Ubuntu系统 的 /usr/include/linux和/usr/include/asm目录 下。
79
故不 要在 /usr/src/linux目录 中创 建指 向 /usr/include/linux和 /usr/include/asm的链 接,一些 过时 的文 档曾 建议 创建 它们 。 如果 某些 内核 类应 用程 序 需 要 特定 的内 核头 文件,可 修 改 Makefile(s),使 其 包含 指向,特定内 核头 文件 目录 /include/linux” 和,特定 内核 头文 件目 录 /include/asm” 的路 径。
7.2模 块化的 2.4内 核kernel-image-2.4.NN提供 了新 版的 Debian2.4内核,该 版 内核 模块 化程 度极 高。 你 必 须激活 相关 的模 块才 能获 得想 要的 内核 功能 。 尽管 在接 下来 的部 分中 提供 了许 多通 过配 置 /etc/modules来解 决问 题的 范例 。 但 据 说,在
/etc/modutils/中用 一个 文件 来提 供所 有的 设备 别名,就 可解 决这 类有 关模 块问 题,当前的内 核有 足够 多的 别名 供你 使用 。某 些模 块也 可以 被硬 件探 测程 序自 动激 活,例如 discover。参 阅 X服务 器的 硬件 侦测,第 9.4.2节。参阅 模块 加载 规定,第 2.7.5节和 Linux内核 源码 目录 中的 Documentation/*.txt获取详 细信 息。
7.2.1PCMCIA要使 一些 老的 PCMCIA卡能 正常 工作,你 需在 /etc/modules中包 含下 列内 容:#ISAPnPdriverisa-pnp
#NewLowlevelPCMCIAdriveryenta_socket#我的 机器 上似 乎不 需要剩下 的工 作就 由 PCMCIA脚本 (来 自 pcmcia-cs软 件 包 ),depmod和 kmod负责 了。 我需要 isa-pnp因为 我的 笔记 本电 脑使 用的 是旧 ISA-PCMCIA。较 新的 笔记 本电 脑使 用
CardBus/PCMCIA,不 再需 要它 。参阅 LinuxPCMCIAHOWTO和 网络 设置 和 PCMCIA,第 10.8.5节。7.2.2SCSI
[没有 测试 过 ]想要 SCSI工作,请 在 /etc/modules中包 含如 下内 容:#SCSIcorescsi_mod#SCSIgenericdriversg
#SCSIdisksd_mod#AllotherneededHWmodules...
可用 depmod来操 作上 述某 些模 块。
80
7.2.3网 络功能/etc/modules中需 要包 含如 下内 容以 扩充 网络 功能,#net/ipv-4ip_gre
ipip#net/ipv-4/netfilteriptable(inorder)ip_tablesip_conntrack
ip_conntrack_ftpiptable_natiptable_filteriptable_mangle#ip_nat_ftp
ip_queue#ipt_LOGipt_MARKipt_MASQUERADEipt_MIRROR
ipt_REDIRECTipt_REJECTipt_TCPMSSipt_TOSipt_limitipt_mac
ipt_markipt_multiportipt_owneript_stateipt_tcpmssipt_tos
ipt_unclean##ipchains#ipfwadm
上述 内容 并没 有进 行优 化。 可用 depmod来操 作上 述某 些模 块。7.2.4EXT3文 件系统( >2.4.17)对预 编译 内核 镜像 包( >2.4.17)执 行下 述操 作可 激活 EXT3日志 文件 系统 。
#cd/etc;mvfstabfstab.oldsed's/ext2/ext3,ext2/g'<fstab.old>fstab#vi/etc/fstab
81
...将 root文件 系统 类型 设置 成,auto” 而非,ext3,ext2”#cd/etc/mkinitrdechojbd>>modules#ext3echoext2>>modules#cd/
apt-getupdate;apt-getinstallkernel-image-2.4.17-686-smp...安装 最新 内核 并配 置 boot( lilo从这 儿运 行)#tune2fs-j-i0/dev/hda1/dev/hda2...将所 有 EXT2FS转化 成 EXT3#shutdown-rnow
现在 就可 使用 EXT3日志 文件 系统 了。 在 fstab的,type” 中使 用 ex3,ext2的是 为了保险 起见,如 果内 核不 支持 非 root分区 采用 EXT3还可 退回 到 EXT2。如果 你已 安装 了 2.4版内 核并 且不 想再 次重 装,执 行上 述步 骤中 apt-get命令 之前 的步 骤就行 了。 接着,
#mkinitrd-o/boot/initrd.img-2.4.17-686-smp/lib/modules/2.4.17-686-smplilo#tune2fs-j-i0/dev/hda1/dev/hda2...将所 有 EXT2FS转化 成 EXT3#shutdown-rnow
现在 EXT3日志 文件 系统 已生 效。如果 没有 设置 /etc/mkinitrd/modules就 mkinitrd运行,最 好在 系统 启动 时加 载一 些模块,...当 initrd提示 获取 shell时( 5秒 钟 ),输 入 RETURN
#insmodjbdext3#modprobeext3会负 责一 切#insmodext2^D...继续 启动激活 EXT3功能 会造 成某 些系 统发 生严 重内 核死 锁的 情况,不 过 我没 遇到 过这 种问 题 ( 我 的内核是 2.4.17) 。7.2.52.4版 内核对 RealtekRTL-8139的 支持不知 何故,RTL-8139支持 模块 已不 再叫 rtl8139,现 在 它叫 8139too。 从 2.2版内 核升 级到 2.4版时,请 记得 在 /etc/modules中做 相应 修改 。7.2.6并 行端口支持
82
对于 kernel-image-2.4.*,并 行端 口支 持已 被模 块化,要 激活 可执 行:#modprobelpecholp>>/etc/modules
参阅 Linux内核 源码 目录 中的 Documentation/parport.txt。7.3通 过 proc文 件系统调整内核Linux内核 行为 可以 在运 行状 态下 通过 proc文件 系统 进行 调节 。
有关 在 /proc文件 系统 下修 改内 核参 数的 基础 知识,可 参阅 Linux源码 包中 的Documentation/sysctl/*文件 。调整 内核 参数 的例 子,可 参考 /etc/init.d/networking和 无法 访问 某些 站点 的怪 问题,第3.8.5节 。
参阅 sysctl.conf(5)了解 如何 使用 /proc文件 系统 和脚 本 /etc/init.d/procps.sh来设置 内核 开机 时的 配置 。此 脚本 由 /etc/rcS.d/S30procps.sh执行 。7.3.1打 开了太多文件Linux内核 有时 会报 告,Toomanyopenfiles”,起 因是 file-max默认 值( 8096) 太 小 。
要 解 决 这 个 问 题,可 以 root身 份 执 行 下 列 命 令,( 或 将 它 们 加 入 /etc/rcS.d/*下的 init脚本 。) #echo"65536">/proc/sys/fs/file-max#适用 于 2.2和 2.4版内 核"131072"/proc/sys/fs/inode-max仅适 用于 版内 核或将 下列 内容 放入 /etc/sysctl.conf,做 永久 性的 更改,file-max=65536#适用 于 2.2和 2.4版内 核inode-max=131072仅适 用于 版内 核
7.3.2磁 盘缓存清除时 间 ( Diskflushintervals)可通 过 proc文件 系统 来修 改磁 盘缓 存清 除时 间。 下面 的操 作将 默认 的 5秒时 间间 隔缩 短到 1秒。#echo"4000100300006000">/proc/sys/vm/bdflush
这可 能对 文件 I/O性能 产生 一点 儿负 面影 响。 但 它 能保 证文 件内 容是 最近 1秒的,比 默 认的 5秒更 短。 对日 志文 件系 统来 说更 是如 此。7.3.3迟 缓的小内存旧 机 器对某 些小 内存 的旧 机器 来说,在 proc文件 系统 中打 开内 存的 over-commit功能 会很 有效
83
果,#echo1>/proc/sys/vm/overcommit_memory7.42.6版 内核和 udev
udev是取 代 /dev/的动 态设 置的 系统 。我 们可 以选 择很 短的 设备 名字 。而 2.4版内 核使用的 devfs已经 被淘 汰。安装 Ubuntu新版 的 linux-image-2.6.NN和 udev就能 启用 这个 功能 。第 8章 -Ubuntu小 技 巧
8.1启 动系统关于 系统 启动 提示 的详 细信 息请 参见 LDPBootPrompt-HOWTO。8.1.1“

我 忘记了 root密 码!,

(一 )只要 能访 问控 制台 键盘,不 需 要 root密码 也可 以启 动系 统并 以 root帐号 登录 。 (这里 假设没 有 BIOS密码 或 lilo之类 的启 动引 导器 密码 用于 控制 系统 启动 。 )下面 是一 个不 需要 额外 的启 动盘 或对 BIOS启动 设置 进行 修改 的过 程。 这里 的,Linux” 是代表 在 Ubuntu默认 安装 系统 中启 动 Linux内核 的标 签。在 lilo的启 动屏 幕中,当 boot:一出 现时 (在某 些系 统中,您 必须 按 shift键以 阻止 自动启 动; 如 果 lilo使用 framebuffer,您 需 要按 TAB键才 能看 到自 己输 入的 选项 ),就 输入:
boot:Linuxinit=/bin/sh这会 让系 统启 动内 核并 运行 /bin/sh而非 其标 准的 init。现 在 你 已 获 得 root权限 和一 个rootshell。由 于当 前 /是以 只读 方式 挂载,而 其它 的硬 盘分 区均 未挂 载,故你 必须 完成下列 步骤 才能 获得 一个 有适 当功 能的 系统 。
init-2.03#mount-n-oremount,rw/-avtnonfs,noproc,nosmbfsinit-2.03#cd/etcvipasswdinit-2.03#shadow
(如 果 /etc/passwd文件 中所 有用 户的 第二 个域 的数 据都 为,x”,就 表明 系统 使用 了影 子( shadow)密 码,必须 编辑 /etc/shadow。) 要 删 除 root密码,请 编辑 密码 文件 中第 二个数据 域,将它 设置 为空 白。 这样 重启 系统 不用 密码 就能 登录 到 root。当 系统 启动 进入runlevel1时,Ubuntu需要 密码 。
84
在 /bin下装 一个 小编 辑器 是个 好习 惯,因为 有时 /usr是无 法访 问的 (参 阅 应急 的编 辑器,第 11.2节 )。另外 可以 安装 sash软件 包,当系 统无 法启 动时,还 可执 行:boot:Linuxinit=/bin/sash
当 /bin/sh不可 用时,sash可作 为 sh的交 互式 替代 品,它 是 静态 链接,内 建 了许 多标 准工具 (在 系统 提示 符下 输入,help” 可 获 得 参 考 列 表 )。8.1.2“

我 忘记了 root密 码!,

(二 )从急 救盘 启动 系统 。假 设 /dev/hda3是原 始 root分区,可 用下 面的 方法 编辑 密码 文件,与上 述方 法一 样容 易。 #mkdirfixit
mount/dev/hda3fixit#cdfixit/etcvishadow#passwd
与上 面的 方法 相比,该 方法 的好 处在 于不 需要 知道 lilo密码 (如 果有 的话 )。 但 如果 系统没有 预先 设置 为从 软盘 或 CD启动,就 需要 访问 BIOS的权 限。8.1.3无 法启动系统没在 安装 过程 中制 作启 动盘?没 关系 。 如 果 lilo损坏 了,从 Debian安装 套件 中拿 出启 动盘,用 它 来启 动系 统。 假 设 你的 root分区 在 /dev/hda12,你 想 进入 runlevel3,在 启 动提示 符后 输入,boot:rescueroot=/dev/hda123
接下 来,系统 使用 软盘 上的 内核 启动,你 可登 录到 一个 几乎 拥有 全部 功能 的系 统了 。( 可 能 有少 量特 性或 模块 不可 用。) 如果 系统 崩溃,亦 可参 阅 为无 法启 动的 系统 安装 软件 包,第 6.3.6节。如果 想做 张自 定义 启动 盘,参阅 急救 盘中 的 readme.txt文档 。
8.1.4“

我 不想直接启动到 X!,

玩 edgy/dapper很有 趣,但在 启动 进程 中执 行不 稳定 的 xdm,gdm,kdm和 wdm会让 你焦头烂 额。 首先,在 启动 提示 符后 输入 如下 指令 获得 rootshell:boot:Linuxvga=normals
85
这里 的 Linux是你 要启 动的 内核 的标 记,,vga=normal” 告诉 lilo在普 通 VGA屏幕 下运行,,s” ( 或,S” ) 是 传 给 init的参 数,告 诉它 进入 单用 户模 式。 在 提示 符后 输入 root密码。 有多 种方 法禁 用 X启动 daemons:
· 运行 update-rc.d-f?dmremove;update-rc.d?dmstop99123456.· 在所 有 /etc/init.d/?dm文件 的最 前面 加上,exit0” 。· 把所 有的 /etc/rc2.d/S99?dm文件 改名 为 /etc/rc2.d/K99?dm。· 删除 所有 的 文件 。· 运行,>/etc/X11/default-display-manager
其中,rc2.d中的 数字 必须 与 /etc/inittab中指 定的 runlevel一致 。而?dm的意 思是你要 将同 一个 命令 运行 多次,每 次将 其替 换成 xdm,gdm,kdm和 wdm中的 一个 。在 Ubuntu下只 有第 一种 方法 是,唯一 正确 的方 法,。最 后一 种方 法比 较简 单但 只适 用于Ubuntu,而 且还 需要 使用 dpkg-reconfigure重新 设置 一次 。其 它方 法都 是通 用的 中daemons的方 法。
你仍 可在 任何 控制 台 shell中用 startx命令 启动 X。8.1.5其 它用于启动提 示 符的技巧使用 lilo启动 提示 符,可指 定系 统启 动到 特定的 runlevel和配 置。 详情 参阅 BootPrompt-HOWTO(LDP)。
如果 希望 系统 启动到 runlevel4,可以 lilo启动 提示 符后 输入,boot:Linux4如果 希望 系统 启动 到正 常功 能的 单用 户模 式,而 且 你知道 root密码,可在 lilo启动 提示 符后输 入下 列任 一参 数。 boot:LinuxS1boot:Linux-s
如果 希望 系统 以少 于实 际内 存数 的内 存启 动 ( 也 就是 说机 器有 64MB内存,只 分配 48MB给 系统使 用),在 lilo启动 提示 符后 输入,boot:Linuxmem=48M
注意,不 要指 定大 于实 际内 存数 的内 存,否则 内核 会崩 溃。 如果 你有 多于 64MB的内 存,如128MB,应 在系 统启 动时 执行 mem=128M或在 /etc/lilo.conf中添 加类 似的 命令 行,否则 旧内核 或使 用旧 BIOS的主 板将 无法 使用 大于 64MB的内 存。8.1.6设 置 GRUB启 动参数
86
GRUB是 Hurd项目 开发 的新 型启 动管 理器,比 Lilo更灵 活,不 过 启动 参数 也与 之稍 有不 同 。grub>find/vmlinuzroot(hd0,0)grub>kernel/vmlinuzroot=/dev/hda1initrd/initrd
grub>boot请注意 Hurd中的 设备 名:HURD/GRUBLinuxMSDOS/Windows
(fd0)/dev/fd0A:(hd0,0)/dev/hda1C:(usually)(hd0,3)/dev/hda4F:(hd1,3)/dev/hdb4?
详情 参阅 /usr/share/doc/grub/README.Debian和 /usr/share/doc/grub-doc/html/。8.2活 动记录8.2.1记 录 shell活 动比起 普通 的个 人电 脑环 境,Unix环境 的系 统管 理包 含了 更多 细致 的任 务。 必须 掌握 所有 基本的 配置 方法 以便 进行 系统 故障 恢复 。基 于 X11的 GUI配置 工具 看上 去又 好又 方便,但 不适用 于紧 急状 况。 记录 shell活动 是个 好习 惯,特别是 root用户 。
Emacs:使用 M-xshell在缓 冲区 中开 始记 录,使用 C-xC-w将缓 冲区 中的 记录 写入 文件 。Shell,使用 screen命令 和 用 screen来定 制控 制台,第 8.6.28节 中描 述的,^AH” ; 或者使 用 script命令 。$script
Scriptstarted,fileistypescript...dowhatever...Ctrl-D$col-bx<typescript>savefilevisavefile
还可 使用 下面 的方 法,$bash-i2>&1|teetypescript8.2.2记 录 X活 动如果 需要 X应用 程序 的活 动记 录图,包 括 xterm屏显,可 使用 gimp( GUI)。 它 可 以 对 每 个
87
窗口 或整 个屏 幕进 行拍 照。 还 可以 使用 xwd( xbase-clients),import( imagemagick) 和scrot( scrot) 。8.3拷 贝及创建子目录这些 拷贝 和归 档命 令提 供系 统和 数据 备份 的基 本功 能。 在 theexamplescripts中提 供 了一个 名为 backup的简 单备 份脚 本例 子。8.3.1拷 贝整个子目录 的 基本命令如果 想重 新整 理文 件组 织结 构,可使 用下 面的 方法 移动 文件 及文 件链 接:
标准 方法,#cp-a/source/directory/dest/directory#要求 GNUcp(cd&&tarcf-.)|\/dest/directory&&tarxvfp)如果 包含 硬链 接,则需 要更 严谨 的方 法,#cd/path/to/old/directory
find.-depth-print0|afio-p-xv-0a/mount/point/of/new/directory如果 是远 程操 作,#(cd/source/directory&&tarcf-.)|\sshuser@host.dom(cd/dest/directory&&tarxvfp-)如果 没有 链接 文件,#scp-pruser1@host1.dom:/source/directory\
user2@host2.dom:/dest/directory其中,scp<==>rcp,ssh<==>rsh。下面 的有 关拷 贝整 个子 目录 的信 息由 ManojSrivastavasrivasta@debian.org发表 于
debian-user@lists.debian.org。8.3.2cp传统 上,cp并不 能真 正完 成这 个任 务,因为 它既 没对 符号 链接 进行 区别 对待,又 不能 保存硬链 接。 另一 件需 要注 意的 事就 是稀 疏文 件( 有洞 的文 件)。
GNUcp克服 了这 缺陷,然 而 对于非 GNU系统,cp仍存 在问 题。 而 且 使用 cp无法 生成 小巧 轻便的 文档 包。 %cp-a.newdir
8.3.3tarTar克服了 cp在处 理符 号链 接时 出现 的问 题,然而,cpio可以 处理 特殊 文件,传 统的 tar却不 行。 对于 某个 有多 重硬 链接 的文 件,tar的处 理方 法是 只将 其中 一个 链接 拷贝 到磁 带上,所 以 日后你 只能 找回 拷贝 中所 保留 那个 的链 接所 指的 文件 ; cpio会为 每个 链接 做一 个拷 贝,日后你可 以找 回任 意一 个链 接所 指的 文件 。
8
8.3.4pax全新 的,符合 POSIX( IEEEStd1003.2-1992,pages380– 388(section4.48)andpages936– 940(sectionE.4.48)) 标 准 的,众 望 所归 的,轻 便 的文 档包 交互 工具 。 pax可以 读,写以 及列 出文 档包 的成 员,并 能拷 贝文 件目 录层 次。 pax的操 作独 立于 特定 的文 档包 格式,支持 各种 各样 不同 的文 档包 格式 。
pax工具 刚刚 成形,还 很新 。#apt-getinstallpax$pax-rw-pe.newdiror$find.-depth|pax-rw-penewdir
8.3.5cpiocpio从 cpio或 tar文档 包提 取 /放入 文件 。该 文档 包可 以是 硬盘 上的 另一 个文 件,也可 以是磁 带或 管道 。 $find.-depth-print0|cpio--null--sparse-pvdnew-dir
8.3.6afioafio更善 于处理 cpio格式 的文 档包 。 通 常 它比 cpio要快,且 提 供了 更多 磁带 选项,并 且能更 友好 的处 理有 讹误 的输 入数 据。 它支 持交 互式 处理 多卷 文档 包。用 afio制作 压缩 文档包比 压缩 tar或 cpio文档 包 更安 全。 在备 份处 理脚 本中 afio是更 佳的,文档 处理 引擎,。
$find.-depth-print0|afio-px-0anew-dir对所 有的 磁带 备份 我都 使用 afio。8.4差 异备份与数据同步要进 行差 异备 份和 数据 同步 可使 用下 列几 种方 法,· rcs:备 份并 进行 历史 记录,只 支持 文本 。· rdiff-backup:备 份并 进行 历史 记录 。支 持链 接。· pdumpfs:对 文件 系统 进行 备份 和历 史记 录。 支持 链接 。· rsync:单 路同 步。
· unison:双 路同 步。· cvs,多 路 同步 服务 器备 份并 进行 历史 记录,只 支 持文 本,技 术 成熟 。 参 阅 并行 版 本系统 (CVS),第 12.1节 。· arch:多 路同 步服 务器 备份 并进 行历 史记 录,但包 括,处于 工作 中的 目录,。· subversion:多 路同 步服 务器 备份 并进 行历 史记 录,专用于 Apache。
有关 将这 些方 法与 文档 包操 作结 合应 用的 讨论 参阅 拷贝 及创 建子 目录,第 8.3节,有 关自动进 行备 份的 讨论 参阅 日程 安排 ( cron,at),第 8.6.27节 。
89
我只 讲解 三个 较容 易使 用的 工具 。 8.4.1使 用 rdiff进 行差异备份rdiff-backup提供 了简 单好 用的 方法 对任 何文 件包 括链 接进 行历 史差 异备 份。 例如 要对 ~/目录 下的 所有 文件 备份 到 /mnt/backup:
$rdiff-backup--include~/tmp/keep--exclude~/tmp~//mnt/backup从该 文档 包中 取出 3天前 的旧 数据 恢复 到 ~/old目录,$rdiff-backup-r3D/mnt/backup~/old
参阅 rdiff-backup(1)。8.4.2使 用 pdumpfs进 行每日备份pdumpfs是一 种简 单的 每日 备份 系统,与 Plan9的 dumpfs一样,它 每天 都保 存系 统快 照。任何 时候 都可 以用 它来 恢复 到某 天的 系统 状态 。请 使用 pdumpfs和 cron来备 份你的 home
目录 。 在目 标目 录中,pdumpfs以 YYYY/MM/DD的方 式来 组织 系统 快照 。 当 pdumpfs第一 次运 行时,它 将所 有源 文件 拷贝 到快 照目 录。 从 每二 次运 行起,pdumpfs仅拷 贝更 新的 或新 建的 文件,对于 没有 改变 的文 件用 硬链 接方 式指 向前 一天 的系 统快 照,以此 来节 省硬 盘空 间。
$pdumpfssrc-dirdest-dir[dest-basename]参阅 pdumpfs(8)。8.4.3使 用 RCS进 行定期差异备份
Changetrack会定 期对 RCS文档 包中 基于 文本 格式 的配 置文 件的 变化 进行 记录 。参阅changetrack(1)。#apt-getinstallchangetrackvichangetrack.conf
8.5系 统冻结恢复8.5.1中 止一个进程运行 top看看 什么 进程 的活 动有 异常 。 按,P” 以 CPU使 用 率 排 序,,M” 以内 存使 用率 排 序,,k” 可以 中止 一个 进程 。 还 有 一种 方法,使用 BSD风格的 psaux|less或 SystemV风 格的 ps-efH|less。 SystemV风格 的排 列会 显示 父进程 ID( PPID),这 对 中 止 出 错 的 ( 死掉的 )子 进程 十分 有用 。 知道 了进 程的 ID,就 可使用 kill中止 (或 发信 号给 )某 个进 程,killall的作 用正 如其 名
90
一样 。经 常使 用的 信号 有,1:HUP,重启 daemon15:TERM,普 通中 止9:KILL,强 令中 止
8.5.2Alt-SysRq内核 编译 选项,MagicSysRqkey” 提供 系统 强心 针。在 i386机器 上按 下 ALT-SysRq组合键后,试 试按 下列 各键 r0keisub,奇 迹产 生了,Un'r'aw让键 盘从 X崩溃 中重 生。将 控制台 loglevel改为 '0'以 减 少 错 误 信 息 。 sa'k( system
attentionkey)中 止当 前虚 拟控 制台 的所 有进 程。 t'e'rminate中止 当前 终端 除 init外的所 有进 程。 k'i'll中止 除 init外的 所有 进程 。'S'ync,'u'mount和 re'b'oot帮你 逃离 真正 的险 境。本文 写作 之时,Ubuntu默认 安装 的内 核并 未将 该选 项编 译进 去,需要 重新 编译 内核 激活 该功能 。详 情参 阅 /usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz或/usr/src/kernel-version/Documentation/sysrq.txt.gz。8.6记 住这些可爱的小命 令8.6.1Pager
less就是 默认 的 pager( 文 件 内 容 浏 览 器 )。 按,h” 可获 得帮 助。它比 more更有 用。在 shell启动 脚本 中运行 eval$(lesspipe)或 eval$(lessfile)可以让 less活力 四射 。详 情参 阅/usr/share/doc/lessf/LESSOPEN。使 用 -R选项 可输 出生 癖字 符 andenablesANSIcolorescapesequences.参阅 less(1)。对于 某些 编码 系统 ( EUC) w3m可能 是更 好的 选择 。
8.6.2释 放内存free和 top能让 你了 解内 存资 源的 许多 有用 信息 。别 担心,Mem:” 行中,used” 的 大 小,看看 它下 面的 数字 (本 例的 数字是 38792) 。$free-k#用 256MB内存 的机 器
totalusedfreesharedbufferscachedMem:257136230456266804573611613675528-/+buffers/cache:38792218344Swap:2649960264996
物理 内存 的准 确大 小可 通过 grep'^Memory'/var/log/dmesg得到,本 例将 显示,Memory:256984k/262144kavailable(1652kkernelcode,412kreserved,2944kdata,152kinit)” 。Total====262144k====256M(1k=1024,1M=1024k)Freetodmesg256984kTotal-kernel-reserved-data-init
91
Freetoshell====257136k====Total-kernel-reserved-data约有 5MB内存 系统 不能 使用,因 为内 核需 要它 。8.6.3设 定时间( BIOS)
#dateMMDDhhmmCCYYhwclock--utc--systohc# --show设定 系统 时间 和硬 件时 间为 MM/DDhh:mm,CCYY。显 示 时间 为本 地时 间而 硬件 时间 使用 UTC。
如果 硬件 ( BIOS)时 间设 置为 GMT,在 文件 /etc/default/rcS中改 变设 置 UTC=yes。8.6.4设 定时间( NTP)参考,ManagingAccurateDateandTimeHOWTO。
8.6.4.1拥 有永 久 Internet连 接的系统设置时间设置 系统 时钟 通过 远程 服务 器自 动对 时,#ntpdateserver
如果 你的 系统 拥有 永久的 Internet连接,应 该将 该命 令加 入 /etc/cron.daily/。8.6.4.2偶 尔进 行 Internet连 接的系统设置时间使用 chrony软件 包。
8.6.5如 何禁用屏幕保 护 程序禁用 屏幕 保护 程序,使用 下面 的命 令。对于 Linux控制 台:
#setterm-powersaveoff启动 kon2( kanji)控 制台 可执 行:#kon-SaveTime0
运行 X可执 行:#xsetsoff或 #xset-dpms
92
或 #xscreensaver-command-prefs控制 其它 的控 制台 特征,请 参 阅相 关 man页 面 。 改变 和显 示终 端行 设置,请 参 阅 stty(1)。
8.6.6搜 索系统管理数 据 库Glibc提供了 getent(1)搜索 管理 数据 库的 各类 项目 。例如 passwd,group,hosts,services、protocols,networks。getentdatabase[key...]
8.6.7禁 用声音(响铃 )最直 接的 方法 是拔掉 PC喇叭 。 ;-)对于 Bashshell可执 行:echo"setbell-stylenone">>~/.inputrc
8.6.8控 制台上的错误 信 息不想 看屏 幕显 示的 错误 信息,首 选的 方法 是检 查 /etc/init.d/klogd,在 该脚 本中 设置KLOGD="-c3"然后 运行 /etc/init.d/klogdrestart。另 一种 方法 是执行 dmesg-n3。这儿 是各 种错 误级 别的 含义,
· 0:KERN_EMERG,系统 不可 用· 1:KERN_ALERT,必须 立即 执行· 2:KERN_CRIT,紧急 状态· 3:KERN_ERR,错误 状态· 4:KERN_WARNING,警告 状态· 5:KERN_NOTICE,正常 状态 且十 分重 要
· 6:KERN_INFO,报告· 7:KERN_DEBUG,debug-level信息如果 你很 厌恶 详细 而无 用的 错误 信息,可 以 试试 这个 小补丁 shutup-abit-bp6(位 于 样例 脚本子 目录 ) 。
另一 个该 看看 的地 方是 /etc/syslog.conf;,检 查一 下是 否有 信息 记录 被发 送到 了控 制台 设备。 8.6.9正 确设置控制台 类 型在类 Unix系统 中,访问 控制 台屏 幕通 常要 调用 库例 程,这就 为用 户提 供了 一种 独立 于终 端的方 式来 优化 字符 的屏 幕更 新过 程。 参阅 ncurses(3X)和 terminfo(5)。在 Ubuntu系统 中,有大 量预 定义 项目,$toe|less#所有 项目
93
$toe/etc/terminfo/|less#用户 可再 配置 的项 目你的 选择 可导 出到 环境 变量 TERM。当登 录到 远程 Debian系 统 时,如 果 xterm的 terminfo项目 在非 Debian的 xterm中失 效,
请将 终端 类型 改为 支持 较少 特性 的版 本如,xterm-r6” 。 参阅/usr/share/doc/libncurses5/FAQ。,dumb” 是 terminfo的最 小公 分母 。8.6.10恢 复控制台的健壮性如果 执行 catsome-binary-file后屏 幕一 片混 乱( 命令 的返 回值 与你 的输 入大 相径 庭):
$reset8.6.11将 DOS下 的文本文件转换 为 Unix类 型将 DOS文本 文件 (行 尾 =
M^J)转换成 Unix文本文件(行尾 =J) 。#apt-getinstallsysutils$dos2unixdosfile8.6.12使 用 recode转 化文本文件下面 将在 DOS,Mac和 Unix的文 本文 件中 转换 行结 尾格 式:$recode/cl../cr<dos.txt>mac.txt/cr..<mac.txt>unix.txt$recode../cl<unix.txt>dos.txt
自由 的 recode在各 种各 样的 字符 集和 界面 中转 换:$recodecharset1/surface1..charset2/surface2\<input.txt>output.txt使用 的通 用字 符集 设置 是( 参阅 Locales简介,第 9.7.3节),
· us— ASCII(7bits)· l1— ISOLatin-1(ISO-8859-1,WesternEurope,8bits)· EUCJP— EUC-JPforJapanese(Unix)· SJIS— Shift-JIS(Microsoft)· ISO2022JP— MailencodingforJapanese(7bits)· u2— UCS-2(UniversalCharacterSet,2bytes)
· u8— UTF-8TransformationFormat,8bits)使用 的通 用界 面 [38]:· /cr— Carriagereturnasendofline(Mactext)· /cl— linefeedasendofline(DOStext)
· /— Linefeedasendof(Unixtext)
94
· /d1— Humanreadablebytewisedecimaldump· /x1— hexidecimaldump· /64— Base64编码 文本· /QP— Quoted-Printable编码 文本更多 信息,请 参阅 inforecode中的 相关 描述 。
有更 多的 专业 转换 工具,· 字符 集转 换,oiconv— 本地 编码 转换konwert— 特殊 编码 转换
· 二进 制文 件转 换,ouuencodeanduudecode— 用于 Unixmimencode— 用于 邮件8.6.13正 规表达式的置换将所 有文件 FILES...中的 所有 FROM_REGEX字段 替换 成 TO_TEXT字段 。$perl-i-p-e's/FROM_REGEX/TO_TEXT/g;'FILES...-i表示,就地 编辑,,-p表示,在 FILES...各文 件中 循环,。 如 果 置换 很复 杂,应 使 用参 数
-i.bak而非 -i,这 有 助于 出错 恢复 ; 它 会将 每个 原始 文件 保存 为以,bak为后 缀的 备份 文件 。8.6.14使 用脚本来编辑文件下面 的脚 本将 删除 5– 10行以及 16– 20行。
#!/bin/bashed$1<<EOF16,20d5,10dwq
EOF在此,ed命令与 vi命令 模式 下的 是一 样的,从 外部 编辑 文件 的方 式使 它更 适于 脚本 化。8.6.15提 取源文件修改部分合并到 更 新包下面 的操 作将 根据 文件 位置,提 取源 文件 的修 改部 分并 创建 统一的 diff文件 file.patch0或 file.patch1:$diff-ufile.oldfile.new1>file.patch0old/filenew1/filefile.patch1
95
diff文件 (也 称补 丁文 件) 通常 用于 发送 程序 更新 。收 到的 补丁 文件 可使 用下 面的 方法 更新另 一个 文件,$patch-p0file<file.patch0-p1file.patch1
如果有 3个版 本的 源代 码,使用 diff3来合 并效 率更 高:$diff3-mfile.minefile.oldfile.yours>file8.6.16分 割大文件
$split-b650mfile#将大 文件 分块 成多个 650MB的小 文件catx*>largefile将所 有小 文件 合并 成一 个大 文件8.6.17从 文本格式的表格中抽取数 据假设 有一 个文 本文 件名为 DPL,其 中存 放着 所有前 Debian项目 领导 人的 名字 和他 们的 上台日期,表 格格 式是 以空 格做 为分 隔的 。 IanMurdockAugust1993BrucePerensApril1996IanJacksonJanuary1998
WichertAkkerman1999BenCollinsApril2001BdaleGarbee2002MartinMichlmayrMarch2003
Awk经常 用于 从这 类文 件中 提取 数据 。$awk'{print$3}'<DPL#monthstartedAugustAprilJanuary
AprilMarch$awk'($1=="Ian"){print}'<DPL#DPLcalledIanIanMurdockAugust1993JacksonJanuary1998
$awk'($2=="Perens"){print$3,$4}'<DPL#WhenPerensstartedApril1996象 Bash这种 Shell也能 够用 来分 析这 种文 件:
$whilereadfirstlastmonthyear;doeco$month
96
done<DPL.跟第一个 Awk例子有相同的输出在这里,read内建命令使用字符 $IFS( internalfieldsepartors内 部 列 分 隔 符 )来将行分开为单词。 如果 你改 变 IFS为 ":",你 能够 用 shell漂亮 的分 析 /etc/passwd:
$oldIFS="$IFS"#保存 旧值IFS=":"$whilereaduserpassworduidgidrest_of_line;doif["$user"==="osamu"];thenecho"$user'sIDis$uid"fi
done</etc/passwdosamu'sIDis1001$IFS="$oldIFS"#恢复 旧值(如 果使 用 Awk作同 样的 事情,使 用 FS=":"来 设 置 列 分 隔 符 。)
shell也使 用 IFS来分 开参 数扩 展,命 令 替换 和算 术扩 展的 结果 集。 但在 被单 引号 或双 引号 引 用 的 单 词 内,不 会 发 生 这 种 情 况 。 默认 的 IFS值 是,<space>,<tab>和 <newline>。请小 心使 用这 个 shellIFS技巧 。 当 shell解释 部分 脚本 作为 它的 输 入 时,奇怪 的事 情将会 发生 。
$IFS=":,"#使用 ":"和 ","作为 IFSechoIFS=$IFS,IFS="$IFS"echo是 Bash内建 的IFS==,IFS=:,$date-R #只是 一个 命令 输出Sat,23Aug200308:30:15+0200$echo$(date-R)#子 shell-->输入 到主 shell
Sat23Aug2003083036+0200$unsetIFS #重设 IFS为默 认的echo$(date-R)Sat,23Aug200308:30:50+0200
8.6.18精 巧的管道命令辅助脚本下列 脚本 做为 管道 的一 部分 十分 有用 。 find/usr|egrep-v"/usr/var|/usr/tmp|/usr/local"#查找 下的 所有 文件,排 除某 些文 件
xargs-n1command#将所 有项 作为 标准 输入 来执 行命 令echo|将空 格隔 离的 项分 开为 行xargsecho#合并 所有 的行 到一 行里 面grep-epattern|提取 含有 pattern的行cut-d:-f3-|#提取 用,分开 的第 3列( 比如 说 passwd文件 )
awk'{print$3}'|#提取 用空 格分 开的 第 3列
97
awk-F'\t''{print$3}'|#提取 用 tab分开 的第 3列col-bx| #删除 退格 键,扩展 tab为空 格expand-|扩展 tabsort-u|#排序 并删 除重 复行
tr'\n'''|#将多 行连 接为 一行'\r'''|删除 CRtr'A-Z''a-z'|#转化 大写 字母 为小 写sed's/^/#/'|将每 行变 为注 释's/\.ext//g'|#删除,extsed-n-e2p|显示 第 2行
head2-|#显示 头两 行tail-n 显示 最后 两行8.6.19循 环每一个文件的脚本片段下面 的方 法将 循环 处理 匹配 *.ext的每 一个 文件,确 保适 当处 理文 件名 包含 空格 的奇 怪文件,并且 执行 相同 的操 作。 · Shell循环 (在 PS2=""时使 用多 行格 式的 例子 。 如果 在一 行内 输入 这些 命令,需 要 在 每 一 个 换 行 处 加 一 个 分 号 。):
forxin*.ext;doiftest-f"$x";thencommand"$x"fidone
· find和 xargs结合,find.-typef-maxdepth1-name'*.ext'-print0|\xargs-0-n1command· 加 -exec选项 的 find和一 个命 令结 合:
find.-typef-maxdepth1-name'*.ext'\-execcommand'{}'\;· 加 -exec选项 的 find和一 个短 的 shell脚本 结合,
find.-typef-maxdepth1-name'*.ext'\-execsh-c"command'{}'&&echo'successful'"\;8.6.20短 小 的 Perl脚 本虽然 任何 Awk脚本 均可 使用 a2p(1)自动 重写 成 Perl,但最 好用 手工 的方 法将 一行 Awk
98
脚本 转化 为一 行 perl脚本 。例 如:awk'($2=="1957"){print$3}'|与下 列任 意一 行相 当:
perl-ne'@f=split;if($f[1]eq"1957"){print"$f[2]\n"}'|'if((@f=split)[1]perl-ne'@f=split;print$f[2]if($f[1]==1957)'|-lane'print$F[2]if$F[1]eq"1957"'|
其实 上面 各行 中所 有 perl参数 中的 空格 均可 去掉,这 得益于 Perl的数 字字 符串 自动 转换功能 。 perl-lane'print$F[2]if$F[1]eq+1957'|
有关 命令 行参 数的 信息 可参阅 perlrun(1),在 http://perlgolf.sourceforge.net有更 多令人 着魔的 Perl脚本,你 会感 兴趣 的。8.6.21从 网页上获取文本或邮件列 表 文档下面 的操 作将 网页 转化 为文 本文 件。 从网 上拷 贝配 置文 件时 十分 有用 。
$lynx-dumphttp://www.remote-site.com/help-info.html>textfilelinks和 w3m也可 以这 么用,只 是生 成的 文本 样式 可能 略有 不同 。如果 是邮 件列 表文 档,可使用 munpack从文 本获得 mime内容 。
8.6.22打 印网页下面 的操 作将 网页 内容 打印成 PostScript文件 或发 送到 打印 机。$apt-getinstallhtml2pshtml2psURL|lpr
参阅 lpr/lpd,第 3.6.1节。 还可 使用 a2ps和 mpage软件 包生成 PostScript文件 。8.6.23打 印帮助页面下面 的操 作将 帮助 页面 打印成 PostScript文件 或发 送到 打印 机。
$man-Tpssome-manpage|lprmpage-2|lpr8.6.24合 并两个 PostScript或 PDF文 件
9
可以 将两 个 PostScript文件 或 PDF文件 合并 。$gs-q-dNOPAUSE-dBATCH-sDEVICE=pswrite\-sOutputFile=bla.ps-ffoo1.psfoo2.ps$gs-q-dNOPAUSE-dBATCH-sDEVICE=pdfwrite\-sOutputFile=bla.pdf-ffoo1.pdffoo2.pdf
8.6.25命 令耗时显示 某进 程的 耗时 #timesome-command>/dev/nullreal0m0.035s#挂钟 时间 (过 去的 真实 时间 )
user0m0.000s用户 模式 时间sys0m0.020s#核心 模式 时间8.6.26nice命 令使用 nice(来自 GNUshellutils软件 包)可 设置 命令 启动 时的 nice值 。 renice( bsdutils)和 top可以 重设 进程的 nice值。 nice值为 19代表 最慢 的( 优先 级最 低的 )进 程; 负值 就,not-nice”,如 -20代表 非常 快的 (优 先级 高的 )进 程。 只有 超级 用户 可以 设定负 nice值。 #nice-19top #verynice
--20cdrecord-v-ejectspeed=2dev=0,0disk.imgfast有时 极端的 nice值对 系统 弊大 于利,所 以使 用该 命令 要小 心。8.6.27日 程安排( cron,at)
在 Ubuntu下使用 cron和 at进行 任务 日程 安排 。参阅 at(1),crontab(5),crontab(8)。执行 命令 crontab-e创建 或编辑 crontab文件,为 规律 事务 (按 周期 循环 的事 务) 安排 日程。 下面 的一个 crontab文件 样例,#use/bin/shtoruncommands,nomatterwhat/etc/passwdsays
SHELL=/bin/sh#mailanyoutputto`paul',nomatterwhosecrontabthisisMAILTO=paul#MinHourDayOfMonthMonthDayOfWeekcommand(Day...areOR'ed)runat00:05,everyday50**$HOME/bin/daily.job>>$HOME/tmp/out2>&1
#runat14:15onthefirstofeverymonth--outputmailedtopaul15141*$HOME/bin/monthly#runat22:00onweekdays(1-5),annoyJoe.%fornewline,last%forcc:022**1-5mail-s"It's10pm"joe%Joe,%%Whereareyourkids?%.%%23*/212echo"run23minutesafter0am,2am,4am...,onFeb1"54**sunat04:05everysunday"
#runat03:40onthefirstMondayofeachmonth
10
4031-7*["$(date+%a)"===="Mon"]&&command-args执行 at命令 为偶 然任 务( 只执 行一 次的 任务 )安 排日 程:$echo'command-args'|at3:40monday
8.6.28用 screen来 定制控制台screen程序 允许 在单 一的 物理 终端 或终 端模 拟窗 口运 行多 个伪 终端,每 个伪 终端 都拥 有自己的 交互式 shell。即 便可 以使用 Linux伪终 端或 多个 xterm窗口,研 究一 下如 何设置screen丰富 的特 性仍 很有 益,这些 特性 包括,
· 回溯 历史 显示,· 拷贝 和粘 贴,· 输出 到日 志,· 图形 入口,· 将终 端与 整个 screen会话 分 离,稍 后再 连接 。
8.6.28.1远 程访问方案如果 你经 常从 远程 终端 登录到 Linux机器 或使用 VT100终端 程序,screen的 detach(分 离 )特性 将简 化你 的生 活。 · 通过 拔号 连接 登录,运 行 了一 个非 常复 杂的 screen会谈,打 开 了好 几个 窗口,有 编辑器 和其 它一 些程 序。· 突然 你需 要离 开终 端一 下,但你 并不 想挂 断连 接中 止工 作。· 输入 Ad离开 会话,然后登出系统。(或者更简单些,输入 ADD离开 会话 并自 动登 出系 统)· 当你 回来 时,需要 再次 登录,可 输入 命令 screen-r,screen会如 魔法 般地 重新 连接上 所有 打开 的窗 口。
8.6.28.2典 型 的 screen命 令一但 打开了 screen程序,除 了命 令按 键( 默认为 A)所有的键盘输入都被送到当前窗口,所有的 scren命令均按特定方式输入:A加一 个单 键命 令 [加一 些参 数 ]的。 常用 的命 令有,^A?显示帮助屏幕(显示命令集)
c创建并切换到新窗口^An跳到下一个窗口p跳到上一个窗口^A0跳到 0号窗口w显示窗口列表^Aa将 Ctrl-A做为键盘输入发送到当前窗口
h对当前窗口做硬拷贝写入到文件^AH开始 /中止将当前窗口事件记录到文件<sup>A</sup>X锁定终端(密码保护)^Ad从终端分离屏幕会话D分离屏幕会话并退出登录以上只是 scren命令的一个很小的子集。 只 要是你认为 scren能干的事,没准它真就可以 !
详情参阅 (1)。
10
8.6.28.3screen会 话中的退格键 和 Ctrl-H在运行 screen时,如 果 发现 退格 键和 /或 Ctrl-H无法 正常 工作,可 编 辑 /etc/screenrc,找到这 行,bindkey-kkbstuff"\177"
将这 注释 掉( 例如 在句 首添 加,#” ) 。8.6.28.4X下 与 screen等 价的程序找找 xmove。参阅 xmove(1)。
8.6.29网 络测试基础安装 netkit-ping,traceroute,dnsutils,ipchains(适 用于 2.2版 内 核 ),iptables( 适用于 2.4版内 核)和 net-tools软件 包,然后 执行,$pingyahoo.com#检查 Internet连接
tracerouteyahoo.com跟踪 IP数据 包$ifconfig#检查 主机 设置route-n 检查 路由 设置$dig[@dns-server.com]host.dom[{a|mx|any}]|less#检查 dns-server.com的 DNS记录查找 {a|mx|any}记录
$ipchains-L-n|less#检查 包过 滤 (2.2kernel)iptables检查 包过 滤 (2.4$netstat-a #查找 系统 上所 有打 开的 端口-l--inet查找 系统 监听 的端 口$netstat-ln--tcp#查找 系统 监听的 TCP端口 (端 口数 字)
8.6.30从 本地缓冲池中清空( flush) 邮件从本 地缓 冲池 中清 空邮 件,#exim-q#清空 待读 邮件-qf清空 所有 邮件
#exim-qff#清空 冻结 邮件-qff选项 用在 /etc/ppp/ip-up.d/exim脚本 中效 果更 好。 在 Sarge中,使用 exim4代替exim。
8.6.31删 除本地缓冲池中的冻结邮 件删除 本地 缓冲 池中 的冻 结邮 件并 返回 出错 信息,#exim-Mg`mailq|grepfrozen|awk'{print$3}'`
102
在 Sarge中,使用 exim4代替 exim。8.6.32再 分发 mbox中 的信件如果 home目录 没有 空间 继续 处理 邮件,procmail将失 败,就需 要对 磁盘 空间 进行 扩容,扩容 完成 后需 要手 工分 发 /var/mail/username目录 中的 邮件到 home目录 中的 分类 邮箱,执行,#/etc/init.d/eximstopformail-sprocmail</var/mail/username#/etc/init.d/eximstart
在 Sarge中,使用 exim4代替 exim。8.6.33清 空文件内容要清 空某 些文 件如 日志 文件 的内 容,千 万不 要使用 rm删除 文件 然后 再创 建一 个新 的空 文件,因为 在两 次操 作的 间隔,系 统可 能需 要访 问该 文件 。下 面是 清空 文件 内容 的安 全方 法:
$:>file-to-be-cleared8.6.34空 文件下面 的命 令可 以创 建空 文件,
$ddif=/dev/zeroof=filenamebs=1kcount=5#5KB零内 容if=/dev/urandombs=1Mcount=77MB随机 内容$touchfilename#创建 一个 0B大小 的文 件 (如 果文 件存 在,更 新该 文件 的修 改时 间 )例如,最 实用 的用 法是从 Debian启动 软盘的 shell中执 行下 列命 令将 硬盘 /dev/hda的内 容完全 清空 。 #ddif=/dev/urandomof=/dev/hda;ddif=/dev/zeroof=/dev/hda8.6.35chroot
chroot程序,chroot(8),不 需要 重启 系统,就 可以 在单 独的 系统 上同 时运 行多 个不 同的GNU/Linux环境 。还可 以在 较快 主机 的 chroot下运 行某 些需 耗大 量系 统资 源内 存的 程序 如 apt-get或dselect,并 将较 慢子 机的 硬盘 通过 NFS方式 挂载 到主 机,开放 读 /写权 限,在主 机上 以chroot方式 操作 子机 。
8.6.35.1用 chroot来 运行不同版本的 Ubuntu在老 版本 中使 用 debootstrap命令 很容 易构 造 chrootDebian体系 。对 于 Hoary的后 续发行 版,用 cdebootstrap命令 加上 适当 的选 项来 代替 debootstrap。 例 如,在 一 台拥 有 快速 Internet连接 的机 器的 /sid-root下创 建一 个 dapperchroot:
103
main#cd/;mkdir/dapper-rootdebootstrapdapper/dapper-roothttp://archive.ubuntu.com/ubuntu/...看它 下载 整个 系统main#echo"proc-dapper/dapper-root/procprocnone00">>/etc/fstabmountproc-dapper-tprocmain#cp/etc/hosts/dapper-root/etc/hosts
chroot/dapper-root/bin/bashchroot#cd/dev;/sbin/MAKEDEVgeneric;cd-apt-setup#创建 /etc/apt/sources.list文件chroot#vi/etc/apt/sources.list#将源 指向 dapperdselect#可以 使用 aptitude,安 装 mc和 vim:-)
现在 你就 拥有 了一 个全 功能 Ubuntu子系 统,可 以尽 情享 受而 不必 担心 主 Ubuntu受到 不 利影响 。 该 debootstrap应用 技巧 还可 以实 现在 没有 Ubuntu安装 盘的 情况 下,从另 一个GNU/Linux发行 版下 安装 Ubuntu。参 阅http://www.debian.org/releases/stable/i386/apcs04.html.en。
8.6.35.2设 置 chroot登 录输入 chroot/sid-root/bin/bash非常 简单,但 这将 保留 当前 的所 有环 境变 量,你可 能并不希 望这 样并 且有 时还 会出 问题 。更 好的 方法 是,在别 的虚 拟终 端上 执行 另一 个登 录进 程,登录到 chroot目录 。
在默 认的 Ubuntu系统 中,从 tty1到 tty6运行 Linux控制 台,tty7运行 XWindow系 统,在本 例中,我 们将 tty8设置成 chroot控 制 台 。按 照 用 chroot来运 行不 同版 本的 Ubuntu,第 8.6.35.1节中 的描 述创 建好 系统 后,就可 以在 主系 统的 rootshell中输 入:main#echo"8:23:respawn:/usr/sbin/chroot/sid-root"\"/sbin/getty38400tty8">>/etc/inittab
main#initq#重启 init8.6.35.3配 置 chroot下 的 X想在 chroot下安 全地 运行 最新 版的 X和 GNOME吗? 完全 可以 !下 面的 例子 将实 现在 虚拟 终端 vt9下运行 GDM。首先,按 照 用 chroot来运 行不 同版 本的 Ubuntu,第 8.6.35.1节中 描述 的方 法安 装好chroot系统,从 主系 统的 root下拷 贝关 键配 置文 件到 chroot系统 。main#cp/etc/X11/xorg.conf/dapper-root/etc/X11/xorg.conf
chroot/dapper-root#orusechrootconsolechroot#cd/dev;/sbin/MAKEDEVgeneric;cd-apt-getinstallgdmgnomex-window-systemchroot#vi/etc/gdm/gdm.conf#dos/vt7/vt9/in[servers]section/etc/init.d/gdmstart
104
在此,编 辑 /etc/gdm/gdm.conf,使 其在 vt7到 vt9上创 建虚 拟终 端。现在 可以 很容 易地 能过 切换 Linux虚拟 终端 来实 现在 主系 统的 X环境和 chroot系统的 X环境之 间转 换,例如 使用 Ctrl-Alt-F7和 Ctrl-Alt-F9。酷 吧![FIXME]在 chroot系统 下 gdm的 init脚本 中添 加一 条注 释和 一条 链接 。
8.6.35.4使 用 chroot来 运行其它发行版很容 易创 建一 个包 含其 它发 行版的 chroot环境 。使 用其 它发 行版 的安 装程 序将 它们 安装 到单独 的硬 盘分 区中 。例如 root分区 位于 /dev/hda9:main#cd/;mkdir/other-dist
mount-text3/dev/hda9/other-distmain#chroot/other-dist/bin/bash接下 来按 照 用 chroot来运 行不 同版 本的 Ubuntu,第 8.6.35.1节,设置 chroot登录,第 8.6.35.2节和 配置 chroot下的 X,第 8.6.35.3节 处理 。
8.6.35.5使 用 chroot来 编译软件包这儿 有一 个很 特殊的 chroot软件包 pbuilder,它 构造 一个 chroot系统 并在 其中 编译 软件包。 该 体 系可 用于 检查 软件 包编 译时 关联 关系 是否 正确,并 确保 编译 生成 的软 件包 中没 有 不必要 的或 错误 的关 联关 系。
8.6.36怎 样检查硬链接检查 两个 文件 是否 是指 向同 一个 文件 的两 个硬 链接,$ls-lifile1file2
8.6.37mount硬 盘上的镜像文件如果 file.img文件 是硬 盘内 容的 镜像 文件,而 且原 始硬 盘的 配置 参数为 xxxx===(bytes/sector)*(sectors/cylinder),那 么,下面 的命 令将 其挂 载到 /mnt:#mount-oloop,offset=xxxxfile.img/mnt
注意 绝大 部分 的硬 盘都是 512bytes/sector。8.6.38Samba获取 Windows文件 的基 本方 法:
#mount-tsmbfs-ousername=myname,uid=my_uid,gid=my_gid\//server/share/mnt/smb#挂载 Windows的文 件到 Linux#smbmount//server/share/mnt/smb\-o"username=myname,uid=my_uid,gid=my_gid"#smbclient-L192.168.1.2#列出 某个 计算 机的 共享 目录
105
可从 Linux检查 Samba网上 邻居,#smbclient-N-Lip_address_of_your_PC|lessnmblookup-T"*"
8.6.39外 来文件系统的操作工具Linux内核 支持 多种 外来 文件 系统,想 访问 它们 只需 将其 挂载 到合 适的 文件 系统 下就 行了 。对某 些文 件系 统,还 提 供专 门工 具不 需要 挂载,只 依 靠用 户空 间的 程序,不 需 要内 核提 供 文件系 统支 持,就能 完成 访问 。
· mtools:forMSDOSfilesystem(MS-DOS,Windows)· cpmtools:CP/M· hfsutils:forHFSfilesystem(nativeMacintosh)· hfsplus:HFS+(modern对于 创建 和检查 MS-DOSFAT文件 系统 dosfstools非常 有用 。
8.7需 要注意的典型错误这里 有一 些危 险行 为的 例子 。如 果你 是使 用特 权账 号 root的话,负 面影 响将 会更 大。8.7.1rm-rf.*
在象 "rm-rf.*"的命 令行 参数 中使 用通 配符 文件 名,有 可 能造 成危 险的 结果,因为 ".*"扩展 为 "."和 ".."。 比较 幸运 的是,在 Debian发行 版中,当 前版 本的 "rm"命令 会检查文 件名 参数 的健 全性,会 拒 绝删 除 "."和 ".."。 但这 种检 查并 不一 定在 其它 地方 存在 。尝试 下面 的操 作来 参看 通配 符文 件名 是怎 样工 作的 。 · "echo.":列出 当前 目录 自身
· *"列出 当前 目录 下所 有不 以点 开头 的文 件和 目录· "echo.[^.]*":列出 当前 目录 下所 有以 点开 头的 文件 和目 录·,*":列出 父目 录下 的所 有东 西和 父目 录自 身8.7.2rm/etc/passwd
由于 你的 过失,丢 失 象 /etc/passwd这样 的重 要文 件,是 一 件非 常痛 苦的 事。 Ubuntu系 统周期 性的 将他 们备 份到 /var/backups/。 当你 恢复 这些 文件 的时 候,你需 要设 置适 当的 权限。 #cp/var/backups/paswd/etc/paswdhmod64/etc
参阅 恢复软件包选择状态的数据,第 6.34节。第 9章 -Ubuntu系 统 微 调本章 讲述 了基 本的 基于 命令 行界 面的 系统 配置 方法 。在 学习 本章 前,你需 要先 阅读 Ubuntu
106
系统 安装 提示,第 3章,如是 你很 关心 安全 方面 的信 息,你 应 该阅 读 SecuringDebianManual,它 在 harden-doc软件包 中。 9.1系 统初始化
Ubuntu使用 SystemV的 init脚本 系统 。参 阅 init程序,第 2.4.1节的 介绍 。9.1.1自 定义 init脚 本最简 单的 控制 init脚本 的方 法是 改变 /etc/default目 录 下,与 init脚本 同名 的文 件 里的环 境变 量设 置。 例 如,/etc/default/hotplug可以 控制 /etc/init.d/hotplug的行 为 。
文件 /etc/default/rcS可以 用来 定制 motd,sulogin等为 默认 启动 。如果 你不 能通 过设 置这 些变 量来 得到 你所 需要 的行 为,你 可 以去 修改 init脚本,它 们都 是配置 文件 。 9.1.2自 定义系统日志可通 过 /etc/syslog.conf配置 系统 日志 记录 方式 。如 果想 为日 志文 件上 色可 安装colorize软件 包。 参阅 syslogd(8)和 syslog.conf(5)。9.1.3硬 件存取优化有一 部分 硬件 优化 的配 置工 作 Ubuntu留给 了系 统管 理员 。
· hdparmo硬盘 存取 优化 。效 果显 著。 危险 。务 必先 阅读 hdparm(8)。ohdparm-tT/dev/hda测试 硬盘 存取 速度 。-q-c3-d1-u1-m16/dev/hda加速 新型 IDE系 统 。( 有 一 定 风险 。)· setcdo压缩 磁盘 存取 优化 。 setcd-x2减速 至 2xspeed。
o参阅 setcd(1)。· setserialo串行 接口 管理 工具 集。
· scsitoolsoSCSI硬件 管理 工具 集。· memtest86
107
o内存 硬件 管理 工具 集。· hwtoolso低级 硬件 管理 工具 集。
§ irqtune:修 改设 备的 IRQ优先 级,使那 些需 要高 优先 级和 快速 服务的 硬件 (例 如,串行 接口,调 制解 调器 )获 得它 所要 的资 源。 对 串口 /调制 解调 器加 速后 获得 原来 3倍的 吞吐 量。§ scanport,扫 描 I/O空间 的 0x100至 0x3ff地址 段,查 找 已安 装的 ISA设备 。§ inb:一 个小 巧的 黑客 工具,用 来阅 读 I/O端口 信息 并将 其值 转换成十 六进 制和 二进 制。· schedutilsoLinux日程 安排 工具 包。包括 taskset,irqset,lsrt和 rt。
o再加 上 nice和 renice(不 包括 在工 具包 内),就 可 对进 程的 日程 安排 进 行全面 的管 理。使用 noatime选项 挂载 文件 系统 可有 效提 高文 件的 读取 速度 。参 阅 fstab(5)和mount(8)。
通过 proc文件 系统,Linux内核 可直 接调 节某 些硬 件参 数。 参阅 通过 proc文件 系统 调整内 核,第 7.3节。Ubuntu中有 许多 专门 的硬 件配 置工 具包 。其 中有 不少 是针 对笔 记本 电脑 的。 这儿 有一 些有趣的 软件 包:
· tpconfig-一个 配置 触摸 屏设 备的 程序· apmd-高级 电源 管理 ( APM)工 具· acpi显示 ACPI设备 信息· acpid-ACPI使用 工具· lphdisk识别 PhoenixNoteBIOS下的 隐藏 分区 。· sleepd-笔记 本电 脑处 于非 工作 状态 时进 入休 眠
· noflushd让空 闲硬 盘进 入减 速状 态· big-cursor-X下的 巨型 鼠标 指针· acme-激活 笔记 本电 脑上 的,多媒 体按 钮,· tpctlIBMThinkPad硬件 配置 工具· mwavem-Mwave/ACPmodem支持· toshset访问 大部 分 Toshiba笔记 本电 脑的 硬件 接口
· toshutils-Toshiba笔记 本电 脑工 具集· sjog-激活 SonyVaio笔记 本电 脑上,JogDial” 功能 的程 序· spicctrl- 控制 器程 序可 增亮 LCD背光ACPI是一 种比 APM更新 的电 源管 理系 统。
某些 软件 包需 要专 门的 内核 模块 。它 们已 经包 含在 许多 最新 的内 核源 码中 。如 果遇 此问 题,则需 要手 动打 上最 新的 内核 补丁 。
108
9.2访 问限制( Restrictingaccess)9.2.1用 PAM来 控制登录PAM( PluggableAuthenticationModules可嵌 入认 证模 块)允 许你 控制 用户 是如 何登 录 的 。
/etc/pam.d/*#PAM管理 文件/etc/pam.d/login登录 管理 文件/etc/security/*#PAM模块 参数/etc/securetty管理 通过 控制 台进 行的 root登录 (login)/etc/login.defs#管理 登录 行为 (login)
如果 想在 控制 台终 端不 用密 码直 接登 录系 统,可 按下 面的 方法 修改 /etc/pam.d/login文 件的内 容,风险 自负 。 #authrequiredpam_unix.sonullokauthpam_permit.so
该方 法亦 可用 于 xdm,gdm,实 现无 密码 X控制 台。相反,如 果你 希望 强化 密码 政策,可 安装 cracklib2并按 下面 的方 法修 改/etc/pam.d/passwd:passwordrequiredpam_cracklib.soretry=3minlen=6difok=3
使用 一次 性登 录密 码激 活帐 户也 很有 用。 要实 现该 功能,在 passwd命令 后加 上 -e参 数,参阅 passwd(1)。要设 置系 统最 大进 程数,可 在 Bashshell中设 定 ulimit-u1000或设 置 PAM的/etc/security/limits.conf文件 。其 它参 数如 core等的 设置 方法 与之 类似 。 PATH的初始值 可在 /etc/login.defs中先 于 shell启动 脚本 设置 。
PAM的文 档位 于 libpam-doc软件 包内 。其 中 TheLinux-PAMSystemAdministrator'sGuide一文 涵盖 了 PAM配置,可 用模 块等 内容,文 档中 还包 括了 TheLinux-PAMApplicationDevelopers'Guide和 TheLinux-PAMModuleWriters'Guide。9.2.2“

为 什么 GNUsu命 令不支持 wheelgroup”

这是 RichardM.Stallman的一 句名 言,位 于 旧版 infosu页 面 末 尾 。 别 担 心,在 Ubuntu中,当前 版本 的 su使用 PAM,因 此你 可以 用 /etc/pam.d/su下的 pam_wheel.so来限 制任何 用户 组使 用 的能 力。 下面 的操 作将 在 Ubuntu系统 中赋 予 adm用户 等同 于 BSDwheel用户 组的 权限,而 且该 组成 员不 需要 密码 就能 使用 su命令 。#anti-RMSconfigurationin/etc/pam.d/su
authrequiredpam_wheel.sogroup=adm#Wheelmemberstobeabletosuwithoutapasswordauthsufficientpam_wheel.sotrustgroup=adm
109
9.2.3各 标准用户组的 目 的一些 有趣 的用 户组,· 如果 pam_wheel.so不带 任何 group==参数,rootgroup就是 su默认 的 wheelgroup。
· admgroup可以 阅读 日志 文件 。· cdrom可在 本地 赋予 一组 用户 访问 CD-ROM驱动 器的 权限 。· floppygroup可在 本地 赋予 一组 用户 访问 软盘 驱动 器的 权限 。· audio可在 本地 赋予 一组 用户 访问 声音 设备 的权 限。· srcgroup拥有 源代 码以 及 /usr/src目录 下的 文件 。它 可以 在本 地赋 予某 个用 户管理 系统 源代 码的 权限 。
· 对于 管理 桌面 或低 级别 的系 统管 理员,可 设置 他们 为 staff成员,该 类成 员可 以 在/usr/local下工 作并 且可 以在 /home下创 建目 录。完整 列表 参阅 SecuringDebianManual的,FAQ” 章 节,亦 见 于 Woody中的 harden-doc软件包 。新 的 base-passwd(>3.4.6)软件 包亦 包含 了权 威列 表,/usr/share/doc/base-passwd/users-and-groups.html。
9.2.4更 安全地工作 –

sudo使用 sudo最主 要的 目的 是保 护自 己少 做蠢 事,我认 为使 用系 统时 使用 sudo比总 是使 用root帐号 更好 。Ubuntu系统 默认 使用 sudo,来 工 作,你 建 立的 第一 个帐 户将 自动 加入 到 admin组,admin
组的 成员 拥有 sudo的权 限。安装 sudo然后 编辑 sudoers中有 关选 项激 活它 。还 可在 /usr/share/doc/sudo/OPTIONS中查 看 的用 户组 特性 。样 例 中 的 配 置,设 定,staff” 用户 组成 员可 通过 sudo执行 任何 root权限 的命 令而,src”
用户 组成 员只 可执 行规 定的 一部 分 root权限 的命 令。使用 sudo的好 处在 于只 需一 个普 通用 户密 码登 录,并 且 所有 的活 动都 受到 监控 。 用 它为 低级别 的系 统管 理员 赋权 是个 好主 意。 例如,$sudochown-Rmyself:mygrp.
当然,如 果你 知道 root密码 (绝 大部 分在 家安 装系 统的 用户 都会 知道 ),就 可以 在普 通用户下 执行 任何 root命令,$su-c"shutdown-hnow"Paword:(我想我该严格限制 admin帐号的 sudo特权,但对于家中的服务器,就不用考虑那么多了 。 )
想了 解其 它允 许普 通用 户执 行 root权限 命令 的程 序,可以 看看 super软件 包。9.2.5服 务的访问限制
10
对于 Internet超级服务 器,inetd会在 系统 启动 时通 过 /etc/rc2.d/S20inetd( forRUNLEVEL=2) 加 载,S20inetd是一 个指 向 /etc/init.d/inetd的符 号链 接。 本 质 上,inetd允许 一个 运行 中的 守护 进程 (daemon)调用 其它 多个 守护 进程,以 减轻 系统 的负 载。当某 个服 务请 求到 达,系统 会查 询 /etc/protocols和 /etc/services中的 数据 库,确定该请 求所 指定 的相 关协 议和 服务,接 着 inetd会在 /etc/inetd.conf数据 库中 查找 普通
Internet服务 或 /etc/rpc.conf中查 找基 于 Sun-RPC的服 务。为了 系统 安全,请 在 /etc/inetd.conf中关 闭所 有不 用的 服务 。涉 及到 NFS和其 它基 于RPC的程 序时 需要 激活 Sun-RPC服务 。有时,inetd并不 直接 打开 请求 的服 务,而是 在 /etc/inetd.conf中将 该服 务名 作为 的参数,打开 tcpdTCP/IP守护 进程 包装 程序 。这 时,tcpd首先 登记 请求 并使 用/etc/hosts.deny和 /etc/hosts.allow进行 附加 的检 查,然后 再运 行相 应的 服务 程序 。如果 新版 的 Ubuntu系统 进行 远程 访问 时出 现问 题,可以 在 /etc/hosts.deny中注 释掉,ALL:PARANOID”,如 果有 该行 的话 。
更多 信息 参阅 inetd(8),inetd.conf(5),protocols(5),services(5),tcpd(8)、hosts_access(5)和 hosts_options(5)。有关 Sun-RPC的更 多信 息参 阅 rpcinfo(8),portmap(8)和/usr/share/doc/portmap/portmapper.txt.gz。
9.2.6集 中式验证 –

LDAP使用 轻形 目录 访问 控制 协议 ( LDAP) 参阅,· OpenLDAP· 管理 员指 南在 软将 包 openldap-guide中
· LDP:LDAPLinuxHOWTO· ImplementationHOWTO· OpenLDAP,extensiveusereports· OpenLDAPwithCourierIMAPandPostfix9.3刻 录机
ATAPI/IDE接口 的刻 录机 是时 下非 常流 行的 配件,它 是 极好 的系 统备 份工 具,特 别 是对 于 那些单 个文 件容 量一 般 <640MB的家 庭用 户。 更多 权威 的信 息,请参 阅 LDPCD-Writing-HOWTO。9.3.1概 述首先 需要 说明 的是,在 向 刻录 机发 送数 据过 程中,任 何数 据中 断都 会对 光盘 造成 无法 挽回 的损坏 。所 以 应选 购缓 冲区 尽可 能大 的刻 录机 。如 果 资金 充裕,就 别 再考 虑 ATAPI/IDE型 的,买台 SCSI型的 没错 。 如 果 可以 连接 IDE接口,就 使 用 PCI总线 ( 例 如,在 主 板上 ) 而 别用 ISA总线 ( SB16声 卡 使 用 的 就 是 它 )。当刻 录机 连接 到 IDE,驱 动 它的 通常 是 IDE-SCSI驱动 而非 旧式 的 IDECD驱 动,所 以,需要激 活 SCSI通 用 驱 动 。有 两 种 方 法 激 活 它,假 设 系 统 使 用 的 是 较 新 版 本 的 内 核( 如 2001年三 月 的 版 本 )。
1
对于 Linux2.6的内 核,你应 该使 用 IDE驱动 并直 接使 用 /dev/hdx这些 设备 名称 来访问。 这种 方式 你可 以使 用 DMA。9.3.2方 法一,modules+lilo如果 使用 的是 Ubuntu原装 内核,将 下 面的 内容 添加 到 /etc/lilo.conf,如 果有 多个 选项,
列出 时要 将它 们用 空格 分隔 开,append="hdx=ide-scsiignore=hdx"在此,刻 录机 使用 ide-scsi驱动 访问,hdx就代 表它,其 中 x代表 下列 任何 一种 设备,
hda接第 一个 IDE接口 作主 盘hdb接第 一个 接口 作从 盘hdc接第 二个 IDE接口 作主 盘hdd接第 二个 接口 作从 盘hde...hdh接扩 展 IDE接口 或 ATA66/100IDE接口完成 上述 配置 工作 后以 root身份 运行 下列 命令 激活 设备#liloshutdown-hnow
9.3.3方 法二:重编译 内 核Ubuntu用 make-kpkg创 建 新 内 核,使 用 make-kpkg时加 上新 的 --append_to_version参数可 创建 多重 内核 镜像 。参 阅 Ubuntu下的 Linux内核,第 7章。makemenuconfig后执 行下 列步 骤:
· bzImage· 包含 IDECDdriver(不 是必 须的,但 这样 更简 单)· 将 ide-scsi和 sg编译 进内 核,或编 译成 模块9.3.4配 置步骤下列 步骤 可让 系统 在启 动时 激活 内核 对刻 录机 的支 持,#echoide-sci>/etc/modulessg#cd/dev;ln-sfscd0cdrom手工激活可以这样做:
#modprobeide-scisg重启以后,用下列方法检查安装情况,$dmesg|less#apt-getinstallcdrecord
12
#cdrecord-scanbus[PerWarrenDodge]如果 机器 上同 时有 CD-ROM和 CD-R/RW,这 时 ide-scsi和 ide-cd可能会 产生 冲突,请 试试 在 /etc/modutils/aliases中加 上下 面的 内容,然 后运 行 update-modules并重 启系 统。
pre-installide-scsimodprobeide-cd上述 指令 指示 系统 在加 载 ide-scsi前先 加载 IDE驱动 。 IDE驱动 ide-cd接管 所有ATAPICD-ROM—— 对指 明 忽 略的 设备 除外 。剩 下的 设备 才由 ide-scsi来管 理。
9.3.5光 盘镜像文件( 可 引导光盘)将 target-directory/下的 文件 制作 成光 盘镜 像文 件 cd-image.raw(可 引导 系统,JolietTRANS.TBL-enabled格式 的光 盘; 如果 不需 要引 导系 统功 能,可去 掉 -b和 -c选 项 ),在第一 个软 驱中 插入 启动 软盘 然后 执行,
#ddif=/dev/fd0target-directory/boot.imgmkisofs-r-Vvolume_id-bboot.img-cbootcatalog-J-T\-ocd-image.rawtarget_directory/一个 有趣 的黑 客尝 试是 制作 一盘 DOS引导 光盘 。如 果上 述的 boot.img文件 中包 含了 通用DOS引导 软盘 镜像,光 盘 就可 以象 插在 软驱 ( A:) 中 的 DOS软盘 一样 引导 DOS系统 。 如 果再加 上 freeDOS就更 有趣 。想检 查该 光盘 镜像 文件,可 以在 回送 设备 ( loopdevice)上 加载 它。#mount-tiso9660-oro,loopcd-image.raw/cdromcd/cdrom
#mcumount/cdrom9.3.6刻 录光盘( R,R/W),
首先 进行 设备 测试 (假 设是 双倍 数刻 录) #nice--10cdrecord-dummyspeed=2dev=0,0disk.img如果 测试 通过,执 行下 面的 命令 刻录 CD-R
#nice--10cdrecord-v-ejectspeed=2dev=0,0disk.img或执 行下 面命 令刻 录 CD-RW#nice--10cdrecord-v-ejectblank=fastspeed=2dev=0,0disk.img
某些 型号 的 CD-RW刻录 机用 下面 的命 令更 好
13
#nice--10cdrecord-vblank=allspeed=2dev=0,0disk.img接下 来执 行 #nice--10cdrecord-v-ejectspeed=2dev=0,0disk.img
分两 步做 是必 要,这可 以防 止在 刻录 时遇 到数 据空 白产 生 SCSI超时 错误 。 nice参数 可时也要 做一 些调 整。 9.3.7制 作光盘镜像文 件某些 CD-R和商 业光 盘在 数据 末尾 追加 了空 白扇 区( junksectors),使 用 dd无法 拷贝 这些光 盘( Windows98CD就 是 其 中 之 一 )。 cdrecord软件 包中 有一 个 readcd命令,用 它可以将 任何 光盘 内容 拷贝 成镜 像文 件。 对 于 数据 盘,先 挂 载,运 行 df查看 它的 实际 大小,再将显 示的 数字 ( inblocks,===1024bytes) 除 以 2得到 实际 光盘 扇区 数 ( 2048bytes),带参 数运 行 readcd用该 硬盘 镜像 文件 烧制 CD-R/RW。#readcddev=target,lun,scsibusno#selectfunction11
其中,大 部 分情 况下 命令 行中 三个 参数 都为 0。 有 时 readcd给出 的扇 区数 会偏 多! 此 时 使用前 面用 挂载 镜像 的方 法得 出的 大小 值来 对上 述参 数赋 值效 果更 好。 应该 提醒 的是,如 果 你对 CD-ROM使用 dd的话,会 有 不少 问题 。 第 一 次执 行 dd时可 能 会产生 错误 信息 并丢 失光 盘镜 像末 端的 一些 数据 。 再 次 执行 dd时,如 果 没有 指定 镜像 的大 小的话,在 一些 系统 上会 产生 一个 过大 光盘 镜像,其 末端 都是 垃圾 。只 有第 二次 运行 dd时,
使用 正确 的镜 像大 小并 在看 到错 误信 息之 后不 弹出 光盘,才 能 避免 这些 问题 。 例 如,假 设 用df得到 镜像 的大 小为 46301184blocks,则 执行 两次 下面 的命 令可 以得 到正 确的 镜像 (这是 我 的 经 验 ),#ddif=/dev/cdromof=cd.imgbs=2048count=$((46301184/2))
9.3.8Ubuntu安 装盘镜像有关 UbuntuCDs的最 新信 息,请浏 览 UbuntuCDsite。如果 有较 快的 Internet连接,可 考虑 用下 面的 引导 方法 从网 络安 装系 统:
· 一些 软盘 镜像 。· 一个 迷你 型可 引导 光镜 像 。如果 没有 较快 的 Internet连接,可 考虑 从 光盘 分发 免费 获取 安装 光盘 。请不 要浪 费带 宽来 下载 标准 光盘 镜像 ( 即 使是 使用 新的 jigdo方 式 ),除 非 你 是 光 盘 镜 像 测试员 。 有一 个很 有名 的光 盘镜 像 KNOPPIX-LiveLinuxFilesystemOnCD。该 光 盘 可 以 启 动 一 个全功 能的 Debian系统 而且 不需 要在 硬盘 上安 装。9.3.9将 系统备份到 CD-R
14
想要 将重 要的 配置 文件 和数 据备 份到 CD-R,可 使用 backup中的,backup” 脚本 。亦 可参阅 差异 备份 与数 据同 步,第 8.4节。9.3.10将 音乐 CD刻 录到 CD-R我没 测试 过:
#apt-getinstallcdrecordcdparanoiacdparanoia-s-B#cdrecorddev=0,0,0speed=2-v-dao-ejectdefpregap=1-audio*.wav或
#apt-getinstallcdrdao#diskatoncecdrdaoread-cd--device/dev/cdrom--paranoia-mode3my_cd#readcd# write--speed8my_cd#writeanewCDcdrdao与拷 贝不 同( 如没 有数 据间 隙,等,..) 。
9.3.11刻 录 DVD-R,DVD-RW和 DVD+RW刻录 DVD光盘 有两 种方 式:· 使用 growisofs并搭 配 mkisofs。· 按照 /usr/share/doc/cdrecord/README.DVD.Debian的说 明重 新编 译 cdrecord,
并创 建加 入了 dvd支持 的本 地软 件包 。9.4XX窗口 系统 由 XFree86提供 。 Ubuntu的最 早系 统中 X服务 器有 两个 主要 版本,XFree86Version3.3(XF3)和 XFree86Version4.xseries(XF4),它 们都 是基 于 X.Org制定 的
X11R6标准 。现 在全 部使 用 xorg。想了 解 X的基 础知 识,可参 阅 X(7),LDPXWindow-User-HOWTO和 RemoteXAppsmini-HOWTO。 对 Debian用户 专门 的指 南,可阅 读 xfree86-common软件 包中 提供 的/usr/share/doc/xfree86-common/FAQ.gz,其 中 BrandenRobinson有一 些关 于 keybinding的有 趣且 权威 的讨 论。
X服务 器,第 9.4.3节,:该程 序存 在于 那些 需要 在用 户显 示器 ( CRT,LCD)上 显示 X窗口和 桌面 并接 收键 盘和 鼠标 输入 的本 地主 机上 。 X客户 端,第 9.4.4节,:该程 序存 在于 那些 需要 运行 与 X兼容 的应 用程 序的 (本 地或 远程) 主机 上。
这正 好将 常规 的,服务 器,和,客户 机,关系 倒转 过来 。有几 种途 径让,Xserver” (显 示端 )接 收远 程,Xclient” (应 用端 )的 连接 请求,· xhost方式
15
o主机 列表 机制 (很 不安 全)。 协议 不加 密( 易受 到网 络监 听攻 击)o尽量 不要 使用 该方 式。 参阅 联接 远程 的 X服务 器 – xhost,第 9.4.7节 和 xhost(1x)。· xauth方式
oMITmagiccookie机制 (不 安全 但比 xhost强 点 )。协议 不加 密( 易受 到网 络监 听攻 击)o仅用 于本 地连 接,它所 需的 CPU消耗 比 ssh-X低。参阅 X下获 取 root权限,第 9.4.12节 和 xauth(1x)。· xdm,wdm,gdm,kdm,...方式
oMITmagiccookie机制 (和 xauth一样 不安 全)参阅 xdm(1x)和 Xsecurity(7)获得 更多 有关 X显示 访问 控制 的基 础知识o参阅 wdm(1x),gdm(8)和 kdm.options(5)获得 更多 信息,当 然先 得装 上它们 。o参阅 自定 义运 行级 别,第 2.4.3节了 解如 何在 不删 除 xdm包的 情况 下禁用它,使 系统 启动 到控 制台 。· ssh-X方式o基于 安全 shell的端 口发 送机 制( 安 全 ) 。加密 协议 (在 本地 使用 很耗 系统 资源 )。
o使用 它进 行远 程连 接。 参阅 联接 远程 的 X服务 器 – ssh,第 9.4.8节。除了 ssh,所 有的 远程 连接 方式,都 需要 X服务 器开 启 TCP/IP连接 。参 阅 在 TCP/IP中使用 X,第 9.4.6节。
9.4.1X软 件包提供 了下 列几 个( meta)软 件包 来简 化 X的安 装。x-window-system-core::该综 合包 提供 一些 基本 组件,用 于 在单 一工 作站 上运 行 XWindow系统,其 中 包括 X函数 库,一 个 X服务 器 ( xserver-xfree86),一 套 字 体,一 组 基 本 的 X
客户 端及 工具 。 x-window-system::该综 合包 提供 XFree86项目 开发 的所 有 XWindow系统 的组 件,以及一套 经久 不衰 的辅 助程 序。( 注意,它 包 含了 x-window-system-core,twm和 xdm等组 件,故安 装了 它就 不用 再安 装 x-window-system-core了 。)
xserver-common-v3::XFree863.xX服务 器( X3)相 关的 程序 和工 具。xserver-*::XF3服务 器软 件包 的补 充包,包 含了 对那 些新 的 XF4服务 器( xserver-xfree86) 不 支 持的 硬件 的支 持。 如 XF4不支 持某 些老 式的 ATImach64卡,某 些 视频 卡 在Woody版的 XF4中无 法工 作等 等。( 要获 得可 用软 件包,可 执行 apt-cachesearchxserver-|less。所 有这 些 XF3服务 器均 是基 于 xserver-common-v3的 。)
16
大多 数情 况下,应 该 安装 x-window-system(如 果要 通过 控制 台登 录,需 禁 用 xdm,具 体 方法参 阅,我不 想直 接启 动到 X!,,第 8.1.4节 。)9.4.2X服 务器的硬件侦测在安 装 X系统 之前 安装 下列 软件 包,就能 在 X配置 阶段 实现 硬件 侦测,
· discover– 硬件 识别 系统 。· mdetect– 鼠标 自动 侦测 工具 。· read-edid– VESAPnP监视 器硬 件信 息收 集工 具。9.4.3X服 务器有关 X服务 器的 信息,参 阅 xorg(1x)。从本 地控 制台 调用 X服务 器:$startx--:<display>vtXXe.g.:
$startx--:1vt8-bpp16...startonconnectedtolocalhost:1with16bppmode--后面 的参 数用 于设 置 X服务 器。
注意,在 使用 ~/.xserverrc脚本 定制 X服务 器启 动进 程时,请 确保 exec调用 的是 真正的 X服务 器。 如果 没这 么做 会导 致 X服务 器启 动缓 慢及 退出 。例 如:#!/bin/shexec/usr/bin/X11/X-dpi100-nolistentcp
9.4.3.1配 置 X服 务器(版本 4)(重 新) 配置 XF4服务 器,#dpkg-reconfigure--priority=lowxserver-xorg
该命 令会 生成 /etc/X11/xorg.conf文件 并调 用 dexconf脚本 来配置 X。9.4.3.2配 置 X服 务器(版本 3)(重 新) 配置 XF3服务 器。 例如,针 对 ATImach64,
#dpkg-reconfigure--priority=lowxserver-common-v3xserver-mach64该命 令会 生成 /etc/X11/XF86Config文件 并调 用 xf86config-v3脚本 来配置 X。
17
9.4.3.3手 工配置 X服 务器往文 件 /etc/X11/xorg.conf中添 加用 户自 定义 内容 时,不 要在配置文件的定义段落 中 进 行编 辑,###BEGINDEBCONFSECTION
[snip]###ENDDEBCONFSECTION正 确是做法是将用户定义内 容 加在定义段 落 之前 。例 如,要添 加自 定义 视频 卡,可在 文件开头 添加 类似 下面 的内 容:
Section"Device"Identifier"CustomDevice"Driver"ati"Option"NoAccel"EndSection
Section"Screen"Identifier"CustomScreen"DeviceDevice"Monitor"GenericMonitor"DefaultDepth24Subsection"Display"
Depth8Modes"1280x960""1152x864""1024x768""800x600""640x480"EndSubsectionSubsection"Display"Depth16Modes"1280x960""1152x864""1024x768""800x600""640x480"
EndSubsectionSubsection"Display"Depth24Modes"1280x960""1152x864""1024x768""800x600""640x480"EndSubsectionEndSection
Section"ServerLayout"Identifier"Custom"Screen"CustomScreen"InputDevice"GenericKeyboard""CoreKeyboard""ConfiguredMouse""CorePointer"EndSection
对于 Sarge(撰 写本 文时 是 testing),如 果你 希望 在升 级的 时候 保留 用户 的自 定义 的/etc/X11/xorg.conf设置,请 用 root运行 下列 命令,#cp/etc/X11/xorg.conf/etc/X11/xorg.conf.custommd5sum/etc/X11/xorg.conf>/var/lib/xfree86/xorg.conf.md5sum
18
#dpkg-reconfigurexserver-xorg如果 想美 化字 体,请按 照 X下的 TrueType字体,第 9.4.13节中 的说 明来 修改/etc/X11/xorg。
请同 时检 查 X设置 中的 其他 部分 。不 良的 显示 器设 置甚 至比 难看 的字 体更 让人 头痛,所 以请确 保你 设置 的刷 新率 是你 显示 器能 处理 的最 高刷 新率( 85Hz很 好,75Hz还 可 以,60Hz就 很 糟 糕 了 )。 9.4.4X客 户端绝大 多数 X客户 端程 序都 可以 用类 似下 面的 命令 启动,client$xterm-geometry80x24+30+200-fn6x10-displayhostname:0&命令 行中 各参 数的 含义 如下,
· -geometryWIDTHxHEIGHT+XOFF+YOFF:窗 口初 始尺 寸和 位置 。· -fnFONTNAME:显 示文 本的 字体 。 FONTNAME的赋 值有 如下 几个,oa14:普通 字体a24:大号 字体o...(使 用 xlsfont检 查 可 用 字 体 。)
· -displaydisplayname,X服务 器名 称。 displayname的赋 值有 如下 几个,ohostname:D.S表示 在名 为 hostname的主 机的 显示 器 D上显 示的 屏幕 S;工作 于该 显示 器的 X服务 器监 听 TCP端口 6000+D。ohost/unix:D.S表示 在 host主机 的显 示器 D上显 示的 屏幕 S;工 作于 该显示 器的 X服务 器监 听 UNIXdomainsocket/tmp/.X11-unix/XD(故 只 能从 主 机 访 问 它 )。o:D.S等价 于 host/unix:D.S,其 中 host代表 本地 主机 名。默认 的 X客户 端程 序 ( 应用 端) 的 displayname可通 过 DISPLAY环境 变量 来设 置。 例 如,在运 行某 客户 端程 序之 前,执行 下列 命令 之一 就可 以完 成设 置工 作:
$exportDISPLAY=:0#默认 情况 下,本地 机器 使用 第一 个 X屏幕$exportDISPLAY=hostname.fulldomain.name:0.2DISPLAY=localhost:0
程序 启动 方式 可以 在 ~/.xinitrc中进 行自 定义 。例 如:xrdb-load$HOME/.Xresourcesxsetroot-solidgray&xclock-g50x50-0+0-bw0&xload50x50-50+0
xterm-g80x24+0+0&80x24+0-0
19
twm正如 自定 义 X会话,第 9.4.5.1节中 所描 述的,当 使 用 startx启动 X时,该 脚 本将 重载 Xsession所做 的所 有常 规操 作,通常 用 ~/.xsession来代 替,而该 方法 仅作 为最 后的手段 使用 。参 阅 xsetroot(1x),xset(1x)和 X资源,第 9.4.10节。
9.4.5X会 话X会话 ( X服务 器 +X客户 端) 可使 用下 列方 法启 动:· startx,xinit的脚 本化 命令 ( wrapperscriptcommand),负 责 从 Linux字符 型控制 台启 动 X服务 器和 客户 端。 如果 ~/.xinitrc文件 不存 在,
/etc/X11/xinit/xinitrc会调 用并 执行 /etc/X11/Xsession。· xdm,gdm,kdm或 wdm,X显示 管理 器守 护进 程,负 责启 动 X服务 器和 客户 端,并管理 来自 GUI屏幕 的登 录行 为。 直接 执行 /etc/X11/Xsession。想使 用控 制台 参阅,我不 想直 接启 动到 X!,,第 8.1.4节。
9.4.5.1自 定义 X会 话默认 的启 动脚 本 /etc/X11/Xsession是 /etc/X11/Xsession.d/50xfree86-common_determine-startup和 /etc/X11/Xsession.d/99xfree86-common_start的高 效的结合 体。
/etc/X11/Xsession的执 行会 受 /etc/X11/Xsession.options的影 响,从本 质上 讲,它使用 exec命令 执行 系统 中按 下面 的次 序排 序,排在 第一 位的 程序,· ~/.xsessionor~/.Xsession,如 果它 被定 义。· /usr/bin/x-session-manager,如 果它 被定 义。· /usr/bin/x-window-manager,如 果它 被定 义。
· /usr/bin/x-terminal-emulator,如 果它 被定 义。Ubuntu选择 系统 Ubuntualternativesystem) 对 这 些命 令的 确切 定义 进行 了描 述,参 阅Alternative命令,第 6.5.3节。 例如,#update-alternatives--configx-session-manager
...或#update-alternatives--configx-window-manager如果 想定 义某 X窗口 管理 器为 默认 窗口 管理 器,同时 保留 已安 装的 GNOME和 KDE会话 管理器,按 下面 的方 法编 辑 /etc/X11/Xsession.options来禁 用 X会话 管理 器:
#/etc/X11/Xsession.options#configurationoptionsfor/etc/X11/XsessionSeeXsession.options(5)anexplanationoftheavailableoptions.#Defaultenabledallow-failsafe
allow-user-resources
120
allow-user-xsessionuse-ssh-agent#Defaultdisabled(enablethembyuncommenting)do-not-use-x-session-manager#do-not-use-x-window-manager
如果 不想 按上 述方 法修 改系 统,由于 gnome-session和 kdebase软件 包包 含了 那些 X会话管 理器 。所 以删 除它 们,X窗口 管理 器就 成了 默认 窗口 管理 器了 。( 废 话,还更 好的 主意吗? ) 对于 那些 /etc/X11/Xsession.options中仅 包含 一行 allow-user-xsession的 系 统,任 何定义 了 ~/.xsession或 ~/.Xsession的用 户,均 可以 自定 义 /etc/X11/Xsession的行 为 。
~/.xsession文件 中排 在最 后的 命令,其 格 式应 该为 execsome-window/session-manager,用来 启动 你喜 欢的 X窗口 /会话 管理 器。/usr/share/doc/xfree86-common/examples/xsession.gz给出 了一 个不 错的 ~/.xsession脚本 样例 。
我使 用它 来为 每个 用户 设置 窗口 管理 器、屏 幕访 问和 语言 支持 。参 阅 针对 用户 启动 X会 话,第 9.4.5.2节,X下获 取 root权限,第 9.4.12节,多语 言的 X窗口 系统 范例,第9.7.9节。如果 你希 望一 些 X客户 端程 序能 自动 启动,参 阅 X客户 端,第 9.4.4节 的范 例并 将其 写在 ~/.xsession而不 是 ~/.xinitrc。
用户 自己 添加 的 X资源 保存 在 ~/.Xresources,而 系统 级的 X资源 保存 于/etc/X11/Xresources/*。参 阅 xrdb(1x)。用户 可以 在 ~/.xmodmaprc中自 定义 键盘 布局 和鼠 标按 键布 局,参阅 xmodmap(1x)。9.4.5.2针 对用户启动 X会 话遵循 自定 义 X会话,第 9.4.5.1节中 描述 的原 则,要激 活用 户特 定的 X会话 /窗口 管理器,需要 安装 相应 的软 件包 并在 ~/.xsession文件 末尾 添加 如下 内容 (我 爱用blackbox/fluxbox,它 简 单 快 捷 。):· 默认 X会话 管理 器
o参阅 Alternative命令,第 6.5.3节,exec/usr/bin/x-session-manager· 默认 X窗口 管理 器o参阅 Alternative命令,第 6.5.3节,
exec/usr/bin/x-window-manager· GNOME会话 管理 器 (loaded)o需安 装软 件包,gnome-session
12
oexec/usr/bin/gnome-session· KDE会话 管理 器 (loaded)o需安 装软 件包,kdebase(orkdebase3forKDE3)exec/usr/bin/kde2
· Blackbox窗口 管理 器 (lightweight,slick).o需安 装软 件包,blackboxexec/usr/bin/blackbox· Fluxbox窗口 管理 器 (lightweight,newblackbox).
o需安 装软 件包,fluxboxexec/usr/bin/fluxbox· Xfce窗口 管理 器 (MacOS-X,SUNCDElike).o需安 装软 件包,xfce
exec/usr/bin/xfwm· IceWM窗口 管理 器 (lightweight,GNOMEalternative)o需安 装软 件包,icewmexec/usr/bin/X11/icewm
· FVWM2虚拟 窗口 管理 器 (lightweight,Win95like)o需安 装软 件包,fvwmexec/usr/bin/fvwm2· Windowmaker窗口 管理 器 (somewhatNexTlike)
o需安 装软 件包,wmakerexec/usr/bin/wmaker· Enlightenment窗口 管理 器 (loaded).o需安 装软 件包,enlightenment
exec/usr/bin/enlightenment参阅 WindowManagersforX.9.4.5.3配 置 KDE/GNOME
要配 置完 整的 KDE或 GNOME环境,下 列的 综合 包很 有用,· KDE:安 装 kde软件 包· GNOME:安 装 gnome软件 包
12
请使 用能 操作 Recommends类软 件包 的安 装工 具安 装这 些软 件包,如 dselect和aptitude,比 起 apt-get它们 能提 供更 丰富 的软 件供 你选 择。如果 想从 控制 台登 录,必 须 禁用 X显示 管理 器,例 如 kdm,gdm和 wdm这会 牵扯 到一 些 关联问 题,有关 信息 参阅,我不 想直 接启 动到 X!,,第 8.1.4节。
如果 想将 系统 的默 认环 境由 KDE换成 GNOME,请 用 Alternative命令,第 6.5.3节中 所述的 方法 配置 x-session-manager。9.4.6在 TCP/IP中 使用 X由于 不加 密的 远程 TCP/IP套接 字连 接易 受到 窃听 攻击,新 版的 Debian安装 X时默 认是禁用 TCP/IP套 接 字 口 的 。建 议 使 用 ssh进行 远程 X连 接( 参 阅 联接 远程 的 服务 器 –ssh,第 9.4.8节 )。通常 不推 荐使 用本 节所 述的 方法,除 非 系统 处于 防火 墙之 后且 所处 网络 中全 是绝 对可 信任 的用户 。使 用下 面的 命令 检查 当前 X服务 器的 TCP/IP套接 字口 的设 置:
#find/etc/X11-typef-print0|xargs-0grepnolisten/etc/X11/xinit/xserverrc:exec/usr/bin/X11/X-dpi100-nolistentcp删除 -nolisten就可 以恢复 X服务 器对 TCP/IP的监 听。
9.4.7联 接远程的 X服 务器 –

xhostxhost允许 通过 主机 名访 问。 该方 式极 不安 全。 下面 的方 法将 关闭 主机 验证 功能,只 要TCP/IP套接 字连 接功 能是 打开 的( 参阅 在 TCP/IP中使 用 X,第 9.4.6节) 本机 就会 接收来 自任 何地 方的 连接 请求 。
$xhost+要重 新打 开主 机验 证功 能可 执行,$xhost-
无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是伪造的。 如果 处于 一个 不可 信的 网络 环境 (例 如通 过 PPP拔号 连接 到 Internet),即 使 在 网 络 中 成为主 机受 到一 定标 准的 限制,也 应尽 量避 免使 用该 连接 方式 。参 阅 xhost(1x)。
9.4.8联 接远程的 X服 务器 –

ssh使用 ssh可以 在本 地主 机和 远程 应用 服务 器之 间建 立一 个安 全的 连接 通道 。· 如果 不想 每次 执行 相同 的命 令行 选项,可 在远 程主 机的 /etc/ssh/sshd_config文件中,打 开 X11Forwarding和 AllowTcpForwarding选项 。
· 启动 本地 主机 的 X服务 器。· 在本 地主 机上 开一 个 xterm进程 。· 运行 ssh建立 与远 程站 点的 连接 。
123
localname@localhost$ssh-q-X-lloginnameremotehost.domainPassword:.....· 在远 程站 点上 运行 X应用 程序 命令 。
loginname@remotehost$gimp&该连 接方 式使 得远 程 X客户 机上 的屏 幕输 出,看上 去就 好象 是通 过本 地 UNIX域套 接字 的方式 连接 到服 务器 的客 户机 输出 。 9.4.9X终 端模拟器 –

xterm学习 xterm可以 去 http://dickey.his.com/xterm/xterm.faq.html。9.4.10X资 源许多 老式 的 X程序,如 xterm,使 用 X资源 数据 库配 置它 们的 外观 。 ~/.Xresources文 件用于 保存 用户 资源 定义 。登 录后 该文 件自 动合 并到 默认 的 X资源 中。 系统 范围 的缺 省配 置存储 在 /etc/X11/Xresources/*中,应用 程序 缺省 的配 置存 储在 /etc/X11/app-defaults/*。使 用这 些设 置作 为学 习的 起点 。这儿 是一 些有 用的 设置,可 加到 ~/.Xresources文件 中:
!Setthefonttoamorereadable9x15XTerm*font:9x15!DisplayascrollbarXTerm*scrollBar:true
!Setthesizeofthebufferto1000linesXTerm*saveLines:1000!LargektermscreenKTerm*VT100*fontList:-*-fixed-medium-r-normal--24-*,\-*-gothic-medium-r-normal--24-*,\
-*-mincho-medium-r-normal--24-*要使 上述 设置 立即 生效,可 用下 面的 命令 将它 们合 并到 数据 库,xrdb-merge~/.Xresources
参阅 xrdb(1x)。9.4.11X中 键盘和指针按钮的映 射xmodmap程序 用来 编辑 和显 示键 盘修 订表 和按 键映 射表 的,客 户端 程序 用它 们来 把按 键代 码事件 (eventkeycodes)转换 成 X中的 keysyms。
124
$xmodmap-pm...显示 当前 按键 修订 表$xmodmap-pk|pager...显示 当前 按键 映射 表$xmodmap-e"pointer===321"#设置 为惯 用左 手鼠 标~/.xmodmaprc#用 ~/.xmodmaprc中的 描述 设置 键盘通常 从用 户的 会话 中启 动脚 本,从 ~/.xsession中执 行。要获 得按 键代 码 (keycode),请 在 X中运 行 xev并按 键。 要想 获得 keysym的含 义,请从宏定 义文 件 /usr/include/X11/keysymdef.h中查 找。 该文 件中 所有 的 #define声明 都用XK_命名,伪 装成 keysym的名 字。
参阅 xmodmap(1x)。9.4.12X下 获取 root权 限如果 运行 GUI程序 时需 要 root权限,请 用下 面的 步骤 在用 户的 X服务 器上 显示 程序 输出。 千 万不要直接使用 root帐 号启动 X服 务器 以避 免承 担不 必要 的安 全风 险。
以普 通用 户身 份启 动 X服务 器,开一 个 xterm控制 台窗 口,执行,$XAUTHORITY=$HOME/.XauthorityexportXAUTHORITY$surootPassword:*****
#printtool&非 root用户 以 su方式 运用 该技 巧时,要 确保 该非 root用户 所在 用户 组对~/.Xauthority文件 有读 权限 。想要 系统 自动 执行 该命 令序 列,请在 用户 帐号 下创 建 ~/.xsession文件,编 辑文 件如 下:
#ThismakesXworkwhenIsutotherootaccount.if[-z"$XAUTHORITY"];thenXAUTHORITY=$HOME/.XauthorityexportXAUTHORITYfiunsetXSTARTUP
#Ifaparticularwindow/sessionmanagerisdesired,uncommentfollowingandeditittofityourneeds.#XSTARTUP=/usr/bin/blackbox#Thisstartsx-window/session-managerprogramif[-z"$XSTARTUP"];then-x/usr/bin/x-session-manager];then
XSTARTUP=x-session-managerelif[-x/usr/bin/x-window-manager];thenXSTARTUP=x-window-managerelif[-x/usr/bin/x-terminal-emulator];thenXSTARTUP=x-terminal-emulator
125
fi#executeautoselectedXwindow/sessionmanagerexec$XSTARTUP
接着 在用 户的 xterm窗口 中运 行 su(不是 su-)。 现 在 从 该 xterm启动 的 GUI程序 就 可以在 该用 户的 Xwindow环境 中显 示以 root权限 运行 的程 序输 出。 只要 执行 了默 认的/etc/X11/Xsession,就 可 以使 用该 方法 。 如 果用 户使 用 ~/.xinitrc或 ~/.xsession来 配置自 定义 环境,需 要将 上面 提到 的环 境变 量 XAUTHORITY加到 这些 脚本 中去 。还有 一种 方法,sudo可用 于自 动执 行上 面的 命令 序列,
$sudoxterm...或$sudo-H-s这时 /root/.bashrc中应 包含,
if[$SUDO_USER];thensudo-H-u$SUDO_USERxauthextract-$DISPLAY|xauthmerge-fi即使 对那 些 home目录 位于 NFS上的 用户,它 也能 正常 工作 。因 为 root不用 读
.Xauthority文件 。还有 一些 用于 该目 的的 专用 软件 包,kdesu,gksu,gksudo,gnome-sudo和 xsu。 其 它方 法也可 以达 到同 样的 目的,如 在 /root/.Xauthority和相 应用 户文 件之 间创 建一 个符 号链 接 ;使用 sux脚本 ;或 对 root初始 化脚 本执 行,xauthmerge~USER_RUNNING_X/.Xauthority” 。
更多 方法 参阅 debian-develmailinglist。9.4.13X下 的 TrueType字 体xorg中标 准的 xfs能完 美地 驱动 TrueType字体,如 果 你使 用的 是 XFree86-3,就 得 安 装第三 方字 体服 务器 如 xfs-xtt。
不论 什么 应用 程序,如 果要 使用 TrueType字体,就 要与 libXft或 libfreetype建立 链接( 如果 你使 用的 是已 编译 好的,deb包,就不 用在 这方 面操 心了 )。首先 进行 字体 支持 的基 础设 置,· 安装 软件 包 x-ttcidfont-conf和 defoma。它 们能 自动 生成 文件 fonts.scale和
fonts.dir。#apt-getinstallx-ttcidfont-conf
126
· 编辑 /etc/X11/xorg.conf的 Section"Files"部分,如 下显 示:Section"Files"FontPath"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType""/usr/share/fonts/truetype"FontPath"/usr/lib/X11/fonts/CID"
"/usr/lib/X11/fonts/Speedo"FontPath"/usr/lib/X11/fonts/misc""/usr/lib/X11/fonts/cyrillic"FontPath"/usr/lib/X11/fonts/100dpi:unscaled""/usr/lib/X11/fonts/75dpi:unscaled"FontPath"/usr/lib/X11/fonts/Type1"
EndSection第一 行使 xorg使用 任何 你从 Ubuntu软将 包安 装的 TrueType字体 。因 为 xorg渲染Type1字 体 的 效 果 很 差,Type1字体 的目 录就 放在 后面 了。点 阵 字体 的小 技巧,unscaled对于新 的 XF4来说 是不 需要 的,我 把 它包 含在 内是 为了 确保 万无 一失 。 为了 保留 手工 修改 的
/etc/X11/xorg.conf文件,请 按照 手工 配置 X服务 器,第 9.4.3.3节的 说明 操作 。然后 安装 DFSG字体 软件 包:· 西方 TrueType字体,
ottf-bitstream-vera:一 套由 Bitstream,Inc创造 的高 质量 的 TrueType字体 。 [40]ottf-freefont:一 套高 质量 的 TrueType字体,包 含了 UCS字符 集。ttf-thryomanes,一 套包 括了 Latin,Greek,Cyrillic和 IPA的 UnicodeTrueType字体 。
· 亚洲 字体,otfm-arphic-bsmi00lp:ChineseArphic"ARPLMingti2LBig5"TrueTypefontTeXfontmetricdataotfm-arphic-bkai00mp:ChineseArphic"ARPLKaitiMBig5"TrueTypefontTeXfontmetricdata
otfm-arphic-gbsn00lp:ChineseArphic"ARPLSungtiLGB"TrueTypefontTeXfontmetricdataotfm-arphic-gkai00mp:ChineseArphic"ARPLKaitiMGB"TrueTypefontTeXfontmetricdataottf-baekmuk:KoreanBaekmukseriesTrueTypefontshbf-jfs56:ChineseJiantiFangsong56x56bitmapfont(GB2312)for
CJKohbf-cns40-b5:ChineseFantiSong40x40bitmapfont(Big5)forCJKhbf-kanji48:JapaneseKanji48x48bitmapfont(JISX-0208)CJK由于 供 自 由 使用 的字 体有 时很 有限,Debian用户 也可 以安 装或 共享 某些 商业 TrueType字体。 为了 简化 安装 这类 字体 的工 序,于是 产生 了一 些方 便的 软件 包,· ttf-commercial
127
· msttcorefonts(>1.1.0)[41]请慎 重选 择 TT字体,以 免 自 由 系统 受到 不自 由字 体的 污染 。所有 这些 Debian字体 软件 包不 用设 置就 能工 作,并且 对于 使用,core” 字体 系统 的 X程序来 说,它都 是可 用的 。包 括 Xterm,Emacs和其 他一 些非 KDE和 gnome的程 序。
现在 运行 xfontsel,在 fndry菜单 中选 中任 何一 个 TrueType字体,你 可以 在,fmly”菜单 中看 到很 多项 目。 对于 KDE2.2和 GNOME1.4(搭 配 libgdkxft0使 GTK1.2能 对 字 体 进 行 反 锯 齿 的 渲 染 ),同样 的你 需要 配置 Xft1。 Xft1非常 的过 时了,基 本上 只有 GNOME1.4和 KDE2.2在 使 用 。编辑 /etc/X11/XftConfig文件,在 其他,dir” 之前 加入 下面 这一 行东 西。
dir"/var/lib/defoma/x-tcidfont-conf.d/irs/TrueType"[42]对于 GNOME2和 KDE3( Sarge之 后 的 版 本 ),你 需 要 设 置 fontconfig,Xft2用它 来查 找 字体。 你不 必为 此再 安装 其他 额外 的软 件包,因 为所 有用 到 的软 件包 都会 依赖与它 的。
首先,查 看 /etc/fonts/fonts.conf。里 面应 该有 如下 的一 行内 容。 如果 没有,就 打开/etc/fonts/local.conf,在 <fontconfig>行后 面添 加这 些内 容。<dir>/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType</dir>Fontconfig应 该 能 直 接 获 得 字 体 信 息,,fc-list” 能列 出你 的新 字体 。另 外一 个 fontconfig
的特 色是,你 能把 字体 放在 ~/.fonts/中,而所 有字 体可 设置 的程 序都 能立 即访 问它 们。如果 你在 X中手 动安 装了 新的 一个 TrueTyep字体,而 没有 使用 Ubuntu的软 件包,运 行#xsetfprehash
让 xorg重新 检查 目录 下面 的内 容并 找到 新的 字体 。9.4.14X中 的网页浏览器Dapper发行 版中 包含 了下 面这 些拥 有图 形处 理能 力的 网页 浏览 器:
· mozillaMozilla浏览 器· mozilla-firefoxMozilla浏览 器变 体( 独立 的)· epiphany-browser浏览 器变 体( Gnome)· galeon基于 Mozilla的使 用 GnomeUI的浏 览器 (新 增)· konquerorKDE浏览 器· amayaW3C参考 浏览 器
·,..在 Dapper或 Edgy中,将会 遇到 mozilla变体 浏览 器的 版本 匹配 问题,因 为这 些变 体浏览器 需要 匹配 共享 库的 版本 。
128
安装 诸如 mozilla浏览 器的 插件,可 手 工将,*.so” 装到 plug-in目录 下,然 后重 启浏 览器。 Plug-in资源,· Javaplug-in:从 http://java.sun.com安装 二进 制的,J2SE” 。
· Flash从 http://www.macromedia.com/software/flashplayer/安装 二进制 的,MacromediaFlashPlayer5”· freewrl:VRML浏览 器和 Netscapeplug-in·,..9.4.15X图 形界面下的邮件客户 端 ( MUAs)
在 Sarge发行 版下,有 几个 客户 端软 件包 有图 形显 示界 面:· mozilla-thunderbird独立 的邮 件客 户端· kmailKDE邮件 客户 端· evolutionNovell里面 的 groupware套件·,..
9.5SSHSH( SecureSHell)是 在 Internet中建 立连 接的 安全 途径 。 OpenSSH是一 个自 由的 SSH实现软 件,它包 含 在 Debian的 ssh软件 包中 。9.5.1SSH基 础首次 安装 OpenSSH服务 器和 客户 机。#apt-getupdate&&apt-getinstallssh要运 行 OpenSSH服务 器,还得 屏蔽 掉 /etc/ssh/sshd_not_to_be_run。
SSH有两 个验 证协 议:· SSH协议 第 1版:oPotato发布 版仅 支持 该版 协议可用 的验 证方 法:
§ RSA验证,基 于 RSA密钥 的用 户验 证§ Rhosts验证,基 于,rhosts的主 机验 证( 不安 全,有缺 陷)§ RhostsRSA验证,验证 与 RSA主机 密钥 相结 合( 有缺 陷)§ ChallengeResponse验证,RSAChallenge-response验证§ Password验证,基 于 password的验 证
· SSH协议 第 2版oWoody后继 版本 将以 该版 协议 为主可用 的验 证方 式:
129
§ Pubkey验证,基 于公 共密 钥的 用户 验证§ Hostbase验 证,,rhosts或 /etc/hosts.equiv验证 与公 共密 钥 客户端 主机 验证 相结 合( 有缺 陷)§ ChallengeResponse验证,challenge-response验证§ Password验证,基 于 password的验 证如果 系统 正迁 移到 Woody或使 用非 Debian系统,请 注意 版本 差异 。更多 信息 请参 阅 /usr/share/doc/ssh/README.Debian.gz,ssh(1),sshd(8),ssh-agent(1)和 ssh-keygen(1)。下面 是一 些关 键的 配置 文件,
· /etc/ssh/ssh_config:默 认的 SSH客户 机。 参阅 ssh(1)。其 中重 要的 项目 有:oHost,作 用 于所 有与 该关 键字 后所 列出 的主 机相 匹配 的主 机,它 们 须遵 守 下面 ( 处 于本 host关键 字之 后下 一个 host关键 字之 前的 内容 ) 所 列的 各 项条款 。oProtocol:规 定所 使用 的 SSH协议 的版 本。 默认 为,2,1” 。
PreferredAuthentications:规 定 SSH2客户 端验 证方 式。 默认 为,hostbased,publickey,keyboard-interactive,password” 。oPasswordAuthentication,如 果 想使 用密 码登 录,须 确 认该 选项 没有 设置 成no。oForwardX11:默 认为 关闭 状态 。可 使用 命令 行选 项,-X” 重载 它。
· /etc/ssh/sshd_config:默 认的 SSH服务 器。 参阅 sshd(8)。 其 中 重 要 的 项 目 有,oListenAddress:规 定 sshd监听 的本 地地 址。 允许 多重 指定 。AllowTcpForwarding:默 认为 关闭 状态 。oX11Forwarding:默 认为 关闭 状态 。
· $HOME/.ssh/authorized_keys:默 认公 共密 钥列 表,客户 机可 使用 这些 密钥 连接 本主机 的该 用户 帐号 。参 阅 ssh-keygen(1)。· $HOME/.ssh/identity:参 阅 ssh-add(1)和 ssh-agent(1)。下面 的操 作将 从客 户机 建立 一个 ssh连接 。
$sshusername@hostname.domain.ext-1username@hostname.domain.ext#ForceSSHversion1$ssh-oRSAAuthentication=no-lusernamefoo.host#forcepasswordonSSH1$ssh-oPreferredAuthentications=password-lusernamefoo.host#forcepasswordonSSH2
在用 户眼 里,ssh的功 能相 当于 一个 更灵 巧更 安全 的 telnet( willnotbombwith^]) 。9.5.2发 送端口 SMTP/POP3微 调在本 地机 器上 执行 下面 的命 令,可 以建 立一 个连 接本 地主 机 4025端口 和远 程服 务器 25端口的 管道,以 及一 个连 接本 地主 机 4110端口 和远 程服 务器 110端口 的 ssh连接 。
130
#ssh-q-L4025:remote-server:254110:remote-server:110\username@remote-server在 Internet上可 使用 该方 法建 立与 SMTP/POP3服务 器的 安全 连接 。记 得在 远程 主机 的/etc/ssh/sshd_config中设 置 AllowTcpForwarding值为 yes。
9.5.3用 更少的密码建 立 连接 –

RSA使用 RSAAuthentication( SSH1协议 ) 或 PubkeyAuthentication( SSH2协议 ) 可 不 必记 住每个 远程 系统 的连 接密 码。 在远 程系 统上,在 /etc/ssh/sshd_config中分 别设 置,RSAAuthenticationyes” 或
,PubkeyAuthenticationyes” 。然后 在本 地生 成验 证密 匙,在远 程系 统上 安装 公共 密钥,$ssh-keygen#RSAAuthentication:RSA1keyforSSH1cat.ssh/identity.pub|sshuser1@remote\
"cat->>.ssh/authorized_keys"...$ssh-keygen-trsa#PubkeyAuthentication:RSAkeyforSSH2cat.ssh/id_rsa.pub|sshuser1@remote\"cat->>.ssh/authorized_keys"...
$ssh-keygen-tdsa#PubkeyAuthentication:DSAkeyforSSH2cat.ssh/id_dsa.pub|sshuser1@remote\"cat->>.ssh/authorized_keys"今后 可用,ssh-keygen-p” 来改 密码 。最 后记 得检 查一 下设 置,可做 个连 接测 试,如遇 问题,执行,ssh-v” 。你可 以通 过在 authorized_keys里添 加选 项来 限制 主机 及运 行指 定的 命令 。详 情参 阅sshd(8)。注意 SSH2有 HostbasedAuthentication,要 使它 工作,必 须同 时在 服务 器端 的
/etc/ssh/sshd_config文件 中和 客户 机端 的 /etc/ssh/ssh_config或$HOME/.ssh/config文件 中设 置 HostbasedAuthentication为 yes。9.5.4处 理外来的 SSH客 户端下面 是其 它一 些非 类 Unix平台 的免 费 SSH客户 端。
Windows::puTTY(GPL)Windows(cygwin)::SSHincygwin(GPL)MacintoshClassic::macSSH(GPL)[注意 MacOSX包含 OpenSSH;在 终 端 应 用 程 序 中 使用 ssh]
13
参阅 SourceForge.net的站 点文 档,,6.CVSInstructions” 。9.5.5设 置 ssh-agent使用 passphrase来保 护 SSH认 证 密 匙 会 更 安 全,如 果 还 没 有 设 置,可 使 用 ssh-keygen-p来设 置。
用更 少的 密码 建立 连接 – RSA,第 9.5.3节中 描述 了如 何使 用一 个基 于密 码的 远程 主机连接,将 公共 密钥 (例 如 ~/.ssh/id_rsa.pub)放 入远 程主 机的 ~/.ssh/authorized_keys。$ssh-agentbash#或者 用 zsh/tcsh/pdksh这些 程序 代替 。ssh-add~/.ssh/id_rsa
Enterpassphrasefor/home/osamu/.ssh/id_rsa:Identityadded:/home/osamu/.ssh/id_rsa(/home/osamu/.ssh/id_rsa)$scpfoouser@remote.host:foo...nopassphraseneededfromhereon:-)$^D...terminatingssh-agentsession
对于 X服务 器,普 通 Ubuntu启动 脚本 会将 ssh-agent作为 一个 父进 程执 行。 所 以 只需 执行一 次 ssh-add即可 。详情 参阅 ssh-agent(1)和 ssh-add(1)。9.5.6SSH问 题处理如果 遇到 问题,检 查一 下配 置文 件的 访问 权限,并 使用,-v” 选项 运行 ssh。如果 是 root身份,遇 到连 接防 火墙 出错 的情 况,可使 用,-P” 选项 ;它 规定 ssh使用 服务器的 1– 1023以外 的端 口。如果 与远 程站 点的 ssh连接 突然 停止 工作,很 可能 是因 为系 统管 理员 修补 系统 造成 的,
host_key在系 统维 护过 程中 被更 改。 在查 明了 事情 真象 并确 定并 不是 有人 试图 冒充 远程 主机非 法入 侵之 后,从 本地 机器 的 $HOME/.ssh/known_hosts中删 除 host_key项目 就可 以 恢复连 接了 。 9.6邮 件邮件 系统 配置 分为 三类,· 邮件 传输 代理 ( MTA),exim4,exim,postfix,sendmail,qmail,ssmtp,nullmailer,...· 邮件 工具,procmail,fetchmail,mailx,crm114,...· 邮件 用户 代理 ( MUA),mutt,emacs+gnus,
9.6.1邮 件传输代理( MTAs)对于 全功 能的 MTA来说,请 使用 exim4。 参考 资料,
132
· 针对 软件 包 exim4的 exim4-doc和 exim4-doc-html。· http://www.exim.org/如果 你对 安全 性有 高要 求的 话,唯 一 一个 可替 代的 MTA是 postfix。 Ubuntu软件 包还 提 供了 sendmail和 qmail,但 并不 推荐 你使 用它 们。
有时 并不 需要 MTA的所 有功 能,如在 一个 卫星 系统 中的 一台 笔记 本电 脑,可以 考虑 下列 几种轻 量级 软件 包,· ssmtp:需 要 SMTP连接 并支 持别 名功 能,或者· nullmailer:可 以存 信但 不支 持别 名。
此刻,我 发现 exim对于 我作 为个 人工 作站 的笔 记本 电脑 再合 适不 过了 。如果 要安 装这 些软 件包 必须 先删 除 exim,它 们有 冲突,#dpkg-P--force-dependseximapt-getinstallnullmailer#orssmtp
9.6.1.1Smarthost如果 你在 一台 通过 用户 级别 的服 务连 接的 机器 上运 行 exim4或 exim,请 确 保 在 发 信 的 时 候通过 ISP或者 其他 人提 供的 smarthost。 [45]这样 做有 许多 好处,· ISP的 smarthost通常 有更 可靠 的连 接,可以 确保 SMTP重发 。
· 避免 使用 动 态 IP发送 信件,这 类信 件会 被 dial-upspam列表 过滤 的。· 节省 寄出 多个 收信 人的 邮件 的带 宽。唯一 可能 的坏 处是,· 你 ISP的 SMTP出问 题时 的紧 急处 理。
· 用于 学习 目的 的实 验。· 你的 主机 是专 业的 主机 服务 器。9.6.1.2Exim的 基础设置为了 将 exim作为 MTA,可 按下 列步 骤进 行配 置:
/etc/exim/exim.conf使用,eximconfig” 创建 及编 辑( exim)/etc/exim4/*使用,dpkg-reconfigureexim4-config” 创建 及编 辑( exim4)/etc/inetd.conf注释 掉 smtp,将 exim作为 daemon运行/etc/email-addresses添加 伪来 源地 址列 表检查 邮件 过滤 器可 使用 exim4搭配 -brw,-bf,-bF,-bV,...等等9.6.1.3在 Exim下 设置一个收集不存在的 邮 件地址的容 器在 /etc/exim/exim.conf文件 ( Woody或后 继版 本) 的 DIRECTORS部分 的末 尾( localuser:director之后 ) 添 加 一个 catch-alldirector,将 所 有前 面的 director无
13
法解 析的 地址 收集 到一 起 (perMiquelvanSmoorenburg):catchall:driver===smartusernew_address===webmaster@mydomain.com
如果 要为 每个 虚拟 域指 定更 精细 的处 理方 法或 其它 什么 的,可 在 /etc/exim/exim.conf末 尾添加 (我 没仔 细测 试过 ),*****@yourdomain.com${lookup{$1}lsearch*{/etc/email-addresses}\{$value}fail}T
接着 在 /etc/email-addresses中加 上一 行,*” 。9.6.1.4在 Exim下 设置寄出邮件的地址重 写可用 exim为发 出的 邮件 指定 特定 的,From:” 信头,在 /etc/exim/exim.conf文件 的末 尾编辑,
*****@host1.something.dyndns.org\"${ifeq{${lookup{$1}lsearch{/etc/passwd}{1}{0{1}\{$0}{$1@something.dyndns.org}}"frFs</nowiki></pre>
该语 句将 作用 于所 有符 合 *@host1.something.dyndns.org的邮 件。· 在 /etc/password中搜 索,以确定 localpart( $1)是 否为 本地 用户 。· 如果 是本 地用 户,它将 用第 一个 域( $0)中 的内 容重 写地 址· 如果 不是 本地 用户,重 写域 部分 。
9.6.1.5在 Exim中 设置 SMTP认 证某些 SMTP服务 如 yahoo.com需要 SMTP认证 。可 用下 面的 方法 配置/etc/exim/exim.conf:remote_smtp:
driver===smtpauthenticate_hosts===smtp.mail.yahoo.com...smarthost:driver===domainlist
transport===remote_smtproute_list"*smtp.mail.yahoo.combydns_a"...plain:driver===plaintext
134
public_name===PLAINclient_send"<sup>cmatheson3</sup>this_is_my_password"别忘 了最 后一 行的 双引 号。
9.6.2收 取邮件 –

Fetchmailfetchmail以 daemon方式 运行,用 ISP提供 的 POP3帐号 将邮 件收 到本 地邮 件系 统。 配置,/etc/init.d/fetchmail
/etc/rc?.d/fetchmailrunupdate-rc.dfetchmaildefaultpriority30/etc/fetchmailrcconfigurationfile(chown600,ownedbyfetchmail)在 Potato中,有关 如何 在 init.d脚本 中配 置 fetchmail以 daemon方 式 运 行 的 信 息,十分 混乱,Woody解决 了这 个问 题。 参 阅 examplescripts中 /etc/init.d/fetchmail和
/etc/fetchmailrc样例 文件 。如果 你的 邮件 信头 被 ISP的邮 件工 具以 ^M污染,可 在 $HOME/.fetchmailrc中添 加,stripcr” 选项,optionsfetchallnokeepstripcr
9.6.3处 理邮件 –

Procmailprocmail是一 个本 地邮 件分 发过 滤程 序。 使用 时,需要 为每 个使 用它 的用 户创 建$HOME/.procmailrc,样 例,_procmailrc。9.6.4用 crm114处 理垃圾邮件
crm114软件 包提 供了 /usr/share/crm114/mailfilter.crm脚本 。该 脚本 是用 CRM114撰写的,提 供了 非常 有效 的垃 圾信 件过 滤器,并 可以 通过 喂食 垃圾 邮件 来调 节它 的处 理能 力。 CRM114是一 种专 门为 写过 滤器 设计 的小 语言,可 以把 它当 做拥 有超 能力 的 grep版本 。参阅 crm(1)。
9.6.5阅 读邮件 –

Mutt用 mutt做用 户邮 件代 理( MUA)与 vim结合 使用 。使 用 ~/.muttrc进行 自定 义; 例如,#usevisualmodeand"gq"toreformatquotesseteditor="vim-c'settw=72etft=mail'"
#headerweedingtakenfromthemanual(Sven'sDraconianheaderweeding)#ignore*unignorefrom:datesubjecttoccuser-agentx-mailer
135
hdr_orderfromsubjecttoccdateuser-agentx-mailerauto_viewapplication/msword....在 /etc/mailcap或 $HOME/.mailcap中添 加下 列内 容,就能 显示 HTML邮件 和内 嵌的 MS
Word附件,text/html;lynx-force_html%s;needsterminal;application/msword;/usr/bin/antiword'%s';copiousoutput;description="MicrosoftWordText";nametemplate=%s.doc
9.7本 地化( localization)Ubuntu是国 际化 的操 作系 统,它所 支持 的语 言和 地区 惯例 的数 目正 在不 断增 加。 接下 来的部分 列出 了当 前 Ubuntu对各 种差 异形 式的 支持,接 着 再讨 论 本 地化,该 过 程负 责定 制你 的工作 环境,根 据 你所 选的 语言 确定 当前 系统 的输 入输 出方 式,并 按 照你 所在 地区 的惯 例转 化日期,数 字,货币 格式 以及 系统 中其 它相 关方 面。
9.7.1本 地化基础定制 系统 的本 地化 和国 家语 言支 持包 括以 下几 个方 面。 9.7.1.1键 盘本地化
Ubuntu发布 版中 包含 了二 十多 种键 盘布 局方 案。 重新 配置 键盘 可使 用:· dpkg-reconfigure--priority=lowconsole-data#console· xserver-xfree86#XF4· dpkg-reconfigure--priority=lowxserver-common-v3XF3
9.7.1.2资 料文件本地化绝大 多数 Ubuntu软件 包都 能使 用 non-US-ASCII字符,它 们通 过 glibc中的 locale技术,用 LC_CTYPE环境 变量 来操 作这 些字 符。· 纯 8-bit字符,应 用于 所有 程序 中
· 其它 拉丁 字符 集( 例如,ISO-8859-1或 ISO-8859-2),应 用于 绝大 多数 程序 中· 多字 节语 言如 中文,日 文或 韩文,应 用于 较新 的应 用程 序中9.7.1.3显 示本地化X可以 显示 包括 UTF-8在内 的许 多编 码并 支持 所有 的字 体。列 表中 包含 了所 有的 8-bit字体和 16-bit字体 诸如 中文,日 文或 韩文 。 其他 X输入 法,第 9.7.10节 机制 支持 多字节 输 入 法 。参 阅 多语 言的 X窗口 系统 范例,第 9.7.9节和 支持 UTF-8的 X终端 机,第9.7.12节。kon2软件 包可 实现 在 (S)VGA图形 化控 制台 中显 示日 文 EUC编码 。另 一个 替代 品是jfbterm,它 也使 用 FB控制 台。 在控 制台 环境 里,必须 由应 用程 序来 提供 对日 文输 入的 支持。 所以 要为 Emacs加装 egg软件 包,可使 用日 文化 的 jvim软件 包作 为 Vim环境 。
136
安装 非 Unicode字体 到 X就能 在 X下显 示任 何编 码的 文件 。所 以不 用太 担心 字体 的编 码问题 。 9.7.1.4信 息和文档的本地化许多 在 Ubuntu系统 中显 示的 文本 信息 和文 档被 翻译 成了 各种 译本,如 出 错信 息,标 准 程 序输出,菜 单以 及帮 助页 面。 当前 Ubuntu支持 德语,西 班牙 语,芬兰 语,法语,匈 牙 利 语,意大 利语,日 语,韩 语,波 兰语,葡 萄牙 语,汉 语 以及 俄语 帮助 页面,可 通 过安 装 manpages-LANG软件 包实 现这 些支 持 ( 此 处 LANG代表 双位 的 ISO国家 代码 。 使 用 apt-cachesearchmanpages-|less获得 可用 的 Unix帮 助 页 面 列 表 。)要访 问 NLS帮助 页面,用 户 必须 将环 境变 量 LC_MESSAGES设置 成相 应的 字串 。 例 如,要 访问意 大利 语的 帮助 页面,需 要将 LC_MESSAGES设置 成 it,这 时 man程序 会在/usr/share/man/it/目录 下搜 索帮 助页 面。9.7.2LocalesUbuntu支持 locale技 术 。 locale机制 允许 程序 按照 该地 区惯 例来 提供 输出 和其 它特 殊 功能如 字符 集、日 期 时间 显示 格式,货 币 符号 等等 。该 机 制使 用环 境变 量来 确定 其相 关的 行 为 。例如,假 设 你同 时在 系统 上安 装了 美式 英语 和法 语 locales,许 多程 序的 出错 信息 都以 双 语显示,$LANG="en_US"catfocat:fo:Nosuhileordirectory
$LANG="de_DE"catfocat:fo:ateioderVerzeichnisnichtgefundenGlibc以函数库的形式向程序提供该功能的支持。参阅 local(7)。9.7.3Locales简 介完整 的 locale描述 包括 三个 部分,xx_YY.ZZZZ。
· xx:ISO639个语 言代 码( 小写 )· YY3166个国 家代 码( 大写 )· ZZZZ:编码 集,例如,字 符集 或编 码标 志。关于 语言 代码 和国 家代 码,请参 阅 infogettext中的 相关 描述 。
请注 意,为 了 完成 跨平 台的 兼容 性,这 个 编码 集部 分可 能被,内部 标准 化,。 移 除 了所 有 -,把所 有字 符都 转化 成小 写的 。典 型的 编码 集,· UTF-8:适合 所有 区域 的 Unicode码,通 常 是 1-3个八 进制 数( 新 的事 实上 的标 准 )· ISO-8859-1:westernEurope(defactooldstandard)· ISO-8859-2eastern(Bosnian,Croatian,Czech,Hungarian,Polish,
Romanian,Serbian,Slovak,Slovenian)· ISO-8859-3:Maltese· ISO-8859-5Macedonian,Serbian· ISO-8859-6:Arabic· ISO-8859-7Greek· ISO-8859-8:Hebrew
· ISO-8859-9Turkish
137
· ISO-8859-11:Thai(=TIS-620)· ISO-8859-13Latvian,Lithuanian,Maori· ISO-8859-14:Welsh· ISO-8859-15westernEuropewitheuro· KOI8-R:Russian· KOI8-UUkrainian
· CP1250:Czech,Hungarian,Polish(MSWindowsorigin)· CP1251Bulgarian,Byelorussian· eucJP:UnixstyleJapanese(=ujis)· eucKRKorean· GB2312:UnixstyleSimplifiedChinese(=GB,==eucCN)forzh_CN· Big5TraditionalChineseforzh_TW
· sjis:MicrosoftstyleJapanese(Shift-JIS)询问 基本 编码 系统 术语 的意 思,· ASCII:7bits(0-0x7f)· ISO-8859-?:8bits(0-0xff)
· ISO-10646-1UniversalCharacterSet(UCS)(31bits,0-0x7fffffff)· UCS-2:First16bitofUCSasstraight2Octets(Unicode:0-0xffff)· UCS-4UCSasstraight4Octets(UCS:0-0x7fffffff)· UTF-8:encodedin1-6(mostlyin3Octets)· ISO-2022:7bits(0-0xff)withtheescapesequence.ISO-2022-JPisthemostpopularencodingfortheJapanesee-mail.
· EUC:8bits+16bitscombination(0-0xff),Unixstyle· Shift-JIS:8bits+16bitscombination(0-0xff),Microsoftstyle.ISO-8859-?,EUC,ISO-10646-1,UCS-2,UCS-4和 UTF-8对于 7位的 字符 使用 和 ASCII相同的 编码 。 orShift-JISuseshigh-bitcharacters(0x80-0xff)toindicatethatpartofencodingis16bit.UTF-8alsouseshigh-bitcharacters(0x80-0xff)
toindicatenon7bitcharactersequencebytesandthisisthemostsaneencodingsystemtohandlenon-ASCIIcharacters.PleasenotethebyteorderdifferenceofUnicodeimplementation:· StandardUCS-2,UCS-4:bigendian
· Microsoftlittleendianforix86(machine-dependent)See使用 recode转化 文本 文件,第 8.6.12节 forconversionbetweenvariouscharactersets.FormoreseeIntroductiontoi18n.9.7.4激 活 locale支 持
Ubuntu并 不 在系 统中 编译 所有 可用 的 locales,检 查 /usr/lib/locale确定 哪个 locales(除 了默 认的,C” ) 已 在 系统 上编 译安 装。 如 果 所需 的 locale并不 在其 中,有 两 个解 决 办法,· 编辑 /etc/locale.gen添加 需要 的 locale,然 后以 root身份 运行 locale-gen编译 它。 参阅 locale-gen(8)以及 该帮 助页 面中,SEEALSO” 一节 所列 的命 令。
· 运行 dpkg-reconfigurelocales可以 重新 配置 locales软件 包。如 果 还没 有安 装locales,locales安装 程序 会调 出 debconf界面 让你 选择 所需 的 locales并编 译
138
相关 数据 库。9.7.5激 活特定 locale相关 的环 境变 量按 如下 次序 将特 定 locale值赋 给程 序:
· LANGUAGE:该 环境 变量 由一 个用 冒号 分隔,以 优先 级排 序的 地区 名称 列表 组成 。仅当 POSIX地区 值与,C” 地区 值相 异时 才使 用到 它 [在 Woody中; 在 Potato版本中通 常其 优先 级高 于 POSIXlocale]。 ( GNU扩展 名)· LC_ALL:如 果为 非空 值,其值 将作 用于 所有 locale项 目 。( POSIX.1)通 常为,,( 空 值 )。· LC_*,如 果 为非 空值,其 值 将作 用于 相应 的 locale项 目 。( POSIX.1) 通 常 为,C” 。
LC_*变量 有,oLC_CTYPE:字 符分 类和 环境 转换LC_COLLATE:校 正命 令oLC_TIME:时 间显 示格 式LC_NUMERIC:非 货币 型数 字格 式
oLC_MONETARY:货 币符 号LC_MESSAGES:常 规信 息,诊断 消息 和交 互响 应信 息的 格式oLC_PAPER:纸 张尺 寸LC_NAME:姓 名格 式oLC_ADDRESS:地 址格 式和 地区 信息LC_TELEPHONE:电 话号 码格 式
oLC_MEASUREMENT:度 量单 位( 公制 或其 它)LC_IDENTIFICATION:有 关地 区信 息的 元数 据· LANG:如 果为 非空 值且 LC_ALL也没 有定 义,则该 值作 用于 所有 没有 定义 的 LC_*地 区 项 目 。( POSIX.1)通 常为,C” 。
注意,有 些应 用程 序( 例如 Netscape4)忽略 LC_*设置 。locale程序 可显 示当 前激 活的 地区 设置 和可 用的 locale; 参 阅 locale(1)。( 注 意,locale-a将列 出系 统已 知的 所有 的 locales;这 并 不 代表 它们 都已 在系 统中 编译 了! 参阅 激活locale支持,第 9.7.4节 。)
9.7.6ISO8601日 期格式名为 en_DK,丹麦 英语 的,locale提供 了对 国际 标准 日期 格式 yyyy-mm-dd( ISO8601日期 格式 )的 支持 (听 起来 有点 搞笑,-))。 它 仅 工 作 于 ls的控 制台 屏幕 。9.7.7US( ISO-8859-1) 例子将下 列语 句添 加到 ~/.bash_profile:LC_CTYPE=en_US.ISO-8859-1exportLC_CTYPE
9.7.8带 Euro符 号的 France( ISO-8859-15) 的例子
139
将下 列语 句添 加到 ~/.bash_profile:LANG=fr_FR@euroexportLANGLC_CTYPE=fr_FR@euroexportLC_CTYPE
按 键盘 本地 化,第 9.7.1.1节中 描述 的方 法,将键 盘设 置成 French"AZERTY"。安 装manpages-fr包添 加法 语帮 助页 面。 US中的 Right-Alt键在 Europe中称为 Alt-Gr,它与其 它键 组成 的组 合键 可用 于输 出大 量特 殊字 符,例如 Alt-Gr+E可以 输出 欧元 符号 。可使 用类 似的 方法 配置 绝大 多数 西欧 语言 环境 。
参阅 DebianEuroHOWTO了解 有关 对新 欧洲 货币 方面 的支 持,有关 对法 语环 境的 支持 请参阅 UtiliseretconfigurerDebianpourlefran?ais。9.7.9多 语言的 X窗 口系统范例让我 们来 创建 一个 多语 言 X窗口 系统,能 在 不同 的控 制台 中搭 配 EUC,UTF-8和 ISO-8859-
1来同 时支 持日 语,英语,德 语和 法语 。我会 向你 展示 用 Ubuntumenu系统 进行 的自 定义 设置 Ubuntumenu系统 的详 细信 息参 阅/usr/share/doc/menu/html/index.html。 在 例 子中,我 也创 建了 mozilla网络 浏览 器的 快捷键 。 [46]
· 使用 本地 化( localization),第 9.7节中 描述 的方 法添 加对 日文 ja_JP.eucJPlocale和其 他需 要的 locale的支 持。· 安装 Kana-to-Kanji转换 系统 和字 典( 针对 日语 ):ocanna– 本地 服务 器 (freebearlicense),或freewnn-jserver– 加入 网络 功能 的服 务器 (PublicDomain)
· 安装 日文 输入 系统 (针 对日 语),okinput2-canna– X下或kinput2-canna-wnn– X下和oegg– 在控 制台 下能 搭配 Emacsen直接 输入 日文 (额 外)
· 安装 日文 兼容 终端 机,oxterm– X(支 持 ISO-8859-1和 UTF-8),kterm— (支 持日 文 EUC),和omlterm— X(支 持多 语言 )
· 添加 全部 日文 字库 包。( 针对 所有 语言 )· 创建 ~/.xsession,用 户可 通过 配置 它来 指定 X环境,如 自定 义 X会话,第9.4.5.1节中 描述 的( 针对 所有 语言 ):#!/bin/sh#ThismakesXworkwhenIsutoroot.
140
if[-z"$XAUTHORITY"];thenXAUTHORITY=$HOME/.XauthorityexportXAUTHORITYfi#Setspecificenvironmentthroughdebianmenusystem.
ResetlocaleunsetLC_CTYPELC_NUMERICLC_TIMELC_COLLATELC_MONETARYLC_MESSAGESLC_PAPERLC_NAMELC_ADDRESSLC_TELEPHONELC_MEASUREMENTunsetLC_IDENTIFICATIONLC_ALLLANGLANGUAGEPAGER#setlocaledefaultinXLANG=C
#exportlocaleLC_CTYPELC_NUMERICLC_TIMELC_COLLATELC_MONETARYLC_MESSAGESexportLC_PAPERLC_NAMELC_ADDRESSLC_TELEPHONELC_MEASUREMENTLC_IDENTIFICATIONLC_ALLLANGLANGUAGEPAGER####activateinputmethodforJapanesewithkinput2
kinput2&XMODIFIERS="@im=kinput2"exportXMODIFIERS#Howaboutblackboxwindowmanager(lightweight)execblackbox#execxfwm
wmaker· 在 ~/.bash_profile中为 Linux控制 台设 置 locale( 针 对 所 有 语 言 )。· 删除 ~/.bashrc中的 locale设置,如 果其 存在 的话 (针 对所 有语 言)。· 在 /etc/menu/中建 立新 文件 (针 对所 有语 言)。
o/etc/menu/xterm-local:(在 菜单 中加 入新 项目 )?package(xterm):\needs=x11\section=XShells\longtitle="XTerm:terminalemulator(en_US.ISO-8859-1)"\
title="XTerm(en_US.ISO-8859-1)"\command="sh-c'LC_ALL=en_US.ISO-8859-1xterm'"?package(xterm):\needs=x11\section=XShells\longtitle="XTerm:terminalemulator(de_DE.ISO-8859-1)"\
title="XTerm(de_DE.ISO-8859-1)"\command="sh-c'LC_ALL=de_DE.ISO-8859-1xterm-Txterm-de'"?package(xterm):\needs=x11\section=XShells\longtitle="XTerm:terminalemulatorforXwithUnicodesupport(Japanese)"\
title="UXTerm(ja_JP.UTF-8)"\command="sh-c'LC_ALL=ja_JP.UTF-8uxterm'"
14
o/etc/menu/kterm:(覆 盖系 统默 认的 )?package(kterm):\needs="x11"\section="XShells"\command="sh-c'LC_ALL=ja_JP.eucJPPAGER=w3m/usr/X11R6/bin/kterm-xim'"\
title="KanjiTerminal"?package(kterm):\needs="x11"\section="XShells"\command="sh-c'LANG=ja_JP.eucJP\LC_MESSAGES=en_US.ISO-8859-1PAGER=w3m/usr/X11R6/bin/kterm-xim'"\
title="KanjiTerminal(bilingal)"o/etc/menu/mozilla-local:(添 加新 的快 捷键 )?package(mozilla-browser):needs="x11"section="/"\
title="MozillaNavigator"command="mozilla-1.5"hints="Webbrowsers"\icon=/usr/share/pixmaps/mozilla.xpmo以 root帐号 运行 update-menus。
· 在 ~/.muttrc中加 入下 列内 容( 针对 日语 ):#UTF-8supportisnotpopularinpopularJapaneseEMACSenvironment7bitencodingofiso-2022-jpiseasierforeveryone#defaultorder===us-ascii-->iso-8859-1-->iso-2022-jpsetsend_charset="us-ascii:iso-8859-1:iso-2022-jp"
allow_8bit=no· 为 X应用 程序 激活 XIMkinput2( 针 对 日 语 ):o在 X资源 文件 ~/.Xresources(不 知何 故,看上 去 Debian好象 在自 动配置它 )添 加 *inputMethod:kinput2和 KTerm*VT100*OpenIm:true。o某些 应用 程序 ( 如 mlterm) 也 允 许设 置 *inputMethod:和其 它运 行时 的 动态信 息( 在 mlterm中按 下 Ctrl-MouseButton-3) 。· 用 startx或任 何显 示管 理器 ( xdm,gdm,kdm,wdm...)启 动 X( 针 对 所 有 语 言 )· 打开 日文 兼容 应用 程序,VIM6,(x)emacs21,mc-4.5,mut-1.4.( 针 对 日 语 )。 (通常 Emacs是最 流行 的平 台,尽管 我不 怎么 用它 。)· 按,Shift+Space” 可 切 换 日 文 输 入 法 。( 针 对 日 语 )。· 在本 地化 了的 控制 台中 阅读 本地 化手 册( 针对 所有 语言 )。关于 其他 CJK语言 的支 持,参阅 下面 的章 节和 SuSEpagesforCJK。
9.7.10其 他 X输 入法
142
还有 许多 其他 可用 的 X输入 法支 援软 件包,LanguageLC_CTYPEXIMserverXMODIFIERSStartkeyJapaneseja_JP*kinput2"@im=kinput2"Shift-SpaceKoreanko_KR*ami"@im=Ami"Chinese(T)zh_TW.Big5xcin"@im=xcin-zh_TW.big5"Ctrl-Space
Chinese(S)zh_CN.GB2312"@im=xcin-zh_CN.GB2312"日语 输入 法 kinput2由软 件包 kinput2-canna-wnn,kinput2-canna和 kinput2-wnn提供。 输入 法还 需要 例如 canna和 freewnn-jserver这样 的字 典服 务器 才能 使用 。
9.7.11X终 端模拟机还有 许多 X终端 机支 持 8-bit编码,安 装相 应的 字体 就能 正常 显示,· xterm– X终端 机· gnome-terminal– Gnome的 xterm
· konsole– KDE的 xterm· rxvt– VT102终端 (lighter)· aterm– AfterstepWM的 VT102终端· eterm– Enlightment的 终端· wterm– WindowMakerWM的 VT102终端在 UTF-8编码 的情 况下,xterm提供 多编 码的 X终端 的支 持 ( 支持 UTF-8的 X终端 机,第 9.7.12节)。 其他 传统 编码 的支 持还 在开 发中 ( 2003年时 )。 下 面的 软件 包都 提供 了传统编 码的 支持,· aterm-ml– Multi-lingual· kterm– Multi-lingual(Japanese,...)
· rxvt-ml–· wterm-ml– Multi-lingual· cxterm-big5– Chinese(Trad.,Big5)· cxterm-gb– (Simp.,GB)· cxterm-ks– Chinese(KS)· cxterm-jis– Japanese
· hanterm-classic– Korean(Hangul)· hanterm-xf– Korean(Hangul)· hztty– Chinese(GB,Big5,zW/HZ)对于 kterm(和 其他 终端 ),你 可以 通过 在菜 单上 按下 Ctrl+鼠标 中键 来激 活 XIM。
9.7.12支 持 UTF-8的 X终 端机xorg的软 件包 xterm中的 X终端 机 uxterm提供 了对 UTF-8的支 持。 它支 持所 有语 言。它是 xterm(1)程序 的一 个 wrapper,使 得启 动的 xterm使用 了,UXTerm” 的 X资 源 集 。例如,为 了 提供 英文,俄 文,日 文,中 文 和韩 文大 字体 的完 美显 示,需 要 在安 装相 应的 字 体后在 ~/.Xresources中添 加下 列内 容:!setlargefont
143
UXTerm*font:-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1!UseXIMforJapanese*****inputMethod:kinput2然后 按照 X资源,第 9.4.10节 中描 述的,运 行 xrdb-merge~/.Xresources来更 新 X
资源 。 虽然 大部 分的 终端 程序,例 如 vim,mutt和 emacs都已 经能 兼容 UTF-8了 ( Woody-Sarge) 。但是 还有 不少 mc这样 的程 序不 兼容 UTF-8,只 支持 8-bit编码 。如 果你 编辑 未知 或者 混合编 码文 件的 7-bitASCII部分,使 用 locale不敏 感的 支持 8-bit的 编 辑 器 比 较 安 全 。
参阅 TheUnicodeHOWTO。9.7.13FB控 制台下 UTF-8的 例子在 debian-installer中 bterm提供 了在 FB控制 台对 UTF-8的支 持。
9.7.14超 越 locales当你 第一 次在 系统 上安 装,国 家语言环境,( nationallanguageenvironment) 时,请 注 意使用 tasksel或 aptitude查看 一下,在 选择 相关 语言 环境 任务 项时 都有 哪些 软件 包被 选上了,这 些 选择 信息 非常 有用 特别 是进 行多 语言 设置 时。 如 果 遇到 某些 关联 包与 运行 良好 的系统 上的 某 些软 件发 生冲 突,就不 要安 装那 些引 起冲 突的 包。 由于 新装 的软 件比 原来 的软件具 有更 高的 优先 级,所 以必 须用 update-alternative结合 有关 命令 让系 统恢 复到 原来 状态。 大部 分较 新的 使用 glibc2.2的程 序都 已支 持国 际化 了。 所以 不必 再为 诸如 基于 VIM的jvim等程 序指 定 loclae,因 为 X下的 vim6.0版已 提供 了该 功能 。 事 实 上,比 起 另一 个版本 它显 得有 点粗 糙,jvim有个 版本 直接 将日 文输 入法 (canna)支持 编译 进去 了,而 且 还 集成了 大量 成熟 的日 文特 性,很值 得你 期待,-)有时 为了 获得 更好 的工 作环 境,仅通 过 locale来配 置程 序是 不够 的。 language-env软件包和 set-language-env命令 可以 大大 简化 你的 工作 。亦可 参阅 有关 国际 化的 文档 Introductiontoi18n,虽 然其 目标 读者 为开 发人 员但 对系 统管理 员也 十分 有用 。 9.8多 语言化( Multilingualization,m17n)由 language-env等软 件包 所实 现的 本 地 化 ( localization),第 9.7节是 以单 一语 言 的本地 化为 目标 的。 这 些 软件 包使 用传 统的 文本 编码 ( encoding) 方 式 。 你 在 这样 的环 境下 不能在 文本 中混 合使 用法 语和 日语,因 为 它们 分 别使 用 ISO-8859-1和 EUC-JP的编 码方 式,而这 两种 编码 是不 兼容 的。 如果 你选 择在 一个 可用 的 UTF-8区域 设置 ( locale) 下 启 动 GNOME或 KDE,你 就 可以 得 到一个 多语 言化 的 UTF-8桌面 环境 。在 这 样的 环境 下,只 要你 用的 软件 是符 合 UTF-8标准 的,你就 可以 自由 地混 合使 用英 语,汉语,俄 语,日语 等各 种文 字。
m17n-env是一 个用 来帮 助建 立多 语言 化环 境的 程序 。你 可以 在 root或普 通用 户下 运行set-m17n-env命令 来设 置多 语言 化的 UTF-8环境 。 [50]
14
在这 样的 环境 下,最好 使用 基于 scim的多 语言 化输 入法 。 scim所提 供的 各种 输入 法可 以一起 用 Ctrl-Space开启 或关 闭。 具体 的输 入法 引擎 可以 通过 点击 SCIM面板 来选 择和 切换。 你仍 然可 以通 过 m17n-env创建 的自 定制 区域 设置 终端 而方 便地 使用 传统 的编 码环 境。这 在你需 要编 辑旧 的 EUC-JP或 ISO-8859-1编码 文件 时十 分有 用。
第 10章 -网 络 设 置这一 章重 点在 于 Ubuntu的 网 络 管 理 。请 阅 读 Net-HOWTO来了 解一 般 GNU/Linux的网 络 设置。 为了 让 Ubuntu主机 能够 访问 Internet,它 的网 络接 口需 要被 正确 的设 置。
首先 要确 认内 核支 持这 个设 备,例如 以太 网卡,无 线网 卡 (Wi-Fi)和调 制解 调器 。为 了获 得这些 支持,你 可 能需 要重 新编 译内 核或 者给 内核 增加 模块,如 Ubuntu下的 Linux内核,第7章中 描述 的。下面 说明 如何 设置 网络 设备 。
10.1IP网 络设置基础一个 Ubuntu主机 可能 有很 多有 不同 Internet协议 (IP)地址 的网 络接 口。接 口可 能有 很 多种,如,· Loopback,lo
· Ethernet,eth0,eth1……· Wi-Fi,wlan0,wlan1,wifi0……· TokenRing,tr0,tr1……· PPP,ppp0,ppp1……其他 可用 的网 络设 备还 有很 多,包括 SLIP,PLIP(串 行和 并行 IP),控 制 某 种 网 络 接 口 流量的,shaper” 设备,帧 中继,AX.25,X.25,ARCnet和 LocalTalk。每个 直接 连接 到 Internet(或 任何 基于 IP的网 络)的 网 络接 口都 用唯 一的 32位的 IP地址来 识别 。 IP地址 可分 为网 络地 址和 主机 地址 两个 部分 。 如 果 你拿 到一 个 IP地址,把 网络地 址部 分全 部设 为 1,而 主机 地址 部分 全部 设为 0,则 你将 得到 这个 网络 的子 网掩 码。
传统 意义 上,IP网络 按照 网络 地址 的长 度分 为 8,16,24位三 个组 别。 这 个系 统缺 乏灵 活性,浪费 了很 多 IP地址,所 以现 在的 IPv4网络 是由 可变 长度 的网 络号 来分 配的 。IPaddressesnetmasklengthClassA1.0.0.0-126.255.255.255255.0.0.0===/8B128.0.0.0191.255.255.255255.255.0.0/16
ClassC192.0.0.0-223.255.255.255255.255.255.0===/24IP地址 不在 这个 范围 内的 被用 作特 殊目 的。
145
每一 个组 别中 都有 保留 给本 地网 络 (LANs)使用 的地 址范 围。这 些地 址不 会和 Internet上 的发生 冲突 。( 同 理,如果 主机 被分 配到 这类 地址 的话,这 些主 机就 不能 直接 访问 Internet,需要 通过 一个 作为 代理 的网 关或 网络 地址 转换 服务 (NAT)才能 访问 Internet。) 这 些 地 址 范围在 下表 中列 出,包含 每个 组别 中这 些地 址范 围的 数目 。 networkaddresseslengthhowmany
ClassA10.x.x.x/81B172.16.x.x-172.31.x.x/1616ClassC192.168.0.x192.168.255.x/24256IP网络 中 IP地址 的第 一个 值就 是网 络本 身,最 后 一个 值是 该网 络的 广播 地址 。 其余 所 有的 IP地址 都可 以分 配给 网络 中的 主机 。通 常 IP地址 的第 一个 和最 后一 个都 会留 给该 网 络的 Internet网关 。路由 表包 含了 关于 内核 如何 把 IP包发 送到 它们 目的 地的 信息 。这 儿有 一个 位于 本地 网络(LAN),IP地址 为 192.168.50.x/24的 Debian主机 的路 由表 。 另 一台 主机 192.168.50.1(也 在 LAN中 )是 公 司 网 络 172.20.x.x/16的 路 由 器,主 机 192.168.50.254(也 在 LAN中 )
是负 责访 问 Internet的路 由器 。#routeKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface127.0.0.0* 255.0.0.0U002lo
192.168.50.0255.255.255.0137eth0172.20.0.0192.168.50.1255.255.0.0UG107default192.168.50.2540.0.0.036eth0· 第一 行说 明传 送目 的地 是 127.x.x.x的话,则 会通 过 lo回环 网络 接口 来路 由。
· 第二 行说 明传 送目 的地 是 LAN的话,则 会通 过 eth0来路 由。· 第三 行说 明传 送目 的地 是公 司网 络的 话,则会 通过 eth0来路 由,最后 发送 到网 关192.168.50.1。· 第四 行说 明传 送目 的地 是 Internet的话,则 会通 过 etho来路 由,最后 发送 到网关 192.168.50.254。
路由 表中 的 IP地址 也可 以用 名称 表示,这 些名 称从 /etc/networks或通 过 resolver( CLibrary)来 获得 。除了 路由 之外,内 核能 实现 网络 地址 转换 (NAT)、流 量控 制和 包过 滤。参阅 Net-HOWTO和 othernetworkingHOWTOs来了 解背 后运 行的 原理 。
10.2底 层网络设置GNU/Linux上传 统的 底层 网络 设置 工具 是 ifconfig和 route,它 们在 net-tools这个 软件包 中。 目前 这些 工具 被软 将包 iproute中的 ip代替 。 ip可以 在 Linux2.2或更 新的内核 上运 行,有 着 比老 的工 具更 好的 兼容 性。 然 而,这 些 传统 的设 置工 具还 是能 用的 而且 大家也 更加 熟悉 。
10.2.1底 层网络设置 –

ifconfig和 route
146
下面 演示 如何 把网 络接 口 eth0的 IP地址 从 192.168.0.3改为 192.168.0.111;设 置eth0的路 由,通过 192.168.0.1访问 10.0.0.0这个 网络 。 执行 ifconfi和 route时不带 网络 接口 参数,则 显示 所有 网络 接口 和路 由的 现状 。 #ifconfigeth0Linkencap:EthernetHWaddr08:00:46:7A:02:B0
inetaddr:192.168.0.3Bcast:192.168.255.255Mask:255.255.0.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:23363errors:0dropped:0overruns:0frame:0TXpackets:21798carrier:0collisions:0txqueuelen:100RXbytes:13479541(12.8MiB)TXbytes:20262643(19.3MiB)
Interrupt:9loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0UPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:230172errors:0dropped:0overruns:0frame:0
TX carrier:0collisions:0txqueuelen:0RXbytes:22685256(21.6MiB)TXbytes:22685256(21.6MiB)#routeKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.0.0* 255.255.0.0U000eth0default192.168.0.1255.255.255.255UG首先 我们 关闭 网络 接口 。
#ifconfigeth0inetdownloLinkencap:LocalLoopback...(没 有 eth0这个 条目 了)#route...(没 有路 由表 了)
接下 来我 们启 动 eth0并给 予其 新的 IP地址 和路 由。#ifconfigeth0inetup192.168.0.111\netmask255.255.255.0broadcast192.168.0.255#routeadd-net10.0.0.0netmask255.0.0.0gw192.168.0.1deveth0
结果 是,#ifconfigeth0Linkencap:EthernetHWaddr08:00:46:7A:02:B0inetaddr:192.168.0.111Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
147
...loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0...#route
KernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface192.168.0.0* 255.255.255.0U000eth0*****0.0.0192.168.0.1255.0.0.0UG
更多 信息 请参 阅 ifconfig(8)和 route(8).10.2.2底 层网络设置 –

ipip和先 前的 ifconfig和 route有相 同功 能的 命令 如下,· iplinkshow· routelist
· iplinkseteth0down· addrdeldeveth0local192.168.0.3· ipadd192.168.0.111/24broadcast192.168.0.255· linkseteth0up· iprouteadddeveth0to10.0.0.0/8src192.168.0.111via192.168.0.1
运行 的时 候使 用 help参数,能 让 ip打印 出命 令的 语法 。 例如,iplinkhelp打 印 出,Usage:iplinksetDEVICE{up|down|arp{on|off}|dynamic{on|off}|multicasttxqueuelenPACKETS|nameNEWNAME|
addressLLADDRbroadcastLLADDR|mtuMTU}iplinkshow[DEVICE]参阅 ip(8).
10.2.3设 置无线网卡 (Wi-Fi)接 口对于 无线 网卡 (Wi-Fi)接口,除 了 ifconfig或 ip之外,你 还需 要 iwconfig这 个 程 序 。此程 序在 wireless-tools中。参阅 iwconfig(8).
10.2.4设 置 PPP接 口如果 你是 通过 连接 在拨 号电 话机 上的 调制 解调 器,并使 用 Point-to-Point协议 (PPP)来上网 的。 那么 这样 的网 络连 接就 是通 过 ppp0,ppp1等网 络接 口来 实现 的。
148
PPP接口 是由 pppd这个 PPP服务 来管 理的 。你 可以 在 ppp中找 到该 程序 。 所以,对 于用户 来说,设 置 PPP接口 也就 是对 pppd进行 设置 。10.2.4.1手 动设置 pppd为了 建立 网络 连接,我 们需 要打 开一 个通 讯端 口( 通常 是串 口),需要 把命 令传 输到 通讯 设备上 ( 通 常是 调制 解调 器),需 要 拨某 个电 话号 码,对 于 外部 的 PPP服务 还需 要进 行身 份 验证,需 要 内核 创建 PPP接口,最 后 需要 修改 路由 表。 只 有 这样 信息 才能 在这 条连 接上 传递 。pppd能完 成上 述所 有动 作,因而 会有 一堆 的设 置参 数。 相关 参数 参见 pppd(8)。在 Ubuntu系统 上,全局 的设 置在 /etc/ppp/options里面 。用 户的 特定 设置 放在~/.ppprc。 依 赖 于通 讯端 口的 设置 全部 在 /etc/ppp/options.partname。 例 如,假 设 你有 两个调 制解 调器 — 通过 /dev/LT-modem来访 问的 内置 LucentLT调制 解调 器和 通过/dev/ttyS0来访 问的 外置 调制 解调 器。 建立 以下 这两 个文 件。#cat>/etc/ppp/options.LT-modem<<EOF115200init"/usr/sbin/chat-f/etc/chatscripts/setup-LT-modem"
EOF#cat>/etc/ppp/options.ttyS0<<EOF115200init"/usr/sbin/chat-f/etc/chatscripts/setup-ttyS0"EOF
这些 涉及 到下 面的 chatscripts。 首先,/etc/chatscripts/setup-LT-modem。ABORTERROR''ATZOK'ATW2X2S7=70S11=55'AT
其次,/etc/chatscripts/setup-ttyS0。ABORTERROR''ATZOK'ATL1M1Q0V1W2X4&C1&D2S6=4S7=70S11=55S95=63S109=1+FCLASS=0'AT
显然,这 些文 件的 内容 依赖 于你 的硬 件。 选项 也可 以被 当为 参数 传递 给 pppd。在 Ubuntu中通 常用 pon来启 动 pppd。 pon使用 的时 候,它的 第一 个参 数表 示位 于/etc/ppp/pears/里面 的配 置文 件的 名称,这 个 文件 同样 也被 pppd读 取 。 [54]这儿 就 是你为 特定 连接 设置 特殊 选项 的地 方 — 例如,一 个特 别的 网络 服务 提供 商 (ISP)。假设 你往 来于 Amsterdm和 DenHaag这 两 座 城 市 。在 每 个 城 市,你 要 求 能 访 问 两 个 ISP服务 — Planet和 KPN。首 先为 每个 ISP创建 基本 的配 置文 件。
149
#cat>/etc/ppp/peers/KPN<<EOFremotenameKPNnoauthuserkpnnoipdefaultipparamKPN
EOF#cat>/etc/ppp/peers/Planet<<EOFremotenamePlanetauthuseruser3579@planet.nlnoipdefault
mru1000mtuipparamPlanetEOF
这些 文件 设置 了两 个 ISPs中不 同的 部分 。相 同 的部 分可 以放 在 /etc/ppp/options或于 接口有 关的 某个 设置 文件 中。 现在 为每 个城 市里 的每 个 ISP创建 配置 文件 。在 我们 的例 子中,从 一个 城市 连接 某个 ISP和从 另外 一个 城市 连接 这个 唯一 的差 别就 是所 需要 的 chatscript。( chatscript不 同是因 为当 地访 问的 电话 号码 不同 。)
#cat>/etc/ppp/peers/KPN-Amsterdam<<EOFconnect"/usr/sbin/chat-v-f/etc/chatscripts/KPN-Amsterdam"file/etc/ppp/peers/KPNEOF#cat>/etc/ppp/peers/KPN-DenHaag<<EOFconnect"/usr/sbin/chat-v-f/etc/chatscripts/KPN-DenHaag"
file/etc/ppp/peers/KPNEOF#cat>/etc/ppp/peers/Planet-Amsterdam<<EOFconnect"/usr/sbin/chat-v-f/etc/chatscripts/Planet-Amsterdam"file/etc/ppp/peers/PlanetEOF
#cat>/etc/ppp/peers/Planet-DenHaag<<EOFconnect"/usr/sbin/chat-v-f/etc/chatscripts/Planet-DenHaag"file/etc/ppp/peers/PlanetEOF
file命令 显示 了各 个配 置,包括 先前 列出 过的 配置 。 connetc命令 详细 说明 了 pppd用来建立 连接 需要 的特 殊参 数。 我 们 通常 使用 chat这个 程序 来做 这些 事情,使 chatscript适合这 个 ISP。 这 里 是给 DenHaag的 chatscripts; 给 Amsterdam用的 chatscripts也 类似,除了 电话 号码 不一 样。 不过 当这 个 ISP通过 本地 的其 他公 司来 提供 服务 的话,也 许chatscripts就有 所区 别了 。
#cat>/etc/chatscripts/KPN-DenHaag<<EOFABORTBUSY
150
ABORT'NOCARRIER'VOICEABORT'NODIALTONE'DIALTONE'ABORT'NOANSWER'ERROR
OK-AT-OKATDT0676012321CONNECT\d\cEOF#cat>/etc/chatscripts/Planet-DenHaag<<EOFABORTBUSY'NOCARRIER'
ABORTVOICE'NODIALTONE'ABORTDIALTONE''NOANSWER'ABORTERROROK-AT-OKATDT0676002505
CONNECT\d\cEOF为了 能连 接上 这些 ISP,你 需要 用户 名和 密码 以便 让 pppd在需 要的 时候 能提 供这 些资 料。这些 信息 不是 被存 储在 /etc/ppp/pap-secrets(如 果使 用 PAP协议 )就 是在
/etc/ppp/chap-secrets(如 果使 用 CHAP协 议 )。 虽 然 CHAP更加 的安 全,但是 PAP仍然是使 用最 为广 泛的 。因 为这 些文 件包 含有,秘密,,所 以群 组和 其他 用户 应该 不被 允许 读写这些 文件 。这 些文 件的 格式 在 pppd(8)中 有 解 释 。,秘密,(第 三格 )是 通过 用户 名( 第一格) 和 /或服 务器 名称 ( 第 二格 ) 来 查 找 的。 当 连接 到一 个 ISP时通 常是 不知 道这 个服 务 器的名 字的,所 以我 们用 用户 名代 替; 上面 peers/KPN和 peers/Planet中的 user那一 行就是 完成 这个 动作 的。
#clientnameservernamesecretkpn* kpnuser3579@planet.nlmyfavoritepet详细 信息,参 阅 /usr/share/doc/ppp/README.Debian.gz。
10.2.4.2使 用 pppconfig设 置 pppd一个 快速 设置 pppd方法 就是 使用 pppconfig程序,该 程 序来 自同 名的 软件 包。 pppconfig先使 用菜 单界 面来 询问 使用 者一 些问 题,然后 设置 上面 提到 过的 这些 文件 。 10.2.4.3使 用 wvdial设 置 PPP接 口另一 种使 用 pppd的处 理方 法是 从 wvdial来运 行 pppd,wvdial在软 件包 wvdial中 。 不同于 pppd使用 chat来拨 号和 协商 连接,wvdial在完 成拨 号和 初始 化协 商之 后才 运行pppd去完 成剩 余的 工作 。 只 要 给出 电话 号码,用 户 名和 密码,大 多 数情 况下,wvdial都 能成功 建立 连接 。 10.3命 名主机
15
10.3.1主 机名主 机名 是由 内核 维护 的。 初始 化脚 本 /etc/init.d/hostname.sh在系 统启 动的 时候 根据/etc/hostname中存 储的 名称 设置 主机 名( 使用 hostname这个 命令 )。 这 个文 件应 该 只 包含系 统的 主机 名,而不 是完 整的 域名 。
运行 hostname(不 带任 何参 数) 可以 打印 出当 前的 主机 名。10.3.2邮 件名主机 的 邮 件名 是于 邮件 相关 的程 序用 来确 认主 机的 。 /etc/mailname包含 了该 名称 并以 新 空行结 尾。 邮件 名通 常是 主机 的完 整的 域名 之一 。参 阅 mailname(5)。
电子 邮件 接受 者看 到的 你这 台 Debian主机 发送 的邮 件信 头 From:的内 容,取决 于你 机器上邮 件用 户代 理 (MUA)和邮 件传 输代 理 (MTA)的设 置。 假设 本地 用户 foo从邮 件名 为myhost.dom的主 机上 发送 了一 封邮 件。 送出 去的 电子 邮件 的信 头 From:会是,·,From:foo@myhost.dom” 如果 MUA没有 From:的设 置;·,bar@myhost.dom” 如果 有,bar” 的设 置;
·,From:bar@bogus.dom” 如果 MUA有,From:bar@bogus.dom” 的设 置。就算 MUA中设 置了 From:,MTA还是 会加 入 "Sender:foo@herman.dom"来表 示真 正的 来源。当然,任 何复 杂的 MTA在执 行地 址重 写的 时候,如 同 在 Exim下设 置一 个收 集不 存在 的邮件地 址的 容器,第 9.6.1.3节 和 在 Exim下设 置寄 出邮 件的 地址 重写,第 9.6.1.4节 中讨论 的,收件 者看 到的 邮件 地址 是可 以任 意改 变的 。 10.4域 名服务 (DNS)主机 由域 名和 IP地址 来查 询。 DNS是一 套客 户端 -服务 器系 统,在这 套系 统中 域名 解释 器访问 域名 服务 器从 而把 域名 和 IP地址 或是 其他 合适 的主 机联 系在 一起 。 GNUCLibraryresolver(3)也能 够在 文件 中或 通过 网络 信息 服务 (NIS)来查 找 IP地址 。某些 程序 (如,GNOME)就 希望 主机 名能 被解 析为 一个 IP地址 并且 拥有 一个 合法 的域 名。这样 真的 是非 常不 合适 的,因 为主 机名 和域 名是 两个 完全 不同 的的 东西 。为 了 支持 这些 软 件,我们 需要 确保 系统 主机 名能 够被 解析 。 通常 的做 法就 是在 /etc/hosts中加 入一 行带 有 IP
地址 和系 统主 机名 的内 容。 如 果 你的 系统 有一 个永 久的 IP地址,那 就 用这 个地 址,否 则 使用 127.0.0.1这个 地址 。127.0.0.1localhost127.0.1.1uranus
使用 hostname--fqdn来查 看你 的系 统的 主机 名能 否被 解析 为一 个 IP地址 并拥 有一 个有效的 域名 。 10.4.1域 名解析器域名 解析 器的 工作 是查 找某 个域 名所 对应 的 IP地址 。大 部分 常用 的域 名解 析器 是 GNUC
Library中的 resovler提供 的功 能 (resolver(3))。另 一个 是由 libfiredns软件 包提 供
152
的 FireDNSresolver。还 有其 他的 。GNULIBC的域 名解 析器 对域 名的 解析 是由 /etc/nsswitch.conf中的 hosts这一 行配 置决定 的。 该行 列出 了解 析域 名用 的服 务,例如 dns,files,nis,nisplus。参 阅nsswitch.conf(5)。 即使 在使 用 files的情 况下,域 名解 析器 的行 为也 是由 /etc/hosts这个 配置 文件 控制 的。 参阅 hosts(5)。
上述 文件 都是 静态 的,你可 以用 你喜 欢的 编辑 器修 改。 在使 用 dns服务 的情 况下,域 名解 释器 的行 为也 是由 /etc/resolv.conf这个 配置 文件 控制的 。 参 阅 resolv.conf(5)。 resolv.conf的一 个重 要功 能就 是提 供一 个域 名服 务器 的 IP地址 列表,通 过 查询 这些 服务 器来 获得 域名 解析 。 这 一 列表 常常 依赖 于网 络环 境,而 且 在 你机器 运行 的时 候,网络 环境 时常 发生 变化 。 pppd和 dhclient这类 程序 都能 添加 或删 除
resolv.conf中的 信息 。 但 是 这些 功能 不是 每次 都能 正常 工作 而且 两者 还会 有冲 突。 软 件 包resolvconf采用 了 更好 的方 法解 决了 这个 问题,并 提供 了一 个标 准的 框架 来更 新resolv.conf。参 阅 管理 域名 服务 器信 息 – resolvconf,第 10.4.2节 。10.4.2管 理域名服务器信息 –

resolvconf软件 包 resolvconf提供 了一 个框 架,能 动 态的 管理 关于 可用 域名 服务 器的 信息 。 它 解决 了长久 以来 如何 维护 一个 给域 名解 析器 和 DNS缓存 使用 的动 态的 域名 服务 器列 表的 问题 。Resolvconf把它 自己 设为 控制 网络 接口 和提 供域 名服 务信 息的 程序 与需 要域 名服 务信 息的应用 程序 的中 间媒 介。
resolvconf被设 计成 不需 要任 何手 动设 置就 能工 作。 但是,这 个软 件包 还是 很新 的,可能需要 一些 手工 的干 预才 能正 常的 工作 。如 果你 曾经 定制 过软 件包,而 且它 们更 新了 /etc/resolv.conf的话,你 就需 要去 掉这 部分 定制 。更 多信 息参 阅/usr/share/doc/resolvconf/README.gz。10.4.3缓 存查询过的域名 –

nscd,dnsmasq,pdnsd,bind9如果 你的 域名 服务 器响 应速 度非 常慢,你 可能 需要 使用 nscd来缓 存域 名解 析器 libc6查询到 的结 果。 如果 你希 望为 你本 地网 络中 的其 他主 机缓 存结 果的 话,你 可能 要去 运行 一个 缓存 转发 域名 服务器 (cachingforwardingnameserver)。就 像 dnsmasq或 pdnsd。如果 你愿 意,你也 可以 用软 件包 bind9中的 named来做 缓存 转发 域名 服务 器 (cachingforwardingnameserver)。 但 是 这是 一个 很庞 大的 程序,除 非 你需 要它 高级 功能,否 则 还 是使用 上面 提到 的那 些程 序比 较好 。
所有 这些 软件 包都 能和 resolvconf一起 工作 。10.4.4提 供域名解析服务 –

bind如果 你希 望给 一个 域提 供一 个权 威的 域名 服务 的话,你 就 需要 一个 完善 的域 名服 务器,例 如软件 包 bind9中的 named。如果 你安 装了 bind9,你 也应 该安 装 dnsutils。 你可 能还 需要 安装 这样 一些 工具 软件 包:
bind9-host; dns-browse; dnscvsutil; nslint。 你可 能还 需要 安装 说明 文档,bind9-doc。 你可 能还 需要 安装 开发 文档,libbind-dev; libnet-dns-perl。 如果 你是 使用 DHCP,
153
下面 这个 软件 包会 对你 有所 帮助,dhcp-dns。安装 bind9或者 用 dpkg-reconfigurebind9来进 行基 本的 设置 。设 置包 括编 辑文 件name。 在 Debian中,你 可 以在 /etc/bind/找到 这个 文件,它 主 要是 用来 设置 基本 的 DNS域的 ;它 包含 了其 他两 个文 件,named.conf.local,用 来定 义本 地区 域,和named.conf.options,用 来设 置选 项的 。( 后 者的 执行 需要 resolvconf来产 生
/var/run/bind/named.options文 件,除 了 forwarders的说 明是 一个 当 前可 用的 非本 地 域名 服 务 器 列 表 之 外,其 余 都 和 原 先 的 一 样 。要 利 用 这 个,可 以 修 改 named.conf中的 include这一 样,使其 包含 /var/run/bind/named.options。参 阅 管理 域名 服务 器信 息 –resolvconf,第 10.4.2节 。 )在 named.conf*文件 中用 到的 数据 库文 件,如果 没有 指定 完整 的路 径,则该 数据 库文 件会被存 储在 /var/cache/bind/。 这 是 一个 正确 的存 储 named产生 的文 件的 地方 。 例 如,某 个域的 从服 务器 使用 的数 据库 文件 。 /etc/bind/下面 的那 些静 态的 数据 库文 件,需要 在named.conf中有 完整 的路 径才 能被 找到 。详 情参 阅/usr/share/doc/bind9/README.Debian.gz。10.5使 用 DHCP来 配置网络接口底层 的网 络接 口设 置可 以用 DynamicHostConfigurationProtocol(DHCP)来 自 动 设 置 。你的 防火 墙或 路由 器或 宽带 ISP可能 用这 个方 法来 配置 IP地址 和其 他参 数。要做 这个 工作 你必 须安 装下 列软 件包 的其 中一 个,· dhcp3-client(version3,InternetSoftwareConsortium)
· dhcpcd(YoichiHariguchiandSergeiViznyuk)· pump(RedHat)pump简易 且被 广泛 应用 。 dhcp3-client复杂,但 是可 配置 程度 更高 。 [55]10.6Debian的 高级网络设置
10.6.1使 用 ifupdown进 行高级网络设 置为了 让网 络设 置更 加简 单,Debian提供 了一 个标 准的 高级 网络 设置 工具,包 含 ifup和ifdown程序 和 /etc/network/interfaces文件 。 如果 你选 择用 ifupdown来配 置你 的网络,那么 就 不 要 同时 使用 底层 工具 去配 置。 这也 意味 着你 不应 该用 其他 高级 配置 工具,如whereami,divine,intuitively等。 他们 调用 的也 是底 层配 置工 具。 ifupdown程序 在设计的 时候,是 假设 仅有 这样 一个 程序 会被 用来 设置 网络 接口 的。 更新 接口 设置 是执 行,#ifdowneth0editor/etc/network/interfaces#做你 需要 的调 整
#ifupeth0更多 信息 参阅 interfaces(5),/usr/share/doc/ifupdown/examples/network-interfaces.gz和 ifup(8)。
10.6.1.1用 固定 IP地 址为接口进行设置
154
假设 你要 配置 一个 以太 网接 口,使 其 拥有 一个 固定 的 IP地址 192.168.0.111。 这 个 IP地址以 192.168.0为开 头,所 以 它肯 定在 一个 LAN内。 进 一 步假 设 192.168.0.1是 LAN上面 Internet网 关 的 地 址 。编 辑 /etc/network/interfaces,使 其 包含 类似 下面 这段 的内 容,ifaceeth0inetstaticaddress192.168.0.111
netmask255.255.255.0gateway192.168.0.1在接 口被 激活 或是 在激 活之 前,你 都 可以 配置 接口 的其 他部 分或 者进 行其 他操 作。 只 要 你 在"up"和 "down"那几 行中 设置 合适 的命 令。
ifaceeth0inetstaticaddress192.168.0.111netmask255.255.255.0gateway192.168.0.1uprouteadd-net10.0.0.0netmask255.0.0.0gw192.168.0.2dev$IFACEdowndel
upechoInterface$IFACEgoingup|/usr/bin/logger-tifupdownGoingdown|/usr/bin/logger-tifdown你也 可以 选择 把命 令插 入到 /etc/network/if-up.d和 /etc/network/if-down.d目录 下的脚 本中 。这 些脚 本也 能执 行扩 展的 选项 。详 情参 阅 interfaces(5)。例 如,软件 包
resolvconf包含 的脚 本允 许你 在接 口被 激活 的同 时,往 /etc/resolv.conf添加 指定 的DNS信息,ifaceeth0inetstaticaddress192.168.0.111netmask255.255.255.0
gateway192.168.0.1dns-searchsomedomain.orgdns-nameservers195.238.2.21195.238.2.22dns-search选项 的参 数 somedomain.org符合 resolv.conf(5)中所 说的 search选项 的参数 。 dns-nameservers选项 的参 数 195.238.2.21和 195.238.2.22符合 选项nameserver的参 数。 其他 可以 识别 的选 项是 dns-domain和 dns-sortlist。参 阅 管理 域名服 务器 信息 – resolvconf,第 10.4.2节。10.6.1.2用 DHCP配 置接口为了 使用 DHCP配置 接口,请 编辑 /etc/network/interfaces,使 其包 含一 下这 段内 容:ifaceeth0inetdhcp为了 让 DHCP能工 作,你需 要安 装一 个 使用 DHCP来配 置网 络接 口,第 10.5节中 提及 的
DHCP客户 端程 序。
15
10.6.1.3配 置无线网卡 (Wi-Fi)接 口软件 包 wireless-tools包含 了一 个钩 子脚 本 /etc/network/if-pre-up.d/wireless-tools,使 得在 接口 被激 活之 前,对无 线网 卡 (802.11a/b/g)进行 设 置变 为可 能。 使用iwconfig程序 来完 成设 置,参阅 iwconfig(8)。任 何一 个 iwconfig的有 效参 数,你都 可以把 它包 含在 /etc/network/interfaces中,并 在 原有 的参 数名 字前 加上,wireless-” 这个前 缀。 例 如,要 设 置 eth0,使得 eth0在被 DHCP激活 之前,ESSID设定 为 myessid,encryptionkey设定 为 123456789e,请 编 辑 /etc/network/interfaces,加 入一 下这 段 内容,ifaceeth0inetdhcpwireless-essidmyessid
wireless-key123456789e注 意 !如 果 你 使 用 waproamd来设 置这 个接 口的 话,你 不 应该 使用 这个 方法 来设 置 ESSID和key。 在 ifup执行 时,waproamd就已 经设 置好 了 ESSID和 key。 参 阅 使用 waproamd启动网 络设 置,第 10.8.4节。
10.6.1.4设 置 PPP接 口ifup和 ifdown程序 使用 pon和 poff来添 加和 删除 PPP接口,所 以先 阅读 设置 PPP接口,第 10.2.4节。假设 你已 经设 定了 PPP和 myisp一起 工作 。 请 编 辑 /etc/network/interfaces,使 其 包 含如下 这段 内容,ifaceppp0inetpppprovidermyisp
这样 设置 好后,ifupppp0会完 成ponmyisp遗憾 的是,目 前 无法 在 /etc/network/interfaces中的 ppp段落 里面 提供 额外 的 pppd选项。 目前 无法 使用 ifupdown来为 PPP接口 提供 辅助 的设 置。 因为 在 pppd完成 连接 之前 pon就已 经存 在了,ifup执行 激活 脚本 之后 PPP接口 才可 用。 到这 个 bug被修 正之 前,还是需要 在 /etc/ppp/ip-up或 /etc/ppp/ip-up.d/中进 行额 外的 设置 。
10.6.1.5设 置 PPPoE接 口许多 宽带 因特 网服 务提 供商 (ISP)使用 PPP协议 来连 接,即使 用户 的机 器通 过以 太网 和 /或ATM网络 连接 他们 。 这是 通过 PPPoE的技 术来 完成 的,即把 PPP祯封 装在 以太 网卡(Ethernet)的祯 里面 。 假设 你的 ISP被称 为 myisp。首 先为 myisp设置 PPP和 PPPoE。最简 单的 方法 就是 安装 pppoeconf,然 后从 终端 中运 行 pppoeconf。之 后编 辑
/etc/network/interfaces使其 包含 如下 这段 内容,
156
ifaceeth0inetpppprovidermyisp有时 候最 大传 输单 位 MaximumTransmitUnit(MTU)和 PPPoEoverDigitalSubscriberLine(DSL)有关 。详 情参 阅 DSL-HOWTO。
注意 !如 果你 的宽 带调 制解 调器 包含 路由 功能 。那 么当 调制 解调 器 /路由 器自 己处 理 PPPoE连接 时,在 LAN中它 就表 现的 和简 单的 连接 Internet的以 太网 网关 一样 。10.6.1.6为 网关配置多个以太网 接 口假设 eth0已经 用 DHCP-configuredIP地址 连接 到 Internet,并 且 eth1使用 一个 固定
IP地址 192.168.1.1连接 到 LAN。编 辑 /etc/network/interfaces使其 包含 如下 内容,ifaceeth0inetdhcpifaceeth1inetstaticaddress192.168.1.1
netmask255.255.255.0如果 按照 建立 路由 网关,第 10.12节中 描述 的去 激活 主机 上的 NAT,那 么你 就能 和 LAN中的 其他 主机 一起 享用 互联 网连 接了 。
10.6.1.7设 置虚拟接口使用 虚拟 接口,你 可 以设 置一 个以 太网 卡使 其成 为拥 有很 多 IP子网 的接 口。 例 如,假 设 你的主 机在 LAN网络 上 (192.168.0.x/24)。你 想要 让主 机连 接到 互联 网,并用 已经 存在 的以太网 卡通 过 DHCP来获 得公 网 IP地址 。编 辑 /etc/network/interfaces使其 包含 如下 一段内 容:
ifaceeth0inetstaticaddress192.168.0.1netmask255.255.255.0network192.168.0.0broadcast192.168.0.255
ifaceeth0:0inetdhcpeth0:0接口 是一 个虚 拟的 接口 。当 它被 激活 的时 候,它的 真实 硬件 eth0也会 被激 活。10.6.2使 用 ifupdown的 逻辑接口定义 进 行高级网络 设 置下列 内容 中,对于 读者 而言 了解 物 理接口 (physicalinterface)和 逻 辑接口 (logicalinterface)之间 的不 同是 重要 的。 物 理 (physical)接口 就是 我们 所说 的,接口,,是 由内核命 名为 eth0,eth1,ppp0或其 他。 逻 辑 (logical)接口 是一 套可 以用 来对 物理 接口 的可变参 数进 行设 置的 值的 集合 。如 果你 觉得 还不 清楚,那 么在 阅读 的时 候就 用,用 X配置 文件来 设置 接口,去代 替,设置 逻辑 接口 X” 。
在 /etc/network/interfaces中 iface的定 义实 际上 是逻 辑接 口的 定义,而 不 是物 理接 口
157
的 。 如果 你从 来不 去重 新配 置你 的接 口,那 么 你就 可以 忽略 这个 细节 。因 为 物理 接口 foo缺省会 被设 置成 逻辑 接口 foo。假设 你的 电脑 是台 笔记 本,你 需 要在 家里 和工 作的 地方 之间 穿梭 。 那 么当 你的 电脑 连接 到 公司的 网络 或家 里的 网络 时,你都 要相 应地 对 eth0进行 设置 。
首先 定义 两个 逻辑 接口 home和 work(取 代 eth0,就 像我 们先 前做 的),它们 分别 描述 了在家 中的 和公 司的 网络 中如 何设 置接 口。 ifacehomeinetstaticaddress192.168.0.123netmask255.255.255.0
gateway192.168.0.1ifaceworkinetstaticaddress81.201.3.123netmask255.255.0.0gateway81.201.1.1
然后 通过 适当 的设 置,并 在 命令 行中 指定 这些 设置 。 物 理接 口 eth0就能 在家 庭网 络中 被 激活了,#ifupeth0=home
针对 公司 网络 重新 设置 eth0只要 运行 这些 命令,#ifdowneth0ifupeth0=work
注意 !如 果 interfaces中的 内容 如上 述所 写的,那 么我 们就 不能 单独 执行 ifupeth0来激活 eth0。理 由是 ifup使用 物理 接口 名作 为缺 省的 逻辑 接口 名,但是 现在 在我 们的 例子中,没有 关于 逻辑 接口 eth0的定 义。10.6.3使 用 ifupdown进 行自动的网络 设 置在 ifup运行 的时 候,接 口 的名 称可 以被,映射 (mapped)” 为别 的名 称。 至 于映 射成 什么 名称,这 个 视情 况决 定。 因 此 ifup能够 被设 置为 用预 设的 逻辑 接口 集合 中的 一个 合适 的逻 辑接口 来激 活物 理接 口。 逻辑 接口 名称 映射 产生 的情 况如 下:
· 如果 执行 ifup的时 候没 有给 定逻 辑接 口名 称,那么 物理 接口 名称 就会 被用 作初 始的逻 辑接 口名 称。· 如果 逻辑 接口 名称 符合 mapping描述 的 glob-pattern,那 么就 会映 射到 新生 成的逻辑 接口 名称 中去 。对 于每 段映 射都 是这 样按 顺序 进行 的。· 如果 最终 的逻 辑接 口名 称是 /etc/network/interfaces中定 义的 一个 逻辑 接口 的标签,那 么物 理接 口就 被当 作这 个逻 辑接 口来 激活 。否 则 ifup会打 印 "Ignoring
unknowninterface"随后 退出 。
158
mapping的语 法:mappingglob-patternscriptscript-name[mapscriptinput]
mapping段落 中的 script,总 是 把 物 理 接口 的名 称作 为它 的参 数。 其 他,map” 行中 的内 容(不 包含,map” 本身 )都 会作 为它 的标 准输 入。 该 script在退 出之 前会 把映 射的 结果 作为标 准输 出打 印出 来。 例如,下 面这 段 mapping会让 ifup用逻 辑接 口 home来激 活接 口 eth0。
mappingeth0script/usr/local/sbin/echo-home/usr/local/sbin/echo-home的内 容为,
#!/bin/shechohome因为 映射 是由 脚本 来完 成的,所 以 自动 选择 逻辑 接口 是可 能的 — 基于 一些 选择 测试 。 参 阅使用 guessnet来选 择逻 辑接 口,第 10.6.3.1节中 的范 例。
10.6.3.1使 用 guessnet来 选择逻辑接口安装 软件 包 guessnet。然 后在 /etc/network/interfaces中加 入如 下一 段内 容:mappingeth0scriptguessnet-ifupdown
maphomework现在,当 你 ifupeth0的时 候,guessnet会检 测 eth0是否 能用 home或 work来 激 活 。它用 存储 在逻 辑接 口定 义中 的信 息来 完成 这项 工作 。
10.6.4使 用 laptop-net进 行自动的网络设置软件 包 laptop-net采用 不同 的方 法处 理自 动的 网络 设置 。 Laptop-net不用 ifupdown的逻辑 接口,取 而 代之 的是 它自 己的 一套 配置 "方案 "和,配置 文件,系统 。 不 过,Laptop-net还是 会使 用 ifup和 ifdown来设 置物 理接 口。 更多 详细 文档 请安 装 laptop-net-doc。
10.6.5使 用 network-manager进 行自动的网络设置network-manager这个 软件 现在 是由 Fedora的开 发者 们开 发的,Ubuntu已经 对其 进行 了打包 。 有 朝 一日 它也 会出 现在 debian中,到 时 候我 们应 该放 弃 ifupdown和其 他过 时的 朋友们 了。
159
10.7处 理内核对接口命 名 的不一致性eth0,eth1这类 设备 的名 称是 由内 核指 定的,内 核是 按照 创建 这些 接口 的顺 序来 命名 的。在开 机的 时候,被 检测 到的 适配 器通 常都 是按 照一 样的 顺序 被检 测到 的,所以 每次 都被 指定为 同一 个名 称。 但 是,对 于 热拔 插的 适配 器情 况就 不是 这样 了。 在 不 同情 况下,它 们 可 能以任 意的 顺序 被检 测到,于 是内 核就 给它 们指 定不 同的 名称 。
因为 这个 关系,在 一 个网 卡适 配器 是热 拔插 设备 的系 统中,使 用 /etc/network/interfaces给 eth0,eth1这类 接口 定义 逻辑 接口 和依 靠缺 省的 映射 关系 都是 不可 能完 全正 常工 作的 。要取 代这 个做 法,你 必 须给 逻辑 接口 设置 一个 唯一 的名 称,并 使 用下 列两 个方 法中 的一 个 来限制 哪些 逻辑 接口 会被 指定 给哪 些是 适配 器。 一个 方法 是使 用 nameif(在 net-tools软件 包中 )工 具 或另 外一 个更 灵活 的 ifrename( 在
ifrename软件 包中 )工 具,使内 核按 照适 配器 的属 性来 指定 接口 名称 。使 用这 个命 名方 案的话,物 理接 口的 名称 可以 被用 来推 测出 接口 下面 的适 配器 的名 称。 另外 一种 方法 是使 用 ifup映射 机制 。这 种 情况 下就 会根 据将 要被 激活 的物 理接 口所 在的 适配器 的某 些属 性来 选择 逻辑 接口 。
假设,你 有两 个网 络适 配器,分 别在 网络 net1和 net2中使 用。/usr/share/doc/ifupdown/examples/目录 下面 包含 了一 个映 射脚 本,能 够根 据适 配器 的 媒体访 问控 制地 址( MAC地址 )来 选择 逻辑 接口 。首 先安 装脚 本到 适合 的目 录。#install-m770/usr/share/doc/ifupdown/examples/get-mac-address.sh\/usr/local/sbin/
然后 在 /etc/network/interfaces中加 入如 下一 段内 容:mappingeth0script/usr/local/sbin/get-mac-address.shmap02:23:45:3C:45:3Cnet100:A3:03:63:26:93net2
更多,更 复杂 的例 子参 阅 多阶 段 (Multi-stage)映射,第 10.9节。不管 采用 那种 方法,通 常都 是用 MAC地址 来识 别适 配器 的。10.8启 动 (triggering)网 络设置我们 已经 知道 了接 口是 如何 设置 和重 新设 置的 。这 些动 作需 要在 适当 的时 候完 成。 传统 上,网 络 是在 开机 的时 候由 /etc/rcS.d/S40networking这个 脚本 设置 的,而 且 极少 重新设 置。 其 他 需要 网络 的服 务随 后启 动。 在 关 机或 者重 启的 时候,initscripts按照 相反 的循序 执行 。
然而 现在,GNU和 Linux正朝 着支 持动 态硬 件更 换和 突发 事件 的方 向发 展。 首先 是为 可替换的 PCMCIA卡提 供支 持。 目前 在添 加 hotplug机制 后,很多 外设 都能 在电 脑运 行的 时候进行 替换 。 这 也 包括 了网 络硬 件。 注 意 ! 当 你 拔插 可热 拔插 设备 的时 候,涉 及到 此硬 件的 服务需 要在 插入 之后 启动 或删 除之 前关 闭。这 就意 味着 这类 服务 需要 从 SystemVinit系 统
160
中删 除,并时 期处 于 ifupdown的控 制之 下。例如,假 设受 initscript/etc/init.d/foo控制 的服 务 foo依赖 于动 态设 置的 网络 接口eth0。· 首先,从 init系统 中删 除 foo。如 果你 是使 用 sysv-rcinit系统 的话,那 么请完成 下面 几个 事项 。#rm/etc/rc[2345].d/Sfoo· 然后 通过 在 /etc/network/interfaces中 eth0段落 里加 入 up和 down的 选 项,
将 foo置于 ifupdown的控 制之 下。 此文 件还 能呼 叫 foo的初 始化 脚本(initscript):ifaceeth0inetdhcpup/etc/init.d/foostartdownstop
10.8.1在 开机的时候启动 (triggering)网 络设置在启 动的 时候 init脚本 /etc/rcS.d/S40networking运行 了 ifup-a命令 。这 个命 令激活了 所有 在 /etc/network/interfaces中 auto段落 里罗 列了 的物 理接 口。现在 使用 动态 的方 式来 处理 网络 设置 是一 种更 好方 法。一 旦这 个支 持硬 件动 态更 换的 机制 在适当 的位 置上,处 理静 态的 硬件 就变 得非 常的 简单,就 和 处理 动态 的一 样。 启动 过程 也可以被 当作 另外 一个 热拔 插事 件。( 参阅 使用 hotplug启动 (triggering)网络 设置,第10.8.2节 。)尽管 如此,大 多数 情况 下,至少 loloopback接口 需要 在开 机时 被激 活。 所以,需 要确 定/etc/network/interfaces中包 含如 下一 段内 容:
autoloifaceloinetloopback如果 你想 让其 他物 理接 口也 在开 机的 时候 被激 活,请 把 它们 加入 到 auto的段 落中 去。 绝 对不 要 把 PCMCIA接口 放在 auto段落 中。 在开 机启 动顺 序中,PCMCIA的 cardmgr晚于/etc/rcS.d/S40networking启动 。10.8.2使 用 hotplug启 动 (triggering)网 络设置安装 hotplug软件 包来 获得 热拔 插 (hot-plug)支持 。
你可 以在 开机 的时 候或 是把 一张 卡( 例如,PCMCIA卡) 插入 机器 之后 或者 在 discover这类的 工具 启动 并加 载了 必要 的驱 动模 块之 后,热拔 插你 的网 络硬 件。 当内 核检 测到 新的 硬件,它 会初 始化 这个 硬件 并执 行 hotplug程序 去配 置这 个硬 件。 当硬件被 删除 的时 候,内 核 以不 同的 环境 变量 设置 再次 执行 。 在 Debian中,hotplug被
16
呼叫 时,它 会 执行 /etc/hotplug/和 /etc/hotplug.d/中的 脚本 。 细 节参 阅 hotplug(8)。新安 装的 网络 硬件 是由 脚本 /etc/hotplug/net.agent设置 的。 假设 你的 PCMCIA网卡 已经插 入,并生 成了 可用 的接 口 eth0。则 /etc/hotplug/net.agent做了 下面 的事 情。,ifupeth0=hotplug
除非 你在 /etc/network/interfaces中加 入了 名称 为 hotplug的逻 辑接 口定 义或 映射,否则这 个命 令不 会做 任何 事。为 了让 这个 命令 能用 来设 置 eth0,在 /etc/network/interfaces中加 入如 下一 段内 容,mappinghotplugscriptecho
如 使用 ifupdown的逻 辑接 口定 义进 行高 级网 络设 置,第 10.6.2节中 解释 的,这样 会映射上 述的 命令,使 其等 同于 如下 的命 令,ifupeth0=eth0
(如 果你 使用 hotplug启动 ifplugd或 waproamd来控 制这 个接 口,请 不 要 包含 这样 的 映射 内 容 。) 如果 你希 望在 热拔 插的 时候 仅仅 激活 eth0,而 不是 其他 接口,那 么请 用 grep取代 echo,做法 如下,
mappinghotplugscriptgrepmapeth0更多 技巧,参 阅 使用 ifupdown进行 自动 的网 络设 置,第 10.6.3节和
/usr/share/doc/hotplug/README.Debian。10.8.3使 用 ifplugd启 动 (triggering)网 络设置ifplugd守护 进程 根据 相关 的硬 件有 没有 接入 网络 来激 活或 关闭 接口 。这 个 程序 能够 检测 网线是 否已 经插 入或 无线 网卡 (Wi-Fi)是否 能访 问 AP(虽 然 waproamd比 较 适 合 后 一 种 情 况 ) 。
当 ifplugd发现 连接 状态 改变 时,它能 运行 一个 代理 脚本,缺 省会 呼叫 ifup或 ifdown。10.8.4使 用 waproamd启 动网络设置waproamd守护 进程 和 ifplugd类似,只 是它 是针 对无 线网 卡 (Wi-Fi)设计 的。 它主 动的 扫描无 线网 卡能 访问 到的 AP。当 访问 完成 之后,waproamd执行 ifup。
如果 你正 在使 用 waproamd,那 么通 常来 说你 是通 过 waproamd而不 是/etc/network/interfaces里面 的 wireless-*选项 来设 置的 。10.8.5网 络设置和 PCMCIA
162
有许 多可 用的 方法 来处 理 PCMCIA网络 接口 的设 置( 对于 2.4和 2.6的 内 核 )。· 对于 32位 PCI(CardBus)PCMCIA网卡,oifupdown由 hotplug控制
§ 在 Woody和 Sarge中,你需 要在 本地 启用 hotplug对 ifupdown的控 制,通过 在文 件 /etc/network/interfaces里加 入 使用hotplug启动 (triggering)网络 设置,第 10.8.2节中 描述 的映 射段落 即可 。· 对于 16位 ISAPCMCIA网卡,
oifupdown由 hotplug控制,并 通过 pcmcia-cs的限 制来 加载 模块 。§ 推 荐的§ 在 Woody和 Sarge中,你 必 须通 过在 /etc/pcmcia/network文 件开始 处,加入 一行 exit0来取 消缺 省状 态下 pcmcia-cs对ifupdown的控 制。 同 时,你 必 须在 本地 启用 hotplug对 ifupdown
的控 制,通过 在文 件 /etc/network/interfaces里加 入 使用hotplug启动 (triggering)网络 设置,第 10.8.2节中 描述 的映 射段落 即可 。o缺省 状态 下 pcmcia-cs通过 配置 文件 /etc/pcmcia/network来控 制ifupdown
§ 不 赞成 使用,但 Woody和 Sarge缺省 使用 这个 方式 。opcmcia-cs通过 /etc/pcmcia/network中的 特殊 代码 来控 制底 层工 具。§ 不 赞成 使用§ 在 Woody和 Sarge中,编辑 /etc/pcmcia/network.opts就能 启用这 些特 殊代 码。对于 16位的 卡,推 荐的 处理 方法 充分 利用 了 2.4内核 的热 拔插 子系 统对 PCMCIA的支 持 。PCMCIA网卡 是可 以热 拔插 的。 因此,任 何需 要通 过 PCMICA卡来 获得 网络 的服 务的 服务,应该 设置 为要 在卡 插入 之后 启动 并在 卡移 除的 时候 停止 。通 常 通过 安排 服务 在 ifup时启 动和 ifdown时停 止来 完成 这件 事情 。然 而,有 些 人说 服他 们自 己使 用冷 拔插 (codeplugging)他们 的 PCMCIA网卡,他 们 在系 统启 动之 前插 入网 卡,在 开 机过 程中 陆续 启动 需要 通过 这 卡来获 得网 络的 那些 服务 。如 果你 是这 类人,为 了确 保在 启动 这些 服务 器前 网卡 已经 设置 好 了,你需 要做 下列 工作,· 在 /etc/default/pcmcia中设 置 CARDMGR_OPTS="-f",强 制 cardmgr在前 台运 行 。
· 修改 /etc/rc?.d/S20pcmcia的名 称,改成 类似 /etc/rc?.d/S12pcmcia的样 子。这些 只适 合于 16位的 PCMCIA卡。注意 !如 果你 使用 16位的 PCMICA卡,软件 包 pcmcia-cs还是 需要 的。 该软 件包 包括 了cardmgr守护 进程,用 来管 理 socket和加 载驱 动模 块。 我们 只是 不希 望它 通过
/etc/pcmcia/network来呼 叫网 络设 置程 序。
163
为了 让 cardmgr能正 常工 作,你可 能需 要编 辑 /etc/pcmcia/config.opts来设 置 16位PCMCIA卡的 资源 。更 多信 息参 阅 PCMCIA,第 7.2.1节和 LinuxPCMCIAHOWTO。10.9多 阶段 (Multi-stage)映 射首先,假 设 你的 网络 适配 器可 以热 拔插,你 启用 了 使用 hotplug启动 (triggering)网络 设置,第 10.8.2节中 描述 的自 动设 置。 其 次,进 一步 假设 你需 要依 照物 理接 口下 面的 适配 器(如 同 处理 内核 对接 口命 名的 不一 致性,第 10.7节中 描述 的) 和接 口上 连接 的网 络( 例如,使用 guessnet来选 择逻 辑接 口,第 10.6.3.1节 中描 述的 ) 来 把 逻辑 接口 映射 到,物理,接口 。你 就可 以用 多阶 段映 射来 完成 。如果 接口 是可 以热 拔插 的,映射 的第 一个 阶段 是利 用 hotplug的组 名称 并输 出内 核指 定的接口 名称 。 映 射 的第 二阶 段是 利用 内核 指定 的接 口名 称并 输出 适配 器的 名称 。 第 三个 阶段 就是依 照网 络环 境,把适 配器 名称 映射 到逻 辑接 口名 称上 去。 #允许 hotplug激活 接口mappingscriptecho
#确定 那个 接口 是有 线的 那个 是无 线的mappingeth?script/usr/local/sbin/get-mac-address.shmap02:23:45:3C:45:3Cwired00:A3:03:63:26:93wifi
#检测 有线 网络 是否 可用mappingwiredscriptguessnet-ifupdownmapwork-wiredhome
#检测 哪个 无线 网络 可用mappingwifiscriptifscoutmapstarbuckswork-wireless
ifacework-wiredinetstatic...10.10网 络服务设置桌面 和家 用服 务器 典型 的网 络服 务设 置包 括,· Internetsuper-server和 TCP/IPdaemonwrapper,参 阅 服务 的访 问限 制,第9.2.5节。o/etc/inetd.conf
· ssh:OpenSSHsecureshell,参 阅 SSH,第 9.5节。
164
o/etc/ssh/ssh_config/etc/ssh/sshd_config· exim,邮 件 传输 代理 (MTA),参 阅 邮件 名,第 10.3.2节和 邮件 传输 代理 ( MTAs),第 9.6.1节。
o/etc/exim/exim.conf/etc/mailnameo/etc/aliases/etc/email-addresses· fetchmail:从 POP3帐户 中收 取邮 件的 守护 进程,参 阅 收取 邮件 – Fetchmail,
第 9.6.2节。o/etc/fetchmailrc· procmail,本 地邮 件传 递和 过滤 程序,参 阅 处理 邮件 – Procmail,第 9.6.3节 。
o~/.procmailrc· 主机 名和 DNS(proxy,cache,...),参 阅 主机 名,第 10.3.1节和 域名 服务(DNS),第 10.4节。o/etc/host.conf
/etc/hostnameo/etc/hosts/etc/hosts.allowo/etc/hosts.deny/etc/resolv.confo/etc/bind/named.conf(编 辑)
/etc/bind/db.lan(addforLANhosts)o/etc/bind/db.192.168.0(addforLANreverse)· DHCP,参 阅 使用 DHCP来配 置网 络接 口,第 10.5节。o/etc/dhcp3/dhclient.conf( DHCP客户 端)
/etc/default/dhcp3-server( 服务 器端 )o/etc/dhcp3/dhcpd.conf( DHCP服务 器端 )· cvs:当 前版 本控 制系 统,参阅 并行 版本 系统 (CVS),第 12.1节,o/etc/cvs-cron.conf
/etc/cvs-pserver.conf· nfs-kernel-server,网 络 文 件 系 统,参 阅 NFS设置,第 3.4节 。( 针 对 类 Unix系统) o/etc/exports
· samba,Windows网络 文件 和打 印机 共享,参 阅 Samba设置,第 3.5节和 Samba,第 8.6.38节。
165
o/etc/samba/smb.conf· 打印 机守 护进 程系 统,参阅 打印 机设 置,第 3.6节。o/etc/printcap(forlpr)
· apache和 apache2,Web服务 器。o/etc/apache/*/etc/apache2/*· squid,Web代理 和缓 存服 务器 。
o/etc/squid/*10.11网 络故障排除如果 你遇 到了 问题,首 先执 行下 列命 令来 检查 输出 的结 果:
#ifconfigcat/proc/pci#/proc/interruptsdmesg|more
同时 参阅 网络 测试 基础,第 8.6.29节下 面的 章节 。如果 你无 法浏 览特 定的 站点,参 阅 无法 访问 某些 站点 的怪 问题,第 3.8.5节。10.12建 立路由网关一个 Debian主机 可以 作为 一个 全能 的网 关,它 可 以承 担网 络地 址转 换( NAT,通 常 也 称 为 IP伪 装 )、邮 件 传 输,DHCP,DNS缓存,HTTP代理 缓存,CVS服务,NFS服务 和 Samba服务 。参阅 网络 所需 的主 机名 和 IP地址,第 3.1.9节中 的例 子来 完成 上述 设置 。10.12.1Netfilter设 置在 Linux2.4及其 后继 版本 中加 入了 netfilter/iptables项目,作 为 一个 防火 墙子 系统 。参阅 Netfilter,那 儿有 许多 有关 其配 置的 讨论 和解 释。10.12.1.1netfilter基 础Netfilter内建 了 5条链 路来 处理 数据 包,它们 分别 是,PREROUTING,INPUT,FORWARD、
OUTPUT和 POSTROUTING:routingdecisionIN------>PRE--->------>FORWARD----->---->POST----->OUTinterfaceROUTING\ filter/ ROUTINGinterface
DNAT| tracking^ SNATREDIRECT| MASQUERADE
16
v |INPUTOUTPUT|filter^filter,DNATv |\-->LocalProcess--/user-spaceprograms
10.12.1.2过 滤表 (Netfiltertable)数据 包在 每条 内建 的链 路中 传输 时按 如下 过滤 表中 的规 则进 行处 理。 · filter(数 据包 过滤 器,链路 中默 认的 过滤 器)
oINPUT(作 用于 进入 本机 的数 据包 )FORWARD(作 用于 路由 到本 机的 数据 包)oOUTPUT(作 用于 本地 产生 的数 据包 )· nat(网 络地 址转 换)
oPREROUTING(作 用于 刚进 入的 待转 换数 据包 )OUTPUT(作 用于 在路 由之 前待 转换 的本 地产 生的 数据 包)oPOSTROUTING(作 用于 待发 出的 已转 换的 数据 包)· mangle( networkaddressmangling,适 合于 2.4.18之后 的内 核)
o适用 于所 有 5条链 路。10.12.1.3过 滤目标 (Netfiltertarget)防火 墙规 则有 许多 目标,
· 4个基 本目 标,oACCEPT允许 数据 包通 过。DROP阻拦 数据 包。oQUEUE允许 数据 包进 入用 户空 间( userspace)( 如 果 内 核 支 持 的 话 )。RETURN表示 停止 读取 该链 路并 回到 前一 个( 呼叫 的) 链路 的下 一条 规则 。
· 扩展 目标,oLOG打开 内核 日志 。REJECT回送 错误 数据 包并 阻拦 该数 据包 。oSNAT修改 数据 包源 地址,仅 作 用于 POSTROUTING链 路 。( 仅 适 用 于 nat过滤表 )
--to-sourceipaddr[-ipaddr][[UbuntuHelp:port-port]]oMASQUERADE作用 和 SNAT一样,但 面 向使 用动态 IP请求 建立 的连 接 ( 拔 号连 接 )。( 仅 适 用 于 nat过滤 表)
167
--to-portsport[-port]oDNAT修改 数据 包目 的地 址,仅作 用于 PREROUTING,OUTPUT链路 以及 由它们调 用的 用户 自定 义链 路。( 仅适 用于 nat过滤 表)
--to-destinationipaddr[-ipaddr][[UbuntuHelp:port-port]]oREDIRECT修改 数据 包目 标地 址使 其发 送给 本机 。--to-portsport[-port]
10.12.1.4Netfilter命 令iptables的基 本命 令有,iptables-Nchain#创建 一个 链路
iptables-Achain\ #添加 链路 的规 则-ttable\ #使用 过滤 表 (filter,nat,mangle)-pprotocol\ tcp,udp,icmp或所 有,-ssource-address[/mask]\--sportport[[UbuntuHelp:port]]\#如果 -p是 tcp或 udp,指 定源 的端 口-ddestination-address[/mask]
--dportport[[UbuntuHelp:port]]\#如果 -p是 tcp或 udp,指 定目 的地 端口-jtarget\ #如果 匹配 作何 处理-iin-interface-name\ 针对 INPUT,FORWARD,PREROUTING-oout-interface-name#针对 FORWARD,OUTPUT,POSTROUTING
10.12.1.5网 络地址转换LAN中的 机器 可以 通过 能把 LAN地址 转换 为可 用的 Internet上的 IP地址 的网 关来 访问Internet的资 源。#apt-getinstallipmasq
执行 样例 规则 来加强 ipmasq的保 护机 制。 参阅/usr/share/doc/ipmasq/examples/stronger/README。 对于 在 Woody中使 用 Debian的kernel-image-2.4,请 确认 加载 了相 应的 模块 。 Sarge里面 的 ipmasq已经 修正 了这 个问题。 相关 配置 指导 请参 阅 网络 功能,第 7.2.3节。对于 使用 2.2版内 核镜 像的 Debian,可 按下 面的 方法 编辑 /etc/masq/rules中的
Z92timeouts.rul文件,以 保证 可长 时间 连接 远程 站点 (如 发送 大容 量的 email,等 ):#tcp,tcp-fin,udp2hr,10sec,160sec-default#1day,min,10minlongerexample
168
$IPCHAINS-M-S86400600600同样,如 果 是通 过 PCMCIANIC访问 网络,ipmasq需要 从 /etc/pcmcia/network.opts( 阅读,/usr/share/doc/ipmasq/ipmasq.txt.gz) 或 /etc/network/interfaces(阅 读,网 络设置 和 PCMCIA,第 10.8.5节和 启动 (triggering)网络 设置,第 10.8节) 启动 。
10.12.1.6重 定向 SMTP连 接( 2.4版 内核)假设 你将 一台 笔记 本电 脑重 新配 置成 可连 入其 它的 LAN环境,而 你不 想再 重新 配置 用户 邮件代 理,即,想直 接用 原来 的配 置收 发邮 件。 使用 iptables命令 向网 关机 器中 加入 下面 的规 则,就可 以实 现重 定向 与网 关机 器的 SMTP
连接 。 #iptables-tnat-APREROUTING-s192.168.1.0/24-jREDIRECT\-ptcp--dportsmtp--to-port25#smtp=25,INPUTisopen
想使 用更 完备 的重 定向 规则 集,建 议 安装 ipmasq软件 包,并 在 /etc/ipmasq/rules/目 录中添 加 M30redirect.def文件 。10.12.2管 理多重网络联接[修正 我 ]路由 策略 (byPhilBrutschepbrutsch@tux.creighton.edu):详情 参阅
iproutemanual。 Trafficcontrol(tc)也很 有趣 。环境 设置,eth0:192.168.1.2/24;gateway192.168.1.1eth1:10.0.0.2/24;gateway10.0.0.1
该机 器没 有 IP伪装 机制 。Specialmagic:· ipruleaddfrom192.168.1.2lookup1
· 10.0.0.2lookup2· iprouteaddtodefaultvia10.0.0.1metric0· 192.168.1.1metric1· iprouteaddtable1to192.168.1.0/24viaeth0· 10.0.0.2/24viaeth1· iprouteaddtable1todefaultvia192.168.1.1
· 2192.168.1.0/24viaeth0· iprouteaddtableto10.0.0.2/24viaeth1· 2defaultvia10.0.0.2[修正 我 ]我没 亲自 做过 。如 何利 用自 动拔 号特 性使 拔号 连接 保持 高速?如 果你 知道 请发 补丁我,)
169
第 1章 -编 辑 器11.1流 行的编辑器Linux下有 众多 运行 于控 制台 环境 的文 本编 辑器 任你 选用,它 们包 括:
· vim:强大 而轻 便的 BSD传统 编辑 器。 VIiMproved.· emacs:重量级 GNU传统 编辑 器。 RMS(RichardM.Stallman)原创 。· xemacs:Emacs的下 一代,由 Lucid原创 。· mcedit:新型 GNU编 辑 器 。也 就 是 mc内 置 编 辑 器 。参 阅 MC里面 的编 辑器,第 4.2.5节,· ae:默认 的小 型编 辑器 ( Potato)。 通 常 不 用 它 。
· nano:默认 的小型 GNU编辑 器( Woody)。 类 似 pico。· joe:用于 旧式的 WordStar或 TurboPascal。· jed:快速,多 功能,菜 单式 编辑 器,兼容 Emacs键盘 操作 方式 。· jove:微型 编辑 器,兼容 Emacs键盘 操作 方式 。· nvi:新版 vi。 Bug-for-bugcompatiblewiththeoriginalvi.
使用 update-alternatives--configeditor命令 可设 置默 认的 编辑 器。许 多程 序也 使用 环境变量 EDITOR或 VISUAL来调 用编 辑器 。参 阅 MC里面 的编 辑器,第 4.2.5节,还有 一些 运行于 X环境 的编 辑器 也值 得一 提:· gvim:VimwithGUI(vimandvim-gtkpackage)
· emacs:TheOneTrueEmacs(auto-detectX).· xemacs:NextgenerationEmacs(auto-detectX).这些 X客户 端的 命令 使用 标准 选项 如 -fna24,这 对象 我这 样的 老家 伙来 说就 再好 不过 了,)参阅 客户 端,第 9.4.4节。
11.2应 急的编辑器有些 编辑 器安 装在 /bin/下,这 类 编辑 器至 少应 该安 装一 个,以 免 当 /usr/不能 访问 时,无 法编辑 文件 。 · elvis-tiny:最小的 vi编辑 器(用 vi命令 开打 )
· nano-tiny:最小 的非 编辑 器(用 nano-tiny命令 打开 )· nano:最小 的非 vi编辑 器(用 nano命令 打开 ) (Sarge)· ed:最小 的编 辑器 (常 驻系 统但 使用 起来 极不 方便 )11.3Emacs和 Vim
11.3.1Vim提 示程序 运行 时可 按下 <F1>阅读,VIM-mainhelpfile” 文档 。<F1>帮助<esc>返回 到正 常模 式
V Visual模式i Insert模式
170
,命令 行命 令:settw=72设置 文本 宽为 72<F11>Insert(paste)模式:r!date-RRFC-822数据qa将键 盘操 作记 录到 注册表 aq 停止 键盘 操作 记录
@a播放 注册表 a中记 录的 键盘 操作:editfoo.txt载入 并编 辑另 一个 文件 foo.txt:wnext写入 当前 文件 然后 编辑 下一 个文 件q和 @可用 来记 录简 单的 键盘 宏然 后回 放它 们。 例如,想 创建 一个 宏为 光标 所在 处的 单词 加上 HTML斜体 字标 签,可 以输入 qii[ea</i>^[q(此 处 [表示按 ESC键 )。 然 后,在 单 词 前 输 入 @i,编辑器就 会自 动为 它加上 <i>和 。亦可 参阅 在 Vim中使 用 GnuPG,第 14.4.2节,11.3.2Emacs提 示
<F1>帮助<F10>菜单C-uM-!date-R插入 RFC-822数据11.3.3打 开编辑器打开 编辑 器,emacsfilenamevimfilename以 vi兼容 方式 打开,-C以 不兼 容方 式打 开,vim-N默认 编译 方式 打开,emacs-q -uNONE
11.3.4编 辑器命令总汇( Emacs,Vim)exit:C-xC-c:qa/:wq/:xa/:q!Getback/commandmode:C-g<esc>Backward(left):C-bhForward(right):C-fl
Next(down):C-njPrevious(up):C-pkstArtofline(^):C-a0Endline($):C-e$mUltiplecommands:C-unnncmdnnncmdMultipleM-digitkeycmd
saveFile:C-xC-s:wfilebeginningofbuffer:M-<1Gendofbuffer:M->Gscrollforward1screen:C-v^F1/2 ^Dscrollforward1line:^E
backwardscreen:M-v^B
17
scrollbackward1/2screen:^U1line:^Yscrolltheotherwindow:M-C-vdeleteundercursor:C-dxfromcursortoeol:C-kDiSearchforward:C-s
isearchReverse:C-rSearchforward:C-senter/searchReverse:C-r?isearchregexp:M-C-sbackwardregexp:M-C-rsearchregexp:M-C-senter/
backwardregexp:M-C-r?Help:C-hC-h:helpHelpApropos:akeyBindings:C-hb,help[key]HelpInfo:iMajormode:C-hm
Helptutorial:t,helphowtoUndo:C-_uRedo:C-f^RMarkcursorposition:C-@m{a-zA-Z}eXchangeMarkandposition:C-xC-xgotomarkincurrentfile:'{a-z}
anyfile:'{A-Z}copyregion:M-w{visual}ykillC-w{visual}dYankandkeepbuffer:C-yfromkillM-ypconvertregiontoUpper:C-xC-u{visual}U
Lower:C-l{visual}uInsertspecialchar:C-qoctalnum/keystroke^Vdecimal/keystrokereplace:M-xreplace-string:%s/aaa/bbb/greplaceregexp:replace-regexpqueryreplace:M-%:%s/aaa/bbb/gc
M-xquery-replacequeryreplaceregexp:query-replace-regexpOpenfile:C-xC-f:rfileSave C-s:wallbuffers:C-xs,waSaveas,C-wfile:wfile
Promptforbuffer:C-xbListbuffers:C-b:buffersToggleread-only:C-xC-q:setroPromptandkillbuffer:kSplitvertical:C-x2,splithorizontal:3,vsplit(ver.6)
Movetootherwindow:C-xo ^WpDeletethis0,qotherwindow(s):C-x1 ^Wo
172
runshellinbg:M-xcompilekillruninbg:kill-compilationrunmake:,makeMakefilecheckerrormessage:C-x`:echoerrmsgrunshellandrecord:M-xshell:!script-atmp...cleanBS,...,!col-b<tmp>record
...save/recallshellrecord:C-xC-wrecord:rrecordrunshell:M-!sh:shcommand:cmd:!cmdruncommandandinsert:C-uM-!cmd:r!cmdfilter:M-|file{visual}:wfilerunfilterandinsert:C-uM-|filter{visual}:!filter
showoption:se[t]{option}?resettodefault{option}&booleanoption:se[t]no{option}toggle inv{option}wraptextatcolumn72,setw=72donotwrap tw=0
autoindent:seaiexpandtab etspecifycomment(mail):secomments=n:>,n:\|runGDB M-xgdbdescribeGDBmodeC-hm
steponelineM-snextlineM-nsteponeinstruction(stepi)M-ifinishcurrentstackframeC-cC-fcontinueM-cupargframesM-u
downM-dcopynumberfrompoint,insertattheendC-x&setbreakpointC-xSPC
11.3.5Vim设 置要使用 Vim的全 部功 能和 关键 字高 亮显 示,请在 ~/.vimrc或 /etc/vimrc中添 加如 下内 容:setnocompatiblenopaste
setpastetoggle=<f11>synon粘贴 模式 能避 免自 动缩 进功 能影 响在 控制 台终 端下 的剪 切 -粘贴 操作,它 更象 是,,setnoai” 。
有关 GnuPG整合 的信 息参 阅 在 Vim中使 用 GnuPG,第 14.4.2节。
173
11.3.6Ctags执行 apt-getinstallexuberant-ctags,接 着 就可 以在 源代 码文 件中 运行 ctags了 。在 Vim中输 入,tagfunction_name可直 接跳到 function_name的开 始行 。 它 适 用于 C,C++,Java、Python、和 其它 许多 编辑 语言 。
Emacs有相 同的 ctags功能 。11.3.7将 高亮显示的屏显内容转化为 HTML文 件在 Vim命令 模式 下输入 so\$VIMRUNTIME/syntax/2html.vim可以 将屏 幕上 高亮 显示 的文 本转化为 HTML代码,然 后,wfile.html存盘,,q退出 。对 C等源 代码 特别 适用 。
11.3.8用 vim分 割屏显vim可以 在多 分割 窗口 ( multi-split-screen)环 境下 编辑 多个 文件 。想 了解 有关 详情 可输入,helpusr_08.txt。要分 割屏 幕显 示多 个不 同文 件,在 vi命令 提示 符后 输入,
:splitanother-file:vsplit或者在 shell提示 符后 输入,$vi-ofile1.txtfile2.txt#水平 分割
-O 垂直 分割就可 以打 开多 窗口 vi。$vimdifffile.txt~file.txt#检查 file.txt最近 的修 改情 况
file.en.sgmlfile.fr.sgml检查 翻译 情况$gvimdifffile.txt~file.txt#在 X下上述 操作 可以 明确 地显 示源 始文 件与 备份 文件 的差 别。 对 SGML文件,它 进行 标签 匹配 检查,所以 用它 来检 查翻 译结 果十 分有 效。
用 Ctrl-W命令 指定 光标 移动,Ctrl-W+扩大 窗口-缩小 窗口Ctrl-Wh移动 到窗 口左 边j移动 到窗 口下 边
Ctrl-Wk移动 到窗 口上 边l移动 到窗 口右 边...下列 命令 用于 滚屏 控制,
174
:setscrollbindnoscrollbind第 12章 -系 统 版 本 控 制
12.1并 行版本系统 (CVS)有关 的详 细信 息可 使用 lynx查阅 /usr/share/doc/cvs/html-cvsclient、/usr/share/doc/cvs/html-info,/usr/share/doc/cvsbook或执 行 infocvs及 mancvs。12.1.1安 装 CVS服 务器以下 步骤 配置 的服 务器,仅 允许,src” 用户 组的 成员 访问 CVS仓库,并 且仅,staff” 用户组 的成 员才 可管 理 CVS,这 样做 可以 降低 管理 者不 小心 犯错 的机 率。#cd/var/lib;umask002;sudomkdircvs#[Woody]FSHapt-getinstallcvscvs-doccvsbook#exportCVSROOT=/var/lib/cvs
cd$CVSROOT#chownroot:src.#设置 为 "staff"可加 强对 新建 项目 行为 的限 制chmod3775,#如果 上面 的赋 值为 "staff",则 使用 2775#cvs-d/var/lib/cvsinit在此 明确 地指 定 -d更安 全cdCVSROOT#chown-Rroot:staff.
chmod2775.#touchval-tagschmod664historyval-tags#chownroot:srchistoryval-tags
12.1.2CVS会 话例子下面 我们 来设 置 shell环境 以便 访问 CVS仓库 。12.1.2.1匿 名 CVS( 仅用于下载)
只读 远程 访问,$exportCVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qrefcvslogin$-z3coqref
12.1.2.2使 用本地 CVS服 务器通过 同一 台机 器上 的 shell进行 本地 访问,$exportCVSROOT=/var/lib/cvs
175
12.1.2.3使 用远程 CVSpserver非 SSH(在 cvs中使 用 RSH协议 )远 程访 问:$exportCVSROT=:pserver:acount@cvs.fobar.com:/var/lib/cvscvslgin
易受窍听攻击。 12.1.2.4通 过 ssh使 用远程 CVS通过 SSH进行 远程 访问,
$exportCVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs或连 接 SourceForge:$exportCVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref
亦可 使用 RSA认 证 ( 用更 少的 密码 建立 连接 – RSA,第 9.5.3节 ),它 不 需 要 密 码 提 示 。12.1.2.5新 建 CVS档 案要建 立如 下的 档案,
ITEMVALUEMEANINGsourcetree:~/project-xAllsourcecodesProjectname:project-xNameforthisprojectVendorTag:Main-branchTagtheentirebranchReleaseRelease-originalforaspecificrelease
则,$cd~/project-x#进源 码目 录...创建 源码 树,..$cvsimport-m"Startproject-x"project-xMain-branchRelease-initialcd..;rm-R~/project-x
12.1.2.6使 用 CVS使用 本地 CVS仓库 来为 project-x工作,$cd #转到 工作 域cvscoproject-x从 CVS下载 源码 到本 地
$cdproject-x...修改 源码 内容,..$cvsdiff-u #相当 于 diff-urepository/local/up-Cmodified_file撤消 对文 件的 修改$cvsci-m"Describechange"#保存 本地 源码 到 CVSvinewfile_added
$cvsaddnewfile_added
176
$cvsci-m"Addednewfile_added"up #从 CVS合并 最新 版本...生成 所有 在 CVS里新 创建 的子 目录,使 用"cvsup-d-P"代替 "cvsup"...注意 以 "Cfilename"开头 的行,这 表示 在更 新过 程中,产 生了 冲突未修 改的 本地 代码 文件 被重 命名 为 `.#filename.version'.
...在 filename里面 查找 "<<<<<<<"和 ">>>>>>>",可 以找 到发 生冲 突的 地方$cvstagRelease-1#添加 releasetag...进一 步修 改,..$cvstag-dRelease-1#移除 releasetagci-m"morecomments"$cvstagRelease-1#重新 添加 releasetag
cd 返回 工作 域$cvsco-rRelease-initial-doldproject-x...得到 原始 版本 到 old目录$cdoldcvstag-bRelease-initial-bugfixes#创建 分支 (-b)标签...现在 可以 在老 版本 工作 ( Tag=sticky)
$cvsupdate-d-P...源代 码树 现在 有粘 滞标 签 "Release-initial-bugfixes"在这 个分 支下 工作$cvsup-d-P#同步 这个 分支 下其 它人 修改 的文 件ci-m"checkintothisbranch"$cvsupdate-kk-A-d-P
...删除 粘滞 标签,忽 略从 主干 的更 新,不扩 展关 键字$cvsupdate-kk-jRelease-initial-bugfixes...从 Release-initial-bugfixes分支 移植 到主 干,不扩 展关 键字使用 编辑 器修 改冲 突$cvsci-m"mergeRelease-initial-bugfixes"
cd$tar-cvzfold-project-x.tar.gzold#产 生 文 档,-j选项 生成 bz2格式 的压 缩包 $cvsrelease-dold#删除 本地 源码 (可 选)
应该 记住 的几 个选 项( 用作 cvs命 令 行 的 第 一 个 参 数 ):-n虚拟 运行,无 实际 效果-t显示 cvs活动 步骤 的信 息
12.1.2.7从 CVS取 文件要从 CVS获得 最新 版本,用,tomorrow”,$cvsex-Dtomorrowmodule_name
12.1.2.8管 理 CVS为项 目添 加别 名( 本地 服务 器):
17
$su-admin#staff用户 组成 员exportCVSROOT=/var/lib/cvs$cvscoCVSROOT/modulescdCVSROOT$echo"px-aproject-x">>modulescvsci-m"Nowpxisanaliasforproject-x"
$release-d.exit#按 Ctrl-D从 su返回$cvsco-dprojectpx...从 CVS检出 project-x(别 名,px) 到目 录 project$cdproject...修改 内容,..
12.1.3CVS常 见问题及解决方 法12.1.3.1仓 库中的文件权限CVS不会 覆盖 当前 仓库 中的 文件,而 是 用另 一个 文件 替换 它。 因 此,对仓库 目录的 写权限 是很危 险的 权限 。所 以在 新建 仓库 时,请运 行下 面的 命令,确 保权 限合 适。
#cd/var/lib/cvschown-Rroot:srcrepository#chmodug+rwX2775repository#如果 需要,当 前目 录和 子目 录
12.1.3.2执 行标记( executionbit)当文 件被 别人 取走 后会 保留 执行 标记,任 何 时候 你遇 到外 出文 件存 在执 行权 限问 题,可 用 下面的 命令 在 CVS仓库 中修 改文 件权 限。#chmodugo-xfilename
12.1.4CVS命 令这儿 是一 些 CVS命令 的用 法简 介。{add|ad|new}[-kkflag][-m'message']files...{admin|adm|rcs}[rcs-options]files...
{annotate|ann}[options][files...]{checkout|co|get}[options]modules...{commit|ci|com}[-lnR][-m'log_message'|-ffile]\[-rrevision][files...]{diff|di|dif}[-kl][rcsdiff_options][[-rrev1|-Ddate1]\[-rrev2|-Ddate2]][files...]
{export|ex|exp}[-flNn]-rrev|-Ddate[-ddir][-kkflag]module...{history|hi|his}[-report][-flags][-optionsargs][files...]{import|im|imp}[-options]repositoryvendortagreleasetag...{login|logon|lgn}{log|lo|rlog}[-l]rlog-options[files...]
178
{rdiff|patch|pa}[-flags][-Vvn][-rt|-Dd[-rt2|-Dd2]]modules...{release|re|rel}[-d]directories...{remove|rm|delete}[-lR][files...]{rtag|rt|rfreeze}[-falnR][-b][-d][-rtag|-Ddate]\symbolic_tagmodules...{status|st|stat}[-lR][-v][files...]
{tag|ta|freeze}[-F][-b][-d][-rtag|-Ddate][-f]\symbolic_tag[files...]{update|up|upd}[-AdflPpR][-d][-rtag|-Ddate]files...12.2Subversion
Subversion是下 一代 版本 控制 系统,它 将替 代 CVS。 当 前开 发者 称它 还处 于,alpha” 阶 段,但对 大多 数用 户而 言它 已足 够稳 定了 。到 本文 档写 作之 时,Subversion仅在 Debianunstable版中 可用 。12.2.1安 装 Subversion服 务器
subversionmeta-package依赖 一些 关联 包 ( libapache2-svn和 subversion-tools) 来 配置服 务器 。 12.2.1.1创 建仓库当前,subversion软件 包无 法创 建仓 库,所以 用户 需要 手工 创建 它们 。通 常可 在
/var/local/repos下创 建仓 库。创建 目录,#mkdir-p/var/local/repos
创建 仓库 数据 库,#svnadmincreate/var/local/repos将仓 库的 写权 限赋 给 WWWserver:
#chown-Rwww-data:www-data/var/local/repos12.2.1.2配 置 Apache2通过 用户 认证 授权 访问 仓库,添 加( 或去 掉注 释符 )下 列内 容到 /etc/apache2/mods-
available/dav_svn.conf:<Location/repos>DAVsvnSVNPath/var/local/reposAuthTypeBasic
179
AuthName"Subversionrepository"AuthUserFile/etc/subversion/passwd<LimitExceptGETPROPFINDOPTIONSREPORT>Requirevalid-user</LimitExcept></Location>
接着,使 用下 面的 命令 创建 用户 认证 文件,htpasswd2-c/etc/subversion/passwdsome-username重启 Apache2,就 可以 使用 URLhttp://hostname/repos来访 问新 的 Subversion仓 库 了 。
12.2.2将 CVS仓 库迁移到 Subversion12.2.3Subversion用 法样例下面 的小 节将 教你 如何 在 Subversion下使 用各 种命 令。
12.2.3.1创 建新的 Subversion档 案创建 新的 subversion档案,输 入下 面的 命令,$cd~/your-project#进入 源码 目录..
$svnimportyour-projecthttp://localhost/repos/project-name-m"initialprojectimport"这将 在你 的 Subversion仓库 下创 建一 个名 为 project-name的目 录,用 来存 放你 的项 目 文件。 查看 http://localhost/repos/它是 否在 那儿?
12.2.3.2使 用 subversion用 subversion来管 理 project-y:$cd #转到 工作 域svncohttp://localhost/repos/project-y#提取 源码
$cdproject-y...完成 一些 工作,..$svndiff#相当 于 diff-urepository/local/revertmodified_file撤消 对文 件所 做的 修改$svnci-m"Describechanges"#将你 做的 修改 保存 到仓 库中vinewfile_added
$svnaddnewfile_addednew_dir#将所 有的 文件 嵌套 式地 加到 new_dir$svnadd-Nnew_dir2非嵌 套式 地添 加目 录ci-m"Addednewfile_added,new_dir,new_dir2"$svnup #从仓 库中 合并 最新 的版 本log 显示 所有 修改 记录
$svncopyhttp://localhost/repos/project-y\
180
http://localhost/repos/project-y-branch\-m"creatingmybranchofproject-y"#对 project-y进行 分支$svncopyhttp://localhost/repos/project-y\http://localhost/repos/proj-y_release1.0\-m"project-y1.0release"#增加 release标签…… 注意 分支 和标 签是 一样 。唯 一的 不同 是
…… 分支 可以 提交,而 标签 不可 以。…… 对分 支进 行修 改 ……$#mergebranchedcopybacktomaincopysvnhttp://localhost/repos/project-y\
http://localhost/repos/project-y-branch$svnco-r4http://localhost/repos/project-y#得到 版本 4第 13章 -编 程不要 用,test” 命名 可执 行的 测试 文件 。 test是一个 shell的内 建命 令。13.1从 哪儿开始参考 资源,
· /usr/share/doc/package下的 文档 和样 例· Unix/ProgrammingInformation· LinuxProgrammingBible(JohnGoerzen/IDGbooks)更详 细的 文档 可以从 GNU获得 打印 版本 。
接下 来的 四个 小节 中包 含了 用不 同的 编程 语言 编写 的脚 本样 例,该 脚本 创建 一个 包含 用户 帐户信 息的 文本 文件,调 用一 组进 程如 newusers程 序,将这 些信 息加 入到 /etc/passwd。每个脚 本均 需要 一个 输入 文件,该 文件 应包 含格 式如 first_namelast_namepassword的 行 。(这 些脚 本并 不创 建真 正的 用户 目录 。) 13.2Shell
理解类 Unix系统 如何 工作 的 最 好 方法 就是 阅读 shell脚本 。在 此,我们就 shell编程 做个简单 的介 绍。 参阅 ShellMistakes来学 习更 多的 错误 。13.2.1Bash–

GNU标 准交互 式 shellBash参考 资源,· bash(1)· infobash
· LDPBASHProgramming-IntroductionHOWTO作为 开始 信息 。· mc/usr/share/doc/bash/examples//usr/share/doc/bash/(安装 bash-doc软 件 包 阅 读 样 例 文 件 。)
18
· LearningthebashShell,2ndedition(O'Reilly)一个 简短 的程 序样 例( 从标 准输 入端 创建 帐户 信息供 newusers使 用 ):#!/bin/bash#(C)OsamuAokiSunAug2616:53:55UTC2001PublicDomain
pid=1000;whilereadn1n2n3;doif[${n1:0:1}!=="#"];thenletpid=$pid+1echo${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bashfi
done13.2.2POSIXshellsUbuntu中有 几个 软件 包提 供了 POSIXshell:
· dash(Sarge)oPriority:optionalInstalled-Size:176o到目 前为 止最 小和 最快 的 – 最适 合用 在初 始化 安装 中
· ash(Woody)oPriority:optionalInstalled-Size:180o较小 和较 快的 – 比较 适合 用在 初始 化安 装中
· bashoEssential:yesPriority:requiredoInstalled-Size:580较大 和多 特征 的 – 应用 了许 多扩 展
· pdkshoPriority:optionalInstalled-Size:408o完全 跟 AT&T的 ksh类似如果 你想 编写 具有 通用 性的 shell脚本,最 好写 POSIXshell脚 本 。可 将 /bin/sh链接到 ash或 (dash)来测 试脚 本的 POSIX兼 容 性 。 避免 用 bash化 或 zsh化的 思维 去编 写脚 本。 例如,应避 免,· if[foo====bar];then...· diff-ufile.c{.orig,}
· mkdir/foo{bar,baz}
182
本文 档的 shell描 述,只 适 用 于 POSIX类型 的 shell,不 适 用 于 包 括 tcsh在内 的 csh类型。 13.2.3Shell参 数几个 需要 记住 的 特 殊参数,
$0===shell名称或 shel脚本 名称$1第一 个 (1)shell参数...$9===第九 个 (9)shell参数$#位置 参数 的个 数"$*"==="$1$2$3$4...$n"
"$@""$1""$2""$3""$4"..."$n"$?===最近 执行 的命 令的 退出 状态$$当前 shell脚本的 PID$!===最近 启动 的后 台作 业的 PID
需要 记住 的基 本 扩 展参数,形式 如果 设置 了 var如果 没有 设置 var${var:-string}$varstring${var:+string}stringnull${var:=string}$varstring
(并且 执行 var=string)${var:?string}$var(返回 string然后 退出 )在此,冒 号,,” 在所 有运 算表 达式 中事 实上 均是 可选 的。
· 有,,” ===运算 表达 式测 试,存在,和,非空,。· 没有,,运算 表达 式仅 测试,存在,。需要 记住 的 替 换参数,形式 结果
${var%suffix}删除 位于 var结尾的 suffix最小 匹配 模式${var%%suffix}删除 位于 结尾的 最大 匹配 模式${var#prefix}删除 位于 var开头的 prefix最小 匹配 模式${var##prefix}删除 位于 开头的 最大 匹配 模式
13.2.4Shell重 定向需要 记住 的基 本 重 定向 ( redirection) 运 算 符 ( 在此 [n]表示 定义 文件 描述 符的 可选 参数 ),[n]>file重定 向标 准输 出 (或 n)到 file。[n]>>重定 向标 准输 出 或 到 。
[n]<file将 file重定 向到 标准 输入 (或 n) 。[n1]>&n2重定 向标 准输 出 (或 n1)到 n2。
183
2>file>&2重定 向标 准输 出和 错误 输出到 file。|command将标 准输 出通 过管 道传 递给 command。2>&1|command将标 准输 出或 错误 输出 通过 管道 传递给 command。在这 里:
· stdin:标准 输入 (文件 描述 符 ===0)· stdout:标准 输出 文件 描述 符 1)· stderr:标准 错误 (文件 描述 符 ===2)shell允许 你通 过使 用 exec内嵌 一个 任意 的文 件描 述符 来打 开文 件。
$echoHello>fooexec3<foo4>bar#打开 文件$cat<&3>&4重定 向标 准输 入到 3,标准 输出 到 4exec3<&-4>&-#关闭 文件$catbarHello
在这 里,n<&-和 n>&-表示 关闭 文件 描述 符 n。13.2.5Shell条 件表达式每条 命令 均可 返回 一个 退 出状态,这 个状 态值 可用 于条 件表 达式,
· 成功,0(True)· 错误,1– 255(False)注意 该用 法,返 回值 0用 来 表 示,true” 与计 算机 其它 领域 中常 见的 转换 是不 同的 。 另 外 `['等阶 于使用 test命令 进行 参数 赋值 `]'相当 于一 个条 件表 达式 。
需要 记住 的常 用基 本 条 件表达式,command&&if_success_run_this_command_too||true||if_not_success_run_this_command_insteadif[conditional_expression];then
if_success_run_this_commandelseif_not_success_run_this_commandfi
当 shell使用 -e调 用 的 时 候,需要 使用 ||true来确 保这 个 shell不会 在本 行意 外 退出。 在条 件表 达式 中使 用的 文 件 比较 运算 符有,-efilefile存在 则返回 True。
184
-dfilefile存在 且是 一个 目录 则返回 True。-f如果 file存在 且是 一个 普通 文件 则返回 True。-wfile如果 存在 且可 写则 返回 True。-x如果 file存在 且可 执行 则返回 。file1-ntfile2如果 file1比 file2新则 返回 True。( 指 修 改 日 期 )-ot如果 比 旧则 返回 。( 指 修 改 日 期 )
file1-effile2如果 两者 是相 同的 设备 和具 有相 同的 结点 ( inode)数 则返回 True。条件 表达 式中 使用 的 字 符串 比较 运算 符有,-zstr如果 str长度 为零 则返回 True。
-n如果 长度 为非 零则 返回 。str1====str2如果 字符 串相 等则 返回 True。===如果 字符 串相 等则 返回 。(使用 "=="代替 "="符合 严格 意义 上的 POSIX兼容 )str1!==str2如果 字符 串不 相等 则返回 True。< 如果 str1排在 str2之前 则返回 True( 与 当 前 位 置 有 关 )。
str1>str2如果 排在 之后 则返回 ( 与 当 前 位 置 有 关 )。条件 表达 式中 的 算 术 整数 比较 运算 符有 -eq,-ne,-lt,-le,-gt和 -ge。13.2.6命 令行处理
shell按如 下的 方式 处理 脚本,· 用这 些元 字符 将其 分割成 tokens,SPACE,TAB,NEWLINE,;,(,),<,>,|,&· 如果 不在 "..."或 '...'内就 检查 keyword(循 环检 查)· 如果 不在 或 内就 扩展 alias(循 环检 查)· 如果 不在 "..."或 '...'内就 扩展 brace,a{1,2}->a1a2
· 如果 不在 或 内就 扩展 tilde,~useruser'shomedirectory· 如果 不在 '...'内就 扩展 parameter,$PARAMETER· 如果 不在 内就 扩展 commandsubstitution,$(command)· 如果 不在 "..."或 '...'内就 用 $IFS分割成 words· 如果 不在 或 内就 扩展 pathname*?[]· 查找 command
ofunctionbuilt-inofilein$PATH· 循环在双 单号 内单 引号 将失 效。 在 shell里执 行 set-x或者 使用 -x选项 调用 shell,该 shell将会 显示 出所 有执 行的命 令。 这对 调试 非常 有用 。13.3Awk
185
Awk的参 考资 源,· EffectiveawkProgramming,3rdedition(O'Reilly)· Sed&awk,2ndedition(O'Reilly)· mawk(1)和 gawk(1)· infogawk
简短 的程 序样 例( 创建 newusers命 令 输 入 ):#!/usr/bin/awk-f#Scripttocreateafilesuitableforuseinthe'newusers'command,fromafileconsistingofuserIDsandpasswordsintheform:#first_namelast_namepassword
Copyright(c)KMSelfSatAug2520:47:38PDT2001#DistributedunderGNUGPLv2,oratyouroption,anylaterversion.ThisprogramisdistributedWITHOUTANYWARRANTY.BEGIN{#AssignstartingUID,GID
if(ARGC>2){startuid===ARGV[1]deleteARGV[1]}else{printf("Usage:newusersstartUIDfile\n"\
"where:\n"\startUIDisthestartinguseridtoadd,and\n"\"fileisaninputfileinform:\n"\first_namelast_namepassword\n")exit
}infile===ARGV[1]printf("StartingUID:%s\n\n",startuid)}
/^#/{next}{++recordfirst===$1last$2
passwd===$3user==substr(tolower(first),1,1)tolower(last)uid===startuid+record-1giduidprintf("%s:%s:%d:%d:%s%s,,/home/%s:/bin/bash\n",\user,passwd,uid,gid,first,last,user\
)}
186
Ubuntu中有 两个 软件 包提 供了 POSIXawk:· mawkoPriority:requiredInstalled-Size:228
o较小 和较 快 – 适于 默认 安装编译 时的 限制 存在 § NF===32767§ sprintfbuffer===1020
· gawkoPriority:optionalInstalled-Size:1708o较大 和多 特征 的 – 应用 了许 多扩 展
§ SystemVRelease4versionofUNIX§ BellLabsawk§ GNU-specific13.4Perl
运行 于类 Unix系统 上的 解 释器 。Perl参考 资源,· perl(1)· ProgrammingPerl,3rdedition(O'Reilly)
· ThePerlDirectory简短 的程 序样 例( 创建 newusers命 令 输 入 ):#!/usr/bin/perl#(C)OsamuAokiSunAug2616:53:55UTC2001PublicDomain
$pid=1000;while(<STDIN>){if(/^#/){next;}chop;$pid++;($n1,$n2,$n3)===split//;
print$n1,"_",$n2,":",$n3,":",$pid,":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n"}安装 Perl模块 module_name:
187
#perl-MCPAN-e'installmodule_name'13.5Python一个 不错 的面 向对 象的 解释 器。
Python参考 资源,· python(1)· LearningPython(O'Reilly).· PythonProgrammingLanguage
简短 的程 序样 例( 创建 newusers命 令 输 入 ):#!/usr/bin/envpythonimportsys,string#(C)OsamuAokiSunAug2616:53:55UTC2001PublicDomain
PortedfromawkscriptbyKMSelfSatAug2520:47:38PDT2001#ThisprogramisdistributedWITHOUTANYWARRANTY.defusages():print\"Usage:",sys.argv[0],"start_UID[filename]\n"\
"\tstartUIDisthestartinguseridtoadd.\n"\"\tfilenameinputfilename.Ifnotspecified,standardinput.\n\n"\"Inputfileformat:\n"\"\tfirst_namelast_namepassword\n"return1
defparsefile(startuid):#mainfiltering#uid===startuidwhile1:
line===infile.readline()ifnotline:breakifline[0]===='#':continue(first,last,passwd)===string.split(string.lower(line))
#abovecrasheswithwrong#ofparameters:-)user===first[0]+lastgiduidlineout==="%s:%s:%d:%d:%s%s,,/home/%s:/bin/bash\n"%\(user,passwd,uid,gid,first,last,user)sys.stdout.write(lineout)
+uid
18
if<u>name</u>===='<u>main</u>':len(sys.argv)1:usages()else:uid===int(sys.argv[1])#print"#UIDstartfrom:%d\n"%uid
iflen(sys.argv)>1:infilename===string.join(sys.argv[2:])infile===open(infilename,'r')#print"#Readfilefrom:%s\n\n"%infilenameelse:infile===sys.stdin
parsefile(uid)13.6MakeMake参考 资源,
· infomake· make(1)· ManagingProjectswithmake,2ndedition(O'Reilly)简单 自动 变量,
语法 规则,target:[prerequisites...][TAB]command1-command2#ignoreerrors[TAB]@command3suppressechoing
在此 [TAB]代表 一个 TAB符。 在完 成 make变量 代换 后,shell将逐 行进 行解 释。 在 行 尾 使用 \可以 续行 。使 用 $$可将 $加入到 shell脚本 的环 境变 量中 。适用于 target和 prerequisites的隐 含的 等价 规则,%:%.cheader.h
or,%.o:%.cheader.h在此,target包含 了 %字符 (确 切地 说是 其中 之一 ),%可匹 配实 际的 target文件 名中 任何非空 子串 。 prerequisites同样 也使 用 %来显 示它 们的 名字 是如 何关 联到 实际的 target文 件名的 。 用 Suffixrules方法 来定义 make的隐 含规 则 (implicitrules)已经 过 时 。 GNUmake因为
189
兼容 性的 考虑 仍支 持它,但 只要 有可 能就 应该 使用 与之 等价 的模 版规 则 (patternrules):oldsuffixrule-->newpatternrule.c:%:%.c.c.o:-->%.o:
上述 规则 所使 用的 自动 变量,foo.o:new1.cnew2.cold1.cnew3.c$@====foo.o(target)$<new1.c(firstone)$?====new2.cnew3.c(newerones)
$^new1.cold1.cnew3.c(all)$*====`%'matchedsteminthetargetpattern.变量 参考,
foo1:==bar#One-timeexpansionfoo2===Recursivefoo3+==bar#AppendSRCS:==$(wildcard*.c)OBJS$(foo:c=o):==$(foo:%.c=%.o)
OBJS$(patsubst%.c,%.o,$(foo))DIRS===$(dirdirectory/filename.ext)#Extracts"directory"$(notdirNAMES...),$(basenameNAMES...),$(suffixNAMES...)...执行 make-p-f/dev/null可查 看内 部自 动规 则。
13.7C准备 工作,#apt-getinstallglibc-docmanpages-devlibc6-devgcc
C参考 资源,· infolibc(Clibraryfunctionreference)· gcc(1)· each_C_library_function_name(3)· Kernighan&Ritchie,TheCProgrammingLanguage,2ndedition(Prentice
Hall).13.7.1简 单 C编 程 (gcc)一个 简单 的例 子,将 example.c和库 函数 libm编译 成可 执行 文件 run_example:
190
$cat>example.c<<EOF#include<stdio.h><math.h>#include<string.h>intmain(intargc,char**argv,char**envp){
doublex;chary[11];x=sqrt(argc+7.5);strncpy(y,argv[0],10);/*preventbufferoverflow*/y[10]==='\0';/*filltomakesurestringendswith'\0'*/printf("%5i,%5.3f,%10s,%10s\n",argc,x,y,argv[1]);
return0;}EOF$gcc-Wall-g-orun_exampleexample.c-lm./run_example1,2.915,./run_exam,(null)
$./run_example1234567890qwerty2,3.082,./run_exam,1234567890qwerty在此,sqrt()链接 库函数 libm需要 -lm选项 。真 正的 库函 数是 位于 /lib/下的 libm.so.6,它是 libm-2.1.3.so的一 个符 号链 接。
看看 输出 文本 中最 后的 参数,尽 管指 定了 %10s,它 还是 多于 10个字 符。使用 不带 边界 检查 的指 针内 存操 作函 数如 sprintf和 strcpy会妨 碍缓 冲区 溢出 侦测,故 使用 snprintf和 strncpy。13.7.2调 试
13.7.2.1使 用 gdb进 行调试准备 工作,#apt-getinstallgdb
gdb参考 资源,· infogdb(tutorial)· gdb(1)· http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html
使用 -g选项 编译 程序 就可 使用 gdb进 行 调 试 。许 多 命 令 都 可 以 缩 写 。 Tab扩展 功能 和在 shell中的 一样 。 $gdbprogram(gdb)b1 #在 line1设置 断点runarg1arg2arg3运行 程序
19
(gdb)next#下一 行...(gdb)step#前进 一步...(gdb)pparm#打印 parm...
(gdb)pparm=12#设置 其值为 12在 Emacs环境 下调 试程 序,参阅 编辑 器命 令总 汇( Emacs,Vim),第 11.3.4节。Ubuntu系统 上所 有默 认安 装的 二进 制文 件都 已经 进行 了 strip操作,调试 符号 已经 被移除。 为了 能够 让 gdb对 Ubuntu软件 包进 行调 试,相关 的软 件包 需要 使用 下面 的方 法重新打 包,· 编辑 debian/control来改 变软 件包 的 版本 。· 检查 打包 脚本,确 保使 用 CFLAGS=-g-Wall来编 译二 进制 文件 。· 设置 DEB_BUILD_OPTIONS=nostrip,noopt来建 立 Debian包。
更多 信息 请参 阅,Policy10.1。13.7.2.2检 查库函数关联关系使用 ldd可查 看程 序与 库函 数的 关联 关系,
$ldd/bin/lslibrt.so.1==>/lib/librt.so.1(0x4001e000)libc.so.6/lib/libc.so.6(0x40030000)libpthread.so.0==>/lib/libpthread.so.0(0x40153000)/lib/ld-linux.so.2==>/lib/ld-linux.so.2(0x40000000)
可在 chrooted环境 下使用 ls检查 上述 库函 数在 你的 chroot环境 中是 否可 见。下面 的命 令也 很有 用,· strace:跟踪 系统 调用 和消 息· ltrace:跟踪 库函 数调 用
13.7.2.3使 用内存查漏工具进行 调 试Ubuntu中有 几个 内存 查漏 工具 。· njamd· valgrind
· dmalloc· electric-fence· memprof· memwatch(没 有软 件包,从 memwatch获 取 。)· mpatrol· leaktracer
192
· libgc6· 来自 Parasoft的 Insure++(非 自由 软件,商 业付 费)亦可 查阅 DebuggingToolsforDynamicStorageAllocationandMemoryManagement.13.7.3Flex–

更 好 的 Lexflex是一 个快 速的 词法 分析 机生 成器 。flex参考 资源,
· infoflex(教 程)· flex(1)需要 提供 你自 己的 main()或 yywrap(),或 者你 的 program.l象这 样不带 library编译( yywrap是一 个宏 ; %optionmain隐含 地打 开了 %optionnoyywrap),
%optionmain%%.|\nECHO;%%
另外,还 可以在 cc命令 行末 尾加 上 -lfl链接 选项 进行 编译 (象 AT&T-Lex使用 -ll一 样 ),此时 就不 需要 %option了。13.7.4Bison–

更 好 的 YaccUbuntu中有 几个 软件 包提 供了与 Yacc兼容的 LALR词法 生成 器:· bison:GNULALRparsergenerator· byacc:TheBerkeleyLALRparsergenerator
· btyacc:Backtrackingparsergeneratorbasedonbyaccbison参考 资源,· infobison(教 程)· bison(1)
需要 提供 自己的 main()和 yyerror()。 main()调用 yyparse(),而 yyparse()调用 yylex(),通常由 FleX创建 。%%%%
13.7.5Autoconfautoconf一个 shell脚本 生成 工具,由 它生 成的 脚本 能自 动配 置软 件源 码包,以 适用 于各种使 用全套 GNUbuild系统 的类 UNIX系统 。
193
autoconf会生 成配 置脚本 configure。 configure使用 Makefile.in模版 自动 创建 自定义Makefile。13.7.5.1编 译并安装程序Ubuntu不会 改动 /usr/local/下的 文件 (参 阅 多样 性支 持,第 2.5节 )。 所 以 如 果 是 从 源码编 译程 序,并将 其安 装到 /usr/local/下,是不 会影 响到 Debian的。$cdsrc./configure--prefix=/usr/local$makeinstall#thisputsthefilesinthesystem
13.7.5.2卸 载程序如果 仍保 存有 源码,对 其使 用了 autoconf/automake,并 且记 得是 如何 进行 配置 的:$./configureall-of-the-options-you-gave-it#makeuninstall
另一 种方 法是,如 果可 以确 定安 装过 程将 文件 都放 在了 /usr/local/,并 且该 目录 下没 有什么别 的重 要文 件,可用 下面 的命 令将 其全 部删 除,#find/usr/local-typef-print0|xargs-0rm-f
如果 不能 确定 文件 安装 到什 么位 置,最好 使用 checkinstall,该 命令 可提 供明 确的 卸载 路径。 13.8Web通过 下面 的方 法来 制作 一个 基本 的交 互动 态网 页:
· 使用 HTML表单 在浏 览器 里显 示查 询。· 填写 和点 击表 单提 交,将从 浏览 器传 送一 个将 参数 编码 的 URL到服 务器 。例 如:ohttp://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3ohttp://www.foo.dom/cgi-
bin/program.py?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3ohttp://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3· 在 web服务 器上 的 CGI程序 (任 何一 个 program.*程序 ) 将接 受编 码的"VAR1=VAL1VAR2=VAL2VAR3=VAL3"参数 作为 环境 变量,QUERY_STRING” 的内 容,并执 行该 环境 变量 。
· CGI程序 的标 准输 出 将作 为一 个交 互动 态网 页输 出到 web浏览 器。出于 安全 的考 虑,最好 不要 手工 写新 的程 序来 分析 CGI参数 。 在 Perl(参 阅 Perl,第13.4节 ),Python(参 阅 Python,第 13.5节 ) 和 PHP中,有 即定 的模 块具 备这 些功 能 。
194
当需 要在 客户 端存 储数 据的 时候,使 用 cookies。 当需 要在 客户 端进 行数 据处 理的 时候,经常 使用 javascript。更多 信息,请 参 阅 TheCommonGatewayInterface,TheApacheSoftwareFoundation和JavaScript。
在浏 览器 地址 栏里 面直 接输 入编 码的 URLhttp://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial,可 以 在 Google搜索,CGItutorial” 。 这也 是一 个查 看 CGI脚本 在Google服务 器上 执行 的好 方法 。13.9准 备文档
13.9.1roff排 版传统 上,roff是主 要的 Unix文字 处理 系统 。参阅 roff(7),groff(7),groff(1),grotty(1),troff(1),groff_mdoc(7),groff_man(7)、groff_ms(7),groff_me(7),groff_mm(7)以及 infogroff。
-me宏提 供了 一个 不错 了说 明文 档。 如果 使用 的是 groff( 1.18或 更 新 的 版 本 ),找 到/usr/share/doc/groff/meintro.me.gz并执 行下 面的 命令,$zcat/usr/share/doc/groff/meintro.me.gz|\groff-Tascii-me-|less-R
下面 的命 令将 生成 一个 完整 的纯 文本 文件,$zcat/usr/share/doc/groff/meintro.me.gz|\GROFF_NO_SGR=1groff-Tascii-me-|col-b-x>meintro.txt如果 想打 印出 来,可使用 PostScript输出,
$groff-Tpsmeintro.txt|lprmpage-2|lpr13.9.2SGML
准备 工作,#apt-getinstalldebiandoc-sgmldebiandoc-sgml-docdebiandoc-sgml参考 资源,
· /usr/share/doc/debiandoc-sgml-doc· debiandoc-sgml(1)· DocBook:TheDefinitiveGuide,作 者 Walsh和 Muellner,( O'Reilly出 版 社 )(docbook-defguide软件 包 )
195
SGML能管 理多 种格 式的 文档 。 更 简 单的 SGML系统是 Debiandoc,本 文档 就使 用到 它完 成的 。只需 对原 始的 文本 文件 的下 列字 符进 行少 许转 换,· "<"--><· ">">· "-->(非 中断 空格 )
· "&"&· "%"-->&percnt;· "(c)"?· "– "-->–· — —
设置 章节 为非 打印 注释,输 入,<!--Stateissuehere...-->设置 章节 为可 控注 释,输入,
<![%FIXME;[Stateissuehere...]]>在 SGML中,仅条 目的 首次声 明 ( firstdefinition)有 效。 例如,<!entity%qref"INCLUDE"><![%qref;[<!entityparam"Data1">]]><!entityparam"Data2">&param;
最终 结果 是,Data1” 。 如 果 第 一 行 使 用,IGNORE” 而 非,INCLUDE”,则 最 终 结 果 为,Data2”(第 二行 是一 个候 选声 明)。 同样,重 复出 现的 短语 可分 别提 前在 文档 中定 义。 <!entitywhoisthis"my">Hello&whoisthis;friend.Thisisbook.
该定 义的 结果 如下,Hellomyfriend.Thisisbook.
可参 阅 examples目录 中简 短的 SGML样例 文件 sample.sgml。当 SGML文档 逐渐 变大 时,作 为后 端文 本处 理器 使用 的 TeX偶 尔 会 错 误 。 参阅 TeX/LaTeX,第 13.9.3节。13.9.3TeX/LaTeX
准备,#tasksel#selectMiscellaneous-->TeX/LaTeXenvironment
196
LaTeX参考,· TheteTeXHOWTO:TheLinux-teTeXLocalGuide· tex(1)· latex(1)· TheTeXbook,byDonaldE.Knuth,(Addison-Wesley)[66]
· LaTeX-ADocumentPreparationSystem,byLeslieLamport,(Addison-Wesley)· TheLaTeXCompanion,byGoossens,Mittelbach,Samarin,(Addison-Wesley)这是 一个 很强 大的 排字 环境 。许 多 SGML处理 器使 用 LaTeX作为 他们 的后 端文 本处 理器 。由 lyx,lyx-xforms和 lyx-qt提供 的 Lyx,以 及由 texmacs提供 的 GNUTeXmacs为
LaTeX提 供 了 一 个 好 的,所见 及所 得,的编 辑环 境,然 而,许 多人 选择 使用 Emacs和 Vim作为源 代码 编辑 器。 有许 多在 线资 源存 在,· teTeX-ADocumentationGuide(tetex-doc软件 包 )
· AQuickIntroductiontoLaTeX· SimpleGuidetoLatex/Lyx· WordProcessingUsingLaTeX· LocalUserGuidetoteTeX/LaTeX当 SGML文档 不断 增大 后,TeX偶尔 会出 错。 可通 过修 改 /etc/texmf/texmf.cnf,增 加缓 冲池的 容量 来解 决这 个问 题( 更好 的方 法是 编辑 /etc/texmf/texmf.d/95NonPath然后 运行update-texmf) 。13.9.4文 学编程有文 学的 程序 员书 写包 含代 码的 文档 来代 替包 含文 档的 代码 。 这种 方法 确保 程序 有一 个好的文 档。 关于 文学 编程 的更 多信 息,参阅 LiterateProgramming。13.9.4.1Noweb
准备,#apt-getinstallnowebmNoweb参考,
· Noweb---ASimple,ExtensibleToolforLiterateProgramming· noweb(1)这是 一个 类 WEB的文 学编 程工 具,独立 于编 程语 言。 由于 提供 了扩 展而 更简 单。 [67]当noweb被调 用的 时候,它 将程 序的 源代 码输 出到 在 noweb中提 到的 文件 中,它还 将创 建一个用 于文 档排 版的 TeX文件 。
Ubuntuifupdown软件 包是 一个 很好 的例 子。
197
$apt-getsourceifupdowncdifupdown*$makeifupdown.pdfifupdown.ps13.9.4.2Doxygen
准备,#apt-getinstalldoxygendoxygen-docdoxygen-guiDoxygen参考 (由 doxygen创 建 ):
· Homepage· /usr/share/doc/doxygen-doc/html/index.html它能 够为 C++,C,Java,IDL和某 些范 围的 PHP和 C#程序 产生 HTML,RTF,Unix手册 页,PostScript和 PDF(使 用 LaTeX) 文 档 。 Doxygen与 JavaDoc(1.1),Qt-Doc和KDOC兼容,它 有 特定 的设 计用 来与 用 TrollTech的 Qt工具 包制 作的 项目 兼容 。 他甚 至可以 为没 有文 档的 程序 创建 从属 图,协作 图和 图形 化的 类分 层图 。输 出类 似于 Qt的 文 档 。13.10打 包准备 工作,
#apt-getinstalldebian-policydevelopers-reference\maint-guidedh-makedebhelper#apt-getinstallpackaging-manual#ifPotato有关 打包 的参 考资 源:
· Ubuntu软件 包管 理系 统,第 2.2节 (basics)· DebianNewMaintainers'Guide(tutorial)· dh-make(1)· DebianDeveloper'sReference(bestpractice)· PolicyManual(authoritative)· PackagingManual(Potato)
13.10.1单 个二进制文件打包JoeyHess的快 速和 粗糙 的打 包法,生 成一 个单 独的 二进 制包#mkdir-pmypkg/usr/binmypkg/DEBIANcpbinary
#cat>mypkg/DEBIAN/controlPackage:mypackageVersion:1Architecture:i386Maintainer:JoeyHess<joeyh@debian.org>
198
Description:mylittlepackageDon'texpectmuch.^D#dpkg-deb-bmypkg
13.10.2使 用工具打包使用 dh_make软件 包中的 dh-make工具 创建 一个 基线 包,接着 按照 dh-make(1)中描 述的 方法打 包。 会用到 debian/rules中的 debhelper。一个 较老 的方 法是 使用 debmake软件 包中的 deb-make。不 需 要 debhelper脚 本,仅 需 要 shell
环境 。请 不要 再使 用这 种方 法。 有关 多种 源码 包的 例子,参 阅,mc” ( dpkg-source-xmc_4.5.54.dsc),其 中用到 AdamHeath(doogie@debian.org)的,sys-build.mk” 以及,glibc” ( dpkg-source-xglibc_2.2.4-1.dsc)它 由后 来的 JoelKlecker(espy@debian.org)所写 的另 一个 系统 打包。
第 14章 -GnuPG参考 资源,· gpg(1).· /usr/share/doc/gnupg/README.gz
· GNU隐私手册 位于 /usr/share/doc/gnupg-doc/GNU_Privacy_Handbook/(安 装gnupg-doc软件 包)14.1安 装 GnuPG#gpg--gen-key#生成 新的 密钥
--gen-revokemy_user_ID为 my_user_ID生成 吊销 密钥#host-lpgp.net|grepwww|less#查找 pgpkeyservers配置 文件 $HOME/.gnupg/gpg.conf(或 是先 前的 位置 $HOME/.gnupg/options)中 一个 完好的预 设 keyserver包含,
keyserverhkp://subkeys.pgp.net必须 注意 不 能创 建 2个 以上的 sub-keys,如 果这 样做 了,pgp.net上的 keyservers会 废除 ( corrupt)你 的密 钥。 使用 新版 的 gnupg( >1.2.1-2)来 处理 这些 废除 的 subkeys。参阅 http://fortytwo.ch/gpg/subkeys。
14.2使 用 GnuPG文件 处理,
19
$gpg[options]command[args]{--armor|-a}{--sign|-s}file#对 file签名,并 保 存在 文本 文件 file.asc中$gpg--clearsignfileclear-sign信息--not-dash-escapedpatchfile#clear-signpatchfile$gpg--verifyfile#校验 clear-signedfile-ofile.sig{-b|--detach-sig}file#createdetachedsignature
$gpg--verifyfile.sigfile#用 file.sig校验 file-ocrypt_file{--recipient|-r}name{--encrypt|-e}#public-keyencryptionintendedfor$gpg-ocrypt_file{--symmetric|-c}file#对称 加密file--decryptcrypt_file#解密
14.3管 理 GnuPG密钥 管理,$gpg--edit-keyuser_ID#"help"获得 帮助,交 互式-ofile--exports将所 有密 钥导 出到 file
$gpg--importsfile#从 file导出 所有 密钥--send-keysuser_ID将 user_ID的密 钥发 送给 keyserver$gpg--recv-keys#从 keyserver接收 user_ID的密 钥--list-keysuser_ID列出 user_ID的密 钥$gpg--list-sigs#列出 的 sig--check-sigsuser_ID检查 user_ID的
$gpg--fingerprint#检查 的指 纹--list-sigs|grep'^sig'|grep'[Useridnotfound]'\|awk'{print$2}'sort-u|xargsgpg--recv-keys#获取 未知 的密 钥#更新 所有 未知 sigs.$gpg--refresh-keys#更新 本地 keyring
Trust代码,- 没指 定任 何 ownertrust/还没 进行 计算 。e Trust计算 失败 。q 没有 足够 的信 息进 行计 算。n 该密 钥不 可信 。
m 最低 限度 的可 信( Marginallytrusted) 。f 完全 可信 ( Fullytrusted) 。u 绝对 可信 ( Ultimatelytrusted) 。下面 的操 作将 我的 key,A8061F32” 上载 到公 共 keyserverhkp://subkeys.pgp.net:
$gpg--keyserverhkp://subkeys.pgp.net--send-keysA8061F3214.4在 应用程序中使用 GnuPG14.4.1在 Mutt中 使用 GnuPG
20
如果 GnuPG程序 速度 很慢,可 以 将以 下内 容加 入 ~/.muttrc以阻 止它 自动 启动,并 使其 能在 index菜单 下按 ‘ S’ 手动 启动 。macroindexS":togglepgp_verify_sig\n"setpgp_verify_sig=no
14.4.2在 Vim中 使用 GnuPG将 examplessubdirectory下的 _vimrc文件 的内 容加 入到 ~/.vimrc就可 以运 行 GnuPG了。 第 15章 -Ubuntu技 术 支 持下列 资源 提供 了与 Ubuntu相关 的帮 助,建 议 和支 持。 在 邮 件列 表里 大呼 救命 之前,务 必 先好好 使用 这些 资源 自助 。,)注意,系 统 中存 在大 量的 文档,可 使 用 WWW浏览 器访 问,或 通 过 dwww或 dhelp命令 在 相关的 目录 中找 到它 们。
15.1参 考资料下列 资源 适用 于 Ubuntu和通 用 Linux。如 果它 们的 内容 出现 相互 冲突,应 该相 信首 要的( primary)来 源而 不是 如本 文档 这样 的次 要来 源( secondary) 。· 安装 手册 (首要 的 )
o在安 装和 升级 前阅 读。 网站,http://www.debian.org/releases/stable/installmanualo网站 http://www.debian.org/releases/testing/installmanual(写 作中,有时 不可 用)o软件 包,Notavailableininstall-doc:Bug#155374文件 DebianCDunder/doc/
· 发布 笔记 (首要 的 )o安装 和升 级前 必读 文档,即 使你 已是 经验 丰富 。 网站,http://www.debian.org/releases/stable/releasenoteso网站 http://www.debian.org/releases/testing/releasenotes(写 作中,有时 不可 用)
o软件 包,Notavailableininstall-doc:Bug#155374文件 DebianCDunder/doc/· FAQ(次要 的 )o常见 问题网站,http://www.debian.org/doc/manuals/debian-faq/o软件 包 doc-debian
201
o文件,/usr/share/doc/debian/FAQ/index.html· Debian参考 手册 (次要 的 )o最全 面的 用户 使用 手册 网站,http://www.debian.org/doc/manuals/debian-reference/
o软件 包 debian-reference-zh-cn文件,/usr/share/doc/Debian/reference/· APTHOWTO(次要 的 )oDebian软件 包管 理系 统的 详细 用户 指南 。 (woody)
网站,http://www.debian.org/doc/manuals/apt-howto/o软件 包 apt-howto文件,/usr/share/doc/Debian/apt-howto/· Debian安全 手册 (次要 的 )
o有关 如何 强化 默认 安装 下 Debian系统 安全 的详 细用 户指 南。 (woody)网站,http://www.debian.org/doc/manuals/securing-debian-howto/o软件 包 harden-doc文件,/usr/share/doc/harden-doc/html/securing-debian-howto/· dselect初学 者文 档 (次要 的 )
odselect使用 教程网站,http://www.debian.org/releases/woody/i386/dselect-beginnero软件 包 Notavailableininstall-doc:Bug#155374文件,DebianCDunder/doc/· Debian策略 手册 (首要 的 )
oDebian的基 本技 术架 构网站,http://www.debian.org/doc/debian-policy/o软件 包 debian-policy文件,/usr/share/doc/debian-policy/· Debian开发 者参 考手 册 (首要 的 )
o开发 者需 了解 的基 础知 识 我们 中的 一部 分人 也需 要读 一遍o网站,http://www.debian.org/doc/manuals/developers-reference/软件 包 developers-referenceo文件,/usr/share/doc/developers-reference/
· Debian新维 护人 员手 册 (首要 的 )o开发 人员 实用 指南 我们 中的 一部 分需 要阅 读其 中的 打包 教程o网站,http://www.debian.org/doc/manuals/maint-guide/软件 包 maint-guide
20
o文件,/usr/share/doc/maint-guide/· Debian打包 手册 (potato)opotato中的 packaging-manual套 件 。( 已 移 到 开者人 员参考 手册 的附 录中)
· Unix风格 的手 册页 (首要 的 )omanpackage-name· GNU风格 的信 息页 (首要 的 )
oinfopackage-name· 具体 每个 软件 包的 文档 (首要 的 )o/usr/share/doc/package-name下可 找到 它们
· LDP:Linux文档 计划 (次要 的 )o通用 LinuxHOWTOs和 mini-HOWTOs网站,http://www.tldp.org/o软件 包 doc-linux-text文件,/usr/share/doc/HOWTO/
· Linux公报 (次要 的 )--每月 一期 新的 内容oLinux公报网站,http://www.linuxgazette.com/o软件 包 lg-allorlg-latest-two文件,/usr/share/doc/lg/
· DDP:Debian文档 计划 (次要 的 )oDebian特有 的手 册网站,http://www.debian.org/doc/· Debian开发 者之 角 (次要 的 )
oDebian开发 者的 重要 信息一般 使用 者可 以用 来增 长见 识o网站,http://www.debian.org/devel/· 源代 码 (绝对 是首 要的 )
o没人 会对 此表 示反 对,-)按照 源代 码,第 2.1.15节 的方 法下 载源 代码· InternetAssignedNumbersAuthority(首要 的 )
203
o网站,http://www.iana.org/软件 包 doc-ianao文件,/usr/share/doc/doc-iana/· Internetrequestsforcomments(IETF标准 )(首要 的 )
o网站,http://www.ietf.org/rfc.html软件 包 doc-rfco文件,/usr/share/doc/RFC/下列 是 Unix通用 的参 考资 源。 注 意 各种 Unix系统 之间 存在 着稍 许不 同。 设 备 名称 和初 始化方 式需 要格 外注 意。
· TheUNIXProgrammingEnvironmento阅读 本书 了解 UNIX如何 运行 。作者,B.W.KernighanandR.Pike,o由 PrincetonHallSoftwareSeries发行
· TheCProgrammingLanguage(第二 版 )o阅读 本书 学习 ANSIC。作者,B.W.KernighanandD.M.Ritchieo由 PrincetonHallSoftwareSeries发行
· UNIXPowerToolso阅读 本书 学习 Unix使用 技巧 。作者,JerryPeek,TimO'ReillyandMikeLoukideso由 O'ReillyandAssociates发行
· EssentialSystemAdministration(第二 版 )o阅读 本书 学习 如何 对各 种风 格的 Unix进行 系统 管理 。作者,AeleenFrischo由 O'ReillyandAssociates发行
· Linux:RuteUser'sTutorialandExpositiono一本 很好 的管 理 GNU/Linux系统 的精 装版 在线 书籍作者,PaulSheero由 PrenticeHall出版软件 包,rutebook(fromnon-free)
o文件,/usr/share/doc/rutebook/· BellLabs:ComputingSciencesResearcho有关 Unix历史 的翔 实文 献主要 文献,http://cm.bell-labs.com/cm/cs/
o技术 报告 精选,http://cm.bell-labs.com/cm/cs/cstr.html一些 论文,http://cm.bell-labs.com/cm/cs/papers.html
204
· Linux在线 通用 技术 支持 资料oDebianPlanetdebianHELPoLinux.comTheLinuxHomePageatLinuxOnline
oRedHat(commercialLinuxvender)(RPM,Sys-Vinit)SuSE,Inc.(commercialLinuxvender)(RPM,Sys-Vinit)oSlackware(TGZ,BSD-styleinit)· Unix在线 通用 向导 及资 料
oTheUNIXSystembyTheOpenGroupAIntroductoryCoursefromOhioStateUniversityoUNIXhelpfromTheUniversityofEdinburghUnix/ProgrammingInformationocomp.unix.questionsFAQcomp.unix.user-friendlyFAQ
oFreeBSDDocumentationTheFreeBSDHandbookoUNIXGUIDETheUnixHeritageSociety· 自由 软件 项目 主页
oGNU计划Linux文档 计划o 内核 归档XFree86项目,公 司oGNOMEK桌面 环境
oRedHat公司 的 GNU软件MozillaoFreeBSDOpenBSDoNetBSD
15.2查 词意Debian中使 用了 大量 术语 和缩 写,下面 的命 令将 会解 决大 部分 问题 (要 求安 装 dict软件包和 其它 相关 软件 包) $dictput-a-weird-word-here
15.3查 找流行的 Debian软 件包Debian中有 许多 软件 包,有时 很难 决定 该装 哪一 个。 参阅 Debian软件 包流 行度 调查 结果可了 解别 人都 在用 什么 软件 。亦 可安 装 popularity-contest软件 包参 加投 票。15.4Debianbug跟 踪系统
205
Debian发行 版有 一个 bug跟踪 系统 (BTS),它 将 来自 用户 和开 发人 员的 错误 报告 的详 细 内容进 行归 档,每 个 错误 都有 一个 编号,错 误 报告 将一 直存 在于 数据 库中,直 到 获得 错误 已 更正的 标记 。 在发 送错 误报 告之 前请 先检 查一 下别 人是 否以 提交 了相 同的 错误 报告 。 BTS的网 站 或 其 它地方 均可 找到 当前 未更 正错 误列 表。 参阅 检测 程序 错误 寻求 帮助,第 6.3.1节 。
许多 严重 错误 的报 告标 记为 FTBFS。意 思是,FailsToBuildFromSource” 。http://www.debian.org/Bugs/Reporting中描 述了 bug报告 方法 。15.5邮 件列表阅读 最新 的,debian-devel-announce” (英 文,只读,低 流量 )与 Debian保持 同步 。邮件 列表,debian-user” (英 文,开放,高 流量 )和,debian-user-language” (需 向其 它语言 的用 户) 中有 Debian用户 最兴 趣的 内容 。想了 解这 些邮 件列 表的 详细 信息 以及 如何 订阅,参 阅 http://lists.debian.org/。发 问前请先 搜索 答案 并注 意遵 守列 表有 关礼 仪和 规则 。 如果 你不 希望 在回 复至 邮件 列表 时收 到复 本的 话,你应 该用 Mail-Followup-To:作为 邮件的标 头,这是 很有 效的 。这 是邮 件列 表中 非官 方的 习惯,在 http://cr.yp.to/proto/replyto.html有些 说明 。
15.6InternetRelayChat(IRC)IRC(InternetRelayChat)可让 你与 世界 各地 的人 进行 实时 聊天 。 在 freenode上可 找 到与 Debian相关 的 IRC频 道 。 连接 它们 需要 一个 IRC客户 端,最 流 行的 客户 端有 XChat、BitchX,ircII,irssi,epic4以及 KSirc,任 何 一个 都能 在 Debian软件 包中 找到 。 安 装好客 户端 后,需要 告诉 程序 连接 到服 务器,对 于绝 大多 数客 户端,可 输入,
/serverirc.debian.org一但 连接 上服 务器,可 输入 下面 的命 令加 入 #debian频道/join#debian
可输 入下 面的 命令 离开 #debian频道/part#debian你可 输入 下面 的命 令退 出 irc客户 端
/quit要给 foo发送 一条 内容 为 "HelloMr.Foo"的私 人消 息,请输 入
206
/msgfooHelloMr.Foo要注 意的 是,你所 输入 的任 何信 息,只要 不是 以 /打头,就 会被 当作 是聊 天信 息而 发送 至频道 上。
注意,类 似 XChat的客 户端 它们 用于 连接 服务 器 /频道 的图 形用 户界 面会 稍有 不同 。15.7搜 索引擎许多 搜索 引擎 提供 有关 Debian的文 档:
· DebianWWW搜索 站点,· Google:将,site:debian.org” 包含 于搜 索字 段。· Groups:新闻 组搜 索引 擎。 将,group:linux.debian.*” 包 含 于 搜 索 字 段 。· AltaVista例如,搜 索字 符串,cgi-perl” 会得 到更 多有 关该 软件 包的 详细 说明 而非 其 control文件中的 简要 描述 。参 阅 检测 程序 错误 寻求 帮助,第 6.3.1节 获得 相关 建议 。15.8网 站下列 是我 收集 的一 些特 别专 题讨 论的 零散 网页 地址 。
· IBMdeveloperWorks:Linux· AdrianBunk'spackagestorunkernel2.4.xonpotato· LinuxonLaptops· XtermFAQ· EXT3FileSystemmini-HOWTO· LargeSupportinLinux
· WindowManagersforX· LinuxUSBProject· SuSEpagesforCJK· LNX-BBC(Business-card-sizedbootCDproject)· LinuxinfobyKarstenSelf(partitioning,backup,browsers...)· BackupHOWTObyAlvinOga
· Securityinfo· VariousUNOFFICIALsourcesforAPT· LaptopEthernetConfiguration附 录 A-附 录
A.1作 者Debian参考 手册 由 OsamuAokiosamu#at#debian.org发起,最 初是 一部 个人 的系 统安 装备忘 录,而最 终称 之为,QuickReference...” 。许 多内 容来 自于,debian-user” 邮件 列表中 的存 档,同 时 也参 考了,DebianInstallationManual,和,DebianReleaseNotes,。
207
由 DebianDocumentationProject( DDP) 的积 极参 与者,也 是目 前,TheDebianFAQ》的主 要维 护者 的 JosipRodin提 议,将 本 文 档 更 名 为,Debian参考 手册,并 将,TheDebianFAQ,中 一 些类 似参 考形 式的 章节 内容 合并 过来 。 后 来 摘录 出一 部分 内容 形成 了,Debian快速 参 考 手 册,。 本文 档的 编辑,翻 译,扩充 工作 由下 列 QRFF组员 参与,
· 英文 版初 稿及,QuickReference...》的 初稿oOsamuAokiosamu#at#debian.org(leader:allcontents)· 英文 版校 对和 其它 贡献
oDavidSewelldsewell#at#virginia.edu(extensivework:enstyle)ThomasHoodjdthood#at#yahoo.co.uk(networkrelated)oBrianNelsonnelson#at#bignachos.com(especiallyXrelated)JanMichaelCAlonzojmalonzo#at#spaceants.netoDanielWebbwebb#at#robust.colorado.edu所有 翻译 者反 馈
· 法文 版翻 译 oGuillaumeErbsgerbs#at#free.fr(leader:fr)RenaldCasagraudercasagraude#at#interfaces.froJean-PierreDelangedelange#at#imaginet.frDanielDesagesdaniel#at#desages.com
· 意大 利文 版翻 译 oDavideDiLazzaromc0315#at#mclink.it(leader:it)· 葡萄 牙文 (巴 西) 版翻 译
oPauloRogerioOrmenesepormenese#at#uol.com.br(leader:pt-br)AndreLuisLopesandrelop#at#ig.com.broMarcioRobertoTeixeiramarciotex#at#pop.com.brRildoTaveiradeOliveirato_rei#at#yahoo.comoRaphaelBittencourtSimoesCostaraphael-bsc#at#bol.com.brGustavoNoronhaSilvakov#at#debian.org(coordinator)
· 西班 牙文 版翻 译 oWalterEcharriwecharri#at#infovia.com.ar(leader:es)JoseCarreiroffx#at#urbanet.ch· 德文 版翻 译
oJensSeideltux-master#at#web.de(leader:de)WilliDyckwdyck#at#gmx.netoStefanSchroederstefan#at#fkp.uni-hannover.deAgonS.Buchholzasb#at#kefk.net
208
· 波兰 版翻 译 — PDDP的下 列成 员:oMarcinAndruszkiewiczMariuszCentkamariusz.centka#at#debian.linux.org.ploBartoszFeńskifenio#at#debian.linux.org.pl(leader:pl)Rados?awGrzankaradekg#at#debian.linux.org.pl
oBartosz'Xebord'JanowskiJacekLachowiczoRafa?MichalukLeonardMilcin,Jr.oTomaszZ.Napiera?azen#at#debian.linux.org.plOskarOstafincx#at#debian.linux.org.pl
oTomaszPi?ko?JacekPolitowskioMateuszPrichaczmateusz#at#debian.linux.org.plMarcinRogowskioPawe?Ró?ańskiMariuszStrzelecki
oKrzysztof?cierskiPrzemys?awAdam?miejektristan#at#debian.linux.org.ploMateuszTrykauszek#at#debian.linux.org.plCezaryUchtooKrzysztofWitkowskitjup#at#debian.linux.org.plBartoszZapa?owskizapal#at#debian.linux.org.pl
· 简体 中文 版翻 译 o刘浩 (LYOO)iamlyoo#at#163.netMingHuaminghua#at#rice.eduo肖盛 文 atzlinux#at#163.com(leader:zh-cn)HaifengChenoptical.dlz#at#gmail.com
o解彦 博 xieyanbo#at#gmail.comeastheroeasthero#at#gmail.com· 繁体 中文 版翻 译 oAshoYehasho#at#debian.org.tw(leader:zh-tw)
TangWeiChingwctang#at#csie.nctu.edu.tw(ex-leader:zh-tw)· 日文 版翻 译 oShinichiTsunodatsuno#at#ngy.1st.ne.jp(leader:ja)OsamuAokiosamu#at#debian.org
QREF是 文 档 原 始 标 题 的 缩 写,,QuickReference...” 也是 在 qref.sourceforge.net上 的项目 名称 。 Debian系统 上的 许多 手册 页和 信息 页被 用来 作为 写作 该文 档的 主要 参考 。 在 OsamuAoki认为 不超 出合 理引 用的 范围 之内,这些 手册 页和 信息 页的 许多 部分,特 别是 命令 定义,在经过 仔细 的编 辑后,才使 它们 成为 符合 本文 写作 风格 和目 的组 成部 分。
209
Debian基础,第 2章 中的 大部 分内 容来 源于,TheDebianFAQ,( 2002年 三 月 ):· 5.TheDebianFTParchives:ftparchives.sgml(整 章)· 6.BasicsoftheDebianPackageManagementSystem:pkg_basics.sgml(整章)· 7.TheDebianPackageManagementTools:pkgtools.sgml(整 章)
· 8.KeepingYourDebianSystemUpToDate:uptodate.sgml(整 章)· 9.Debianandthekernel:kernel.sgml(整 章)· 10.CustomizingyourinstallationofDebianGNU/Linux:customizing.sgml(部 分内 容)在本 文档 中某 些来 源于,TheDebianFAQ,的 段 落进 行了 较大 的重 组,以 反 映 Debian系 统的变 化。 故本 文档 的内 容更 新。 最 初,DebianFAQ,由 J.H.M.Dassen(Ray)和 ChuckStickelman创 建 和 维 护 。,DebianFAQ》的 修订 版作 者是 SusanG.Kleinmann和 SvenRudolph。 在 他 们 之 后,,TheDebian》由 SantiagoVila来维 护。 当前 的维 护者 是 JosipRodin。
有关,TheDebianFAQ》的 信息 部分 来源 于:· TheDebian-1.1releaseannouncement,byBrucePerens.· LinuxFAQ,byIanJackson.· DebianMailingListArchives,· thedpkgprogrammers'manualandtheDebianPolicymanual(参见 参考 资料,
第 15.1节 )· 众多 开发 人员,自 愿者,beta版测 试人 员· 以及 其作 者的 片断 记忆 。,-),教程,章的 部分 内容 来源 于
· HavocPennington,OliverElphick,OleTetlie,JamesTreacy,CraigSawyer和 IvanE.MooreII写的,Debian教程,(该 文档 来源 于 LarryGreenfield,Linux用户 手册,。 )· JohnGoerzen和 OssamaOthman的,DebianGNU/Linux:安 装和 使用 指导,作者 在此 感谢 所有 在文 档写 作过 程中 曾给 予帮 助的 人。
A.2保 证因为 我不 是个 专家,所 以不 敢说 对 Debian或 Linux了如 指掌 。文 中有 关系 统安 全的 考虑仅适 用于 家庭 使用 。 本文 档不 能替 代任 何权 威指 南。
本文 档不 承诺 任何 保证 。所 有的 商标 均归 属于 其各 自的 拥有 者。 A.3反 馈欢迎 对本 文档 提出 意见 和建 议。 请发 邮件 至 debian-reference软件 包或 相关 翻译 包下 的DebianBTSsystem,使 用 reportbug来发 送错 误报 告会 更方 便。 请将 英文 邮件 发给 Osamu
Aoki他的 邮箱 是 osamu#at#debian.org,其 它语 言的 邮件 可发 送给 相应 的翻 译者 。
210
尽管 我生 活在 美国,但 并不 是一 名地 道的 英语 使用 者。 欢迎 任何 有关 语法 方面 的指 正。 最好 的反 馈莫 过于 一个 SGML版的 diff,不 过 text版的 diff也 很 欢 迎 。参 阅 官方 文 档,第 1.1节 了解 官方 文档 站点 。本文 档原 始的 SGML文件 位于 CVS:,pserver:anonymous@cvs.sf.net/cvsroot/qref或
http://qref.sourceforge.net/Debian/qref.tar.gz。A.4文 档格式本文 档使 用 DebianDocSGMLDT(由 LinuxDocSGML改 进 而 来 ) 写 作 。 DebianDocSGML系统允 许一 个源 文件 输出 多种 格式 的文 档,例如,本 文档 可以 使用 HTML、纯 文本,TeXDVI、
PostScript,PDF或 GNUinfo方式 阅读 。DebianDocSGML的转 换工 具位 于 debiandoc-sgml软件 包中 。A.5Debian迷 宫
Linux系统 是一 个面 向网 络计 算机 的功 能强 大的 计算 平台 。 然 而,学 习使 用它 的全 部功 能 并非易 事。 配置 打印 机就 是个 好例 子。 有一 张完 整而 详尽 的地 图叫 做,SOURCECODE”,它 非 常准 确但 极难 理解 。 还 有 一些 参考 书 叫HOWTO和 mini-HOWTO,它 们易 于理 解,但给 出了 太多 细节 反而 让人 忘记 了大 方向 。为 了使用某 个命 令,我有 时得 在长 长的 HOWTO中找 上半 天。
为了 在 Linux系统 配置 的迷 宫里 找到 出路,我 开始 用 text格式 写下 简单 的备 忘录 。当 这些备 忘录 越积 越多 的时 候我 学会 了 debaindoc。于 是就 有了 Debian参考手册 。A.6Debian引 言这儿 有一 些来 自于 Debian邮件 列表 的有 趣引 言。
·,这就 是 Unix。它 给你 足够 的绞 索来 吊死 你自 己。,— MiquelvanSmoorenburgmiquels@cistron.nl·,Unix对用 户来 说是 友好 的 …… 但它 仅仅 选择 它的 用户 是谁 。,— TollefFogHeentollef@add.no来 源
Debian参考 手册CVS,星期 日 三月 1212:53:54UTC2006OsamuAokiosamu#at#debian.org
译者,Hao"Lyoo"Liuiamlyoo#at#163.netMingHuaminghua#at#rice.edu
21
肖盛 文 atzlinux#at#163.comHaifengChenoptical.dlz#at#gmail.com解彦 博 xieyanbo#at#gmail.com
eastheroeasthero#at#gmail.com作者,第 A.1节Copyright(c)2001– 2005byOsamuAoki<osamu#at#debian.org>.
Copyright(Chapter2)(c)1996– 2001bySoftwareinthePublicInterest.取自 "http://wiki.ubuntu.org.cn/index.php?title=UbuntuManual&variant=zh-cn"