捐赠?

Harley Hahn
个人主页

给 Harley
发送留言


来自 Harley Hahn 的
个人寄语

Unix 之书
主页

搜索

章节列表

目录

插图列表

各章...
   1   2   3
   4   5   6
   7   8   9
  10  11  12
  13  14  15
  16  17  18
  19  20  21
  22  23  24
  25  26

术语表

各附录...
  A  B  C
  D  E  F
  G  H

命令
摘要...

• 按字母顺序
• 按类别

Unix-Linux
年表

互联网
资源

错误与
勘误

推荐语


教师
与学生
资料...

主页
与概述

练习
与答案

Unix 模范
课程与
课程大纲

教师用
PowerPoint 文件

第 3 章...

Unix 连接 (The Unix Connection)

能够连接不同类型的计算机,一直是 Unix 不可或缺的一部分。事实上,Unix 之所以具备这种能力,正是世界上存在如此 众多计算机网络的主要原因之一。 (例如,互联网一直以来都 依赖于 Unix 连接。)

在本章中,我们将讨论那些让连接 其他计算机成为可能的基本概念:在互联网上 以及在局域网上连接。在此过程中,你会了解到 这些概念如何构成了所有 Unix 连接中最 根本的一种的基础:也就是你与 你的计算机之间的连接。

跳至页首

人、机器与外星人
(Humans, Machines and Aliens)

我想先谈一个很少被明确讨论的 观点。然而,这个观点如此重要, 以至于如果你不理解它, Unix 的很多内容就会显得 神秘而令人困惑。这个观点关乎 人类,以及我们如何使用机器。

想想你生活中最常见的机器: 电话、汽车、电视、收音机等等。 因为你和机器是两个独立的实体, 所以当你使用机器时,必然要有 一种方式让你与它交互。我们把 这种设施称为接口(INTERFACE)。

举个例子,想想一部手机。它的 接口由一组按键、一个扬声器或耳机、 一块小视频屏幕,以及一个麦克风组成。 再想想一辆汽车:它的接口由一把钥匙、 方向盘、油门踏板、刹车踏板、各种 表盘和显示器,以及一大堆的操纵杆、 旋钮和按钮组成。

要点在于:任何由人使用的机器, 都可以被看作有两个组成部分: 接口,以及其他一切。

例如,对于一台台式计算机(我们 待会儿再谈笔记本电脑),它的接口由 显示器、键盘、鼠标、扬声器,以及 (可能的)麦克风组成。"其他一切" 则指机箱里的东西:硬盘、光驱、 处理器、内存、显卡、网卡,等等。

用 Unix 的术语来说,我们把接口称为 终端(TERMINAL)(我稍后会解释原因), 把其他一切称为主机(HOST)。理解 这些概念至关重要,所以我要详细地 谈谈它们。

由于终端提供接口,它有两个主要 职责:接受输入和产生输出。对于一台 台式计算机,输入设施由键盘、鼠标和 麦克风组成。输出设施由显示器和 扬声器组成。

为了把握这些思想,我们可以用下面 两个简单的等式来描述任何计算机系统:

计算机 = 终端 + 主机

终端 = 输入设施 + 输出设施

你有没有想过,作为一个人,你同样 也是由一个终端和一个主机组成的? 换句话说,同样这两个等式也描述了 你、我,以及每一个人。

你的"终端"(也就是你与外部世界 之间的接口)提供了你的输入设施和 你的输出设施。你的输入设施由你的 感觉器官(眼睛、耳朵、嘴巴、鼻子和 皮肤)组成。你的输出设施由你身体中 能发出声音的部分(你的嘴巴),以及 能在环境中制造变化的部分(你的手和 手臂、你的腿,以及面部的表情肌)组成。

你的"主机"是什么?就是其他一切: 你的大脑、你的器官、你的肌肉和骨骼、 你的血液、你的激素,等等。

把你的"主机"与你的"终端"分开, 看上去也许有些刻意,甚至有些荒唐, 因为你是单个、自成一体的单元。 但想想一台笔记本电脑。尽管所有部件 都是内置的,我们仍然可以谈论它的终端 (屏幕、键盘、触摸板、扬声器和麦克风) 和主机(其他一切)。

想象有两个来自另一个星球的外星人, 正在看着你使用一台笔记本电脑。一个 外星人转头对另一个说:"看,有个人 正在用他的接口,来和一台计算机的 接口进行交互。"

对外星人来说,你的接口是内置的并 不要紧,因为笔记本电脑的接口也是 内置的。这些外星人来自另一个星球, 他们看到了你我平常看不到的东西:当你 使用计算机时,是你的接口在与计算机的 接口通信。事实上,这是你使用计算机 (或任何其他机器)的唯一方式。

然而,如果外星人恰好来自一个 Unix 星球,又会怎样呢?第一个外星人 说完他的评论后,第二个外星人会回答: "我明白你的意思。你不觉得很有意思 吗?这个人类的终端正在和计算机的 终端交互呢。"

跳至页首

从前,计算机
贵得离谱(In the Olden Days, Computers Were Expensive)

