|
Harley Hahn 的
|
|
各章...
命令
教师 |
第 6 章... Unix 工作环境(The Unix Work Environment)
正如我在第 3 章中所解释的,Unix 是用一种 基于文本的界面发展起来的。后来,随着 更精密的硬件问世,图形界面也被创造 出来。Unix 的界面虽然以硬件为 基础,但设计者在创造它们时考虑的 远不止外观和基本功能。它们的 设计目标,是提供一个复杂的工作 环境,而这样的环境尤其适合人类的 思维方式。 在本章中,我将向你展示如何把基于文本的 界面和图形界面结合起来使用。我的目标是 教会你足够的知识,让你能够以适合自己的 思维方式和性格的方式来组织工作。 在此过程中,我还会讲到其他一些对 掌握 Unix 工作环境很重要的主题,例如 如何复制和粘贴数据、如何以超级用户 身份工作,以及如何关闭和重启你的 系统。 整章内容都建立在第 4 章和第 5 章的 一些概念之上。所以,在你继续往下读 之前,请先确认你已经熟悉下列概念: • 第 4 章:用户标识、密码、登录与注销、 Shell 提示符、大写字母与小写字母、 系统管理员、超级用户。 • 第 5 章:图形用户界面、桌面环境。 当你阅读本章时,你已经学过的许多内容 将会融会贯通,你也会开始以 Unix 被设计出来的那种方式使用它。
在第 3 章中我解释过,Unix 系统是多任务的, 也就是说,它们可以同时运行多个程序。 "多任务"是一个技术术语,不过如今,人们很 流行用这个词来形容那种能让人同时专注于 多件事情的思维活动。例如,我们常听人说: "女性比男性更擅长多任务",或者"我开车 时打电话没关系,因为我擅长多任务"。 事实是,无论是计算机还是人,都不可能对 两项相似的任务真正同时执行。这一认识 对学会使用 Unix 界面有着重要的 含义,所以在继续之前,我想花一点 时间谈谈多任务。我们先从计算机说起。 在计算机系统内部,看起来像是多任务的 东西,实际上是一台速度极快的机器以极快 的速度执行各项任务,快到看起来仿佛 它们是同时发生的。 在 Unix 中,我们不说程序正在执行,而是说 进程(PROCESSES)正在执行。所谓进程,是指 一个装入内存并准备好运行的程序,连同 该程序的数据以及跟踪这个程序所需的全部 信息(*)。 * 脚注 进程的概念对 Unix 而言是根本性的。 事实上,在一个 Unix 系统内部,每一个对象 要么用文件表示,要么用进程表示。 简单地说,文件用来保存数据或提供 对资源的访问;进程则是正在执行的 程序。 进程可以划分为更小的单位,称为 线程(threads)。线程是一组在某个进程 环境内运行的指令。可以把程序设计成 在一个进程内部同时运行多个线程。 在任何时刻,Unix 系统都有许多活动进程, 每个进程都在请求处理器时间以便运行。 (虽然你可能察觉不到,但后台确实有 进程在运行。)然而,一个处理器一次只能 执行一个进程。这就意味着,单处理器的 计算机一次只能满足一个请求。多处理器的 计算机也许能同时处理多个请求,但即便是 这样,也远不足以同时服务所有进程。 为了管理如此众多相互重叠的处理器请求, Unix 采用这样一种机制:让每个进程轮流 使用处理器一段极短的时间,这段时间 称为时间片(TIME SLICE)。一个典型的 时间片是 10 毫秒(即 10 千分之一秒)。 时间片用完之后,当前进程就被挂起,由一个 称为调度器(SCHEDULER)的特殊服务来决定 接下来执行哪个进程。由于时间片极短、 处理器极快,又由于 Unix 的调度器把 整件事处理得如此巧妙,在你我看来, 就好像 Unix 在同时做多件事一样。这样, 多任务的假象就产生了(*)。 * 脚注 在第 26 章中,我们会更详细地讨论进程 以及如何控制进程。眼下我先告诉你:如果 想看看你的系统此刻有多少个活动进程, 可以使用 top 命令。(注意:此命令 并非在所有系统上都可用。) 现在说说人。在某些情况下,我们都能同时 做多件事。例如,吃饭时,我们可以同时 闻、尝和咀嚼。同样,我们可以边走边说, 可以边演奏乐器边唱歌,也可以边看电影 边听声音。然而,我们无法做到的,是同时 思考两件事。 当然,我们可以在不同的思维活动之间来回 切换,如果切换得足够快,看起来就像是 这些活动在同时发生。举个例子,假设你 同时和四个人在发即时消息。只要你能在 合理的时间内回复每个人,他们就无从知道 你其实并不是在专门和他们一个人聊天。 这听起来有点像 Unix 做多任务时的做法。 不过,两者之间有重要的区别。第一, 与计算机相比,人类从一项任务切换到 另一项任务的速度非常慢。(下次你发 即时消息时,试试每 10 毫秒切换一次 会话。) 第二,人类的心智比计算机复杂得 多(*),人们所执行的任务类型,也比 计算机所做的要复杂得多。 * 脚注 已知宇宙中最复杂的物质,就是人脑。 第三,Unix 从一个进程切换到另一个进程时, 只需要跟踪很少的信息;而你从一项任务 转向另一项任务时,需要以复杂得多的方式 重新调整自己的状态。想想看,当你从使用 浏览器,到查看电子邮件,到接听电话,再 回到浏览器,然后去吃一个果冻甜甜圈, 你的头脑中必定在发生些什么。尽管你 意识不到自己的思维过程,但它们比 Unix 在多个进程之间周旋时所做的事情要复杂 得多。(而且,即使是最新版本的 Linux 也不知道该怎么对付一个果冻甜甜圈。) 不过,计算机和人之间最大的区别在于, 我们有自由意志。时刻刻,我们都可以 想自己所想。这就意味着,在使用计算机的 过程中,我们会针对"怎样完成要做的事" 形成一时的策略,而操作系统必须支持 这样的策略。由于无法预先知道一个人在 特定情形下究竟会怎么想,操作系统在提供 工作环境方面就必须足够灵活。 在合理的范围之内,每个计算机用户都应该 能够按照自己的需要来构建他的工作环境。 而且,随着他的思维活动不断变化,他应该 能够随时——一个念头到下一个念头—— 改变那个环境。更重要的是,随着用户 经验的增长,应该有更高深的工具供他使用。 例如,初学者(或者反应慢的人)通常一次 只用计算机做一件事。他会把一个窗口 放大到占满整个屏幕,而且几乎只用 鼠标(而不是键盘)来控制正在发生的 事情。结果就是,除了最简单的任务之外, 他什么也做不了。 有经验的人(尤其聪明而有创造力的人)会 使用多个窗口,会尽可能使用键盘,并且把 自己时时刻刻的工作组织得既快又高效。 如果你曾经看过一个把计算机用到出神入化 的人是怎么干活的,你就明白我的意思了。 人们在设计用户界面时,必须考虑到:就思考 而言,人类有重要的局限。例如,我们很难 记住一个瞬间到下一个瞬间所发生的大多数 事情(*),而且——尽管世俗的看法并不 这么认为——我们根本无法同时专注于 两件事。 * 脚注 你能闭上眼睛,记住十秒钟前读过的内容吗? 我们能做到的,是在情况发生变化时,于 一瞬间重新调整自己。这就是为什么母亲可以 一边照看学步的幼儿,一边抱着婴儿,一边 打电话,一边做晚饭,而且同时进行。(这也 是为什么人们以为自己可以一边打电话 一边安全地开车。) 我们有限的记忆力以及我们重新调整自己的 能力意味着:一个好的用户界面必须允许我们 想周旋多少任务就周旋多少任务,并且要做得 让我们感到自在——一旦我们熟悉了这个界面。 此外,用户界面还应当能够支持我们的成长。 也就是说,无论我们变得多么熟练,我们的 界面都应当仍然能够满足我们的要求。 我要提出的观点是:Unix 自带的基于文本的界面 和图形界面设计得非常好,也非常灵活, 只要把它们组合运用得好,它们就能满足 上述所有要求,甚至更多。因此,在你阅读 本章时,我希望你记住两个重要的观念。 第一,我希望你理解:你即将读到的内容, 远不止是对"事情如何运作"的一种 描述。我要介绍给你的这套系统是在不断 的试错中演化而来的,由有史以来最聪明的 一些人设计而成。这套系统的目标,是克服 计算机和使用者双方的局限,其方式要能 让人觉得自己和计算机都真的在同时 做多件事。 第二,我希望你花一些时间练习并掌握本章 中你会遇到的各种界面。Unix 真正的威力, 来自你能够把基于文本的界面与图形界面 结合起来。 我认为,总体而言,Unix 拥有有史以来最好的 用户界面体系(包括 Microsoft Windows 和 Macintosh 在内)。等你读完本章,我希望你 会同意我的看法。
我不时提到过两种不同的 Unix 界面:基于文本的 和图形化的。现在到了给它们正式命名的时候了。 图形界面当然就是我们在第 3 章中详细讨论过的 GUI(graphical user interface,图形用户界面)。 Unix 的 GUI 由 X Window、一个窗口管理器和 一个桌面环境组合而成。 基于文本的界面称为命令行界面 (COMMAND LINE INTERFACE,CLI)。原因如下。 你在第 4 章已经知道,Unix 基本的基于文本的 界面很简单。Shell(命令处理器)显示一个 提示符。你输入一条命令。Shell 执行必要的 动作来完成这条命令。命令处理完毕后,Shell 再显示一个新的提示符,你再输入另一条命令, 如此往复。 整个过程只使用文本(普通字符),而你输入 命令的那一行称为命令行(COMMAND LINE)。 于是就有了"命令行界面"这个名字。 我希望你记住 CLI 这个术语,因为它是 GUI 的 对应词,且你在阅读中会经常见到它,尤其在 互联网上。不过,人们说话时并不说 CLI, 而是说"命令行"。例如,你可能会在某个网站上 读到这样的话:"虽然 Groatcake 软件包是为 GUI 设计的,但它也有一个 CLI 版本。" 然而,当人们当面谈论界面时,你更可能听到的 是:"我一开始用的是 Groatcake 软件包的 GUI 版本,但现在我更喜欢用命令行版本。"更常见 的说法则是:"我更喜欢在命令行下使用 Groatcake 软件包。" 换句话说,当你读到或听到"命令行",或者读到 "CLI"时,它告诉你的是:有人在敲一条命令, 而不是从菜单中选择一项。 GUI 程序很重要。例如,几乎所有人都在用 GUI 程序浏览万维网、处理办公事务,所以我预计你 也会花大量时间使用你的 GUI。 但是,Unix 的大部分威力在于命令行,因为它 提供了一种快捷简单的方式来使用数百个不同的 Unix 命令。事实上,离开本章之后,本书余下的 部分我们都将专注于使用命令行程序。 提示 作为一名 Unix 用户,你需要的基本功,是能够 通过在命令行中一条接一条地输入命令来解决问题。
在第 4 章中,我们讨论了在使用传统 Unix 基于文本的系统时登录会发生什么。你会看到 提示符 login:,于是输入你的用户标识。 接着你看到提示符 Password:,于是输入 你的密码。系统完成登录过程,启动你的 Shell,把你留在 Shell 提示符处。工作结束后, 你注销。 用 GUI 时,情况就更复杂些。我来解释一下 Linux 上会发生什么。如果你用的是另一种 Unix,情况可能略有不同,但你应该能自己 摸索出来。 打开计算机之后,Linux 会启动。当系统准备好 让你登录时,你会看到一个登录屏幕。具体外观 因你所用的 Linux 发行版而异。不过,大多数 发行版显示的基本要素是一样的。 首先你会看到一个标着 "Username:" 的小框。 这个框对应于 login: 提示符,它请 你输入你的用户标识。 在你输入用户标识之前,先花点时间看看四周。 你会看到另外几个选项:Language(语言)、 Session(会话)、Reboot(重启)和 Shutdown (关机)。要选择某个选项,你既可以用鼠标 点击它,也可以按下所谓的加速键 (ACCELERATOR KEY)。 要弄清某个选项的加速键是什么,仔细看看那个 词,其中会有一个字母带下划线。按住 <Alt> 键再按下那个字母,就可以选择 该项。例如,假设 "Session" 这个词中的字母 "S" 带下划线,那么 Session 的加速键就是 <Alt-S>。 提示 加速键是 GUI 的标准特性,你会在许多菜单和 对话框中看到它们。例如,在大多数基于 GUI 的 程序里,你可以按 <Alt-F> 显示 File (文件)菜单,按 <Alt-E> 显示 Edit(编辑) 菜单,按 <Alt-H> 显示 Help(帮助)菜单, 以此类推。 一定要花时间找找加速键,它们能让你的工作 更轻松。你会发现,想要做出选择时,按一个 简单的组合键,要比把手从键盘上挪开去移动 鼠标再点按钮容易得多。 回到登录屏幕,这四个选项的用法如下: • Language(语言):改变 Linux 在本次 工作会话中所使用的语言。 • Session(会话):选择你想要的工作 会话类型。 通常情况下,你不必改变语言或会话类型,因为 默认值就是你所需要的。 • Reboot(重启):重新启动计算机。 • Shutdown(关机):关闭计算机。 一旦你输入了用户标识,系统就会提示你输入 密码。随后 Linux 会继续完成登录过程,并启动 你的桌面环境。 工作结束时,你从主菜单中选择 "Logout" (注销)项来注销。接着系统会请你确认是否真的 要结束本次工作会话。(取决于你所用的桌面 环境,你可能还会得到关机或重启计算机的 选择。) 一旦你确认要注销,Linux 就会终止你的桌面 环境,并把你带回登录屏幕。这时,你可以再次 登录,也可以选择 Reboot(重启)或 Shutdown (关机)。
现在你已经知道,Unix 既可以作为基于 GUI 的 系统启动,也可以作为 CLI 系统启动。在我们继续 讨论界面之前,我想花几分钟向你解释 Unix 为什么 能提供这样的灵活性。这些概念不仅有趣,还会让你 看到:正是那种思维方式和组织方式,使 Unix 成为 一个如此出色的操作系统。 当一台计算机系统、一个程序或一个设备可以处于 若干状态中的某一种时,我们用"模式"(MODE) 一词来指代其中某个特定状态。例如,我们可以说, 你既可以在文本模式(使用 CLI)下使用 Unix, 也可以在图形模式(使用 GUI)下使用 Unix。 "模式"这个概念对于计算而言太过基本,以至于 计算机从业者常常把它当作一个俏皮的词,用来指 心境上的状态。比如,一个程序员可能对另一个说: "抱歉昨天没去看你。我那时处于'打扫模式', 整个下午都在家里用吸尘器扫地。" 我之所以提到这个概念,是因为 Unix 在设计时 就考虑了启动时的灵活性。做法是让 Unix 能够 运行在若干不同模式中的某一种之下。这些模式 称为运行级别(RUNTIME LEVELS),或者更简单 地称为 RUNLEVELS。 运行级别的严格定义多少有些技术性:运行级别 是一种系统软件配置,它允许某一指定范围的 进程存在。这个定义比较难懂,我们说得随意一些: 运行级别规定了 Unix 将提供哪些基本服务。在 不同的运行级别下,Unix 提供的服务集合 是不同的(*)。 * 脚注 Linux 所使用的运行级别体系最早是在 System V 中引入的。在 BSD 阵营(包括 FreeBSD)中并不使用运行级别,系统要么启动到 单用户模式,要么启动到多用户模式。因此, 本章关于运行级别的讨论适用于 Linux, 而不适用于 FreeBSD。(关于 System V 和 BSD 的信息,请参见第 2 章。) 每次 Unix 系统启动时,都会经历一个复杂的 过程,而在这个过程中会设定运行级别。设定 运行级别就控制了 Unix 将运行于其中的模式。 Figure 6-1 列出了大多数 Linux 发行版所 使用的运行级别。 Figure 6-1: 典型的 Linux 运行级别
多数情况下,Linux 默认会启动到运行级别 3 或运行级别 5。如果你的系统被设置为启动到 运行级别 3,你会看到一个基于文本的登录屏幕, 并按我们在第 4 章讨论过的方式登录和注销。 登录之后,你将使用一个基本的 CLI。 如果你的系统启动到运行级别 5,Linux 会启动 你默认的 GUI。你会用图形登录屏幕登录 (正如本章前面所描述的),并在一个桌面环境 中工作。 大多数人都想使用桌面环境,所以运行级别 5 是 默认值。然而,当系统管理员需要解决服务器 (比如 Web 服务器或邮件服务器)上的问题 时,他通常希望用运行级别 3,因为 CLI 能让他 快捷轻松地做想做的事。(绝大多数系统管理工作 是靠输入命令完成的,而不是靠从菜单中选择。) 正因如此,桌面系统通常被设置为启动到运行级别 5,而服务器则设置为启动到运行级别 3。 运行级别 1 是从过去延续下来的,那时候大多数 Unix 系统由若干用户共享,并由一位系统管理员 来管理。有时管理员必须做一些要求其他人都 不能登录系统的工作。换句话说,有一小段时间, 管理员必须把一个多用户系统变成一个 单用户系统。 为此,管理员会向所有用户发出通知,比如说 系统在 5 分钟之后要停机。这段时间一过,他就 把 Unix 重启到今天的运行级别 1。这样系统就 进入了过去称为系统维护模式(SYSTEM MAINTENANCE MODE)、现在称为单用户模式(SINGLE USER MODE) 的状态。管理员此时可以安心工作,因为他知道 其他人都无法登录。工作完成后,他再重启到 多用户模式(运行级别 3 或 5),用户们就可以 再次登录系统了。 如今,运行级别 1 已经不太常用了。这是 因为现代 Unix 系统非常灵活,管理员在其他用户 仍然登录的情况下就能完成大量工作 甚至 包括升级和维护。(在早年这是做不到的。) 管理员需要把系统启动到运行级别 1 的唯一时机, 是出现非常严重的问题时,例如硬盘损坏。 技术提示 如果你宁愿使用基本的 CLI 而不愿使用 GUI (许多人正是如此),你可以修改系统,让它 默认启动到运行级别 3 而不是运行级别 5。如果 你使用的是公司或学校的计算机,只要请你的 系统管理员(*)替你做这个改动即可。 如果你自己维护自己的计算机,那就得自己动手。 我不打算讲细节,因为它们超出了本书的范围, 但我会告诉你大致的思路。 首先,把 /etc/inittab 文件中 initdefault 的值改为 3,让系统 自动启动到运行级别 3。然后检查 rc3.d 目录中的符号链接,确认在此 运行级别下 GUI 不会被自动启动。 提示:如果你在运行级别 3 下使用 CLI,而你想 启动 GUI,可以使用 startx 命令。 在离开本节之前,留两个问题给你思考。不过我要 提醒你:千万不要真的去做我下面描述的改动, 否则你会后悔的。只要想一想就好。 1. 如果你把 initdefault 的值设为 0(Halt,停机),会发生什么? 2. 如果你把它设为 6(Reboot,重启), 又会发生什么? * 脚注
"真正的系统管理员才懂运行级别。"
由于使用 Microsoft Windows 的人如此之多,把 它和 Unix 作一番比较,并问一问:Windows 有 运行级别吗?会很有启发。(如果你不关心 Windows,可以直接跳过本节。) 这个问题有两个答案。第一,Windows 确实有 看起来像运行级别的启动选项,但其实不是。 第二,Windows 确实有一种能提供运行级别功能的 机制,但它隐藏得太好,几乎没人知道它存在。 先说第一点。Windows 有一个特殊的启动菜单, 你可以在系统初始化时把它显示出来。(对于 Windows XP,在系统启动时按住 <F8>。) 这个菜单称为 Windows 高级启动选项菜单 (Windows Advanced Options Menu),它提供了 若干个不同的选项,你可以在 Figure 6-2 中看到。 Figure 6-2: Windows XP Pro:启动选项
这些选项确实能让 Windows 启动到不同的模式。 然而,与 Unix 的运行级别不同,Windows 的启动 选项不可配置,也提供不了多少灵活性。稍微 说得更技术一点:Windows 的启动模式更像是 Unix 的内核启动选项,而不是运行级别。(如果 这话你听不懂,不用担心。) 不过,Windows 确实有一套机制,其工作方式 可以和运行级别相同,因为你可以决定要运行 哪些系统服务。有可能创建所谓"硬件配置 文件"(hardware profiles)。(在 "My Computer" (我的电脑)上点右键,选择 "Properties"(属性)。 点击 "Hardware"(硬件)标签,然后点击 "Hardware Profiles"(硬件配置文件)按钮。) 硬件配置文件的本意,是让你能用不同的设备 组合启动计算机。例如,对于一台笔记本电脑, 当它插在扩展坞上时和单独使用时,你可能希望 采用不同的硬件配置。 这一点是众所周知的(至少在关心这类事情的 那一类人中如此)。知道得少一些的是:一旦你 创建了某个硬件配置文件,你就可以为该配置文件 选择启用和禁用哪些系统服务。这与 Unix 的 运行级别非常相似。 由于这并不是一本讲 Windows 的书,我不打算 深入细节。不过,如果你有兴趣自己摸索,下面 是在 Windows XP Professional 中的做法。 先创建一个或多个硬件配置文件。然后,在 控制面板(Control Panel)中点击 "Administrative Tools"(管理工具),再点击 "Services"(服务)。 在任意一个服务上点右键,选择 "Properties" (属性),然后点击 "Log On"(登录)标签。 现在,你就可以针对各个硬件配置文件启用或 禁用这个服务了。 你可能想这么做的一个例子是:你为尚未连接 网络的笔记本电脑准备了一个专门的硬件配置 文件。在这种情况下,你会希望禁用所有与 网络相关的服务。
我猜,即使你从未用过 Unix,你也多少有过使用 GUI 的经验,要么用 Microsoft Windows,要么用 Macintosh。不过,在我们讨论如何把 Unix 的 GUI 和 CLI 融入你的工作之前,我想让你对基本概念 做到完全熟悉,所以我要花几分钟谈谈几条 最重要的思想。 学会使用图形用户界面很容易,但要把它用得 好就不那么容易了。所以,即使你是 GUI 老手, 也请抽出一点时间浏览一下本章的这一部分。 我打赌你会发现一些自己不知道的东西。 尽管各种桌面环境有很多共通之处,但仍存在 细小而重要的差别,要想写出一套适用于所有 不同界面的操作说明是很困难的。此外,GUI 的 几乎每个部分都可以定制。第一次使用某个 特定的 GUI 时,你会发现默认设置呈现出的 外观和行为是某种特定的样子。一旦你成为 老手,就应当花些时间按照自己的需要和 偏好来定制你的系统。 在接下来的三节中,我会讨论使用 GUI 所必须 理解的基本概念。这些内容足以让你入门。读完 之后,请另外安排一些时间阅读你所用的那个 桌面环境自带的帮助。特别要找一找快捷键 (shortcut keys)的清单。学会熟练运用它们, 是掌握任何 GUI 所能做的最重要的一件事。 在第 5 章中,我已经讲过前面几条重要的思想: • GUI 让你可以在窗口中工作。 • 窗口是屏幕上的一块有边界的区域, 通常是一个矩形。 • 窗口可以相互重叠。 • 随着需要出现,你可以改变窗口的大小, 或者把它从屏幕的一处移到另一处。 我们继续往下讲。
你的屏幕上会有一个可移动的小图像,称为 指针(POINTER)。你用一只指点设备(通常是 鼠标)在屏幕上四处移动指针。指针的形状 可能会变化,取决于你正在做什么以及它在 屏幕上的什么位置。 要发起一个动作,你把指针移到屏幕上的某个 位置,然后按下一个键。你的鼠标可能有一个、 两个或三个键。X Window 是按三键鼠标设计的, 这通常意味着 作为一般规则 Unix 的桌面环境也使用三键鼠标。这些键分别称为 左键(LEFT)、中键(MIDDLE)和右键(RIGHT BUTTONS)。 提示 Unix 的 GUI 是按三键鼠标设计的。如果你的鼠标 只有两个键,你可以同时按下左键和右键来 模拟中键。(同时按下两个鼠标键称为组合 按键,CHORDING。)另外,如果你的鼠标带有 滚轮,按下滚轮也许就能模拟中键。 写给 Macintosh 用户:如果你在 OS X 上使用 单键鼠标,你可以用 Control-Click(按住 Control 键再点鼠标)模拟右键单击,用 Option-Click 模拟中键单击。 也就是说,要右键单击,就按住 <Control> 键 并点击鼠标键;要中键单击,就按住 <Option> 键并点击鼠标键。 对鼠标键你只能做两件事:点击(Click)或 按住(Hold)。 当你按下键又松开时,我们说你点击(CLICK)了 这个键。如果你连续快速按下两次,我们说你 双击(DOUBLE-CLICK)。在少数场合,你可能需要 三击(TRIPLE-CLICK),也就是快速按三次键。 当你点击左键时,我们说你左键单击 (LEFT-CLICK)。这是最常见的一种点击。 同样地,你也可以右键单击(RIGHT-CLICK,较少见) 和中键单击(MIDDLE-CLICK,最少见)。 当你单独看到 "click"(点击)这个词时,它 总是指左键单击。例如,你可能读到这样的 话:"要拉下 Groatcakes 菜单,请点击一个 groatcake 的图标。"意思就是对 groatcake 的 图标做左键单击。(图标(ICON)是代表某种东西 的小图像。) 除了点击,你还可以按下鼠标键并保持 按住(HOLD)。大多数时候,你想移动某个东西时 就会按住键不放。例如,要移动一个窗口,你 把指针移到标题栏(TITLE BAR,窗口顶部那块 显示程序名称的横向区域)上,按住左键并 移动鼠标。窗口会跟着你的移动走。窗口到了 你想要的位置后,松开鼠标键。 当我们以这种方式移动一个对象时,我们说 把它拖拽(DRAG)。因此我们也可以说,要移动 窗口,就把它的标题栏拖到一个新的位置。 很多时候,你是通过从一个称为菜单(MENU)的 列表中选择某一项来做出选择的。菜单有两类: 下拉式菜单(PULL-DOWN MENU,更常见)和弹出式 菜单(POP-UP MENU,较少见)。 下拉式菜单是你点击某个特定的词或图标时 出现的菜单。例如,大多数窗口在靠近顶部的 位置都有一个横向的词列表(菜单栏,MENU BAR)。 如果你把指针移到其中一个词上并点击,该词 下方就会出现一组相关条目的列表,然后你 就可以从列表中选择一项。 最重要的下拉式菜单是窗口操作菜单 (WINDOW OPERATION MENU),你几乎在每一个 窗口中都能找到它。要显示窗口操作菜单,点击 窗口左上角(标题栏最左端)的那个小图标。 这样就会显示出与窗口本身有关的一组动作列表, 其中最重要的是:Move(移动)、Resize(调整大小)、 Minimize(最小化)、Maximize(最大化)和 Close (关闭)。你可以从 Figure 6-3(KDE)和 Figure 6-4(Gnome)中看到这一点。 提示 正如本章前面提到的,你也可以通过按下某个菜单 的加速键来把它拉下来。例如,按 <Alt-F> 就能拉下 File(文件)菜单。 使用加速键可以省去这样的麻烦:把手从键盘上 挪开去移动鼠标并按键。
每当你拉下一个菜单时,请仔细看看这些选项。 其中一些选项旁边会标出某个键或某个组合键的 名称。这些就是快捷键(SHORTCUT KEYS)。按下 快捷键,你就能选择相应的动作,而不必费劲去 拉下菜单。 少数几个快捷键是标准化的 也就是说, 在大多数 GUI 的所有窗口中它们都相同 值得牢记。其中最重要的快捷键是 <Alt-F4>。 按下它就会关闭当前窗口。 一定要把 <Alt-F4> 记熟。会用它将使你在 桌面环境中的工作顺畅得多。如果你不学会使用 它,那么每次想关闭窗口时都得用鼠标,那样 既别扭又缓慢。就我个人而言,我一天要用 <alt-F4> 许多次。 第二类菜单是弹出式菜单(POP-UP MENU),它 会在某个动作发生之后(常常是右键单击) 凭空出现。按照惯例,在某个条目上右键单击 会显示所谓的上下文菜单(CONTEXT MENU),也就是 一组与该条目本身有关的动作。你自己可以 试一试:把指针移到任何你想移的地方 例如某个包含程序的窗口内 然后右键 单击,看看会发生什么。
你可以改变所用窗口的大小,以适应自己时时刻刻 的喜好。这样做时,我们说你调整(RESIZE)了 窗口。具体细节在不同 GUI 之间可能不同,但 有两种标准方法。 第一,你可以用鼠标改变窗口的边框。把指针 移到你想改变的那条边框上,然后按住左键, 把边框拖到一个新的位置。你也可以把指针 放在窗口的某个角上开始拖动。拖动一个角会 同时改变相邻的两条边。(试试看。) 第二,你可以用键盘移动窗口的边框。拉下 窗口操作菜单,选择 "Resize"(调整大小)。 然后你就可以用方向键(<Left>、 <Right>、<Up> 和 <Down>) 来改变窗口的大小。(很多人不知道有这 个功能。) 类似地,你可以从窗口操作菜单中选择 "Move" (移动),然后用方向键把窗口移到任何你想要 的位置。完成后按 <Return>(或 <Enter>)。 除了改变窗口大小或移动窗口之外,有时你会 希望某个窗口暂时消失。你并不想关闭它(关闭 会停止程序运行),只是想让它在不需要之前 别挡在路上。 这种情况下,你可以把窗口最小化(MINIMIZE) 或图标化(ICONIFY)。这样它就会从屏幕的 主要区域消失。与此同时,窗口的一个小 表示(一个图标)会出现在任务栏(TASKBAR)上, 也就是屏幕底部的那条横栏。 窗口最小化之后,窗口内的程序继续运行。 所以,例如你可能有七个窗口,其中四个是 打开的,另外三个最小化到了任务栏。然而, 尽管只有四个窗口可见,全部七个程序都 仍在运行。 一旦某个窗口被最小化,你可以在任何时候把它 恢复原来的大小和位置。这样做时,我们说 你还原(RESTORE)了该窗口。 我马上就会告诉你怎样最小化和还原。在那之前, 我还想提一下对窗口可以做的另外两件事。第一, 你可以永久地关闭窗口(CLOSE),这会停止窗口 中运行的程序并让窗口消失。 第二,你可以最大化(MAXIMIZE)一个窗口,把它 扩展到占满整个屏幕。当你只想专注于一项任务时, 这一点很有用。最大化窗口能让你专注于那项任务, 而不被其他窗口在视觉上分散注意力。 那么,怎样最小化、还原、关闭和最大化窗口呢? 方法有好几种。在我解释之前,我想先花点时间 谈谈我所说的"窗口控件"。 如果你看窗口的右上角,会看到三个小方框 (见 Figure 6-5)。从右往左依次是:关闭 按钮(CLOSE BUTTON,形状像一个 "X")、最大化 按钮(MAXIMIZE BUTTON,一个小矩形)和最小化 按钮(MINIMIZE BUTTON,一条下划线)。
这些按钮的用法很直截了当: • 点击最小化按钮,把窗口最小化到任务栏。 • 点击关闭按钮,关闭窗口并停止该窗口中 运行的程序。(这等同于按 <Alt-F4>。) • 点击最大化按钮,最大化窗口。这会把 窗口放大到占满整个屏幕(不过你仍然会 看到任务栏)。 然而,你并不一定要点击这些按钮。还有一个 你也许更喜欢的做法:你可以从窗口操作菜单中 选择同样的动作。点击窗口左上角的那个小图标 显示该菜单,然后选择 "Minimize"(最小化)、 "Maximize"(最大化)或 "Close"(关闭)。 某个程序最小化到任务栏之后,你可以通过点击 任务栏上该窗口的表示来还原它。这样窗口就会 扩展回原来的大小和位置。 当你最大化一个窗口时,它会扩展开来填满 整个屏幕。这时,三个窗口控件中间的按钮会从 最大化按钮变成一个取消最大化按钮 (UNMAXIMIZE BUTTON)。(参见 Figure 6-6。) 要把窗口改回原来的大小和位置,只要点击这个 按钮即可。另外,你也可以拉下窗口操作菜单, 选择相应的动作。
用 GUI,你可以开任意多个窗口,每个窗口中 都有各自的程序。然而,当你在键盘上打字、 点击或按住鼠标键时,输入只会送到某一个 特定的窗口。接收你输入的那个窗口被认为 拥有焦点(FOCUS),并称为活动窗口 (ACTIVE WINDOW)。拥有焦点的窗口会以某种 方式高亮显示。通常它的标题栏颜色与其他 窗口不同。(参见本章后面的 Figure 6-7。) 你可以在一个念头到下一个念头之间,根据需要 改变哪个窗口拥有焦点。例如,在几分钟之内, 你可能从浏览器切换到电子邮件程序,再切换到 文字处理器,然后又回到浏览器。 改变焦点有几种方法。第一,如果窗口是打开的, 只要点击它即可。另外,你也可以点击任务栏上 该窗口的名称。 无论哪种情况,焦点都会被引到你选中的窗口, 键盘也就与该窗口中运行的程序连接起来。 此外,如果该窗口部分被其他窗口遮住,拥有 焦点的窗口会被重绘到最上层,从而完全 显示出来。 改变活动窗口的另一种方法是使用所谓的 任务切换(TASK SWITCHING)。每个在窗口中 运行的程序都称为一个任务(TASK)。要查看 当前正在运行的所有任务,只要看任务栏 (通常在屏幕底部)即可。每个任务都有自己的 小按钮。正如我提到的,点击其中某个按钮, 就会把焦点送到那个窗口。 这当然可行,但还有一个更省力的办法。按下 <Alt-Tab> 就能让你在不必把手离开键盘的 情况下,从一个任务切换到另一个任务。 当你按下 <Alt-Tab> 时,你的 GUI 会高亮 显示某个特定的任务。(你会看到屏幕中央 出现一些小图像,非常明显。)再按一次 <Alt-Tab> 就高亮显示下一个任务。 你要做的只是按住 <Alt> 键,并不断按 <Tab> 键,直到来到你想要的任务。松开 这些键,该任务对应的窗口就会获得焦点。 提示 要从一个任务切换到另一个任务,反复按 <Alt-Tab>。起初这可能会有点慢,所以 告诉你一个诀窍。 用左手拇指按住左边的 <Alt> 键不放,同时 用左手中指反复按 <Tab> 键。(现在就花点 时间试一试。) 要想以相反的顺序在各任务之间循环,只要按 <Alt-Shift-Tab> 而不是 <Alt-Tab>。 (试一下。) 一定要花点时间把 <Alt-Tab> 和 <Alt-Shift-Tab> 这两个组合键练熟。它们 不仅会加快你的任务切换,而且因为太过好用, 甚至会改变你组织自己工作环境的方式。
当你使用 GUI 时,你工作于其中的基本空间称为 桌面(DESKTOP)。正如我们在第 5 章中所讨论的, 这个名字是一个隐喻。因此你可以把窗口想象成 摊开在桌面上的纸张,就像真实办公桌上的一件件 文件。 桌面这个隐喻很快就用不下去了,我们不必硬推。 相反,我希望你把桌面看作一个抽象的环境, 你在其中组织自己的工作。桌面所具有的特性远远 超出屏幕的物理现实。理解这些特性,是你掌握 Unix 工作环境的关键(*)。 * 脚注 在大约 2000 年前写成的《瑜伽经》 (Yoga Sutras)中,古代圣贤 Patañjali 正是讨论了这一观念。他在第二章第 21 颂中 写道(原文为梵文):Tadartthah eva drsyasya atma. 这句话可以译为:"Unix 桌面的本性与智慧, 唯一的目的就是服务于用户的真正目标, 即解脱。" 最重要的观念是:你可以拥有多个桌面,每个 桌面都有自己的背景、自己的窗口、自己的 任务栏,等等。从一个桌面切换到另一个桌面 很容易,而当你这么做时,感觉上就像是切换到 了一个全新的系统。 名称的由来 Desktop(桌面),Workspace(工作区) 在 GUI 之内,桌面就是你所使用的基本工作 环境。桌面包含背景、窗口、任务栏等等。 大多数桌面环境都允许你使用多个桌面。这样 做的好处是,你可以创造出看起来、用起来 仿佛多个图形工作环境一样的东西。 然而,"desktop"(桌面)这个名称可能造成混淆, 因为它经常被用来指桌面环境本身,也就是整个 GUI。正因如此,你经常会看到桌面被称作 工作区(WORKSPACES),这样的说法合理得多。 例如,使用 KDE 时你说的是"desktops"(桌面); 使用 Gnome 时你说的是"workspaces"(工作区)。 无论它们叫什么,它们是同一种东西,除了一些 细微的差别之外,工作方式也相同。 从一个桌面/工作区切换到另一个,有两种方法: 可以用鼠标,也可以用键盘。 要用鼠标,请看屏幕底部任务栏附近。你会看到 一组小方块,每个桌面一个。例如,如果你有 四个桌面,就会有四个方块。你可以在本章后面的 Figure 6-7 中看到这一点。要切换到某个 桌面,只要点击它的方块。虽然听起来有点含糊, 但一旦上手就很容易了。多试几次即可。 要用键盘在桌面之间切换,有专门的快捷键。 这些键在不同的桌面环境之间可能不同,所以 最好的办法是查阅文档中的 "Shortcut Keys" (快捷键)部分。(找一个 Help(帮助)图标。) 在 KDE 中,桌面快捷键是 <Ctrl-Tab> 和 <Ctrl-Shift-Tab>。 在 Gnome 中,它们是 <Ctrl-Alt-Left>、 <Ctrl-Alt-Right>、<Ctrl-Alt-Up> 和 <Ctrl-Alt-Down>。(也就是说,按住 <Ctrl> 和 <Alt>,再按某个方向键。) 使用桌面切换的快捷键非常简单,你大概很快 就能熟练掌握,从此不必再用鼠标在桌面之间 切换。 作为一般规则,桌面环境默认提供四个不同的 桌面。不过,如果你愿意,可以增加更多。 做法是:右键点击屏幕底部某个小的桌面方块。 这会弹出一个上下文菜单。找找类似 "Preferences"(首选项)或 "Desktop Configuration"(桌面配置)的菜单项。 在离开本节之前,我想提出一个观念,本章结尾 时我们会再回到它。到目前为止,我向你展示了 Unix 工作环境如何让你同时做多件事。在每个 桌面内,你可以打开多个窗口,每个窗口运行 一个独立的程序。你可以有多个桌面,每个桌面 都有自己的一组窗口。而且,借助快捷键,你 可以很容易地从一个桌面移到另一个桌面,并在 一个桌面之内从一个窗口移到另一个窗口。 我要你思考的是:有了所有这些资源,对你 而言,组织工作的最佳方式是什么?你会逐渐 体会到,如何回答这个问题,对你的整个 Unix 体验至关重要。 提示 在组织你的工作时,你可以把窗口从一个桌面 移到另一个桌面。 右键点击窗口的标题栏。这会弹出一个菜单, 让你把窗口移到你所选的桌面上。
在第 3 章中,我们谈到了终端,以及过去人们 如何用终端通过 CLI(命令行界面)访问多用户 Unix 系统。我们讨论过,今天我们不再使用 真正的终端,而是运行一个模拟(表现得像) 终端的程序。当我们在 GUI 下运行这样的程序时, 该程序模拟的是一个 X 终端(我们在第 3 章 结尾讨论过的图形终端)。 正如我所解释的,Unix 的大部分威力在于使用 CLI。这意味着,你阅读本书时所要做的大部分 事情,是在 Shell 提示符下输入命令,一条接 一条,以及使用基于文本的程序。要做到这些, 你需要能访问一个终端。 显然,我们不用真正的终端,而是使用终端 仿真程序。于是问题来了:我们怎样访问一个 终端仿真程序? 在现代 Unix 系统上有两种方法,两者都很重要。 我们现在先讲一种(终端窗口),另一种 (虚拟控制台)留到下一节。 在你的桌面环境里,所有工作都是在窗口中 完成的,所以在窗口中运行一个终端仿真程序 当然顺理成章。 这样做很容易。所有桌面环境都提供了一种启动 终端程序的简便方式。只要打开主菜单去找。 例如在 Gnome 中,如果你查看 System Tools (系统工具)子菜单,会看到 "Terminal"(终端)。 在 KDE 中,如果你查看 System(系统)子菜单, 会找到两个这样的程序:"Terminal" 和 "Konsole"。(我一会儿就解释为什么有两个。) 当你启动这样的程序时,屏幕上会出现一个 窗口。在那个窗口里,你拥有的是一个标准的 CLI。举个例子,看看 Figure 6-7,你会 看到两个终端窗口。 |
|
|
你在第 4 章还记得,Shell 就是命令处理器。 它显示一个提示符,等待你输入命令,然后 处理该命令。命令做完后,Shell 再显示一个 提示符,等待下一条命令。 在我们的例子中,在第一个 Shell 提示符处, 我输入了 date 命令(用来显示当前的 时间和日期)。Shell 处理了这条命令,然后 显示了另一个提示符。 由于终端仿真程序运行在窗口中,而你可以开 任意多个窗口,因此你可以同时运行多个终端。 你现在也许会不明白为什么要这样做,但总有 一天 当你成为有经验的 Unix 用户之后 让各种命令行程序同时为你工作、每个 程序各占一个终端窗口,对你来说会是习以为常 的事。 提示 大多数桌面环境都有一组图标,让你启动常用的 程序。(你会在屏幕的顶部或底部找到这些 图标。)如果你在这个区域点击右键,会看到一个 弹出式菜单,通过为程序创建图标,你可以添加 或删除程序。 我的建议是把你最喜欢的终端程序加进去。这样, 你想什么时候打开一个新的终端窗口都行,只要 点击一下图标。 这一点非常重要,所以我建议你现在就花点时间 去做。与此同时,你可以删掉那些你不会用到的 程序的图标,让屏幕清爽一些。 正如我早先提到的,KDE 让你在两个终端程序 之间选择。实际上,仿真终端的需求存在已久, 以至于已经有了许多不同的终端程序,而大多数 桌面环境都让你自行选择使用哪一个。 有些桌面环境允许你直接从菜单中选择想要的 终端程序。(KDE 就是这种情况,这也是你看到 两个选项的原因。)另一些桌面环境在菜单中 只有一个 Terminal(终端)项,但你可以把它 改成指向你想要的任何终端程序。(Gnome 就是 这种情况。)要查看可选项,右键点击 Terminal 项并选择 "Properties"(属性)。 那么你应该用哪个终端程序呢?严格说来,这并 不那么重要,因为所有终端程序都提供同样的 基本功能:在窗口中提供一个 CLI。不过,如果你 想讲究一点,Konsole 是一个特别出色的程序, 它带有若干其他终端程序没有的实用功能。 例如,你可以在同一个窗口中运行多个 CLI 会话,每个会话各有一个标签(tab)。随后你可以 通过点击某个标签,或者使用快捷键 <Shift-Right> 和 <Shift-Left> (也就是按住 <Shift> 键再按右方向键或 左方向键)在会话之间切换。你会发现这两个键 特别好用。 我的建议是:如果你的系统上有 Konsole,就 用它。它是一个很常见的程序,即使你没有使用 KDE,它也可能已经装在你的计算机上。一旦你 开始使用 Konsole,请务必花些时间阅读它自带的 帮助。内容很好懂,而且会让你受益匪浅。 名称的由来 xterm, xvt, Konsole X Window 刚开发出来时,附带一个名为 xterm 的终端程序,它仿真 VAXstation 100(VS100)图形终端。(关于图形终端的讨论 见第 3 章。)最初版本的 xterm 由 MIT 的学生 Mark Vandevoorde 在 1984 年夏天 开发完成。 (有意思的是,Vandevoorde 开发 xterm 时是一个独立的终端仿真程序:它和 X 毫无 关系。不过在很短的时间内, xterm 就被改写并移植到新的 X Window 系统上,从此 一直安家于此。因此,X Window terminal 的名字 就成了 xterm。) 现代版本的 xterm 既能仿真基于字符的 终端(老的 DEC VT102,与 VT100 非常相似), 也能仿真图形终端(Tektronix 4014)。很长 一段时间里,xterm 是 X 所提供的 主要终端程序。 1992 年,肯特大学的 John Bovey 写出了 xvt,一个用来取代 xterm 的新 终端仿真程序。虽然 xvt 与 xterm 大体兼容,但新程序更快、占用 内存更少(在那个年代这可是件大事)。原因之一 是它只是一个基本的 VT100 仿真程序;它不包含 Tektronix 4014 的支持。(因此得名 xvt,即 X Window VT100 emulator。) 自 20 世纪 90 年代以来,人们编写了许多基于 X Window 的终端程序,其中几乎所有都源自 xterm 或 xvt。1998 年,德国 程序员 Lars Doelle 发布了 Konsole,一个全新 的终端程序。Konsole 是 KDE 项目的一部分, 多年来不断增强,到今天,它已是最强大的 终端仿真程序之一。 顺便说一句,Konsole 是德语中"控制台" (console)一词。这是一个美妙的巧合,因为 正如我在第 5 章提到的,KDE 的惯例是让程序 名字都以 K 开头。
时间是 1980 年,地点是美国东海岸一所一流 大学,我们来拜访校园里"最重要的人物" (Most Important Professor,简称 MIP)。这位 MIP 有一间气派的办公室,一张大办公桌和七台 各不相同的终端,它们全都连接在一台强大的 Unix 系统上。(见下面的 Figure 6-8。) MIP 正带我们参观他的办公室。"这六台终端是 基于文本的设备,提供标准的命令行界面,"他 解释道,"实际上,这边这台终端就是控制台。" 等一下,我们说。控制台不是应该放在计算机 附近,或者至少放在系统管理员的办公室里吗? "多数情况下是的,"MIP 说,"但我非常重要。 这六台基于文本的终端随我怎么用。我常常需要 同时做几个项目,所以所有这些终端都归我个人 使用,非常方便。要是系统出了毛病,就让管理员 到我的办公室来用控制台吧。" 您真好心,我们说。不过你真的六台终端都用吗? "当然用。我很重要,我需要很多终端。不过, 我偶尔确实会让我的秘书(*)用其中一台。" 最后,MIP 指向放在一旁第七台终端。"这是一台 图形终端,非常特别,"他说,"没错,能在这种 终端上运行的程序数量有限,但我既然如此重要, 当然必须有一台。" * 脚注 秘书是哺乳动物版本的个人数字助理。从 20 世纪 30 年代到 80 年代末,秘书在大学环境中 十分兴盛。 与 PDA 相比,大学里的秘书不可靠、难以控制、 无法升级,而且常常有记忆方面的问题。此外, 由于 20 世纪 80 年代和 90 年代的许可证限制, 许多秘书即便表现很差也无法丢弃。 1996 年,秘书被列入濒危物种名单;自 1998 年以来,它们被视为已经灭绝。最后一次有人 见到真正的大学秘书是在 1998 年末,地点是 北达科他大学法戈分校。不过那次目击并未得到 证实,多数权威人士认为那只"秘书"其实是 参考咨询馆员(也在濒危名单上)。
让我们把时间推进 25 年。你刚读完关于"最重要 人物"的故事,不禁心生向往:"七台终端都归 自己一个人用,那该多好?我要是有那么重要 就好了。" 实际上,如果你有自己的 Unix 计算机,你就 是那么重要。所有现代 Unix 系统都允许你同时 使用多台终端,其中一台还是图形终端。 而且,你不必在办公桌上堆好几台显示器和 键盘。Unix 会为每台终端使用同一台显示器和 同一个键盘。你要做的,只是按一个快捷键就在 终端之间切换。 下面是 Linux 上的做法(其他系统也类似)。 当你启动 Linux 时,你的 GUI 也就是你的 桌面环境 会自动启动。你可能不知道的是, 与此同时,Linux 实际上替你启动了七个不同的 终端仿真程序。它们称为虚拟控制台(VIRTUAL CONSOLES)。(不幸的是,这个名字有点容易 误解,下一节我会说明。) 虚拟控制台 #1-6 是全屏的、基于文本的终端, 用来使用 CLI。虚拟控制台 #7 是运行 GUI 的 图形终端。事实上,当你的桌面管理器启动时, 你所看到的就是虚拟控制台 #7。另外六个虚拟 控制台是不可见的。 要在虚拟控制台之间切换,你只要按一个特殊的 组合键。对于虚拟控制台 #1,按 <Ctrl-Alt-F1>。(也就是按住 <Ctrl> 和 <Alt> 键再按 <F1>。)对于 控制台 #2,按 <Ctrl-Alt-F2>;对于控制台 #3,按 <Ctrl-Alt-F3>;以此类推。 当你按下这些组合键中的某一个时,你会立刻 看到一个全屏的 CLI 终端。你有六个这样的 终端,随你怎么用。要返回 GUI(你的桌面环境), 只要按 <Ctrl-Alt-F7>。(记住,第 7 个 虚拟控制台就是图形终端。) 提示 在虚拟控制台之间切换的快捷键其实是 <Alt-F1>(终端 #1)到 <Alt-F7> (终端 #7)。不过在大多数 GUI 中,这些键另有 用途,所以你必须同时按住 <Ctrl> 键。 例如,假设你正在 GUI(终端 #7)中工作。要 切换到终端 #3,你按 <Ctrl-Alt-F3>。 现在你处在 CLI 中。要切换到终端 #4,按 <Alt-F4>;要切换到终端 #1,按 <Alt-F1>;以此类推。要切回终端 #7 (GUI),按 <Alt-F7>。 那么,为什么你想单独用 <Alt> 而不用 <Ctrl-Alt> 呢?因为它更简单、更快, 而 Unix 用户喜欢把事情做得尽可能简单、 尽可能快。 当你离开某个虚拟控制台时,在其中运行的程序 会继续运行。例如,你在终端 #4 中启动一个 程序去执行一项耗时的任务(比如编译一个大型 程序,或者从互联网上下载大量文件)。随后你 可以按 <Alt-F5> 切换到终端 #5 去做别的 事。稍后,你可以按 <Alt-F4> 回到终端 #4,看看你的程序进展如何。 于是问题来了:何必费劲用那六个基于文本的 虚拟控制台?为什么不干脆留在 GUI 里,用终端 窗口和多个桌面呢?理由有好几个。 第一,基于文本的虚拟控制台使用整个屏幕, 并以等宽(固定宽度)的字体类型显示字符。 总体而言,这是使用 CLI 的一种格外令人愉悦的 方式,远远胜过在 GUI 下用终端窗口,哪怕是 最大化的窗口也不行。(试一试便知。) 第二,按 <Alt-F1>、<Alt-F2> 等等 在命令行之间切换,感觉非常酷。(同样,试一试 便知。) 第三,如果你的桌面环境出了严重问题,能够 切换到一个虚拟控制台去解决问题会很方便。 例如,如果你的 GUI 卡死了,你通常可以按 <Ctrl-Alt-F1> 进入另一个终端,然后 登录、修复问题或重启系统。 为了把我们的讨论说完整,让我解释一下为什么 我要讲"最重要人物"的那个故事。有两个原因。 第一,我希望你认识到现代 Unix 究竟有多强大。 如果你在 1980 年使用 Unix,你就得和别人共用 终端,通常要去一间终端室排队等候。就算你 想方设法弄到了一台属于自己的终端,那也 是件了不得的大事。 事实是,在 1980 年,计算机设备昂贵到连大学里 最重要的人物都不够重要,不能在自己办公室摆上 好几台终端,更别说七台了。然而在今天,当你在 PC 上使用 Linux 时,你的桌面上就有这么多。 (FreeBSD 实际上给你八个。) 第二,我希望你注意到:多虚拟控制台这个想法, 是对二十多年前一种硬件现实的软件实现。有多少 如此古老的计算范式至今仍然如此有价值?到目前 为止,在本书中我们已经遇到过两个:客户端与 服务器体系(第 3 章),以及 X Window 灵活而 开放式的设计(第 5 章)。现在,我们可以再加上 第三条基本原理。 Unix 建立在"用终端访问主机"这一思想之上。 这个思想强大到 早在真正的终端消失 之后 由它所激发出来的体系至今仍然 蓬勃发展。 名称的由来 Virtual(虚拟) 在计算领域,"virtual"(虚拟)一词用来描述 某种因软件模拟而存在的东西。例如,本章讨论的 虚拟控制台并不是真实的,就它们没有独立 的物理存在而言确实如此。它们之所以存在, 只是因为它们由软件创建出来。 一个更重要的例子是虚拟内存 (virtual memory)的概念,它是一种模拟出 比计算机中物理存在的内存更多内存的方法。 例如,如果一台计算机有 2 GB 内存,操作系统 可以用硬盘存放多余的数据,从而模拟出额外 4 GB 的虚拟内存。(顺便说一句,Unix 使用 虚拟内存。) "virtual"(虚拟)这个词来自光学,即物理学 的一个分支。想象你看着镜子前面的一支蜡烛。 当你看那支真实的蜡烛时,物理学家会说你看到的 是"实"(real)像。当你看镜子里的蜡烛时, 你看到的是"虚"(virtual)像。
在第 3 章中,我们谈到了控制台的概念。这个 术语可能有点让人困惑,所以我们花点时间 把它弄清楚。 在早年,大多数 Unix 计算机连接着若干台 终端。谁想使用系统,就找一台没人用的终端 登录。 其中有一台终端,即控制台,是特殊的,因为 系统管理员用它来管理系统。多数情况下, 控制台放在一间上锁的房间里,要么就在主机 旁边,要么在管理员的办公室。 从外观上说,控制台和其他终端一样,但有两点 使它与众不同。第一,当 Unix 需要显示一条 极其重要的消息时,这条消息会被送往控制台。 第二,当系统启动到单用户模式 为了维护 或排障 时,只有控制台会被激活。这样, 在系统重新启动到多用户模式之前,其他用户 就无法登录。 如今,"console"(控制台)一词常被当作 terminal(终端)的同义词使用,这容易造成 混淆。例如,我们刚刚讨论的虚拟控制台并不是 真正的控制台。把它们叫做"虚拟终端"其实 要合理得多。 同样地,想想本章前面提到的 Konsole 终端 仿真程序。这个程序由一位德国程序员所写, Konsole 是德语中"console"(控制台)一词。 但即便如此,这个名字还是不对。当你运行 Konsole 时,你得到的是一个终端窗口, 而不是控制台。
当你使用多个窗口、每个窗口中各有自己的 程序时,总会有你想把信息从一个窗口复制或 移动到另一个窗口的时候。如果你用过 Microsoft Windows 或 Macintosh,大概已经 熟悉复制和粘贴了。 在 Unix 中,复制数据有两种不同的方式。第一, X Window 允许你在窗口之间或同一窗口之内 选择并插入文本。第二,许多基于 GUI 的程序 支持 Windows 那种复制/粘贴功能 (<Ctrl-C>、<Ctrl-V> 等等)。 这两种体系完全分开,工作方式也不同,所以 你需要把两种都学会。我们先讲 X Window 的 体系,因为它更简单。 X Window 的选择/插入机制只能用于文本, 也就是字符。开始时,你用鼠标选中一些文本 (细节马上讲)。然后把鼠标移到你想插入文本 的地方,按下中键。就这么简单。你一按中键, 所选的文本就会被插入。如果你的鼠标没有 中键,就同时按下右键和左键。 要选择文本,把鼠标指针放在文本的起始处, 然后按住鼠标左键,同时把指针拖过文本。 随着你拖动指针,被选中的文本会高亮显示。 (打开一个终端窗口试试。) 另外,你还可以用两种别的方式选择文本。 双击会选中一个单词;三击会选中整行。 (再强调一次,试一试。这需要一点练习。) 虽然这些说明读起来可能有点复杂,但一旦 上手,选择和插入文本其实又快又容易。如果 你就在计算机前,我建议你现在花几分钟打开 两个窗口,练习选择和插入。如果可以的话, 请别人给你演示一下。 提示 由于选择/插入机制是由 X Window 提供的,你 只能在 GUI 之内使用它。你无法在虚拟控制台上 使用它。 不过,有一个名为 Linux gpm 的程序, 它把这一功能扩展到了基于文本的虚拟控制台 (#1-6)上。在 FreeBSD 上,有一个类似的程序 叫 moused。 如果你的系统上装了 gpm 或 moused(默认情况下常常如此),你就 可以在基于文本的虚拟控制台中,以与 GUI 中 相同的方式选择和插入文本。唯一的区别是, 要插入文本,你可能得点击右键而不是中键。
正如我在上一节所解释的,你可以用 X Window 的 选择/插入机制,在窗口之内或两个窗口之间复制 文本。除了选择和插入,许多基于 GUI 的程序 还支持另一套完全不同的体系,称为复制与粘贴。 Unix 的复制/粘贴机制的工作方式与 Microsoft Windows 相同,甚至连所用的键和菜单都一样。 但与 Windows 不同的是,并非所有基于 GUI 的 Unix 程序都使用复制/粘贴。这得你自己去 查看。 在深入细节之前,先给出一个简单的概述:首先, 你把数据"复制"或"剪切"到"剪贴板" (clipboard)中。然后,你可以在任何合适的地方 把剪贴板中的内容"粘贴"出来。大多数时候你复制 的是文本,也就是字符。不过只要在你所用的程序 中说得通,你也可以复制图形。 要使用复制/粘贴,你需要理解四个基本概念: • 剪贴板(CLIPBOARD)是一块不可见的存储区域。 • 当你复制(COPY)到剪贴板时,原始数据 不会改变。 • 当你把数据剪切(CUT)到剪贴板时,原始 数据会被删除。 • 要把数据从剪贴板中取出,你把它粘贴 (PASTE)到一个窗口中。 因此,要把数据从一个地方复制到另一个 地方,你就复制再粘贴。要把数据从一个地方 移动到另一个地方,你就剪切再粘贴。 每当你复制或剪切时,剪贴板的当前内容就会被 替换,而且你无法把它们找回来。例如,假设 剪贴板中存有 50 段文本。接着你往剪贴板里复制 了一个字符。此时剪贴板中只剩这一个字符,那 50 段文本已经没了。 另一方面,当你粘贴数据时,剪贴板的内容不会 改变。也就是说,剪贴板的内容保持不变,直到你 进行下一次复制或剪切。这让你可以一遍又一遍地 粘贴同一份数据。(当然,当你重启或关闭系统时, 剪贴板中的内容就会丢失。) 那么,怎么复制、剪切和粘贴呢?首先,你必须 选中你想送入剪贴板的数据。这有两种做法。 第一,你可以使用鼠标。把鼠标指针放在你想 复制或剪切的数据起始处,然后按住鼠标左键, 同时把指针拖过文本。随着你拖动指针,被选中的 文本会高亮显示。 另外,如果你处理的是可以键入的数据,你可以 用键盘来选择。把光标放在你想复制的文本开头, 按住 <Shift> 键。按住不放的同时,用任何 一个光标控制键移动光标。光标经过的文本就会 被选中。 一旦选中数据,你可以用三种不同的方式复制或 剪切。你可以按 <Ctrl-C> 复制、按 <Ctrl-X> 剪切;或者点击右键弹出一个 菜单,选择 "Copy"(复制)或 "Cut"(剪切); 或者拉下 Edit(编辑)菜单,选择 "Copy" 或 "Cut"。 类似地,粘贴也有三种方式。把光标移到你想要 插入数据的地方并按 <Ctrl-V>;或者点击 右键并选择 "Paste"(粘贴);或者拉下 Edit (编辑)菜单并选择 "Paste"。 提示 如果你在剪切或粘贴时出了差错,你可以按 <Ctrl-Z> 撤销最后一次操作,或者从菜单中 选择 "Undo"(撤销)。 在某些程序中,你可以多次按 <Ctrl-Z> 来 撤销多次操作。
为了维护安全,Unix 的设计是每个用户标识都 只拥有一组有限的特权。例如,你可以删除自己的 文件,但不能删除别人的文件,除非他明确授予你 这个权限。同样,作为普通用户,你不能进行可能 影响系统完整性的改动,也不能运行这样的程序。 在第 4 章中,我们讨论过这样一个概念:有时 系统管理员必须以超级用户的身份登录,以便 获得超出普通用户的特权。例如,管理员可能需要 给系统添加新用户、修改某个人的密码、更新或 安装软件,如此等等。 正如我所解释的,存在一个特殊的用户标识 root,它拥有这样的特权。当你以 root 登录时,你就是超级用户,几乎 想做什么就做什么。(显然,root 密码 是极其重要的机密。) 如果你使用的是共享系统,比如在学校或单位, 系统管理工作由别人负责,所以你不必操心。 例如,你忘了密码,可以向人求助。然而,当你 使用自己的 Unix 系统,比如一台运行 Linux 或 FreeBSD 的 PC 时,你就是管理员,因此 你必须知道如何以超级用户的身份工作。 要成为超级用户,你需要超级用户密码,通常 称为 root 密码。如果你自己在计算机上 安装了 Unix,那么你会在安装过程中选择了 root 密码。 提示 有些 Linux 发行版的设置方式是:安装过程中 并不创建 root 用户标识。这种情况下, 就用你的普通密码作为超级用户密码。 提示 在任何 Unix 系统上,root 密码都是你 所掌握的众多信息中最重要的一条。因此,把它 记在脑子里比写在纸上更妥当。然而,人总有 失算的时候,万一你恰好忘了自己计算机的 root 密码,那可真是一件天大的事。 在早年间,除了重新安装 Unix 之外你没什么 办法。在现代系统上,有一条出路。具体细节 请参见附录 E,忘记了 root 密码该 怎么办(What to Do If You Forget the root Password)。 一旦你知道了 root 密码,就有两种办法 成为超级用户。第一,在登录提示符处,你可以 以 root 登录。当系统刚启动时,或者 使用虚拟控制台时,你都可以这样做。 另一种做法是:如果你已经以普通用户身份登录, 可以使用 su(substitute userid,替换 用户标识)命令切换成超级用户。 su 命令的用途,是让你临时切换到另一个 用户标识。只要输入 su,后面跟上新的 用户标识即可。这里举一个例子。 你以 harley 登录,Shell 提示符是这样: [harley]$ (在这个例子中,我们使用的是 Bash shell。 Shell 提示符被设置为显示当前的用户标识。 我们会在第 13 章详细讨论 Shell 提示符。) 现在你输入 su 命令,切换到用户标识 weedly。随后系统提示你输入 weedly 的密码。一旦你输入密码,当前 的 Shell 就被挂起,并为 weedly 启动 一个新的 Shell。
[harley]$ su weedly
当你以 weedly 身份工作结束后,你只要 结束当前的 Shell 即可。为此,你输入 exit。一旦结束新 Shell,你就会自动 回到以用户标识 harley 运行的原来 那个 Shell:
[weedly]$ exit
虽然你可以用 su 切换到任何用户标识 (前提是你有密码),但它主要用于切换到 超级用户。在深入细节之前,我还想说明一点。 每当你登录时,Unix 都会运行某些命令,来建立 一个专属于你的用户标识的环境。(本书后面谈到 Shell 时,我会向你展示如何定制这个过程。) 假设你以 harley 登录,并输入下面 这条命令: su weedly 你的用户标识换成了 weedly,但你仍然 工作在 harley 的环境之下。如果你想 同时改变你的用户标识和环境,就在命令名之后 输入一个 -(连字符)。注意连字符两边 各有一个空格。 su - weedly 现在你就是在 weedly 环境之下以 weedly 身份工作。当你输入 exit 时,你会回到 harley 环境,并以 harley 身份工作。 我知道这一切听起来有点神秘,但我向你保证, 总有一天它会说得通。我现在之所以提到它, 是因为我马上要向你展示如何用 su 切换 成超级用户。这时,重要的是你要在超级用户的 环境下工作,而不是在你自己的环境下。 要切换成超级用户,就用 su 命令加上 用户标识 root。记住不要漏掉连字符。 su - root 现在系统会向你要密码。一旦你输入密码,当前 Shell 就会被挂起,并启动一个新的 Shell。在 这个新 Shell 里,你的用户标识是 root, 你拥有完整的超级用户特权。
[harley]$ su - root
注意 Shell 提示符变成了 #。正如我在 第 4 章所解释的,这表明你是超级用户。 当你以超级用户身份做完该做的事情后,输入 exit,你就会回到原来的 Shell:
# exit
为了方便起见,如果你使用 su 命令时 不带用户标识,默认就是 root,而这正是 你大多数时候想要的。因此,下面两条命令是 等价的。
su -
最后再说一句。如果你的系统是多人共享的,你 以超级用户身份做事时必须小心。我能讲的很多, 但归结起来就是两条基本规则:
1. 尊重他人的隐私。
重要提示 当你以 root 登录时,你能做所有能做的 事,这也意味着你可能会犯错。防止无意间造成 问题(或者灾难!)的最佳办法,是只在必要的 最短时间内充当超级用户。 例如,在我的系统上,我通常以 harley 登录。当我需要执行某项系统管理任务时,我用 su 成为超级用户,恰好够用就行,然后 尽快回到 harley。没有必要一直保持在 root 登录状态,因为我想什么时候再成为 超级用户都可以。 换句话说,把你的大部分时间当作 Clark Kent 来度过,而不是当作 Superman。
正如我在上一节提到的,在超级用户状态下停留 太久可能是危险的:你可能无意间敲进某条会 惹出麻烦的命令。除此之外,还有另一个潜在的 问题。 假设你以 root 登录,恰好觉得饿了。 你暂时离开计算机去拿一点热黄油麦片糕。你 不在的时候,意外地和某人卷入了一场争论: 南半球水池里的水流出时的旋向,是否和北半球 水池里的水相反(*)。等你回来时发现 就在你不在的时候 有个自作聪明的家伙 接管了你的机器,并以超级用户的身份删除了 数百个文件。 * 脚注 并不相反。 当然,无论以哪个用户标识登录,你都不应该在 登录状态下离开计算机。那就像把车不上锁、 钥匙藏在座位下面一样。然而,以 root 身份登录时离开计算机,就像车不上锁、发动机 在转、车门还大敞着。 对付这类无心之失的最好办法,是使用 sudo 命令。 sudo 的职责,是让你以另一个用户标识 执行单条命令。(名字 sudo 的含义是: "替换用户标识,然后做点事"。)和 su 一样,默认的用户标识是 root。因此, 要以超级用户身份运行某条特定命令,输入 sudo,后面跟上该命令: sudo command 例如,要以 root 身份运行 id 命令,你应该用: sudo id (id 命令显示你当前的用户标识。) 当你用 sudo 以 root 身份运行 命令时,系统会要求你输入你自己的密码 (不是超级用户密码)。 作为超级用户,你可以运行任何你想运行的 命令(*)。下面这个简单的例子展示了以 root 身份运行 id 命令时用户 标识是如何变化的。眼下不用担心把所有输出都 看懂。我要你注意的只是用户标识 (uid)的名称如何改变。
[harley]$ id
* 脚注 你也许在想这是不是一个安全问题。正如我提到的, 使用 sudo 命令时,系统要的是你自己的 密码,而不是超级用户密码。这是否意味着,在一台 共享系统上,任何人都可以用 sudo 以 超级用户身份运行命令? 答案是否定的,因为并不是每个人都被允许使用 sudo。只有当你的用户标识在一个特殊 清单上时,你才能使用 sudo。这份清单 保存在文件 /etc/sudoers 中,而且只有 超级用户才能修改它。(等我们在第 23 章谈完 Unix 文件系统之后,这个文件的含义就会 清楚了。) 为了方便起见,一旦你正确输入了密码,在一定 时间内运行 sudo 就不必再次输入密码。 大多数系统的默认值是 5 分钟,不过这可能 不同。这意味着,如果你在 5 分钟之内多次使用 sudo 命令,只需输入一次密码。 名称的由来 su, sudo su(substitute userid,替换用户标识) 命令让你切换到另一个用户标识。sudo (substitute the userid and do something,替换 用户标识并做点事)命令让你在另一个用户标识的 主持下运行单条命令。 名字 su 按两个单独的字母读:"ess-you"。 名字 sudo 则按发音拼读,听起来像 "pseudo"(伪)。事实上,前几次听到别人谈论 sudo 时,你会被搞糊涂,因为听起来 就像他们在说 "pseudo"。 人们的习惯是把 su 和 sudo 不只当作名词,还当作动词使用。例如,让我们 偷听两位喝得有点多的 Unix 用户的对话。 甲:"我有个主意。咱们就为着好玩去编辑一下 密码文件吧。我们只要 pseudo 一下 vipw 命令就行。" 乙:"啊,那太没劲了。咱们还是 ess-you 吧。 我喜欢活得惊险一点。"
前面我们谈过,有时候你必须以超级用户的身份 登录才能完成某些任务。如果你管理的是一台有多 个用户的机器,这种情况肯定相当常见 ("我把密码忘了")。可是,如果整台机器只有你 一个用户,在自己的 PC 上跑 Linux 或 FreeBSD, 这种情形又会有多频繁呢? 答案是:当系统只属于你一个人时,你并不那么 需要变成超级用户。不过,确实有些时候非这样 不可。尤其有一项重要操作,是你想要完成却 必须具备特殊权限的。 大多数 Unix 程序在设计时就允许你通过编辑 配置文件(CONFIGURATION FILE)来定制它们。 配置文件中保存着程序读取的信息,通常是在程序 启动时读取。这些信息会影响程序工作方式。 举例来说,本章前面讨论过启动过程:Unix 引导 进入某个特定的运行级别。这个过程依赖于一个 名叫 inittab 的具体配置文件中的信息 (见下文)。 当你安装新软件时,配置文件就显得格外重要。 这个软件多半要用到一个配置文件,如果你想设定 某些选项,就得修改那个文件。大多数情况下, 具体细节在软件自带的文档里都有说明。 有些软件配有简单易用的程序,帮你修改配置文件。 例如,在你的桌面环境里,就有一些基于菜单的 程序,你可以用它们挑选偏好设置、指定选项。 你可能不知道的是,所有这些偏好和选项都会被 存放在某处的一个配置文件里。当你"应用"这些 改动时,程序所做的一切,不过是按照你的指示 更新那个配置文件而已。 尽管这是修改配置文件的一种便捷方式,但出于 几个原因,你仍然应当学会自己动手编辑这类文件。 第一,大多数程序并不附带基于菜单的配置程序, 所以如果你想做改动,就得自己动手。 第二,自己修改配置文件,比用程序代你操作更快 (也更有乐趣)。 第三,即使有菜单驱动的程序,它也可能无法让你 接触到所有可用的选项和偏好设置。要真正弄清楚 有哪些选择,你只能去看配置文件内部。 最后,查看配置文件还能让你了解底层程序是如何 运作的。程序员在这类文件中写下注释是很常见的, 而有时候,要理解程序那些更微妙的方面,唯一的 办法就是阅读这些注释。 提示 在 Unix 中,你可以放心地去查看任何系统文件, 配置文件也在其中。 在你安全地编辑配置文件之前,必须先满足几个条件。 首先,你要习惯于以超级用户的身份工作。 其次,你必须能熟练使用文本编辑器。最好的选择 要么是用 vi(我会在第 22 章教你), 要么是用 Emacs。 最后,从大的方面来说,你得清楚自己在做什么。 这需要一个积累的过程。 你也许会好奇:Unix 的配置文件和 Microsoft Windows 的做法相比如何?在 Windows 里,程序把 配置信息存放在两个地方:注册表(Registry)里, 以及(有时候).ini 文件里。Windows 用户 被告知最好不要去碰注册表。这是因为,一旦你把 注册表搞坏了,就会给自己招来大麻烦。而且, 注册表的内容缺乏文档说明,其中许多条目根本 没有任何文档。 Unix 的哲学截然不同。这里没有中央注册表。 取而代之的是,每个程序都可以有自己的配置文件。 而且,这个文件的内容是有文档说明的。 用户被鼓励去阅读这个文件,并在合适的时候做出修改。 当然了,如果你把某个配置文件改错了,也可能 引发问题。不过,问题只会局限在那个具体的程序上, 而且多数情况下很容易修复。 提示 在编辑任何重要文件(比如配置文件)之前,先做一份 备份副本。这样,万一出了什么问题,你还可以还原 原始文件。(你会在第 23、24 和 25 章 学习如何操作文件。) 这里举个例子说明我的做法。假设我要编辑一个叫 harley 的文件,而当天恰好是 2008 年 12 月 21 日。 开始动手之前,我会先复制一份文件,把它命名为 harley-2008-12-21。这样,如果我碰上了麻烦, 就能把这个文件复制回原来的名字。 我为什么不用 harley- 或 harley-original 或 harley-old 这样的名字?那样也行, 但有时候我干完活之后还想把备份文件留着。 把日期嵌进文件名里,我就能确切地知道这份备份 是何时创建的。
在上一节里,我告诉过你:在清楚自己在做什么之前, 不要去编辑配置文件。但是,单纯地看看文件里有些 什么,这完全没有理由不可以。 下面列出几个颇有看头的配置文件。要看里面的内容, 你用的是一个叫 less 的程序。less 的工作是把一个文件的内容显示出来,一次显示一屏。 我们会在第 21 章详细讨论 less (包括它名字的由来)。现在我先告诉你:要显示一个 文件的内容,你输入 less,后面跟上文件名。 例如,要查看名为 /etc/passwd 的文件, 你使用的命令是: less /etc/passwd less 一旦启动,就会先给你看第一屏信息。 要往前翻,按 <Space>;要往后翻,按 <b>; 要帮助,按 <h>;要退出,按 <q>。 眼下这些就够你用了。 下面是一份你可能觉得有意思的配置文件清单。 查看它们不需要超级用户权限(只有修改时才需要)。 如果你看不懂自己看到的东西,别担心。总有一天 你会明白的。特别是,等你读完第 23 章, 就会觉得这些文件名很有道理。(注意:这些文件在 大多数 Linux 系统上都找得到。如果你用的是另一类 Unix,其中一些文件的名字可能有所不同。) /boot/grub/menu.lst:关于你的计算机上可以 引导启动哪些操作系统的信息。 /etc/hosts:系统已知的主机名与 IP 地址清单。 /etc/inittab:各个运行级别的定义。 /etc/passwd:关于每个用户 ID 的基本信息。 (真正的口令是经过加密的,存放在别处。) /etc/profile:某个用户 ID 登录时自动执行的 命令。 /etc/samba/smb.conf:Samba 的配置信息。 Samba 是一种让 Unix 系统能够与 Windows 系统共享 文件和打印机的设施。
本章开头我们谈过登录时会发生什么。现在该谈谈 工作结束之后该做什么了。 基本上你有两种选择。你可以关机(SHUTDOWN), 这会停止 Unix 并关闭计算机;或者你可以重启 (REBOOT,也叫 RESTART),这会先停止 Unix, 然后再把它启动起来。这两种操作你都可以通过 菜单里的选项来完成,也可以通过输入命令来完成。 在你的桌面环境里,要关机或重启,就打开主菜单, 选择"Logout"(注销)之类的选项。作为注销过程 的一部分,你可能会被给予关机或重启的选择。 如果没有,那么当你回到登录界面时,可以点击 "Shutdown"(关机)或"Reboot"(重启)。 不过,用图形界面实在没什么意思。用输入命令的 方式关机或重启要有乐趣得多。在我教你这些命令 之前,先让我帮你回忆一下运行级别的概念。 回头看看图 6-1,你会发现有 6 个不同的运行 级别,每一个都会让 Unix 以某种特定的方式运行。 通常情况下,运行级别是在启动过程中被选定的, 目的是引导系统。例如,运行级别 5 会把 Linux 引导进带图形用户界面的多用户模式。 但是,有两个运行级别有着特殊的含义。运行级别 0 会停止系统运行(也就是让它关机),运行级别 6 会重启系统。因此,当你在菜单里选择"Shutdown"时, 就相当于切换到运行级别 0;当你选择"Reboot"时, 就相当于切换到运行级别 6。 如你所料,在 Unix 里几乎任何可以用菜单完成的事, 也都可以通过输入命令来完成。切换运行级别的命令 叫作 init。 要使用 init,你需要是超级用户。一旦成为 超级用户,就输入这个命令,后面跟上你想要切换 到的运行级别。例如,你可以通过切换到运行级别 6 来重启系统: sudo init 6 要关机,你可以切换到运行级别 0: sudo init 0 如果你胆子够大,不妨切换到别的运行级别, 看看会发生什么。 虽然你可以用 init 来重启或关机,但它并非 为日常使用而设计。实际上,我们通常使用另外两个 命令:reboot 和 shutdown。 reboot 命令很简单直白。你只要输入它, 系统就会切换到运行级别 6: sudo reboot shutdown 命令稍微复杂一些,因为你得指定 希望在什么时候关机。选择有好几种,但最简单的 一个就是用 now 这个词: sudo shutdown now 输入这条命令,就是告诉系统立刻切换到运行级别 0。
在引导和关机过程中,Linux 会在控制台显示大量 消息。这些消息大多与查找并配置你系统的硬件部件 有关。另一些消息则与启动或停止以下东西有关: 引导过程所涉及的服务,以及系统启动完成之后 将在后台运行的进程。 逐一讨论这些细节,已经超出了本书的范围。不过, 看看这些消息倒是挺有意思的,就当是看看里面有 什么。 系统启动时,许多消息闪过得太快,你来不及读, 更别提弄明白它们的意思了。但是,一旦你登录 之后,就可以从容地把启动消息显示出来。只要 进到命令行,输入: dmesg | less 虽然启动消息看起来晦涩难懂,但你终究能看懂它们(*)。 * 脚注 如果你是男生,而且生活中有一位特别的人, 这里有个让她对你刮目相看的绝佳招数。 挑个周五的晚上邀请这位特别的人来你家,她一到, 你就说:"今天有份真正的惊喜等着你。"然后给她看 dmesg 命令的输出。如果你懂得够多,就请她 随便挑一条消息,你保证解释给她听。 据我研究,这招配上比萨饼和不含咖啡因的饮料, 效果特别好。 dmesg 命令的工作是显示启动消息。不过 消息实在太多,如果你单独输入这个命令,大部分 输出会在你来得及读之前就滚出屏幕。(试试看。) 正确的做法是用前面那条三段式命令:先输入 dmesg,接着是 |(竖线)字符,再跟上 less。这样就会运行 dmesg,并把它的输出 交给 less,由它一次一屏地 显示出来。竖线所创造的东西叫作"管道" (pipeline)。(我们会在第 15 章讲解管道; 在第 21 章讲解 less。)
本章我们从人和计算机的特点谈起。我解释过, 作为人类,我们的记忆并不完美,也无法同时专注于 两件以上的事情。我们能够做的,是处理复杂的 心理概念,并且在必要的时候,于不到一秒之内 从一个概念切换到另一个概念。 计算机存储和调取数据的速度远比人类快,也远比 人类准确。计算机还能极快地完成那些简单直接 的任务,而且在做的同时,它能在几毫秒之内从一项 任务切换到另一项任务。 人类擅长思考和谋划策略,而计算机擅长在不弄乱 细节的情况下快速完成许多事情。这样一来,机器能够 弥补我们头脑的短处,而我们的头脑也能够与机器那 惊人的能力互为补充。其结果 只要我们做对了 就是人与计算机融合为一,产生的东西既不是人也不是 机器,而是远远大于两者之和的某种事物。 把人机伙伴关系黏合在一起的,是用户界面。在 Unix 中,我们有两种用户界面:图形用户界面 GUI(你的 桌面环境)和命令行界面 CLI(命令行)。 在本书余下的部分,我们将专注于命令行界面。也就是 说,我们要输入命令、学习使用基于文本的程序。要把 这些做好,你必须熟练掌握终端窗口、常规窗口、虚拟 终端以及多桌面/工作区的用法 而且是同时掌握它们。 最终目标是:心里想到要做某件事,然后 不用 过脑子 就把它做出来。你在开车、演奏乐器或 做饭时,已经能做到这一点了。我希望你坐在计算机前、 用 Unix 处理脑力任务时,也能做出同一类型的动作。 既然我们各不相同,我没法教你怎样构思自己每时每刻的 脑力策略。那些本事得你自己练出来。我能做的,是帮 你集中注意力,现在就来提醒你:有那么多精彩的工具 正听凭你差遣。为此,我来总结一下 Linux 默认的工作 环境。 在 Linux 中,你有 6 个基于文本的虚拟控制台,每一个 都有自己的命令行界面。除此之外,你还有第 7 个虚拟 控制台,里面装的是你的桌面环境(图形用户界面)。 在你的桌面环境中,你有 4 个不同的桌面/工作区, 每一个都可以容纳你想开多少个窗口就开多少个窗口, 终端窗口也不例外。 你可以在窗口之间、虚拟控制台之间复制和粘贴文本。 而且,你既可以普通用户的身份工作,也可以超级用户 的身份工作。 要操作你的工作环境,可以使用下面这些快捷键。
在 KDE 中,从一个桌面切换到另一个桌面:
在 Gnome 中,从一个工作区切换到另一个工作区:
在某个桌面或工作区内,从一个任务切换到另一个任务:
在图形用户界面内,切换到某个基于文本的虚拟控制台:
在基于文本的虚拟控制台上,切换到另一个虚拟控制台:
在图形用户界面内复制文本:
在虚拟终端之间复制文本:
在基于图形用户界面的程序内,复制、剪切和粘贴数据:
提示 Unix 拥有有史以来最好的用户界面体系。
复习问题 #1: 什么是时间片? 时间片的典型长度是多少? 复习问题 #2: 什么是 Unix 的 CLI?什么是 GUI? 复习问题 #3: 什么是运行级别? 就在此刻,Fester Bestertester 正坐在阶梯教室的 最后一排,听一场关于畜牧业的枯燥讲座。为了让自己 保持清醒,他正在自己的 Linux 笔记本电脑上玩一个 基于图形用户界面的游戏。Fester 的计算机处于哪个 运行级别? 在校园的另一头,一位 Unix 系统管理员已经把系统 停下来并重新启动,好解决一个重要的硬件问题。 这位管理员的计算机处于哪个运行级别? 复习问题 #4: 在你所用的那台具体 Unix 系统上,是谁充当超级用户? 复习问题 #5: 什么是虚拟控制台? 你如何从一个虚拟控制台切换到另一个? 应用你的知识 #1: who 命令(我们将在第 8 章讨论它)会显示 当前登录到系统上的所有用户 ID 的清单。如果某个 用户 ID 登录了不止一次,who 就会显示出来。 依次在你每一个虚拟控制台上都登录一次。然后切换到 图形用户界面,打开一个终端窗口,输入 who 命令。你看到了什么? 应用你的知识 #2: 能够在桌面之间切换、能够快速复制粘贴, 都是很重要的技能。 在你的图形用户界面里,打开两个终端窗口,各自放在 自己的桌面中。在第一个桌面里,把命令 date (用来显示时间和日期)输入终端窗口。把那条命令 复制到剪贴板。现在切换到第二个桌面,把这条命令 粘贴到另一个终端窗口里。然后,换成两个基于文本的 虚拟控制台,把练习再做一遍。 哪一套复制粘贴程序让你用起来更顺手?为什么? 进一步思考 #1: 有些 Linux 发行版在设置时就决定:安装过程中不创建 root 用户 ID。这种情况下,你的普通口令同时也就是 超级用户的口令。为什么一个发行版要这样设置? 这样做有什么优点?又有什么缺点? 进一步思考 #2: 为什么有那么多人相信自己可以同时想两件以上的事? 像 Unix 这样快速的多任务计算机系统,对这种信念 有什么影响? 这种信念是有益的还是有害的? 就你个人而言,你觉得一边开车一边打电话或发短信 可以吗?换作别人这么做呢?
© 本书全部内容,2026 年版权所有,Harley Hahn
|