模拟大型主机迷你 HOWTO

Scot W. Stevenson

修订历史
修订 1.22005 年 10 月 6 日修订者:SWS

目录
1. 简介
1.1. 版权和许可
1.2. 免责声明
1.3. 鸣谢
1.4. 反馈
1.5. 翻译
1.6. 未来版本
2. 背景
2.1. 为何撰写本文?
2.2. 理由和概述
2.3. 您应该注意的事项
2.4. 本文的组织结构
3. 各个组成部分
3.1. 模拟大型主机
4. 终端
4.1. 双启动机器
4.2. Linux 终端
4.3. 真实 X 终端
4.4. 通过 ssh 进行 X11 转发
4.5. X 服务器程序
5. 支持机器
6. 将各个部分组合在一起
6.1. 安全
6.2. 网络硬件
6.3. 网络地理
7. 多人用户的生活
7.1. 共享资源
7.2. 屏幕保护程序和其他花哨功能
7.3. 空闲终端
8. 深入核心:非 GUI 系统
8.1. 命令行为何如此酷
8.2. 设置文本终端
8.3. 有用的 Shell 命令
9. 杂项
9.1. 模拟大型主机案例研究
9.2. 最后

简要描述一种标准的计算机网络设置和工作方式,适用于小型人群,构建成本低廉、易于管理且相对安全。本文档是为可能不完全熟悉所有相关概念的用户编写的。


1. 简介

1.1. 版权和许可

本文档,《模拟大型主机迷你 HOWTO》受 Scot W. Stevenson 版权所有 (c) 2003-2005。在 GNU 自由文档许可证 1.1 版或自由软件基金会发布的任何后续版本的条款下,允许复制、分发和/或修改本文档;不包含不变章节,不包含封面文本,也不包含封底文本。许可证副本可在 GNU Copyleft 获取


1.2. 免责声明

对于本文档的内容,不承担任何责任。使用文中的概念、示例和信息,风险自负。其中可能存在错误和不准确之处,可能会对您的系统造成损害。尽管这种情况极不可能发生,但作者不承担任何责任。请谨慎操作。

所有版权均归其各自所有者所有,除非另有明确说明。本文档中术语的使用不应被视为影响任何商标或服务标志的有效性。特定产品或品牌的命名不应被视为认可。


1.3. 鸣谢

本文档从以下人员以及其他人员提供的反馈、评论和更正中获益匪浅:

Gareth Anderson、Jonathan Clark、Jim Dennis、Adam Hawes、Doug Jensen、Jim McQuillan、Volker Meyer、Binh Nguyen、Douglas K. Stevenson、Paul Sunners


1.4. 反馈

非常欢迎您对本文档提供反馈。请将您的添加、评论和批评发送至以下电子邮件地址:scot@possum.in-berlin.de。反馈可以使用英语或德语。


1.5. 翻译

目前没有翻译版本。


1.6. 未来版本

在 2004 年的某个时候,我和我的妻子意识到我们花在路上的时间太多了,以至于将我们所有的东西都转移到笔记本电脑上更有意义。家庭网络已据此进行了重组。换句话说,《模拟大型主机 HOWTO》的维护者不再使用模拟大型主机了,这意味着我正在寻找一位正在使用的人来接管本文档。欢迎志愿者发送电子邮件至上述地址与我联系。


2. 背景

2.1. 为何撰写本文?

在上个千年的最后十年里,我搬出了父母的家,和我的女朋友住进了一间小公寓。我不仅离开了神奇的自动续满冰箱的舒适,也离开了一个突然之间必须经受住我妈妈、爸爸和小妹妹每天甚至有时是创造性地使用几个月而没有我的计算机网络。经过一番温和的劝说,我的女朋友不仅从 Windows 切换到了 Linux,还成为了我的未婚妻。我离开了研究生院,找到了一份真正的工作,这让我更没有时间摆弄我的——呃,我们的——网络,更不用说我父母的电脑了。我的未婚妻成了我的妻子,我们离开了公寓,搬进了一栋小房子,然后我发现自己花在换尿布上的时间比摆弄软盘的时间还多。

换句话说,在某个时候,我变成了成年人。

我听说,这种情况会发生在最优秀的人身上,并且它带来的好处不仅仅是事实上的无限冰淇淋预算。然而,拥有足够的时间来保持计算机运行并不是其中之一。我需要为我负责的系统建立某种设置,这种设置是

易于管理。 我没有时间在三台不同的机器上做同样的事情,或者弄清楚哪台机器需要哪个补丁。理想情况下,我只需要照顾每个网络中的一台计算机,而且频率很低。有些计算机应该在几个月内完全不需要维护。

经济实惠。 我的硬件预算现在与房屋贷款、食品账单以及女儿似乎比我们购买衣服的速度还要快地长大的衣服的成本竞争。花更少的钱做更多的事情不仅是一项智力挑战,而且是一种迫切的需要。

易于保护。 网络的结构本身应该使外部人员更难做坏事,更重要的是,让我可以轻松创建一个安全的“锁定”状态,在找到时间修补漏洞之前,将威胁降至最低。

经过几年的试错和大量时间思考如何在半夜摇晃尖叫的婴儿时设置计算机,我创建了一个“标准”设置。这并不是一种非常聪明或巧妙的做法,并且可能存在成千上万个系统以完全相同的方式组织起来。本文的目标是以连贯的形式呈现这种设置,以便其他人在面对相同问题时不必重新发明轮子。


2.2. 理由和概述

如今,大多数台式电脑对于它们大部分时间所做的事情来说都过于强大:电子邮件、上网和文字处理,可能还会听音乐。除非您仍然使用 66 MHz 的 486DX,否则即使它同时进行所有这些操作,您的处理器可能也会无聊透顶。检查任何显示系统负载的程序——例如xload, top,或uptime——您就会看到有多少昂贵的硬件在忙于无所事事。

有了所有这些剩余资源,从技术上讲,没有理由不能让多个人同时使用计算机。由于微软“每台桌面上都有一台电脑”的理念以及硬件公司广告宣传活动暗示,如果您没有自己的超强电脑放在桌子下,您就性能力不足等等,这个概念对于当今大多数家庭用户来说似乎很奇怪,甚至完全陌生。

硬件和软件公司不喜欢多用户设置是有充分的商业原因的。即使您必须升级中央机器,您也需要比每个人都拥有自己的计算机更少的高质量硬件;如果四个人可以同时使用一台 Windows 机器,那么微软就可以少赚三份拷贝的钱。如果您只是在一台机器而不是四台机器上安装 Linux,您显然不会省钱,但是您的硬件成本和管理时间将会下降。

当然,除了大公司的广告压力之外,很少有人拥有多用户设置还有其他原因。其中之一是电脑游戏:其中许多游戏消耗了如此多的硬件,以至于多用户系统通常不是最好的主意。此外,直到不久之前,实际上还没有简单的方法让多人登录,因为大多数台式电脑只配备一个键盘、一个鼠标和一个显示器。这种情况已经改变:您现在可以以非常少的麻烦和费用创建廉价且可靠的图形终端(也称为瘦客户端)。这使我们可以使用一台大型机器和几台小型机器。最后但并非最不重要的是,共享一台机器意味着您必须表现良好并与其他用户相处。