在第 1 章,我提到过,最初的 Unix 版本是由 Ken Thompson 于 1969 年开发出来的,他是新泽西贝尔实验室的 一位研究员。(当时,贝尔实验室是 AT&T 的一部分。)Thompson 此前 一直在做一个庞大而复杂、名为 Multics 的项目,该项目以 MIT 为中心。当 贝尔实验室决定终止对 Multics 的支持后, Thompson 便全职回到了新泽西,在那里 他和几位同事决心创建属于自己的、 小型的操作系统。具体而言,Thompson 有一个名为 Space Travel 的游戏, 是他在 Multics 上开发的,他希望能 在自己的系统上运行这个程序。

那时候,还没有个人计算机。 大多数计算机都是庞大、昂贵且脾气 古怪的机器,需要专门的一整套程序员和 管理人员来伺候。(我们现在把这样的 机器称为大型机(MAINFRAME COMPUTERS)。)

大型计算机需要它们专用的房间,人们 别出心裁地称之为"玻璃房子"。 玻璃房子有三个理由。第一,这些机器 多少有些娇贵,需要待在一个温度和 湿度都可控的环境里。第二,计算机 非常昂贵,常常要花费数百万 美元。这样的机器价值太高,不可能让 随便什么人在机房里进进出出。玻璃房子 可以锁起来,除了计算机操作员, 不对外人开放。

最后,计算机不仅复杂,而且相对 稀少。把如此重要的机器放进玻璃房子里, 可以让公司(或大学)炫耀它们的 计算机,尤其是向来访者炫耀。我年轻时 当大学生时有一段记忆:站在一间巨大的 机房前——那是滑铁卢大学的机房—— 隔着玻璃,满怀敬畏地凝望,被那一大堆 神秘的箱子震慑住了,它们构成了三台 彼此独立的 IBM 大型计算机。

Multics 运行在一台类似的计算机上, 一台 GE-645。和大多数大型机一样, GE-645 买起来贵、租起来贵、运行起来 也贵。在那些年代,计算机用户的预算 是按真金白银计算的,每运行一次程序, 就要为处理时间和磁盘存储付费。例如, Thompson 每在 GE-645 上运行一次 Space Travel,仅处理时间就要花大约 75 美元 (按 2008 年的币值算是 445 美元)。

贝尔实验室把 Thompson 和其他人 调回新泽西之后,这些研究员心里清楚, 他们绝不可能再弄到另一台大型计算机。 于是,他们开始四处寻找更小、 更容易得到的机器。

在那个年代,大多数计算机的价格远远 超过 100,000 美元,要弄一台机器来 做个人研究并不容易。不过在 1969 年,Thompson 在贝尔实验室四处查看时, 发现了一台闲置的 PDP-7。

(PDP-7 由 DEC,即 Digital Equipment Corporation(数字设备公司)制造,是一种 所谓的小型机(MINICOMPUTER)。它比 大型机更小、更便宜,也更容易得到得多。 按 1965 年的美元算,PDP-7 大约值 72,000 美元;而 GE-645 大型机大约值 1,000 万美元。PDP 这个名字是 "Programmed Data Processor" 的缩写。)

这台特别的 PDP-7 原本是为一个后来 失败的项目订制的,于是 Thompson 设法 把它据为己用。他写了许多软件,终于让 Space Travel 跑了起来。然而,PDP-7 实在严重不够用,Thompson 和其他几 个人便四处奔走,想再弄一台计算机。

最终,他们弄到了一台更新的 PDP-11, 于 1970 年夏天交付。PDP-11 的主要 优势在于,它的基本价格只有(居然!) 10,800 美元(按 2008 年的币值算是 64,300 美元)。Thompson 和另外几个人 开始在 PDP-11 上干活,不到几个月, 他们就把 Unix 移植到了这台新计算机 上。(你可以在 Figure 3-1 中看到 Thompson 和他的 Unix 搭档 Dennis Ritchie 埋头苦干的样子。)

Figure 3-1: Ken Thompson、Dennis Ritchie 与 PDP-11

Ken Thompson(坐着)、Dennis Ritchie(站着),以及贝尔实验室的 PDP-11 小型机。Thompson 和 Ritchie 正用两台 Teletype ASR33 终端,把 Unix 移植到 PDP-11 上。

我为什么要告诉你这些?因为我想让你 体会到:在 60 年代末和 70 年代初, 计算机价格昂贵,而且很难使用。 (PDP-11 又贵又不够用。PDP-7 非常贵 又不够用。而 GE-645 则极其、极其贵, 又不够用。)结果就是,人们有着巨大的 需求,要让计算不仅更简单,而且更便宜。

最大的瓶颈之一在于,用当时的软件, PDP-11 一次只能运行一个程序。这当然 意味着,一次只能有一个人使用这台机器。

解决办法是改造 Unix,让它一次能运行 不止一个程序。这并不容易,但到 1973 年,目标已经达成,Unix 成了一个名副其实 的多任务系统。(多任务的老名字叫 多道程序设计(MULTIPROGRAMMING)。)

从那一步出发,增强 Unix 以同时支持 不止一个用户,把它变成真正的 多用户系统,也只是咫尺之遥。(它的 老名字叫分时系统(TIME-SHARING SYSTEM)。)事实上,1974 年,当 Thompson 和 Ritchie 发表第一篇描述 Unix 的论文时(见第 2 章),他们把它 称作 "The UNIX Time-Sharing System"。

然而,为了做出这样的改变,Unix 的开发者们不得不正视一个非常重要的 概念,也就是本章前面你我讨论过的 那个概念:只有当机器具备合适的接口时, 人类才能使用它。而且,如果要让不止 一个人同时使用一台计算机,那么每个人 都需要一个各自独立的接口。

这完全在情理之中。例如,如果两个人 想同时输入命令,计算机就必须连接两个 不同的键盘。然而,在 Unix 的早期, 计算机设备昂贵且很难弄到。Thompson 和 Ritchie 要到哪里去弄运行一个真正 多用户系统所需要的设备呢?

这个问题的答案被证明至关重要,因为 它影响了 Unix 的基本设计——不仅对 最早的 Unix 系统如此,对曾经存在过的 每一个 Unix 系统都是如此(包括 System V、 BSD、Linux、FreeBSD 和 OS X)。

跳至页首

主机与终端
(Hosts and Terminals)

那是 70 年代初,Ken Thompson 和 Dennis Ritchie 遇到了一个难题。 他们想把 Unix 变成一个真正的多任务、 多用户操作系统。然而,这意味着每个用户 都需要他自己的接口。如今,高质量的彩色 显示器、键盘和鼠标都很便宜。但在那个 年代,一切都很昂贵。那时候 根本没有独立键盘这种东西;也没有鼠标; 而且给每个用户配一台独立的计算机显示器, 其费用高得令人却步。

作为解决办法,Thompson 和 Ritchie 决定使用一种既便宜又买得到的机器, 尽管它最初是为完全不同的用途设计的。 这台机器就是 Teletype ASR33(ASR 代表 Automatic Send-Receive)。

电传打字机最初是为了在电报线路上 收发消息而开发的。因此,这些机器被称为 电传打字机(teletypewriters) ("Teletype" 是一个品牌名)。

最初的实验性电传打字机发明于 1900 年代初期。在整个二十世纪上半叶,电传 打字机技术变得越来越精密,以至于 Teletype 机器在世界各地得到使用。 AT&T(贝尔实验室的母公司)深度参与 了这类服务。1930 年,AT&T 收购了 Teletype 公司;而事实上,AT&T 这个 名字就代表 American Telephone and Telegraph Company。

于是,事情就这样发生了:在 70 年代初, Thompson 和 Ritchie 能够用 Teletype 机器作为他们新的 PDP-11 Unix 系统的 接口。你可以在上面的 Figure 3-1 中看到 这些真实的机器,在 Figures 3-2 和 3-3 中看到它们的特写。

Figure 3-2: Teletype ASR33

一台 Teletype ASR33,与 Ken Thompson 和 Dennis Ritchie 在 最早的 Unix 系统上所用的类似。

Figure 3-3: Teletype ASR33 的特写

Teletype ASR33 的特写。注意那些 又高又圆的柱状按键。一个按键要 按下大约半英寸才能产生一个字符。 左边你可以看到纸带穿孔机/阅读器。 纸带宽 1 英寸。

作为接口,Teletype 所拥有的不过是一个 用于输入的键盘,和一卷用于打印输出的 宽纸卷。为了存储程序和数据,它有一台 纸带穿孔机,能在一条又长又窄的纸带上 打孔;还有一台纸带阅读器,能读出这些孔 并把它们还原成数据。

与今天的设备相比,Teletype 十分原始。 除了电源,一切都是机械的,而非电子的。 没有视频屏幕,没有鼠标,也没有声音。 而且,键盘用起来既不舒服又困难:你得把 一个按键按下大约半英寸,才能产生一个 字符。(想象一下打字是什么滋味。)

让 Teletype 如此宝贵的,是它既经济, 又买得到。

关键的地方就在这里。Thompson 和 Ritchie 想创建一个真正的多用户系统。 计算机设备很昂贵。他们手里仅有的,是 一些用作接口的 Teletype,和一台负责 处理的 PDP-11 小型机。

正如我上面提到的那些外星人一样, Thompson 和 Ritchie 意识到,他们可以在 概念上把接口从系统的其余部分分离出来, 而这就是他们设计 Unix 的方式。

会有单个处理单元,他们称之为主机 (host),以及多个接口单元,他们称之为 终端(terminals)。起初,主机是 PDP-11, 终端是 Teletype。然而,那只是图个方便。 原则上,Unix 可以与任何主机、任何类型的 终端一起工作。(这需要花些功夫,但不会 太多。)

这个设计决策被证明富有远见。从一开始, Unix 在用户与计算机之间建立的连接,所 依赖的就是一条特定的设计原则,而不是 特定的硬件。这意味着,年复一年,无论出现 什么新设备,Unix 的基本组织方式都永远 不必改变。

随着终端变得越来越精密,旧的终端可以被 扔掉,换上一个新的取而代之。随着计算机 变得越复杂、越强大,Unix 可以被移植到 一台新主机上,一切都会照常工作。

把这和微软的 Windows 比较一下。因为 Windows 是专门为单用户个人计算机创造的, 微软从未把终端和主机彻底分离。结果就是, Windows 既不优雅、又不灵活,而且被永久地 绑死在个人计算机的架构上。Unix 优雅、 灵活,可以被做成与任何计算机架构 一起工作。这么多年过去了,Unix 的终端/ 主机范式依然运行得奇妙无比。

跳至页首

终端室与终端服务器
(Terminal Rooms and Terminal Servers)

正如我解释的,Unix 被设计成一个多用户 系统。这意味着不止一个人可以同时使用一台 计算机,只要 [1] 每个人都有他自己的终端, 并且 (2) 那个终端连接到了某台主机。