简而言之,本文是关于集中小型计算机系统以节省时间和金钱。大型机供应商 IBM 希望我们相信,这也正是大型企业正在做的事情。他们说,既然服务器狂热的时代已经结束,公司正在将东西搬回那些大型机上。由于越来越多的大型机运行的 Linux 大致与您在家中使用的 Linux 相同,因此真正的大型机和您的计算机之间的唯一区别是一些硬件。至少价值数十万美元的硬件,当然,但这并不意味着您不能使用相同的设计原则并享受“小型”大型机——如果您愿意,可以称之为“模拟”大型机——的好处。

基本设置有三个部分

模拟大型主机。唯一的核心机器。所有用户都访问这台计算机,无论是坐在它前面还是(更可能)通过终端,他们都可以同时这样做。在最简单的设置中,这台机器是所有用户的家,保存所有文件,并运行所有程序。

终端。 用户实际接触的东西。廉价、易于维护和可消耗,它们可以是双启动机器、Linux 终端、瘦客户端,甚至用于其他操作系统的 X Window 服务器程序。

支持机器。 可选的计算机,执行出于安全或性能原因您宁愿不在模拟大型主机上执行的特殊任务。最常见的支持机器是处理 Internet 连接的“守护者”。

本文的部分内容将涉及安装软件,其他 Linux HOWTO 中对此进行了更详细的介绍。在仅参考那些文本和复制所有内容这两个极端之间,我决定简要介绍一下标准系统上的安装过程。您将大致了解需要做什么,但对于详细信息,您需要专门的文本。这确实意味着有很多很多参考资料,但这只是表明我在这里站在巨人的肩膀上。

(许多好心人提出了将基本思想与 VNC 结合使用的各种方法。在阅读了他们的解释并研究了文档后,我意识到我在这里太外行了,无法给出明智的建议。这将是本文档的下一任管理员的第一个项目。)


2.3. 您应该注意的事项

模拟大型主机设置并非适合所有人。它基于以下假设

一小群用户。 尽管它应该可以很好地从家庭设置扩展到至少一个教室的人(取决于所使用的硬件和程序),但这并不是您想要运行大学或财富 500 强公司之类的东西。如果您是孤身一人,它也没有多大意义。找个人搬进来住,然后继续阅读。

合理的系统负载。 除非您真的、真的可以为严肃的硬件(在那种情况下,您可能不应该寻找模拟大型主机)投入大量资金,否则这不是一个您应该让您的孩子在玩《雷神之锤 3》的同时,您正在编码 Ogg Vorbis 文件,而您的伴侣正在观看 DVD,所有这些都同时进行。它主要为电子邮件、浏览、聊天和文字处理等普通工作负载而设计。

一定的停机时间容忍度。 我们将使用标准的、现成的、家庭用户级的硬件。这些部件不是为企业级强度工作而构建的,迟早会发生故障或损坏。如果您的任何工作紧急需要接近 24/7 的正常运行时间,您将必须外出购买工业级强度硬件——并且记得找人书面保证正常运行时间。

以下是一些模拟大型主机可能有意义的情况示例

  • 您有一个由电子邮件、上网和聊天狂热者组成的家庭,他们都想同时在线,但在在线时不会使用大量资源。

  • 您有一个小型、封闭的教学系统,既不能昂贵,也不能花费太多时间来管理。

  • 您和您的宿舍好友每人都拥有那些高性能计算机,可以互相用电脑游戏打发时间,但不希望为了做一些像实际课程作业那样琐碎的事情而在每台电脑上安装严肃的 Linux 系统。

  • 您的组织绝对没有钱,您唯一可以获得的硬件是如此老旧的东西,以至于甚至没有废品价值,但您仍然必须让您的人员访问计算机。

(如果您发现此设置适用的其他情况,请告诉我。)


2.4. 本文的组织结构

首先,我们将了解设置的各个部分——模拟大型主机、终端、支持计算机。然后我们将讨论将这些元素组合在一起的方法。这也是我们将讨论安全性的地方。我们还将讨论多人用户的生活以及适用于非常弱硬件的设置。


3. 各个组成部分

3.1. 模拟大型主机

3.1.1. 硬件

检查您的需求。 如果将要放置在模拟大型主机上的负载或多或少是恒定的,并且不会随着时间的推移而发生太大变化,那么您就可以美妙地根据您的需求定制硬件。这可能会让您使用二手硬件,从而为您节省更多资金,例如,用于购买新的环绕声系统(或者更现实地说,是新的洗碗机)。

找出您所需硬件的简单方法是拼凑一台机器,几乎任何机器,然后查看它在实际需要承担的负载下的性能如何。然后进行一些实验:如果您取出内存的一半,计算机是否会开始交换,如果您放入双倍的内存,它是否会加速?看看您是否可以使用较慢的处理器或较小的硬盘驱动器。如果可以,请从您的用户那里获得反馈。

这些试运行可能需要时间,并且可能看起来像是大量工作。这里的想法是使模拟大型主机的硬件尽可能精确地适应手头的任务,以便您可以将剩余的硬件用于其他用途。此外,这些试运行可能会产生令人惊讶的结果。大多数人在为多个用户构建系统方面经验不足,并且倾向于高估所需的处理器强度,同时低估他们需要的内存量。

例如,对于我们 2003 年在家中的设置——两个人运行 SuSE 8.2 和 KDE 3.1,并且有规律地使用电子邮件客户端、多个浏览器窗口、聊天和音乐播放——AMD Duron 1.0 GHz 处理器被证明是过度的。我们最终使用了一个二手 SMP 主板,带有两个二手的 Intel Pentium II Xeon 450 MHz CPU(是的,Pentium “two”)。进一步的实验表明,512 MB 内存有点太多了:384 MB 就足够了,如果您可以忍受系统偶尔进入交换空间的话。

多处理器与单处理器 随着越来越多的人同时在一台计算机上工作,您将开始遇到单处理器机器似乎停顿的时刻。此外,如果某人的进程变得失控并开始占用 CPU,它可能会冻结整个系统。这很糟糕。

数十年的硬件营销造就了计算机用户,当事情变慢时,他们会本能地出去购买更快的处理器。但是即使是最快的 CPU 也一次只能做一件事(我们在这里忽略了超线程之类的技巧),它只是在伪造方面稍微好一点。要真正同时做两件事,您需要多个处理器。这种系统通常被称为“SMP”计算机,来自 对称多处理。您可以获得配备八个或更多处理器的系统(Intel Pentium II Xeon、AMD Opteron、Intel Xeon),但在我们的价格范围内,两个 CPU(双处理器)系统是最常见的。

即使在运行大量进程的情况下,多个处理器也可以在很大程度上保持系统的响应速度。但它不会做的是使单个进程的运行速度比在具有相同速度的单处理器系统上快两倍。形象化这一点的一种方法是想象您正在洗衣服:两台洗衣机将在大约一半的时间内完成整个工作,但这并不意味着它们现在每台都以两倍的速度旋转;每次洗涤仍然像以前一样需要很长时间。事情实际上更复杂,但这是一个很好的经验法则。

尽管处理器速度对于处于领先地位的游戏玩家或想要在他们的台式机上模拟核爆炸的人来说可能很重要,但当前的时钟速度对于正常使用来说简直是反常的。您通常可以使用比市场试图强加给您的速度慢得多的处理器,尤其是当您拥有多个 CPU 时。这是一件好事,因为 SMP 主板比普通的单处理器主板更昂贵,然后您仍然必须购买第二个处理器。请记住,较新的(AMD Opteron / Intel Xeon)SMP 系统可能具有昂贵的需求,例如特殊的电源和超大型机箱。

多处理器主板对于模拟大型主机来说不是必须的。但是,如果您发现您的系统在多个用户下呻吟,那么添加处理器可能会比添加 MHz 给您带来更好的交易。