那么,想象一个满是终端的房间。它们不是 计算机。事实上,它们充其量就是一个键盘、 一台显示器和一些基本电路。每个终端的后面 都有一根线缆,蜿蜒着垂进地板上的一个洞里, 从那里再通往一台看不见的宿主计算机。

房间里坐着一些人。其中有些人坐在终端前, 不停地打字,或盯着屏幕思考。这些人同时 使用着同一台宿主计算机。还有一些人在耐心 地排队等候。恰好是繁忙的时段,终端不够 所有人用。

我刚描述的这幅画面,就是 70 年代末 使用 Unix 的情景。那时候,计算机 — 即便是小型机 — 仍然很昂贵,数量也 不够分。不过,终端相对来说是便宜的。

由于 Unix 被设计成支持多个用户,人们 常常能看到挤满终端的终端室(TERMINAL ROOMS),每个终端都连接到某台主机。当 你想用计算机时,你就去终端室,等一个 空闲的终端。一旦找到,你就输入你的用户名 和密码登录。(我们会在第 4 章详细 讨论这个过程。)

Figure 3-4 把这种设置用示意图表现了出来。

Figure 3-4: 终端室里的终端

在 70 年代末,计算机仍然昂贵而终端 不贵的时候,人们常能看到终端室,里面 有多台终端连接到同一台主机。

有些机构,比如大学里的系或公司,买得起 不止一台宿主计算机。这种情况下,让人们 能从任意一台终端使用任意一台主机,才 合情合理。要做到这一点,就需要一台终端 服务器(TERMINAL SERVER),一种充当 交换设备的装置,把任意终端连到任意主机。

要使用终端服务器,你输入一条命令,告诉 它你想用哪台计算机。终端服务器随后就把你 连接到那台主机。接着你输入用户名和密码, 以常规方式登录。

你可以在 Figure 3-5 中看到这样一个系统。 在这幅示意图里,我只画了六台终端和三台 主机。这有点不切实际。在大型机构里,常有 几十台终端散布在整个大楼,连接到终端 服务器上,从而可以访问若干台不同的主机。

Figure 3-5: 连接到终端服务器的终端

在 70 年代末,一些机构买得起不止 一台供用户使用的计算机。通常,机构里 所有的终端都连接到一个终端服务器, 它充当交换设备,让用户能从任意终端 访问任意主机计算机。

跳至页首

控制台
(The Console)

在所有可能连接到某台主机的终端里,有 一台终端是特殊的。它被视为计算机本身的 一部分,用来管理整个系统。这台特殊的 终端被称为控制台(CONSOLE)。

举个例子,我想暂时回到 70 年代末。我们 正在参观大学里的一个系,看到一间锁着的 房间。房间里有一台 PDP-11 小型机,旁边 放着一台终端。这台终端直接连到计算机上。 这就是控制台,一台只由系统管理员使用的 特殊终端。(你可以在上面的 Figure 3-4 中看到控制台。)沿着走廊过去,有一间装着 其他终端的终端室。这些终端是给用户用的, 他们远程访问计算机。

现在,让我们把时间跳回今天。你在用一台 笔记本电脑,上面装了 Linux。尽管 Linux 可以同时支持多个用户,但你却是唯一使用 这台计算机的人。

你有控制台吗?

有的,你有。因为你在用 Unix,你就必须有 一个终端。在这种情况下,你的终端是内置的: 键盘、触摸板、屏幕和扬声器。那同时也是 你的控制台。

通常,控制台由系统管理员用来管理整个系统。 在第一个例子里,当系统管理员想使用 PDP-11 的控制台时,他得走进机房,坐到 那台真正的控制台前。而对你的笔记本电脑 来说,你就是管理员,而且只有一台(内置的) 终端。因此,任何时候你使用你的 Linux 笔记本电脑,不管你实际上是在管理系统、 还是仅仅在干活,你都在使用控制台。

你为什么要了解控制台和一般终端?有三 个理由。第一,Unix 系统一贯区分控制台和 一般终端,当你学习 Unix、遇到对"控制台" 的提及时,我希望你知道它是什么意思。

第二,如果你是系统管理员(当你拥有自己的 Unix 系统时就是如此),有那么一些事情只能 在控制台上做,而不能从远程终端来做。

(举个例子。如果你的系统在启动过程中出了 问题,你只能从控制台修复这个问题。这是 因为,在系统启动完成之前,你无法通过远程 终端访问它。)

最后,Unix 系统不时会需要显示一条非常 严重的错误消息。这类消息会显示在控制台 上,以确保系统管理员能看到它们。

谈了这么多关于控制台以及它们为何重要的 内容之后,我想提出一个问题:有没有没有 控制台的计算机?

当然有。这样的计算机多得是。不过,在我 解释一个系统如何能在没有控制台的情况下 工作之前,我需要花点时间谈谈 Unix 和网络。

跳至页首

Unix 连接
(The Unix Connection)

正如我们讨论过的,Unix 的设计使得终端 (也就是接口)与主机(也就是处理单元) 相互分离。这意味着不止一个人可以同时使用 同一个 Unix 系统,只要每个人都有他自己的 终端。

一旦你理解了这个想法,去问"终端可以离 主机多远"就变得有意义了。答案是:随你 多远,只要终端和主机之间存在一条连接。

当你在一台笔记本电脑上运行 Unix 时,终端 和主机直接相连。当你在一台台式计算机上运行 Unix 时,终端通过线缆连接到主机。(记住, 终端由键盘、显示器、鼠标、扬声器和麦克风 组成。)

那么更远的距离呢?能通过局域网(LAN) 把终端连接到主机吗?可以。

例如,假设你用一台 PC,它连到一个局域网, 这个网上有许多计算机,其中三台是 Unix 主机。你可以把你的 PC 当作终端,去访问这 三台 Unix 主机中的任意一台。(当然,在你 使用任何一台 Unix 主机之前,你必须获得使用 该计算机的授权。)

当你用你的计算机连接到一台远程 Unix 主机时, 你运行一个程序,用你的硬件来模拟(EMULATE, 也就是表现得像)一个终端。然后这个程序通过 网络连接到那台远程主机。

你可以在任何类型的计算机系统上做这件事: 一台 Windows 计算机、一台 Macintosh,或另一台 Unix 计算机。通常,终端程序在它自己的窗口里 运行,你想开多少个独立窗口都可以。

例如,你可能同时开着三个窗口,每个都运行 一个终端程序。每个"终端"都能通过网络连接 到一台不同的 Unix 主机。这种情况下,你同时在 四台计算机上工作:你自己的计算机,以及那三台 Unix 主机。

你可以在 Figure 3-6 中看到它的图示。

Figure 3-6: 局域网上的 Unix/Linux 计算机

局域网上的台计算机,运行着四个 终端程序,每个各占一个窗口。其中三个 "终端"通过网络连接到不同的远程主机。 第四个"终端"在本机运行着一个程序。

在 Figure 3-6 中,PC 与三台 Unix 主机之间的 网络连接是通过线缆的,就像传统网络那样。 然而,任何类型的网络连接都可以。尤其,你 可以用一条无线连接。

举个例子。假设你有三个极客朋友:Manny、 Moe 和 Jack。你们每人都有一台运行 Unix 的 笔记本电脑。你用 Debian Linux;Manny 用 Fedora Core Linux;Moe 用 Gentoo Linux;而 Jack 用 FreeBSD。(Jack 一直都有点怪。)

你们聚到一起开一个 Unix 派对(也就是计算机、 含咖啡因的饮料和垃圾食品),然后决定每个人 都应该能访问其他三台计算机。首先,你们每人 都在自己的计算机上为另外三个人创建用户账户。 (这里我不细说,不过这并不难。)

然后,你们都使用 iwconfig wiconfig 命令来配置你们的计算机, 让它们能通过无线连成一个小网络。

网络建立之后,你们各自在自己的计算机上开 三个终端窗口。在每个窗口里,你连接到另外 三台计算机中的一台。

现在,你们四个人在同一个房间里,每人都在 自己的笔记本电脑上运行一种不同的 Unix,而 每一台也都能访问其他三台计算机。还有比这 更酷的吗?

所以,我们已经谈过直接连到主机的终端(一台 笔记本电脑)、通过线缆连到主机的终端(一台 台式计算机)、通过普通局域网连到主机的终端, 以及通过无线局域网连到主机的终端。我们还能 更进一步吗?

能。用互联网把终端连到主机,我们就能拥有一条 可以抵达世界任何地方的连接。事实上,我经常用 网络从我的 PC 连接到远程 Unix 主机。要做到 这一点,我打开一个终端窗口,连接到那台远程 主机。只要我的网络连接良好,那感觉就好像我在 走廊那头的一台计算机上工作一样。

跳至页首

没有控制台的主机
(Hosts Without Consoles)

我早前提到过,世界上有许多 Unix 宿主计算机 并不连接到终端。这是因为,如果一台计算机能 自行运行、无需人类的直接输入,那就没必要有 终端。这样的计算机被称为无头系统(HEADLESS SYSTEMS)。

在互联网上,有许多 Unix 主机不需要终端也 运行得很好。例如,有数以百万计的无头系统 充当 Web 服务器和邮件服务器,在没有任何 人工干预的情况下默默完成它们的工作。这些 服务器中有很多运行着 Unix,而且它们中的 大多数并不连接到终端。

(Web 服务器(WEB SERVER)响应网页请求, 并发出相应的数据。邮件服务器(MAIL SERVER) 收发电子邮件。)

如果有需要直接控制这样一台宿主计算机 — 比如说,要配置这台机器或解决某个问题 — 系统管理员只需通过网络连接到那台主机。等 系统管理员办完事,他只需与主机断开连接, 让它自行运行。

在互联网上,有两类非常常见的、无需终端就 自动运行的主机。第一类是服务器,比如我上面 提到的 Web 服务器和邮件服务器。我们一会儿 就会谈到它们。

第二类是路由器(ROUTERS):把数据从一个 网络中继到另一个网络的专用计算机。在互联网 上,路由器提供了那种真正构成网络本身的 连接能力。

例如,当你发送一封电子邮件时,数据在通往 目标计算机的途中会经过一系列路由器。这一切 都会自动发生,完全没有任何人工干预。全世界 有数百万台路由器,全天候 24 小时自动工作, 其中许多都是没有控制台的 Unix 主机。

如果出了问题怎么办?这种情况下,系统管理员 只需在自己的 PC 上打开一个终端窗口,连接到 路由器,修好问题,然后断开,不过是转瞬之间 的事。