(在撰写本文时,还存在 Linux 内核中的延迟问题。在 2.4.x 系列中,内核是不可抢占的,因此偶尔单处理器系统会在操作系统深处发生某些事情时停顿。2.6.x 内核应该具有更高的响应速度,这将是该问题和本段的终结)。

存储:SCSI 与 IDE,RAID。您可能需要考虑使用 SCSI 而不是 IDE 用于硬盘驱动器和其他驱动器。SCSI 的一个优点是您可以将更多驱动器连接到一台计算机,而不是通常 IDE 限制的四个驱动器。SCSI 驱动器也更擅长在它们之间来回移动数据,而不会打扰处理器。但是,它们更昂贵并且可能更吵。在用户少、负载低的小型系统中,您应该可以使用 IDE 驱动器而不会出现问题。

如果您要构建一个系统,在该系统中即使在您每天晚上在刷牙后立即执行的常规备份之间丢失数据也很重要,那么您可能需要考虑 RAID(廉价磁盘冗余阵列)设置。粗略地说,RAID 设置会将数据复制到多个硬盘驱动器上,这样如果一个驱动器崩溃,其他驱动器仍然有副本。

合理的图形。 大多数显卡都迎合了对速度、速度和更快速度以及与之匹配的口袋深度有着无限渴望的游戏狂热者。在模拟大型主机中使用具有 128 MB 内存和令人眼花缭乱的 3D 功能的 AGP 显卡不一定是坏事,但请确保您实际上需要它。对于电子邮件和上网,一块好的二手 PCI 卡通常就足够了。

热量和闪电。 除了此处提到的正常硬件考虑因素外,还要考虑保护您的机器免受电源浪涌或电压骤降等威胁的部件,或确保一切保持凉爽,或保护您的驱动器托架免受好奇的小孩用冰棒棍的侵害。一款好的现代主板具有温度警报和各种其他功能,可帮助您监控系统的健康状况。

总结一下

  1. 在处理器速度之前考虑内存。 当用户超过一个时,您将比预期的使用更多内存和更少的 CPU 时间。

  2. 两个较慢的处理器可能比一个快的处理器更好。 较快的处理器可以比慢的处理器更快地在多个任务之间切换,但是两个处理器根本不必切换。这意味着您可以使用较旧的硬件,即使您需要更多硬件,它也几乎总是更便宜。

  3. 考虑 SCSI 和 RAID。 SCSI 而不是 IDE 让您在一台机器上获得更多驱动器,并且它们能够在没有处理器监督的情况下自行运行。但是,SCSI 驱动器更昂贵并且噪音更大。RAID 有助于保护您的数据免受硬盘驱动器故障的影响。两者都适用于更雄心勃勃的设置。

在为模拟大型主机购买硬件时,在线拍卖商是您的朋友。当您当地的计算机商店试图向您推销最新的时尚产品时,在线上不乏价格实惠的上一代硬件。


3.1.2. 软件

关于 X 的一些背景知识。 X Window 系统(X Windows 或简称 X)是大多数 Linux 系统使用的图形层。几乎所有当前的窗口管理器——KDE、Gnome、Blackbox——都位于 X 之上,并且几乎所有 Unix 变体都使用 X。

X Windows 有一个重要的方面,我们在模拟大型主机中对其进行了扩展使用:它是网络透明的。负责控制输入/输出设备——屏幕、键盘和鼠标——的软件可以与您实际运行的程序位于不同的计算机上。使用 X,可以在中国北京坐在 486DX 前,并在弗吉尼亚州兰利的超级计算机上运行您的程序。

这有很多优点。图形对于计算机来说是繁重的工作;让它们在与它们所属程序不同的机器上进行处理,可以大大减轻中央计算机的负载。但是,它们并没有那么困难,以至于无法由较旧的处理器处理。在计算机技术的遥远过去,有一种特殊的机器叫做 X 终端,它除了显示图形之外什么也不做。今天,一台备用计算机,配备 Intel PentiumPro 或 AMD K6 300 MHz 就足够了。这使您可以拥有一台运行实际程序的大型胖机器和大量廉价的小型机器来完成所有图形工作。这正是我们正在寻找的。

X Windows 确实有一些缺点。它会占用大量带宽,因此您需要快速网络。此外,一些术语很奇怪。控制屏幕、鼠标和键盘的计算机(或更确切地说是软件)称为“X 服务器”,因为它“服务”于实际程序,而实际程序又称为“X 客户端”。在本文中,我们将坚持使用“主机”和“终端”以避免混淆。

有很多关于 X Windows 的优秀 Linux HOWTO,所以我们再次只介绍基本步骤,让您查阅专门的文本。我假设您已经在模拟大型主机上设置了 X;您的发行版应该为您处理这部分。

首先,我们必须启动处理远程 X 登录的程序。这是xdmX 显示管理器)。根据您的系统和品味,您可能需要使用 KDE 版本 kdm 或 Gnome 版本gdm代替;两者都具有更好的图形和更多功能。有关更多详细信息,请查看 Thomas Chao 的 XDMCP 迷你 HOWTO。通常,您需要xdm(或其他)在您通常用于图形的运行级别中启动(例如,SuSE 8.2 的运行级别 5)。

即使xdm正在运行,模拟大型主机也不应允许您从外部连接,这具有良好的安全性。您的发行版可能允许您通过在其配置文件之一中进行简单条目来更改此设置(例如,SuSE 8.2 使用/etc/sysconfig/displaymanager)。如果您必须以困难的方式进行操作,则需要更改/etc/X11/xdm/xdm-configopt/kde3/share/config/kdm/kdmrc如果您正在使用kdm.

完成所有这些操作后,您就可以测试链接了。获取一台您知道具有正常运行的 X 系统的计算机,在控制台模式下启动它——不是在图形模式下(SuSE 系统上的运行级别 3 而不是 5,使用init 3作为 shell 中的 root 用户)。登录并键入

        /usr/X11/bin/X -terminate -query <host>

其中“<host>”是模拟大型主机的名称或 IP 地址。您应该获得与坐在主机机器上相同的 X 登录提示。

即使您已启动进入图形模式,您也可以尝试以下操作来强制 X 服务器启动第二个显示器

        /usr/X11/bin/X :1 -terminate -query <host>