一些拥有众多 Unix 服务器的大公司采用另一种 做法。它们会把每台宿主计算机的控制台都连接 到一台特殊的终端服务器上。这样,一旦出了问题, 系统管理员就能用那台终端服务器直接登录到有 问题的那台计算机。我有个朋友曾在一家公司 工作,那里有 95 台不同的 Unix 主机连接到 一组终端服务器上,而这些服务器只用于系统管理。

跳至页首

客户端/服务器的关系
(The Client/Server Relationship)

在计算机术语里,提供某种服务的程序称为 服务器(SERVER);使用服务的程序称为客户端 (CLIENT)。

这些词当然取自商业世界。如果你去见一位律师 或会计师,你就是客户,而他们为你服务。

客户端/服务器的关系是一个基本概念,在网络 和操作系统中都会用到。客户端和服务器不仅 在互联网上得到广泛使用,它们也是 Unix 的重要 组成部分(就这一点而言,微软 Windows 也是如此)。 来看下面这个例子。

我相信你一定知道,要访问万维网,你会用一种 叫浏览器(BROWSER)的程序。(最重要的两款浏览器 是 Internet Explorer 和 Firefox。Internet Explorer 用的人更多;Firefox 更好。)

假设你决定看看我的网站 (www.harley.com)。 首先,你把地址输入浏览器的地址栏,然后按下 Enter 键。你的浏览器随后向我的 Web 服务器 发送一条消息。(这里我省略了一些细节。)收到 请求后,Web 服务器通过向你的浏览器回传数据 来作出响应。浏览器随后以网页的形式把数据 显示给你(在这个例子里,就是我的主页)。

我刚才描述的就是一种客户端/服务器的关系。 一个客户端(你的浏览器)代表你去联系一个 服务器。服务器回传数据。客户端随后处理这些 数据。

再举一个例子。有两种使用电子邮件的方式。 你可以用一种基于网页的邮件服务(比如 Hotmail 或 Yahoo Mail),你也可以在计算机上运行一个 程序,代表你收发邮件。我想谈谈第二种服务。

当你在计算机上运行一个邮件程序时,这个程序 收发用的是不同的系统。发邮件,它用 SMTP (Simple Mail Transport Protocol,简单邮件 传输协议)。收邮件,它用 POP(Post Office Protocol,邮局协议)或 IMAP(Internet Message Access Protocol,互联网消息访问 协议)之一。

假设你刚写完一封电子邮件,你的邮件程序准备好 发送了。为此,它暂时变成一个 SMTP 客户端, 连接到一个 SMTP 服务器。你的 SMTP 客户端随后 请 SMTP 服务器接收这条消息,并把它发送出去。

同样,当你查看收件时,你的邮件程序暂时变成 一个 POP(或 IMAP)客户端,连接到你的 POP (或 IMAP)服务器。然后它问服务器有没有来信。 如果有,服务器就把邮件发给你的客户端,由 客户端对这些消息作恰当的处理。

我猜想,即使你收发电子邮件已经好几年了,你 可能从没听说过 SMTP、POP 和 IMAP 客户端与服务 器。同样,你可以用上好几年的万维网,却不知道 你的浏览器其实是一个 Web 客户端。这是因为, 客户端/服务器系统通常运转得太好,以至于客户端 和服务器能把它们的工作完成,而不用拿细节来烦 用户(也就是你)。

一旦你熟悉了 Unix 和互联网,你就会发现到处 都是客户端和服务器。让我再给你举三个这样的 例子。

第一,要连接到一台远程主机,你用一种叫 SSH 的客户端/服务器系统。(这个名字代表"secure shell"。)要使用 SSH,你在终端上运行一个 SSH 客户端,你的 SSH 客户端连接到主机上运行的一 个 SSH 服务器。第二,要在远程计算机之间上传 和下载文件,你用一种叫 FTP(File Transfer Protocol,文件传输协议)的系统。要使用 FTP, 你在计算机上运行一个 FTP 客户端。你的 FTP 客户端连接到一个 FTP 服务器。客户端和服务器 随后协同工作,按照你的意愿传输数据。

当你成为一个有经验的 Unix 或 Linux 用户时, 你会发现自己同时要使用这两种系统。在使用的 过程中,你会逐渐体会到客户端/服务器模型的美 与力量。

最后,你可能听说过 USENET,那是一种世界性的 讨论组系统。(如果你没听说过,去 www.harley.com/usenet 看看。)要访问 Usenet,你运行一个 Usenet 客户端, 叫新闻阅读器(newsreader)。你的新闻阅读器连接到 一个叫新闻服务器(news server)的 Usenet 服务器。 (我马上就解释这些名字。)

这些例子各不相同,但有一点是一样的。在每一种 情况下,都是客户端向服务器请求服务。

严格来说,客户端和服务器是程序,而不是机器。 然而,在非正式的场合,"服务器"这个词有时也指 运行着服务器程序的那台计算机。

例如,假设你在参观一家公司,有人带你看过一间 放着两台计算机的房间。你的向导指着左边的那台 计算机说:"那是我们的 Web 服务器。"然后他指着 另一台计算机说:"那是我们的邮件服务器。"

名称的由来

新闻、新闻组、新闻阅读器、新闻服务器


这个由讨论组构成的世界性系统 Usenet, 是 1979 年由杜克大学的两名研究生 Jim Ellis 和 Tom Truscott 创办的。Ellis 和 Truscott 设想用 Usenet 在北卡罗来纳州的两所大学 (北卡罗来纳大学和杜克大学)之间传送新闻 与公告。

短时间内,Usenet 就传播到了其他学校, 几年之内,它便发展成一个庞大的讨论组系统。

由于它的起源,Usenet 至今仍被称为新闻 (NEWS),尽管它并不是一个新闻服务。同样, 讨论组被称为新闻组(NEWSGROUPS),客户端 被称为新闻阅读器(NEWSREADERS),服务器被 称为新闻服务器(NEWS SERVERS)。

跳至页首

按下按键时会发生什么?
(What Happens When You Press a Key?)

你现在已经明白,Unix 建立在终端和主机的 概念之上。你的终端充当你的接口;主机负责处理。

终端和主机可以是同一台计算机的一部分,比如 当你使用笔记本电脑或台式计算机时。或者,终端 和主机可以彼此完全分离,比如当你通过局域网或 经互联网访问一台 Unix 主机时。

无论如何,终端/主机的关系都深深植根于 Unix 的肌理之中。话虽如此,我想提出一个看似简单的 问题:"当你按下一个键时会发生什么?"答案比 你想象的更复杂,我打赌它会让你吃惊。

假设你在使用一台 Unix 计算机,想知道现在 几点。显示时间和日期的 Unix 命令是 date。 于是,你按下四个键:<d>、<a>、 <t>、<e>,接着按下 <Enter> 键。

你每按下一个字母,它就会出现在屏幕上,所以 人们很自然地以为,是终端在你打字的同时把这些 字母显示出来。其实不然。负责显示你所输入内容的, 是主机,而不是终端。

你每按下一个键,终端就向主机发送一个信号。 由主机作出响应,让恰当的字符显示在你的屏幕上。

例如,当你按下 <d> 键时,终端向主机 发送一个信号,意思是"用户刚发来一个 d 字符"。主机随后回传一个信号,意思是"在终端的 屏幕上显示字母 d"。当这样发生时,我们就说 主机把这个字符回显(ECHOES)到了你的屏幕上。

你用鼠标时也会发生同样的事。移动鼠标或点击 按键,都会向主机发送信号。主机解释这些信号,并 把指令回传给终端。你的终端随后对屏幕作恰当的改动: 移动指针、调整窗口大小、显示菜单,等等。

在大多数情况下,这一切发生得太快,看起来就像 你的键盘和鼠标直接连到了屏幕上。然而,如果你用的 是长距离连接,比如通过互联网,你可能会偶尔注意到, 在你按下键和你看到字符出现在屏幕之间有一个延迟。 当你移动鼠标或按下鼠标键、而屏幕没有立即刷新时, 你也可能看到延迟。我们把这种延迟称为滞后(LAG)。

你可能会问,为什么 Unix 被设计成由主机回显每个 字符?为什么不让主机默默接收它收到的一切,而让 终端来回显呢?那样会更快,从而避免滞后。

答案是:当由主机来回显时,你能看到你输入的东西 正被成功接收,并且你的终端与主机之间的连接完好 无损。如果由终端来回显,而你又遇到了问题,你就 无从知道你与主机的连接是否还在工作。当然,当你 使用一台在物理上与你的终端分开的主机时,这一点 最为重要。

除了可靠性,Unix 的设计者选择让主机来回显,还有 另一个理由。正如我将在第 7 章中讨论的, 有些键(比如 <Backspace> 或 <Delete>), 你可以在打字的同时按下它们来做更正。Unix 被设计成 能与各种各样的终端一起工作,由操作系统本身以统一 的方式处理这些按键,而不指望每一种不同类型的终端 独自胜任这项工作,这才是合情合理的。

— 提示 —

当你使用 Unix 时,你输入的字符是由主机、而不是 由终端回显到你的屏幕上的。大多数时候,滞后小到 你甚至察觉不到。然而,如果你通过一条慢速连接使用 一台遥远的主机,有时候会有一小段延迟,你输入的 字符才会显示到屏幕上。

Unix 允许你预先输入许多字符,所以别担心。只管 继续输入,主机迟早会赶上来。几乎在所有情况下, 无论滞后多久,都不会丢失任何东西。

跳至页首

字符终端与图形终端
(Character Terminals and Graphics Terminals)

广义地说,你能用在 Unix 上的终端有两类。 你如何与 Unix 交互,取决于你用的是哪种终端。

花点时间回头看看 Figures 3-2 和 3-3,那 几张 Teletype ASR33 的照片。正如我们讨论的, 这台机器是最早的 Unix 终端。如果你仔细看, 你会看到唯一的输入设备是一个简陋的键盘,唯一 的输出设备是一卷用来打印字符的纸。

这些年来,随着硬件的发展,Unix 终端变得 更加先进。键盘变得更精密、用起来容易得多, 而那卷纸则被一台带视频屏幕的显示器取代了。

不过,有很长一段时间,Unix 终端的一个基本 特征没有改变:输入和输出的唯一形式是字符 (也叫文本,TEXT)。换句话说,有字母、数字、 标点,以及一些用来控制的特殊键,但没有图像。