这可以从终端程序(例如xterm在正在运行的显示器上。请注意,默认情况下,第一个显示器是 :0。

本文的其余部分是在假设您将使用 SuSE 或 RedHat 或 Gentoo 等标准发行版作为模拟大型主机的前提下编写的。但是,调整 Knoppix 终端服务器软件包(请参阅 http://www.knoppix.net Knoppix),使其直接从 ramdisk 启动应该也没有什么麻烦。


4. 终端

您用于连接到模拟大型主机的机器应该廉价、易于维护,并且从安全角度来看,是可消耗的。


4.1. 双启动机器

有些人——例如,那些没有耗时的工作、配偶或孩子的人——会希望能够花费大量时间玩硬件密集型电脑游戏。尽管越来越多的游戏开始在 Linux 上发布,但这通常意味着运行具有闭源操作系统(如 Microsoft Windows)的机器。解决此问题的方法是将游戏计算机设置为双启动机器。混乱的细节通常由您正在使用的任何发行版自动处理;如果不是,请查看 Tobby Banerjee 的 Linux 安装策略迷你 HOWTO

模拟大型主机设置允许您将双启动机器上 Linux 分区的大小和复杂性保持在最低限度:它所要做的就是让 X 运行并连接。有多种方法可以做到这一点,我通常只是这样做以下步骤

  1. 转到/etc/X11/xdm/。在文件Xservers中,注释掉以下行之一:0 local /usr/X11R6/bin/X :0 vt07或类似的行,方法是在开头放置井号 (“#”)。这将阻止计算机在启动时本地启动 X。

  2. etc/inittab中,插入新行,例如(对于 SuSE 8.2)xx:5:respawn:/usr/X11R6/bin/X -query <host>其中“<host>”再次是模拟大型主机的名称。“5”是启动 X 的运行级别;“xx”只是我选择的标签;您可能必须将两者都调整为您的系统(请注意:摆弄inittab可能会导致严重问题)。这将启动 X 并调用模拟大型主机,当您位于双启动计算机上时,您应该会看到登录窗口。

如果您不必太频繁地在操作系统之间切换,那么双启动机器是不错的选择。但是,所有的重新启动都很快会变得令人厌烦,而且考虑到闭源操作系统的价格,双启动机器不能被认为是真正可消耗的。


4.2. Linux 终端

Linux 终端服务器 http://www.ltsp.org (LTSP) 允许您使用旧硬件组装不带硬盘驱动器的精简计算机,这些计算机作为瘦客户端运行。这些机器价格便宜、安静、设置速度快,一旦运行起来,几乎不需要维护(除非,例如,风扇坏了)。LTSP 获得了各种奖项,并在比小型家庭模拟大型主机要求更高的环境中使用。例如,英国的奥威尔高中将 LTSP 机器和 IBM Blade 服务器用于他们的完整系统(请参阅 http://www.cutterproject.co.uk/Casestudies/orwell_high_school_cutter_case_study.php )。如果您要拥有持续使用的终端,那么很难看出这不是最佳解决方案。

所需硬件。 很可能,在您的地下室或车库(或任何您存放伴侣亲切地称之为“所有垃圾”的东西的地方),您可能有一个毫无希望的过时主板和处理器,您一直保存着它们,因为您永远不知道。好吧,猜猜看。

如果您使用的是 100 Mbit (“快速”) 以太网网络,请保持在 486DX 以上;Pentium II 应该没问题。看看您是否可以凑集大约 32 MB 的内存。您需要一个软盘驱动器用于初始阶段。您还需要一块不错的显卡和一个显示器——“不错”不一定意味着具有 128 MB RAM 的 AGP 显卡,它意味着清晰、清晰的画面。

您唯一需要稍微注意的事情是网卡。找到一个带有插槽以插入 ROM 芯片的网卡:“可启动”网卡。您可以使用没有插槽的网卡,但那样您必须继续从软盘启动。我们还需要网卡的唯一编号(媒体访问控制或 MAC 编号)。在好的网卡上,它包含在板上的小贴纸上,看起来像这样

        00:50:56:81:00:01

如果您在网卡上找不到它,请尝试使用 Linux 救援软盘或任何其他内核启动系统。当检测到网卡时,该编号应在启动期间显示。

添加键盘和机箱,就完成了。请注意,我们没有硬盘驱动器,更不用说 CD-ROM 了。使用合适的电源和处理器风扇,您将拥有一台非常安静的机器。

它们是如何工作的。

LTSP 主页对系统启动时发生的情况进行了深入的技术讨论。简而言之,用通俗易懂的语言来说

当打开电源时,Linux 终端就像任何其他计算机一样,环顾四周,看看它被赋予了什么硬件。它找到了一张带有 MAC 的网卡,并注意到它有一张带有启动盘的软盘(网卡中的启动 ROM。)它启动启动程序。这实际上告诉 Linux 终端

       Got your MAC? Good. Now scream for help as loud as you can.

终端的呼叫通过整个(本地)网络。在模拟大型主机上,一个名为dhcpd动态主机配置协议服务器守护程序)的程序正在侦听。它将终端发送的 MAC 与它被告知要照顾的机器列表进行比较,然后向终端发送一个答案,其中包括 IP 地址和终端可以获取内核的位置。然后终端使用其新名称配置自身。

使用来自启动程序的更多代码,终端启动一个名为tftp简单文件传输协议,一个精简版本的古老的ftp。这从主机机器下载内核。然后终端启动此内核。

像其他每个 Linux 系统一样,终端需要一个根文件系统。它不是从硬盘驱动器获取它,而是通过NFS网络文件系统)从模拟大型主机导入它。如果终端内存非常小,它也可以通过这种方式挂载交换分区。然后终端启动 X,通过xdm连接到模拟大型主机,并弹出登录屏幕。

这一切都发生得非常快。如果您关闭终端上的所有各种 BIOS 启动检查,并从网卡中的 EPROM 而不是软盘启动,它会发生得更快。

运行dhcpd, tftpdnfsd在模拟大型主机上是一个您可能不愿意承担的安全风险。在关于支持机器的章节中,我们将展示一种绕过此问题的方法。

软件设置。 在服务器(模拟主机)端,您需要安装nfsd tftpddhcpd,您的发行版应该将其作为标准软件包包含在内。

现在请保持其配置文件不动。LTSP 配置和安装程序将为您完成大部分工作。您应该注意的一些文件

/etc/dhcpd.conf

提供终端的 IP 地址、主机名、模拟主机的 IP 地址、终端的 MAC 地址和默认网关。检查内核路径名是否正确。

/opt/ltsp/i386/etc/lts.conf

这些选项控制终端本身。

/etc/hosts

Linux 终端的名称及其 IP 地址必须在此处列出。稍后,在描述网络时,我们将介绍一个系统的命名约定,以使其更容易。

/etc/hosts.allow

尽管当前 LTSP 文档中没有提及,但您可能需要在该文件中添加以下行rpc.mountd : <terminal> : ALLOW rpc.mountd : ALL : DENY其中 “<terminal>” 是终端的 IP 地址。这告诉主机允许终端挂载 NFS 文件系统。

为 Linux 终端创建启动软盘通常很简单。根据您的以太网卡类型,访问 LTSP 文档中提到的网站(目前是 Marty Connor 的 ROM-O-Matic 网站 http://www.rom-o-matic.net/),并按照启动软盘的说明进行操作。这应该生成一个几十 KB 的文件,您可以将其放在软盘上并从中启动。稍后,当您确定您的硬件配置不会改变并且您的设置工作正常时,请用插入以太网卡的 EPROM 替换软盘。

如果您的终端机器上有一个更现代的主板,您也许可以通过从启动顺序 (CMOS) 菜单中选择 “PXE”(预启动执行环境)、“MBA”(管理启动代理)或 “网络” 来绕过所有这些步骤。

使用终端。 一台模拟主机可以支持多少 Linux 终端?LTSP 文档给出了以下示例

    It's not unusual to have 40 workstations [Linux Terminals], all running
    Netscape and StarOffice from a Dual PIII-650 with 1GB of ram. We know
    this works. In fact, the load-average is rarely above 1.0!

(本文档的这一部分写于 2002 年 3 月,因此提到了 Netscape,它是 Mozilla FireFox 的前身。StarOffice 是 OpenOffice.org 的商业变体。)

Linux 终端可能需要一些用户教育。只使用过 Windows 的人往往难以想象一个图形层不仅独立于操作系统的其余部分,还可以从多个屏幕访问的系统。解释这一点的最好方法是举例说明。X 新手喜欢的一个技巧是程序在一个终端上启动,然后在另一个终端上出现。要启用此功能(但仅在安全环境中!),请坐在终端前并键入

       xhost +<host>

其中 “<host>” 是模拟主机的名称。然后,移动到另一个终端并启动一个程序,例如xeyesxroach:

       xeyes -display <terminal>:0 &

眼睛应该出现在第一个终端的显示器上,为所有人提供无尽的乐趣。当您完成解释发生的事情后,请记住在第一个终端上再次撤回权限,使用

       xhost -<host>

您也可以使用此示例来指出为什么使用以下命令是危险的xhost命令。

通常出现的另一个问题是 Linux 终端的速度。演示这一点的一个好方法是运行一系列来自以下套件的屏幕保护程序xlock套件。例如

       xlock -inwindow -mode kumppa

或更普遍地

       xlock -inwindow -mode random

尽管结果将取决于您的硬件,但这通常可以消除任何疑虑。

如果您正在使用像 KDE 这样的桌面环境,它允许您在注销时关闭计算机,请确保禁用此功能。否则,您的用户在尝试退出终端时会关闭模拟主机。告诉他们一旦注销*只需关闭电源*。年长的用户会感到怀旧,而年轻的用户会盯着您,仿佛您疯了一样。这就是进步。


4.3. 真正的 X 终端

如果幸运之神眷顾您或者您很富有,您可能会发现自己拥有真正的瘦客户端。安装一个通常与设置 Linux 终端没有太大区别,除了您需要来自供应商的软件,您可能需要支付支持费用,并且当出现问题时,您将无法自己修复它。

Linux 文档项目有许多关于如何设置 X 终端的通用和特殊 HOWTO 文档,例如 Salvador J. Peralta 的 *Connecting X Terminals to Linux Mini-HOWTO* 或 Ian Hodge 的 *NCD-X-Terminal Mini-HOWTO*。


4.4. 使用 ssh 进行 X11 转发

如果您在一台已经支持 X 的机器上,您也许可以使用安全外壳 (Secure Shell) 的 X11 转发功能 (ssh) 程序。这可以通过以下方式调用

ssh -X <HOST>

并创建一个加密保护的隧道到主机。X 转发必须在两台机器上都进行配置 — 在/etc/ssh/sshd_config主机上,X11Forwarding必须设置为yes— 并且每天使用它可能有点笨拙。但是,对于快速而粗略的工作,这是一个不错的替代方案。


4.5. X 服务器程序

作为连接到模拟主机的最后一种方式,有一些 “X 服务器” 程序可以在不同的操作系统下运行(记住,X 服务器为终端端提供支持)。这些程序使您可以使用不原生运行 X 的操作系统登录到 Linux 机器。

大多数 Windows 的 X 服务器都需要花钱,在某些情况下需要花很多钱。唯一的例外是 Cygwin http://cygwin.com/xfree/,它将 X(和 GNU 工具)移植到 Windows 机器。

如果您有装有 OS X 的 Apple 计算机,那么情况会好得多。对于 OS 10.3 “Panther”,您需要从安装盘安装 X11 软件包。然后,使用任何文本编辑器,创建一个可执行的 bash shell 脚本,例如

#!/bin/bash
/usr/X11R6/bin/X -terminate -query "<HOST>" :1
exit

请注意窗口编号为 :1,因为 :0 被 Aqua 使用。不要使用以下位置的 X11 服务器/Applications/Utilities/X11.app/Contents/MacOS/X11,因为它不理解-query命令:Apple 似乎不希望人们运行远程 Aqua 会话。然后,告诉防火墙您在做什么(您确实打开了防火墙,对吗?):在系统偏好设置 -> 共享 -> 防火墙为端口 6001(不是:6000)创建一个新的条目 “X Window System”。然后,将 shell 脚本图标移动到您想保存它的任何位置。要启动 X 会话,请单击该图标。一个名为 “X” 的 “EXEC” 图标将出现在 Dock 中。单击此图标。享受您的连接。要再次退出,请按Command-Option-a。(注意:这尚未在 Mac OS X 10.4 “Tiger” 上进行测试)

您也可以查看 XDarwin http://www.xdarwin.com/ 项目。XDarwin 是 X Window System 的 Apple 版本,它位于 Darwin 操作系统(BSD 的变体)之上,Darwin 操作系统是 OS X 的核心。

(有一个用 Java 编写的 GPL X 服务器您可以尝试:Weirdx http://www.jcraft.com/weirdx/,尽管作者指出它不是为重负载而设计的。)

在本章中,我们研究了将为您提供 GUI(图形用户界面)的终端。如果您足够强硬,您还可以将文本终端连接到您的模拟主机,并通过 CLI(命令行界面)访问系统。此选项将在后面介绍。


5. 支持机器

理论上,除了模拟主机和您用作终端的设备之外,您应该不需要其他计算机。但在实践中,您可能需要额外的机器来执行特定任务。通常,这是出于安全考虑,而不是性能。

例如,假设您的网络通过拨号连接到 Internet 以进行电子邮件和浏览。当然,您可以将所有需要的硬件和软件都放在模拟主机上,而不会看到太大的性能损失(事实上,如果您的网络速度较慢,它甚至可能会更快)。但这会将您最宝贵的计算机放在互联网上的每个人都可以攻击到的地方 — 这越来越多地意味着地球上的任何人都可以攻击它。

为了更好的安全性,在模拟主机和外部世界之间放置一台机器。确保这台 Guardian 机器不仅经过高度强化,而且还是可消耗的,这样,如果它被邪恶势力接管或以任何其他方式受到损害,您也不会丢失任何有价值的东西。要在紧急情况下锁定网络,您现在要做的就是物理关闭 guardian 机器的电源(假设这是您本地网络的唯一入口点)。如果您在看到问题的那一刻无法坐下来采取安全措施,这将非常有用,因为,例如,您在汉堡烤架的老板根本没有意识到宿舍网络有多重要,并且冷酷无情地坚持您准时出现去翻肉饼。

您可能希望在不同机器上隔离的其他功能是 Internet 用户可以访问的 Web 服务器或其他服务器。您还可以使用支持机器来维护您的 Linux 终端(**终端母机**)或刻录 CD(**刻录机**)。


6. 将各个部分组合在一起

因此,在阅读到这里之后,您知道自己想要什么,知道在哪里可以获得它,如何设置它,并且想要开始行动。但是,在您开始编辑配置文件和连接电缆之前,您应该考虑一些事情。


6.1. 安全性

关于您的安全需求,我只能告诉您有限的内容:每个人都面临不同的威胁。我在这里所能做的就是提供有关如何保护模拟主机设置的一些基本背景知识。如果您正在寻找关于安全性的良好通用介绍,请尝试 Bruce Schneier 的著作 *Secrets & Lies*。


6.1.1. 重新审视需求

在大多数关于保护计算机系统的书中,都会有一个作者告诉您坐下来 “制定安全策略” 的时候。这听起来像是一场官僚主义的噩梦,以至于大多数人都会跳过整章。我不会建议您制定任何东西。但是,下次您洗澡时,问问自己您需要什么样的防御措施。

您想要保护什么? 您是否担心有人会侵入模拟主机并窃取您的数据,这是好莱坞电影中经典的计算机威胁?或者您的硬件可能会被闪电摧毁?或者有人会在用户去洗手间时坐在终端前,以他的名义写电子邮件?或者人们会打开计算机机箱并偷走处理器?另一种看待这个问题的方式是弄清楚系统的哪些部分是您难以甚至不可能缺少的。例如,我女儿小时候的数码照片和影片是无法替代的。

谁或什么是邪恶势力? 一旦您知道自己想要保护什么,就想想您要保护它免受谁的侵害,也许在您刷牙的时候。您是否担心来自 Internet 的黑客,或者您所依赖的不稳定的电力公司会用电涌击毁您的计算机?还记得那些拿着冰棒棍的小孩吗?

如果您的系统 24/7 全天候连接到 Internet,您需要担心蠕虫和黑客。如果您只是在线足够长的时间来收取您母亲发来的三封电子邮件,那么您在这方面的风险将大大降低。这表明了攻击的 “概率” 是如何计算的。在 20 秒内,有人攻击您的系统的可能性有多大?如果攻击极不可能发生,您将不想费力去保护自己免受其侵害。有些事情您可能甚至不会考虑就直接忽略了:您将如何防御您的系统免受锈蚀怪物的攻击?

一旦您知道自己害怕什么以及攻击的可能性有多大,您就应该对您面临的 *风险* 有所了解。处理风险有三种方法:您可以 *承担风险*、*最小化风险* 或 *为风险投保*。第一个选项并不像您想象的那么疏忽:考虑到我们的预算,我们大多数人只是在承担陨石撞击的风险。第三个选项通常需要花钱,而我们没有钱,因此我们将在此处忽略它。

第二个选项涉及任何安全过程的三个主要部分:*预防*、*检测* 和 *响应*。大多数计算机安全都与预防有关:例如,确保机箱已锁定,这样就没人可以偷走 CPU。检测通常会被忽略 — 您上次查看以下位置的文件是什么时候/var/log/?— 并且通常很少考虑响应,因为人们认为反正这些都不会发生。不幸的是,您始终都需要这三个部分,至少在某种程度上是这样。

即使您认为像以下检测系统tripwire安装起来太麻烦,而且您没有时间每天阅读日志文件,也要考虑一下您如何才能知道您的系统是否已被入侵。在某些情况下,这将很难错过,例如,当带有徽章的人敲门并将您带走,因为您的计算机一直在向韩国发送与不可能发生的与松鼠的性行为相关的垃圾邮件。其他入侵可能更微妙。您会知道是否有人从您的信件文件夹中复制了文件吗?

考虑一下您将如何应对至少最有可能发生的攻击和故障。如果您的硬盘驱动器崩溃了,您会怎么做?如果您以 root 用户身份登录,并且系统告诉您上次登录是在星期五 — 但您实际上星期五还在英国伦敦,一边唱着酒歌,一边快乐地从一家酒吧踉跄走到另一家酒吧。对于普通的家庭系统和良好的备份,您或许可以通过 *从头开始重新安装* 作为对所有大大小小问题的标准响应(但请确保您的备份没有被破坏)。

当您穿上袜子时,您可能已经发现您最大的风险与媒体一直谈论的风险大相径庭。如果您的网络上没有 Microsoft 产品,您不必太担心防病毒软件或 Active X 漏洞。但是,在电涌、洪水或风扇损坏方面,Linux 没有任何特别的优势。


6.1.2. 安全原则

回到预防:当您设计系统时,请牢记以下安全原则

构建更好的篮子。 将您的所有文件放在一台计算机上可能看起来像是将所有鸡蛋放在一个篮子里,俗话说这不好。事实上,从安全的角度来看,这实际上可能是一个好策略:因为防御一件东西几乎总是比防御许多东西容易,所以一个篮子可能很好,只要您确保这是一个 *非常好,非常好* 的篮子。

避免复杂性。 集中式系统通常在设置和管理方面不太复杂:如果您的所有用户都在一台机器上,您不必担心网络文件系统、网络登录、网络打印机以及所有其他巧妙但复杂的连接计算机的方式。保持简单可以保持安全。这对支持机器也是如此:它们应该只做一项工作。

封装。 这是隔离系统一部分的过程,以便如果它被破坏,整个系统不会随之崩溃。Guardian 是封装的一个例子:连接到 Internet 的危险工作由一台廉价、可消耗的机器处理,这台机器为攻击者提供的工具很少。另一个例子是将用户可以用他肮脏的小手实际触摸到的系统部分(显示器、键盘和鼠标)放在 Linux 终端上。然而,模拟主机设置显然在封装方面做得不好:在一台机器上完成所有事情的整个想法与这个概念背道而驰。

纵深防御。 预防性安全措施只是争取时间,直到您的响应开始生效 — 如果有足够的不间断时间,攻击者将始终获胜。为了增加您的响应时间,请部署纵深防御:在攻击者跋涉数公里穿过茂密的丛林后,他到达了环绕二十米高外墙的护城河,然后是雷区和有毒的竹刺。最后,您神奇的巧克力机器的秘密计划不仅会用代码编写,还会用隐形墨水书写。这就是纵深防御。

Guardian 是您防御的延伸;在模拟主机上安装第二个防火墙是另一种防御。这可能听起来微不足道,但请为模拟主机和 guardian 使用不同的密码。如果您有其他支持机器,将它们放在不同的网络上也意味着它们与攻击者之间有更多的空间。如果您有必须不惜一切代价保密的数据(眨眼眨眼),请对其进行加密,或者至少加密那些备份 CD。经过几年的备份,您将不知道它们最终都去了哪里。

但请记住,即使是最深层的防御也只能为您争取更多时间。正如印第安纳·琼斯和劳拉·克劳馥会告诉您的那样,通过预防措施是容易的部分:您只需要一根鞭子或几次恰到好处的跳跃。当当地人开始喊叫,拿着枪的人到达时,问题就开始了。

扼制点。 如果只有一种进入系统的方式,并且您可以完全控制这种方式,那么在危险时期,该系统将更容易保护。我们再次求助于 guardian 来举例说明扼制点:关闭机器,您就可以免受 Internet 恶棍的侵害,*前提是它确实是唯一的接入点*。许多网络的问题在于,在某个地方,有人与外部建立了系统管理员不知道的连接。想想现在所有配备调制解调器,甚至更糟糕的是内置无线 LAN 卡的笔记本电脑。将这些笔记本电脑连接到您的网络,您就拥有了一个即时后门。记住您的历史:您的主门可能又高又坚固,并且爬满了兽人,但是错过一个小小的蜘蛛洞,两个霍比特人就可以毁掉您的一整天。


6.2. 网络硬件

如果您要从头开始设置网络,请选择快速以太网。电缆和网卡并没有比旧的 10 MBit/秒以太网贵多少。X Windows 非常消耗带宽,并且需求总是先增长后减少。

关于通过无线 LAN 运行 X 终端的一个注意事项:我曾被明确告知要避免这样做。提到了两个问题:可变带宽,当您的邻居做一些重要的事情时,这可能会导致您的会话速度慢如蜗牛;以及掉线,这可能会导致整个会话关闭,所有使用连接的 X 程序都终止,您的工作也丢失。还有关于 WiFi 连接安全性的常见警告。


6.3. 网络地理

您可以通过选择一种理智且系统化的方式来命名您的计算机,从而使自己的生活更轻松:根据每台机器的功能为您的系统选择一组地址。在内部,使用为没有直接连接到 Internet 的网络保留的 192.168.**.** 的 IPv4 地址空间。例如,我们以 192.168.1.* 为例。模拟主机可以是 192.168.1.1,支持机器可以是 192.168.1.10 到 192.168.1.19,终端可以是 192.168.1.100 到 192.168.1.199。这样,您可以立即根据 IPv4 号码查看计算机的类型,并且机器的可信度越低,最后一个数字就越大。

将此与易于使用的命名系统结合起来。例如,您可以将模拟主机命名为 *fatcat*,将终端命名为 *kitten00* 到 *kitten99*(IPv4 地址为 192.168.1.100 到 192.168.1.199)。根据支持机器的功能为其命名可能比系统化的命名更容易。在猫科动物主题中,尝试使用 *claws* 作为 guardian 机器,或使用 *mamacat* 作为终端母机。


7. 多用户生活

让每个人都使用一台公共机器会让您的用户有更多机会互相找茬。即使 Unix(以及因此 Linux)从一开始就被设计为多用户系统,但可用资源是有限的,一个用户占用资源会惹恼所有人。他们都会来找您,说这是您的错。


7.1. 共享资源

您最大的难题之一可能是 CD-ROMCD-R/W。从理论上讲,它们应该像其他所有东西一样放在模拟主机上,但这会产生很多问题。您的用户需要能够实际接触到机器才能放入 CD,这从安全角度来看可能不是一个好主意。一旦 CD 放入驱动器,您可能会遇到各种人尝试挂载、卸载或弹出它,如果他们无法做到,就会感到沮丧。读取 CD(例如使用cdparanoia)可能会干扰多媒体程序并导致音轨跳过。刻录 CD 甚至更糟,因为它要求系统在一定的连续时间内保持关注。如果您的机器上只有一个处理器,并且其他用户决定在刻录进行时做一些密集型操作,则写入可能会失败,并且有人会非常沮丧,因为他刚刚丢失了一张空白 CD。

您可以做的一件事是将 CD-R/W 移动到一台专用的支持机器(**刻录机**)上,该机器不做其他任何事情。这样的机器可以使用 J�rg P. M. Haeger 的 http://joerghaeger.de/webCDwriter webCDwriter 进行设置。它具有用 Java 编写的图形界面,并且可以在任何装有 Java 虚拟机 的操作系统下运行。这保留了封装原则。确保刻录机上没有其他您在系统被破坏时无法使用的东西。当然,还有其他更原始的方法:您可以通过 NFS 导出用户的主目录,但这正是我们试图避免的事情。或者让用户将 CD 映像创建为 ISO 文件,然后让他通过以下方式将其发送到支持机器sftpscp。然后用户可以走到机器旁并手动刻录它。

在家庭环境中,这些可能都不是问题。对于更大的配置,对于不受信任的用户,这可能是一个大问题。您最终可能会告诉所有人,他们无法在此系统上刻录 CD,就此为止。

其他资源的问题较少。传统上,您使用 配额 设置来限制任何单个用户可以使用的磁盘空间量。随着硬盘驱动器每月变得越来越便宜,这不再是一个大问题,但是根据您的用户群,您可能会考虑安装非常大的配额以确保安全。但是,用户很容易因配额的想法而感到不安,尤其是当他们在达到限制时,硬盘驱动器的大部分空间仍然是空闲的时。


7.2. 屏幕保护程序和其他花哨的东西

屏幕保护程序的最初目的是防止屏幕上显示的内容在您离开去饮水机时烧入显示器的荧光粉涂层中。然而,很快,巧妙、可爱和复杂的屏幕保护程序本身就成了一种目的。今天的屏幕保护程序已经变得非常耗费资源,以至于有些屏幕保护程序实际上要求您拥有某些类型的硬件(例如 OpenGL 支持)才能运行。

如果您有一台带有 X Windows 的模拟主机,您可以确定您的每个用户都会有一个屏幕保护程序设置,该设置将测试系统的极限(只是为了好玩,一旦您完成所有设置,请登录到连接到主机的每个终端,并让每个终端运行不同的屏幕保护程序。在执行此操作时,请观察系统负载。尽量不要呜咽得太响)。更糟糕的是,像 KDE 这样的某些桌面环境允许用户设置屏幕保护程序的优先级。这个想法是用户可以设置较低的优先级,但实际上,他们会提高优先级,直到他们跳动的 OpenGL 球不再抖动为止。

用户认为玩弄他们的屏幕保护程序是他们基本的计算机权利之一,因此,仅仅阻止除 “空白屏幕” 模式之外的所有内容可能会导致人们带着干草叉和火把出现在您的办公室。解决此问题的一种方法是在屏幕保护程序周围放置一个 *包装器*,以确保优先级设置为低。例如,如果您的设置使用xlock命令作为屏幕保护程序,您可以将其移动到xlock.real然后创建一个名为xlock:

        #!/bin/bash
        nice -19 xlock.real "$@"

这是一个非常粗糙的脚本,但您明白了其中的要点。这使您的用户可以保留他们心爱的屏幕保护程序,但确保性能影响不会对整个系统造成致命打击。


7.3. 空闲终端

用户的另一个令人讨厌的习惯是在他们仍然登录的情况下离开他们的终端。KDE 和 Gnome 在他们的 “注销” 按钮旁边都有一个 “锁定屏幕” 按钮,但是您可能会遇到让您的用户使用它的问题,至少在第一个人发现有人在他的电子邮件帐户上玩得很开心之前是这样。

解决此问题的一种方法是让系统使用空闲守护程序关闭废弃的终端,该守护程序应包含在您的发行版中。谨慎使用:如果您在用户屏幕上仍然有一些半写完的信件时强制用户退出系统,他不会喜欢的。程序xautolock可以设置为在 X 会话空闲配置的时间量后调用屏幕保护程序或其他程序。


8. 走向硬核:非 GUI 系统

尽管 KDE 和 Gnome 很好,但它们像爆米花一样使用系统资源。如果您只是启动一个应用程序,请尝试一个更轻量级的桌面环境,例如Blackbox。尽管您的发行版应该为您设置基本内容,但您可能必须编辑配置文件(在本例中,是Blackbox菜单文件,该文件在以下位置指定~/.blackbox)对于每个用户。另外,请确保您的用户知道如何使用该环境。至少,教他们CTRL-ALT-BACKSPACE可以杀死 X 服务器。

但是真正的男人和女人根本不需要图形用户界面 (GUI):他们使用命令 shell,例如bash。在 X Windows 为我们提供图形界面之前,自由软件基金会 (FSF) 创建了 GNU 工具,这些工具像地球上任何软件一样稳定可靠。它们是每个发行版的核心,没有它们,就不会有 “Linux” 系统(这就是为什么 “GNU/Linux” 是更精确的术语)。如果您别无选择,只能使用非常弱的硬件(我们指的是 386SX 或更低),您可以完全放弃 X Windows,并且一切正常。即使您坚持使用 GUI,一些 shell 的基本知识也可以帮助您从系统中获得更多。


8.1. 为什么命令行很酷

将命令行上的 Linux 想象成 Willow Rosenberg 处理计算机的方式:虽然 GUI 像吸血鬼猎人 Buffy Summers 一拳打在鼻子上的效果一样壮观,但即使对 shell 稍有了解,您也可以轻松地运用近乎无限力量的细微魔法。电视剧的真正粉丝会意识到这里暗示了一个警告:shell 的力量可能会让人养成习惯,如果不是完全上瘾的话,并且如果您搞砸了事情,您可能会破坏整个系统,而没有恢复的机会。使用bash可以让您尽可能地接近您机器的原始能量,而无需使用 C 编译器,危险也随之增加。

Willow 花了六年时间才成为一个强大到足以毁灭世界的女巫,但您最多应该花几周时间来熟悉命令行。以下是四个段落,可帮助您决定是否要付出努力

命令行环境的强大功能根植于其设计理念:每个工具都旨在只做一项工作,但要出色地完成这项工作。此外,几乎每个工具都可以连接到其他每个工具,只需几个命令即可创建处理链。由于这些工具(几乎)都是通用的,因此您可以使用正确的组合来解决几乎任何问题。使用这些相同的命令,您可以为日常任务编写小程序(shell 脚本)。如果您仔细查看您的发行版包含的程序,您会发现其中很多都在bash。其他脚本语言(如 Python 或 Perl)可能更强大,但命令行始终包含在内,并且开销要小得多。

学习 CLI 的各个工具有点令人生畏。许多命令都有奇怪的名称,甚至不假装是助记符(模式扫描工具awk是以其创建者 Aho、Kernighan 和 Weinberger 的名字命名的),只有在历史背景下才有意义(*磁带归档实用程序*tar现在用于分发压缩文件),或者看起来像是错别字(umount而不是 “unmount”,passwd而不是 “password”)。每个命令可能有数十个选项,它们可能同样难以理解。由于该系统是由真正的黑客编写的,他们希望计算机完成工作而不是谈论它,因此 shell 通常不会要求您确认,即使您告诉它删除硬盘驱动器上的每个文件也是如此。这就是 *Buffy* 中世界末日场景出现的地方。

但是,一旦您 *掌握* 了 shell 的基础知识,您将更快地完成工作,您将理解诸如rm -rf /bin/laden,并且您会迈着轻快的步伐,眼中闪烁着光芒。这就是为什么即使是那些年轻到在鼠标发明之后才出生的人也养成了仅仅将 X Windows 用作打开大量终端窗口的舒适方式的习惯(无论是xterm还是资源消耗较少的rxvt).

CLI 几乎拥有您需要的所有工具muttpine用于电子邮件(真正的硬核人士使用mail) w3mlynx用于上网冲浪,当然还有传奇编辑器vi(更常见的vim现在是这样)或emacs。此规则的明显例外是允许您查看图片的程序。但是您可能无论如何对这类事情都不感兴趣,是吗。


8.2. 设置文本终端

基本上,您为文本终端提供的选项与为 X 终端提供的选项相同。一切都只是稍微容易一些。

例如,如果您被迫使用不同的操作系统,则不必重新启动:任何允许您通过以下方式登录的程序telnet(在安全、封闭的网络上)或ssh(在其他任何地方)都可以。Microsoft Windows 包含一个telnet客户端,最好将其描述为简陋的;对于严肃的工作,请尝试免费的 Win32 实现,例如 Simon Tathamt 的 PuTTY http://www.chiark.greenend.org.uk/sgtatham/putty/。使用 Mac OS X 的 Apple 用户应该不会遇到客户端问题。

Linux 终端服务器项目也有一个用于文本终端的软件包。硬件可以尽可能基本:去找一台 386DX(对于那些不记得苏联或第一个星际迷航系列:这是原始奔腾的祖父级别处理器)。主板可能没有 PCI 插槽,所以你需要 ISA 显卡和 ISA 网卡。这些硬件非常老旧,你可能很难找到它们,因为它们正在被当作废品处理,而不是二手出售。

然而,没有任何理由要求你的计算机必须足够先进到理解 TCP/IP 协议并成为你本地网络的一部分。你可以将几乎任何计算机连接到模拟大型机的串行端口:例如,Robert Kiesling 编写了一份关于旧款 Mac 的 Linux HOWTO(《MacTerminal MINI-HOWTO》);在《Linux Gazette》http://www.linuxgazette.com/issue70/arndt.html 的一篇文章中,Matthias Arndt 展示了如何将 Atari ST 转换为终端;Nicholas Petreley 在 IT World.com http://www.itworld.com/Comp/2384/LWD010511penguin2/ 中解释了如何使用你的 Palm Pilot。如果你能将它连接到串行端口,那么你很有可能可以在 Linux 上运行它。对于更大的设置,有带多个串行端口的专用卡。当然,也有关于这方面的 HOWTO:《Serial HOWTO》,作者是 David S.Lawyer。

你也可以获得作为独立机器的专用文本终端。David S. Lawyer 撰写了一份关于该主题的详尽 Linux HOWTO(《Text-Terminal-HOWTO》),其中解释了它们的工作原理、如何设置它们以及你为什么要使用它们。


8.3. 有用的 Shell 命令

为了帮助你开始使用 shell,这里有一些命令,如果你正在共享系统,这些命令特别有用。这些非常基础的例子被选择出来,以便对普通用户有用。

友好使用。这个nice命令是那些如果每个人都更频繁地使用它,世界会变得更美好的东西之一,但实际上没有人这样做。它允许你降低进程的调度优先级,以便不太重要的程序不会妨碍重要的程序。

例如,假设你有一个在淋浴时唱歌的自己声音的 WAV 录音,你想将其转换为 Ogg Vorbis 格式,以便在互联网上分发给你的粉丝,总共三个。一个简单的命令是

         oggenc -o showersong.ogg showersong.wav

编码音乐格式是一个 CPU 密集型过程,因此性能会下降。现在,如果几分钟的快慢并不重要,只需在行首添加nice:

         nice oggenc -o shower.ogg shower.wav

现在编码将以较低的优先级运行,但你仍然必须等待它完成才能再次使用 shell。要让计算机在后台执行命令,请在行尾添加一个和号 ("&")

         nice oggenc -o shower.ogg shower.wav &

shell 将通过给你一个作业号和一个进程 ID (PID) 来响应,然后会要求你输入下一个命令。

这个nice命令是图形界面成为默认界面后,功能被削弱的一个很好的例子:使用鼠标驱动的界面,没有简单的方法来调整进程的优先级。

稍后执行。 另一种分散负载的方法是让密集型进程在系统不被大量使用时启动。取决于谁与你共享系统,这可能是凌晨三点或下午两点之前的任何时间。

这个at命令允许你设置启动程序或任何其他可以从命令行运行的进程的时间。要让我们的淋浴歌曲在晚上八点,当你在外面观看有意义的法国爱情电影时进行编码,你输入命令 "at",后跟你想开始执行的时间,然后按下ENTER。然后你输入命令本身,后跟另一个ENTERCTRL-d来完成序列。

         me@mycomputer:> at 20:00
         warning: commands will be executed using /bin/sh
         > nice oggenc -o shower.ogg shower.wav
         > <CTRL-d>
         job 1 at 2003-09-28 20:00

这个at命令接受几乎任何时间格式:美国人可以使用他们古怪的 "08:00pm" 表示法而不是 "20:00",并且还有一系列快捷方式,例如midnight, noon甚至teatime. at将命令的输出发送到你的邮箱。

在你无聊时执行。 和它密切相关的at使用系统负载,而不是一天中的时间来决定何时应该运行命令batch将执行保存到系统负载降至某个值以下的时间(要查看你当前的系统负载,请运行uptime从 shell 或xload在 X Windows 下)。文档给出的这个值为 0.8。 的语法batch与 的基本相同at,除了时间字段是可选的。


9. 杂项

9.1. 模拟大型机案例研究

Two People Home Setup

Mainframe: Dual Intel Pentium II Xeon 450 MHz 512 KByte cache CPU, 384 MByte
           PC-100 RAM, PCI graphics card.
Terminal:  AMD K6-2 300 MHz, 64 MByte SDRAM.
Guardian:  PentiumPro 200 MHz, 64 MByte RAM.
Other:     AMD Duron 1.0 GHz, 512 MByte DDR RAM (for games).

Guardian 和 Terminals 位于两个不同的网络上。常规负载:两个人在 SuSE 8.2 下使用带有 kmail、konqueror 和/或 Mozilla Firebird 的 KDE 3.1。


9.2. 最后

本文献给我的叔叔 Gary W. Marklund,是他让我对 Unix 产生了兴趣。