只处理文本的终端称为字符终端(CHARACTER TERMINAL)或基于文本的终端(TEXT-BASED TERMINAL)。随着个人计算机技术的发展,一种 新类型的终端变得可用,即图形终端(GRAPHICS TERMINAL)。图形终端有键盘和鼠标用于输入, 在输出方面,它们充分利用了视频硬件。它们不仅 能处理文本;它们几乎能显示任何能用小点画在 屏幕上的东西:图像、几何形状、阴影、线条、 颜色,等等。

显然,图形终端比字符终端更强大。当你使用 字符终端时,你被限制为只能输入字符、阅读字符。 当你使用图形终端时,你可以使用一个成熟完备的 图形用户界面(GUI),带图标、窗口、颜色、图像, 等等。

因此,你可能会以为,图形终端总比字符终端 好。毕竟,图形用户界面难道不总是比纯文本更好 吗?

对于使用微软 Windows 的个人计算机,以及 对于 Macintosh,情况确实如此。从一开始, Windows 和 Macintosh 操作系统就都是为使用图形 用户界面而设计的;事实上,它们依赖于图形用户 界面。

Unix 则不同。

因为 Unix 诞生在字符终端的时代,操作系统 几乎所有的力量和功能都能用纯文本实现。尽管 存在 Unix 的图形用户界面(我们将在第 5 章中 讨论),你的确需要学会如何使用它们,但你要用 Unix 做的很多事情 — 包括我在本书中教给你 的每一样东西 — 只需要纯文本就够了。用 Unix,图形是很好的,但并非必需。

这在实践上意味着什么?当你在自己的计算机上 使用 Unix 时,你将在一个图形用户界面里工作 (使用鼠标、操作窗口,等等)。这意味着你的计算 机将在模拟一个图形终端。

然而,很多时候,你会发现自己在一个充当字符 终端的窗口里工作。在那个窗口里,你输入的只是 文本,看到的也只是文本。换句话说,你在使用一个 字符终端。同样,当你连接到一台远程主机时,你 通常是通过打开一个充当字符终端的窗口来做的。

当你发现自己这样工作时,我想让你花点时间想想 这件事:你在用与最初那些用户在 70 年代使用 Unix 完全相同的方式使用 Unix。有趣的是,三十多年后的 今天,这个系统依然运行良好。大多数时候,文本就是 你所需要的一切。

跳至页首

最常见的终端类型
(The Most Common Types of Terminals)

这些年来,Unix 被发展成能与实实在在的几百种 不同类型的终端一起工作。今天,我们当然不再使用 真正独立的硬件终端:我们用计算机来模拟一个终端。

我已经提过打开一个窗口来模拟字符终端的想法。 在大多数情况下,这种模拟是基于一种很古老的终端的 特性,它叫 VT100,可追溯到 1978 年。(VT100 由 Digital Equipment Corporation 制造,也就是本章开头 我们谈到的那些 PDP-11 计算机的同一家公司。)尽管 真正的 VT100 已经多年无人使用了,但它们设计得如此 精良、如此受欢迎,以至于为字符终端确立了一个永久性 标准。(你可以在下面的 Figure 3-7 中看到一台真正的 VT100。)

图形终端当然有另一套标准。正如你将看到的 (在第 5 章),Unix 的图形用户界面全都基于一个叫 X Window 的系统,而对 X Window 的基本支持由一种 叫 X 终端(X TERMINAL)的图形终端提供。今天, X 终端是图形终端模拟的基础,就像 VT100 是字符 终端模拟的基础一样。

因此,当你连接到一台远程主机时,你有两种选择。 你可以用一个字符终端(最常见的选择),这种情况下 你模拟的将是一台 VT100 或类似的东西。或者,如果你 想用图形用户界面,你可以用一个图形终端,这种情况下 你模拟的将是一台 X 终端。

尽管我现在不讲细节,但我会告诉你要用的两条 命令。要连接到一台远程主机并模拟一个字符终端, 你使用 ssh (secure shell)命令。要模拟一个 X Window 图形终端,你使用 ssh -X 命令。

Figure 3-7: VT100 终端

有史以来最受欢迎的 Unix 终端 VT100, 由 Digital Equipment Corporation 于 1978 年推出。VT100 如此流行,以至于确立 了一个永久性标准。即使在今天,大多数终端 模拟程序仍在使用基于 VT100 的规格。

跳至页首



练习
(Exercises)

复习问题 #1:

哪种类型的机器被用作最早的 Unix 终端?为什么选这台机器?

复习问题 #2:

什么是终端室?它们为什么 是必要的?

复习问题 #3:

什么是无头系统?请举出两个在 互联网上用来提供非常重要服务的 无头系统的例子。

复习问题 #4:

什么是服务器?什么是客户端?

进一步思考 #1:

1969 年,AT&T 贝尔实验室的 Ken Thompson 正在寻找一台计算机,用来 创造最终成为第一个 Unix 系统的东西。他找到 了一台闲置的 PDP-7 小型机,得以使用。 假如 Thompson 没找到 PDP-7,我们今天 还会有 Unix 吗?

进一步思考 #2:

在 70 年代,计算机(即便是小型机) 非常昂贵。由于没有谁拥有自己的计算机, 人们不得不共用。

与今天相比,70 年代的计算机很慢, 内存和存储设备都很有限。如今,每个 程序员都有自己的计算机,配备极快的处理器、 大量内存、大量磁盘空间、精密的工具, 以及高速的互联网接入。

谁更开心,是 70 年代的程序员, 还是今天的程序员?

那么 20 年后的程序员呢?

跳至页首