捐赠?

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
文件

第 4 章...

开始使用 Unix(Starting to Use Unix)

当你上第一堂 Unix 入门课时,你需要学什么,取决于 你将以何种方式使用 Unix。你会在学校或工作单位, 作为共享多用户系统的一名用户来使用 Unix 吗? 还是说你拥有一台自己的 Unix 电脑,由你掌控这台 电脑,并且是唯一的使用者?

在本章中,我们讨论第一种情况:使用一套由他人 维护的 Unix 系统是什么情形。我会向你展示如何 开始和结束一个工作会话,并解释一些基本概念, 比如系统管理员、密码、用户名、用户和超级用户。 在我为你讲解这些概念时,我假设你使用的是一个 简单的基于文本的界面。

在第 5 章中,我们将讨论更复杂的情况: 在你自己的电脑上安装并使用你自己的 Unix 系统。在那一章里,我们会讲解图形界面背后的 基本概念。

如果你根本不打算把 Unix 作为共享系统来使用 呢?如果你只会使用自己的电脑和图形界面呢? 那还有必要读本章吗?

答案是:有。无论你如何使用 Unix,本章将要 介绍的技能与理念都是 Unix 的基础,对每个人 都很重要。(再说了,你可不想错过热狗面包男孩 的故事。)

跳转到页首

系统管理员(The System Administrator)

从最宽泛的意义上说,你可以通过两种方式访问 Unix 系统。第一种,你可能拥有自己的 Unix 电脑,这种情况下你是唯一的用户,并且由你 负责管理系统。

另一种,你可能使用一个共享的多用户系统 — 在学校或工作单位 — 这种情况下, 你只是众多用户中的一个。如果是这样,会有 别人负责管理,所以你不必为系统的维护操心。 不过,你必须遵守一些规则,并在某些限制之内 工作。

当然,你可能两种方式都用得上。例如,你在 学校里使用共享系统,回到家则用自己的 PC。

拥有一台自己的 Unix 电脑听起来更简单,其实 并非如此。事实恰恰相反,使用共享系统反而更 轻松。因为系统不归你所有,别人会替你管理, 这可是天大的好事。

所有 Unix 系统都需要管理与维护。承担这些 职责的人称为系统管理员(SYSTEM ADMINISTRATOR), 通常简称为 SYSADMIN 或 ADMIN。(旧时的叫法是 SYSTEM MANAGER,如今已不太有人用了。)

如果你使用的电脑归某个组织所有 — 比如 一所大学或一家公司 — 管理员很可能是拿薪水的 雇员。事实上,在拥有 Unix 电脑网络的组织机构 里,系统管理员是一份全职工作,需要大量专门 知识。可能有很多管理员,手下还带着一批助手。

在二十世纪九十年代中期以前,拥有自己的 Unix 电脑是极不寻常的事。绝大多数使用 Unix 的人, 都是通过访问共享系统来使用的。Unix 系统由 某个组织(通常是学校或公司)维护,所有用户都 必须遵守一些规则。

大多数时候,人们通过远程方式访问 Unix,要么 使用终端,要么用 PC 来模拟终端(参见 第 3 章)。因此,使用 Unix 最常见的方式是 基于文本的界面,只用键盘和显示器(本章我们就 要这样使用)。只有少数用户通过图形界面使用 Unix。

当你拥有自己的个人 Unix 电脑时,无论好坏, 你都是自己的管理员。往好处说,管理你的系统 是一件极有成就感的事情,它能提升你的技能和 自信,让你感到真正掌控着自己的计算命运。 往坏处说,你有时也会感到沮丧和困惑。

要想用好 Unix,你需要理解一系列基本概念: 文件系统、文本编辑器、Shell 等等,这些我都会 在本书中教你。而要成为一个大型系统或网络的 合格管理员,你需要的远不止这些。你得掌握大量 高深的专门技能,其中许多很遗憾超出了本书的 范围。管理你自己的个人系统则要容易得多,你 只需要基本的 Unix 技能和一颗肯动脑筋的心。

无论如何,不管学会管理好自己的 Unix 电脑要 花多长时间,我可以向你保证,系统管理员永远 都是一段学习的旅程。(最起码,你总能学会 耐心。)

在此之前,让我们继续前进,看看当别人替你 管理系统时,日子是什么样的。

跳转到页首

用户名与密码(Userids and Passwords)

在使用一台 Unix 电脑之前,系统管理员必须先 给你一个名字,用来向系统表明你的身份。这个 名字称为你的用户名(USERID)。userid 一词是 "user identification"(用户标识)的缩合形式, 读作 "user-eye-dee"。

除了用户名,你还会得到一个密码(PASSWORD), 每次开始工作会话时都必须输入它。

一旦你获得使用某个 Unix 系统的许可,我们就说 你在这台电脑上有了一个账户(ACCOUNT)。虽然你 并没有为这个账户支付真金白银,Unix 还是会记录 你使用系统的程度。(Unix 内置了许多记账功能, 你的系统管理员可以用它们来记录谁在做什么。) 此外,你的账户很可能还带有某些预定义的限制, 比如你的文件允许占用多少磁盘空间,或者你可以 打印多少页。

如果你是一名学生,你很可能会遇到的一种限制是 账户有到期日。例如,你的账户可能在学期结束时 自动终止,这是合情合理的。

你的用户名会是什么呢?大多数情况下,系统管理 员会替你选一个用户名。一种常见做法是根据真人 姓名来定。例如,对于 Harley Q. Hahn 这个名字, 用户名可能是 harleyhahnhhahn harleyhhqh

另一些情况下,你的用户名可能体现某种完全客观 的标准。例如,如果你是一名学生,又是 CS110 班 里第 25 个申请 Unix 账户的人,你可能会被分配 用户名 cs110-25

每次开始一个 Unix 会话时,你都必须输入你的 用户名。从那以后,Unix 就用这个名字来识别你。 例如,当你创建文件时,文件并不属于"你"这个 人,而是被你的用户名"拥有"。(这一区别我们 稍后在本章中会讲到。)

重要的是要理解,用户名不是秘密。例如,如果你 用 Unix 收发邮件,你的用户名就是你邮件地址的 一部分。而且随时任何人都能轻易地显示当前正在 使用系统的所有用户名 — 如果你懂得怎么 做的话,你甚至可以显示在这台系统上注册的全部 用户名的清单。

安全当然重要,但它并不要求用户名是保密的。 真正维持安全的方法,是确保密码不外泄。这样, 人人都可以知道还有谁在使用这台电脑,而对系统 的访问则是受控制的。

你的密码很可能是一串毫无意义的字符,比如 H!lg%12,让别人难以猜出。本章后面我会 解释:如果你不喜欢自己的密码该怎么更换它, 以及什么样的密码是好密码。

跳转到页首

登录(开始你的 Unix 工作)(Logging In (Starting Work with Unix))

当你坐到终端前面,为开始工作而经历的过程称为 登录(LOGGING IN)。虽然概念很简单,但术语上 有点小讲究。

当我们把这个概念当动词用时,写成两个词, "log in"。当它以名词或形容词表达同一个概念时, 我们用一个词 LOGIN。

例如:"为了登录,你需要了解登录流程(login procedure)。"或者,"我们需要一台更大的电脑。 现在这台每天都有 500 多次登录(login);想同时 登录的人太多了。"

实际的登录过程直截了当。你只要输入你的用户名和 密码即可。具体是这样进行的。

当某个 Unix 程序想要你输入内容时,它会显示一个 提示符(PROMPT),即一小段消息,表示你必须从 键盘输入。当 Unix 想要表示它在等你登录时,它会 显示如下提示符:

login:

Unix 是在说:"输入你的用户名,然后按 <Return> 键。"

虽然这看起来顺理成章,但我想暂停一下,回答一个 重要的问题:<Return> 键到底是什么?

在第 7 章中你会了解到,Unix 使用一组特殊 按键,它们并不一定对应每台键盘上完全相同的物理 按键。细节我们到时再谈。眼下我只希望你记住: Unix 有一个特殊按键,你按下它来表示你已经输完 了一行输入。这个键称为 <Return> 键。当你 按下 <Return> 键时,它会向 Unix 发送一个 称为换行(newline)的信号。

如果你的键盘上真有一个 <Return> 键,按下 它就会发送换行信号。(Macintosh 便是如此。) 否则,你可以通过按 <Enter> 键来发送换行 信号(PC 便是如此)。因此,在整本书中,当我 告诉你按 <Return> 时,请使用 <Return> 键或 <Enter> 键,看你的键盘上实际有的是 哪一个。

一旦你输入了用户名并按下 <Return>,Unix 就会显示如下提示符,向你要密码:

Password:

输入时你会注意到,密码不会被回显。这是为了防止 别人碰巧从你肩后偷看到你的密码。(请记住,在 Unix 中,用户名不是秘密,而密码是,这就是为什么 登录时用户名会回显而密码不会。)

还要注意,与 Windows 不同,当你输入密码时,系统 不会为每个字符显示一个星号。这意味着如果有人 盯着你看,他不仅看不到你的密码,甚至连你输入了 多少个字符都不知道。

输入密码后,再按一次 <Return>。Unix 会 检查密码是否有效。如果是,Unix 将完成登录过程, 你便可以开始工作了。

如果你的用户名或密码有错,Unix 会显示:

Login incorrect

并让你重试。如果你是远程连接,一些系统会在你 多次登录失败后切断你的连接。这是为了让企图闯入 系统的人无法无限制地一直猜密码。(通常可以试 3-5 次。确切次数由系统管理员控制。)

在你输入用户名和密码时,有三件重要的事情我希望 你记住。

• 注意不要把数字 0(零)和大写字母 O 弄混。

• 注意不要把数字 0(零)和大写字母 O 弄混。

• 注意不要把数字 1(一)和小写字母 l 弄混。

在本节结束之前,我想指出一件很少有人注意到的 趣事。几乎在所有 Unix 系统上,登录程序都以 小写的 "l" 显示 login:,而以大写的 "P" 显示 Password:。没人知道为什么。

— 提示 —

每当你输入一个用户名,Unix 总会接着索要密码, 即使那个用户名实际上是无效的。这使得心怀叵测的 人更难猜出用户名。

例如,如果有人输入用户名 harley,他总会被要求输入密码,即使系统上 根本没有注册过这样的用户名。

当然,这也意味着,如果你把用户名或密码打错了, 你并不会知道是哪一个错了。你只会被告知登录 不正确。

名称的由来

<Return> 键


如今,大多数键盘上都有 <Enter> 键,而 没有 <Return> 键。那么,为什么 Unix 使用的名称是 <Return> 呢?

这是传统的延续。正如我在第 3 章中所解释的, 多年来人们是通过终端而非 PC 访问 Unix 的,而 恰好所有终端都有 <Return> 键。尽管现在 无数 PC 键盘上用的是 <Enter> 键,Unix 的 术语却始终未变。

"Return"这个名字源自打字机。当年,机械打字机 上承载纸张的部分称为"字车"(carriage)。每当你 放入一张新纸,字车都会停在最右边。随着你打字, 字车每次向左移动一个字符。

当一行打完,你会用左手拨动一个操纵杆,把字车 推回右边。与此同时,操纵杆还会把纸张上移一行。 就这样,纸张被定位到新行的开头。

最早的 Unix 终端是 Teletype ASR33 电传打字机 (参见第 3 章)。与打字机不同,它们没有可 移动的字车。然而,在打印文本时,从一行结束 换到下一行开头,确实涉及两个分开的动作。这些 动作与按下打字机操纵杆时发生的情况相类似, 因此沿用了打字机的术语,称为 CARRIAGE RETURN (回车)和 LINEFEED(换行)。(这两个术语在 Unix 世界里至今仍然重要,你会一次又一次遇到它们。)

Figure 4-1 展示了 Teletype ASR33 键盘的照片。 注意,上面既有 <Linefeed> 键,也有 <Return> 键。正因如此,直到今天,Unix 仍然把用于结束一行文本的键称为 <Return> 键。

Figure 4-1: Teletype ASR33 的键盘

Teletype ASR33 的键盘,它是最早被用作 Unix 终端的设备。注意 <Linefeed> 和 <Return> 键(位于第二行的最右侧)。

跳转到页首

登录之后会发生什么?(What Happens After You Log In?)

成功登录之后,Unix 会显示一些提示性消息,随后 邀请你输入命令。然后你便可以一个命令接一个 命令地开始你的工作会话。

你看到的提示性消息会有所不同,取决于系统管理员 如何配置你的系统。例如,Figure 4-2 就是一个来自 FreeBSD 系统的典型例子:

Figure 4-2: 登录消息

成功登录后,你会看到欢迎消息。在这个例子中, 我们看到的是 FreeBSD 系统显示的一条典型消息。

Last login: Sat Jun 28 17:02:18 on ttyp1

Copyright 1980,1983,1986,1988,1990,1991,1993,1994
The Regents of the University of California.
All rights reserved.

FreeBSD 4.9-RELEASE: Wed Mar 8 16:26:07 PDT 2006

Welcome to FreeBSD!

第一行显示了我们上次使用当前用户名登录这台 电脑的时间。行末的 ttyp1 是当时所用终端的名称。

每次登录时,请花一点时间查看这一行;它是出于 安全原因而显示的。如果你看到的时间比你记忆中的 更近,可能有人在未经你许可的情况下使用了你的 账户。果真如此,请立即更改你的密码。(本章后面 我会解释怎么做。)

接下来的三行是版权信息。正如你在第 3 章中 所回忆起的,FreeBSD 建立在 U.C. Berkeley 的工作 之上,因此版权所有者是加利福尼亚大学,这很容易 理解。

倒数第二行显示我们使用的是 FreeBSD 4.9 版。 日期和时间表明内核是"构建"(build)于 2006 年 3 月 8 日下午 4:26 的——也就是生成的时间。 (Unix 使用 24 小时制时钟。)

最后,最后一行是一位友好的 FreeBSD 程序员留下的 问候语。

登录消息显示之后会发生什么,部分取决于你的系统 是如何设置的。作为登录过程的一部分,Unix 会执行 一份预定义命令清单,这些命令保存在特殊的初始化 文件里。其中一些文件由系统管理员控制,从而确保 每次有人登录时都会执行某些特定任务。例如,他可能 希望在每次有人登录时向所有用户显示一条特定消息。

除了通用的初始化文件之外,每个用户名还有自己的 个人初始化文件,可以进行定制。你第一次登录时, 你的初始化文件里包含的是系统管理员放进去的默认 命令。随着你经验渐丰,你可以修改这些文件以适应 自己的偏好。例如,你可以让 Unix 在你每次登录时 执行某个程序。

我们将在第 14 章讨论这些文件,届时我们已经讲完 了使用 Shell 的细节和基本概念。(正如我在第 2 章 中提到的,Shell 是读取并处理你命令的程序。)

跳转到页首

开始工作:Shell 提示符(Getting Down to Work: The Shell Prompt)

初始化命令执行完毕后,你就准备好开始工作了。 Unix 会启动 Shell 并把控制权交给它。随后 Shell 会显示一个提示符 — 称为 Shell 提示符 (SHELL PROMPT) — 并等待你输入命令。你要 做的就是输入命令并按下 <Return> 键。Shell 随后会对命令作相应处理,通常是运行某个程序。

例如,如果你输入启动邮件程序的命令,Shell 会确认 该程序正常启动,并把控制权交给它。当邮件程序结束 后,控制权会回到 Shell,Shell 将显示一个新的 提示符,等待下一条命令。

最终,当你再也没有命令要输入时,你可以通过注销 (下面会讲)来结束工作会话,届时 Shell 将停止 运行。

知道 Shell 何时在等你输入命令非常重要。因此, Shell 提示符被特意设计得格外醒目。

在 Unix 世界里有许多不同的 Shell,实际的提示符 取决于你使用的是哪一个。三种最受欢迎的 Shell 是 (按顺序)Bash、C-Shell 和 Korn Shell。我会在 本书后面(第 12-14 章)逐一详细讲解。眼下,我 只想让你知道每种 Shell 的基本提示符长什么样。

对于 Bash 和 Korn shell,提示符是美元符号:

$

对于 C-Shell,提示符是百分号:

%

如果你的系统管理员定制了你的环境,提示符可能会有 些不同。例如,它可能显示你所登录机器的名称, 比如:

nipper$

在这个例子里,提示符告诉我们正登录在一台名为 nipper 的机器上。等你水平更高一些,你可以 用许多不同的方式定制你的 Shell 提示符。不过, 有一样东西你绝不应该更改,那就是提示符的最后一个 字符($%)。这个字符提醒我们: Shell 正在运行,并且在等你输入命令。而且,由于 各种 Shell 使用不同的提示符,这个字符也提醒你 正在运行的是哪个 Shell。(确实,Bash 和 Korn shell 都使用 $ 提示符,但记住自己用的是 哪个 Shell 并不困难,所以实际上并不存在真正的 歧义。)

无论你使用的是哪个 Shell,一旦看到提示符,你就 可以输入任何想输入的命令,然后按下 <Return> 键。如果你是初次登录并想练练手,可以试试 date 命令来显示时间和日期; whoami 命令来显示你的用户名;或者 who 命令来显示当前已登录的所有人的用户名。想再多 打探一些,可以试试 w 命令,它会告诉你谁登录了以及他们在做什么。

跳转到页首

注销(停止你的 Unix 工作)(Logging Out (Stopping Work with Unix)):
logout, exit, login

当你在 Unix 上工作完毕,你要通过注销(LOGGING OUT)来结束会话。(当这个概念以名词或形容词出现 时,我们用一个词 LOGOUT。)你注销是为了告诉 Unix:你在当前用户名下的工作已经结束了。一旦 注销完成,Unix 会停止你的 Shell,结束你的工作 会话。

千万不要忘了,在使用共享 Unix 系统工作结束后 一定要注销。如果你扔下仍处于登录状态的终端(或 电脑)转身就走,任何人都可以走过来,冒用你的 用户名使用这套 Unix 系统。

轻则,你可能冒着头被人拿你的用户名瞎胡闹的风险。 重则,某个捣蛋鬼可能删除文件(包括你的文件), 制造各种各样的麻烦。如果事情真的发生了,你也 难辞其咎:在公共场所让终端处于登录状态,就像 把你的车不上锁、钥匙还插在点火开关上一样。

注销有几种方法。第一,你可以等到看到 Shell 提示符后按 <Ctrl-D>。(按住 <Ctrl> 键, 同时按 <D> 键。)

按下 <Ctrl-D> 时,它发送一个称为 eof 或 "end of file"(文件结束)的信号。本质上, 这是在告诉 Shell 没有更多数据输入了。Shell 随即 终止,Unix 便把你注销。(我们将在第 7 章 详细讨论 Unix 键盘。)

你以后会发现,文件结束信号还有其他用途,所以你 完全可能多按了一次 <Ctrl-D>,一不小心把自己 给注销了。

因此有一个保护机制。大多数 Shell 都允许你设置:不要通过按 <Ctrl-D> 来注销。 设置之后,你必须输入一个专门的注销命令。这样 一来,就不可能意外注销了。

你的系统管理员可能已经把系统设置成默认不能通过 按 <Ctrl-D> 来注销。如果是这样,你必须使用 专门的注销命令。它们是 logoutexit

要弄清在你的系统上必须怎样注销,可以试着按一下 <Ctrl-D>。如果管用,那就没事。如果不管用, 说明你的 Shell 被设置成忽略 <Ctrl-D>, 你可能会看到类似这样的消息:

Use "logout" to logout.

这时,请使用 logout 命令。(输入 "logout" 并按 <Return> 键。)反之,如果你看到的是 类似这样的消息:

Use "exit" to logout

你就需要使用 exit 命令。

注销的最后一种方法是使用 login 命令。它告诉 Unix 把你注销,然后为 下一个人登录做好准备。你被注销后,Unix 会通过 显示原来的提示符来询问新的用户名:

login:

如果你想注销,但又希望让电脑或终端保持就绪、 方便别人登录,这个命令就非常顺手。

— 提示 —

在某些系统上,login 命令不会把你完全 退出。相反, login 只是临时切换用户名,但从正式的角度 说,你仍然以原来的名字登录着。等新的人注销后, 他会发现自己又回到了你原来的会话中。

如果你的系统是这种情况,你不应该使用 login, 因为它可能导致别人最终登录在你的用户名下。

你可以通过测试来了解你的 login 版本是怎么工作的。输入 login 命令,然后登录、注销,看看你是否回到 了原来的会话。如果是,那么用 login 来 注销就不安全,请改用 logoutexit

跳转到页首

大写与小写(Upper- and Lowercase)

Unix 区分小写字母和大写字母。例如,在讨论可能 的用户名时,我用了 harleyhahn 这两个例子,它们都以小写 "h" 开头。同时,我 提出的候选密码是 H!lg%12,其中包含两个小写字母和一个大写字母。

有些操作系统被设计成忽略小写与大写字母的差别, 一个著名的例子就是 Microsoft Windows。Unix (它的历史要悠久得多)则是按更精确的方式编写的。

为了便于叙述,我们把小写字母称为小写(LOWERCASE), 把大写字母称为大写(UPPERCASE)。这些名称源自 打字机术语。使用老式打字机时,按下 键 会把"上层"(upper)字模移到打印位置,从而打出 大写字母。

— 提示 —

在 Unix 中,输入名称或命令时必须确保精确。例如, 如果你的用户名是 harley,登录时必须全部 输入小写字母。如果你输入 Harley,Unix 会 认为它是一个完全不同的用户名。同样,注销时你 必须输入 logout,而不是 Logout

当一个程序或操作系统区分大写与小写字母时,我们 说它是区分大小写的(CASE SENSITIVE)。因此,我们 可以说 Unix 是区分大小写的,而 Windows 不是。

既然 Unix 认为大写字母不同于小写字母(事实确实 如此),系统管理员就有可能分配两个仅字母大小写 不同的用户名,例如 harleyHarley。 不过在实践当中,你绝不会见到这样的用户名,因为 那太让人困惑了。实际上,惯例是用户名一律只用 小写字母。

为了在本书中保持一丝不苟的准确,我不会把命令名 大写,即使它们出现在句首。例如:"logout, exitlogin 是三个可用来注销的命令。"

请注意,大小写之别只存在于你登录和输入 Unix 命令的时候。当你使用处理普通文本数据的程序 — 例如,你用文字处理软件撰写文档 — 按常规方式输入即可。

跳转到页首

一个 Unix 工作会话示例(A Sample Session with Unix)

Figure 4-3 展示了一次简短的 Unix 会话。这个 例子是在一套共享系统上做出来的,当时有多个 用户名同时登录。

Figure 4-3: Unix 工作会话示例

login: harley
Password:

Linux weedly 2.6.22-14-generic Tue Jun 24 16:53:01 2008

The programs included with the Ubuntu system are
free software; the exact distribution terms for
each program are described in the individual files
in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the
extent permitted by applicable law.

Last login: Sat Sep 20 08:33:17 from nipper.harley.com

harley@weedly:$ date
Mon Sep 29 10:34:36 PDT 2008

harley@weedly:$ who
tammy  tty1   Sep 28 21:25
linda  pts/0  Sep 29 07:13 (static)
tammy  pts/1  Sep 29 09:31 (coco)
casey  pts/2  Sep 29 10:07 (luna)
alex   pts/4  Sep 29 10:27 (alpha.taylored-software.com)
harley pts/3  Sep 29 10:34 (nipper.harley.com)

harley@weedly:$ logout
Connection to weedly.wordsofwonder.net closed.

会话从使用用户名 harley 登录开始。注意 Unix 不回显密码。

用户名和密码被接受后,Unix 系统会自报家门。 在这个例子中,你可以看到我们在一台名为 weedly 的电脑上使用 Linux。

后面的那串数字显示的是关于内核的信息。内核 版本是 2.6.22-14-generic;它构建于 6 月 24 日下午 4:53。(记住,Unix 使用 24 小时制时钟。)

接下来是两条关于 Ubuntu 的消息,Ubuntu 是这个 特定 Linux 发行版的名称。

Ubuntu 消息之后的一行,显示了我们上次用同一 用户名登录的时间。那次登录是在 9 月 20 日上午 8:33,连接来自一台名为 nipper.harley.com 的电脑。

最后,开场程序结束,我们看到了 Shell 提示符。 在本例中,提示符被配置为显示用户名的名字 (harley)、电脑的名字(weedly)以及 $ 字符。

$ 表示我们使用的 Shell 是 Bash,并且 Shell 已准备好接受我们的命令。

我们输入 date 命令,它显示当前的时间和 日期。(Unix 确实有一个 time 命令,但它 并不显示时间,而是计算执行指定命令所花费的 时间。)

date 命令显示完输出之后,我们又看到了 Shell 提示符。接着我们输入 who 命令。 它显示当前登录到系统上的所有用户名的清单。

第一列显示用户名。注意 tammy(他恰好是 系统管理员)在两个终端上登录着。

第二列 — tty1 pts/0pts/1 等等 — 是正在 使用的终端的名称。

第三列显示该用户名登录的时间。

最后一列显示用户是从哪些电脑登录进来的。前三台 电脑(staticcoco luna)与 weedly 在同一个网络上。后两台在远程网络上, 这就是我们看到更长的名称的原因。

who 命令执行完毕后,我们又看到一个 Shell 提示符。我们输入 logout 命令,结束会话。

如我所说,用户名 tammy 登录了两次。Unix 允许你在不注销的情况下随意登录多次。不过,你 通常一次只会使用一个终端。在我们的例子里, tammy 是系统管理员,所以没关系。

但是,如果你输入 who 命令,发现自己登录在多个终端上,你就该弄明白 是怎么回事了。你可能在上一次工作会话结束时 不知不觉没有注销。或者,你可能在运行多个 X 会话(参见第 6 章),每个这样的会话都会显示为 一个独立的终端。还有一种可能,解释就没那么 美好了:有人可能在未经你许可的情况下使用你的 用户名。

跳转到页首

更改你的密码:passwd(Changing Your Password: passwd)

建立你的 Unix 账户时,系统管理员会给你分配一个 用户名和一个密码。系统管理员通常有自己的一套 组织方式,你未必能得到你想要的用户名。

例如,你可能想用你的名字作用户名,但系统管理员 可能已经决定所有用户名一律用姓氏。别跟你的系统 管理员较劲。他或她责任重大 — Unix 系统 很难管理 — 而且很可能工作量严重超负荷。

不过,你可以自己更改密码。事实上,一些系统管理员 会使用一种称为密码过期机制(PASSWORD AGING)的 功能,出于安全原因强制你定期更改密码。(密码 过期机制也可能用于防止你过于频繁地改密码。) 例如,你可能被要求每 60 天更改一次密码。

如果你的系统启用了密码过期机制而你的密码已经 到期,下次登录时你会收到通知。届时你将被迫 选择一个新密码。

除了密码过期机制之外,你还可以随时自愿更改密码 (只要系统管理员没有设置限制)。更改密码请使用 passwd 命令。

输入命令后,passwd 会请你输入旧密码。 这证明你有权进行更改。否则,任何一个路过未被 注销的终端或电脑的人都可以改掉你的密码。

接着,passwd 会请你输入新密码。有些系统 要求所有密码满足某些规定。例如,你的密码可能需要 至少八个字符。如果你的新密码不符合本地标准, 系统会告知你,并要求你另选一个。

最后,passwd 会请你重新输入一遍新密码。 把新密码输入两次,可以确保你没有打错。

输入密码时,字符不会回显。这可以防止任何人从你 肩后偷读你的新密码。

名称的由来

passwd


要更改密码,你要使用 passwd 命令。很明显,passwd 是 "password" 的缩合形式,那么为什么不把命令 命名为 password 呢?

答案是:Unix 人士喜欢短名字。随着你学习 Unix, 你会一再遇到这个传统。例如,列出文件的命令是 ls;复制文件的命令是 cp;显示进程 (正在运行的程序)状态的命令是 ps。诸如此类 的名字还有很多。

起初,少写几个字母似乎没必要,甚至有点怪,但 一旦习惯了,你会发现这种简洁用起来很舒心。

跳转到页首

如何选择密码;黑客与破解者(Choosing a Password; Hackers and Crackers)

我们使用密码,是为了确保只有得到授权的人才能 访问 Unix 账户。可以想象,总有一些聪明人乐于 尝试闯入别人的系统。这样的人称为破解者 (CRACKERS)。(注:你经常会看到捣乱的人被称为 黑客 hacker。两者是有区别的,下面我会解释。)

有些破解者只是想与 Unix 安全系统斗智,看自己 能否偷偷混进去。另一些破解者则以造成真正的 破坏为乐。

因此,你有必要做到:(1)绝不把密码告诉任何人; (2)选择一个不容易被猜到的密码。记住,如果你 把密码给了某个损坏计算机系统的人,你要承担责任。

你刚获得 Unix 账户时,密码由系统管理员替你 选定。任何时候,你都可以使用 passwd 命令更改你的密码。

选择密码的规则,其实是一份"不要选什么"的指南:

• 注意不要把数字 0(零)和大写字母 O 弄混。

• 不要选你的用户名(如 harley),也不要选倒着拼写的用户名 (yelrah)。这就好比把家门钥匙藏在脚垫底下。

• 不要选你的名或姓,也不要任何姓名的组合。

• 不要选爱人或朋友的名字。

&Bull; 不要选任何词典里存在的单词,任何词典。

• 不要选对你有意义的数字,例如电话号码、 重要日期(如生日)、社会安全号码等等。

• 不要选与哈利·波特、星球大战、蒙提·派森、 《银河系漫游指南》或任何其他流行文化内容哪怕 有一点点关系的密码。

• 不要选键盘顺序,如 123456qwerty1q2w3e4r。有些猜密码的程序专门寻找这类 模式。

• 不要使用 fred 这个密码。很多人选它 是因为它好打字,但它也是破解者最先尝试的密码之一。

此外,还有几条你应该养成的常规预防措施:

• 绝不要把密码写在纸上。(等你弄丢之后, 准有人会捡到。)

• 定期更改密码(每月一次就比较合适)。

在破解者的圈子里,存在专门用来猜密码的程序。 这些程序不仅会作出聪明的猜测(如你的名、姓 等等),还会使用庞大的候选密码清单来尝试能否 命中。例如,有词典单词清单、名字和姓氏清单、 电影演员清单、电影片名清单、互联网地址清单、 美国邮政编码清单,等等等等,还包括外语单词。

因此,如果你想到的是一个众所周知又自鸣得意的 点子,破解者多半早就捷足先登了。对于与流行电影、 图书和电视节目有关的密码,尤其如此。例如,如果 你是一名大学生,星球大战和蒙提·派森在你出生之前 就已经很流行了,你几乎想不出哪个名字或词语不会 出现在广为流传的破解者清单上。

密码破解程序的成功率远远超出你的想象,所以请 明智地选择密码,保护好自己(和你的文件)。最好 的办法是编造一串毫无意义的字符组合。为了更加 保险,把大写、小写、数字和标点混在一起。(有些 系统会强制你这样做。)举个例子,想想本 章前面用过的密码 H!lg%12。这样的密码 很难被猜到。

如果你怀疑有人知道了你的密码,马上改掉它。如果 你使用的是共享系统又忘了密码,你只需要告诉系统 管理员即可。他或她可以在不知道旧密码的情况下 为你指定一个新密码。然后你可以把新密码改成你 想要的任何样子。

理想的密码是:你不用写下来就能记住,谁都猜不到, 而且永远不会出现在破解者的单词清单上。一个好 办法是先想一个你自己觉得有意义的短语或句子, 再把它缩成简写。这里举几个例子:

dontBL8

(取自 "Don't be late",意为"别迟到")

tHd-bBic

(取自"热狗面包男孩(*)很酷")

2b||~2b

(给 C 语言程序员:"To be or not to be",生存还是毁灭)

wan24NIK8?

(随意的无意义字符串)

你明白这个思路就行。只是务必记住:在兴冲冲地 创造一个绝酷密码时,要忍住炫耀的诱惑,别告诉 任何人,哪怕只是为了显示你有多聪明。

* 脚注

热狗面包男孩有一天放学回家。他妈妈看着他 说:"你看上去很不开心。今天学校里出什么 状况了吗?"

"是的,"他回答道,"我讨厌历史课。"

"为什么呢?"热狗面包男孩的妈妈问。

"因为我们读了又读,听老师讲个没完,还要 背那么多知识点,可我们对热狗面包却一无 所知。"

"孩子啊,"妈妈说,"我跟你说过多少遍了? 历史都是由腊肠(wieners,谐音 winners, 胜者)书写的。"

名称的由来

Hacker(黑客),Cracker(破解者)


有两类人把大量时间花在编程上:黑客和破解者。 黑客(HACKER)是指把时间花在有用的(或至少 是无害的)编程项目上的人。

HACK 一词常被用作动词,表示一种超乎寻常的 编程热忱。例如:"埃尔莫整个周末都在猛敲 (hacking)他的文件共享程序。"

因此,"hacker"(黑客)一词常常用于褒义, 形容能够爆发出海量书呆子式精力的人。同样, "hacker"也指那种懂得如何利用计算机创造性 地解决问题的聪明人。

黑客是对社会有用的人,虽然很少"酷"。世界上 最富有的黑客是比尔·盖茨。

破解者(CRACKER)则是坏人:以闯入计算机系统 并做掌权者不想让他做的事为乐的人。(注意我 用的是"他"。出于某种原因 — 也许是基因 缺陷 — 几乎所有破解者都是男性。)

破解者是你绝不想让姐姐嫁给的那种人。家里有个 黑客倒还不错。只是所有的婚礼请柬都会通过邮件 送达,而且在蜜月期间,你会每天收到一封邮件, 汇报这对新人的一举一动,还附上一个网址,那里 有他们旅行的最新照片和随时更新的博文。

跳转到页首

检查是否有人用过你的 Unix 账户: last(Checking If Someone Has Been Using Your Unix Account: last)

每次登录时,都要仔细看看最初显示的消息;大多数 系统会告诉你上次登录的时间和日期。如果你不记得 那时登录过,可能有人在用你的账户。

要进一步检查,可以使用 last 命令。只要输入 last,后面跟上你的用户名 即可。例如,如果你以 harley 登录,就输入:

last harley

你会看到一些信息,告诉你最近一次、或最近几次 登录的情况。

如果你不小心输入命令时没带用户名:

last

你会看到关于系统上所有用户名的信息。这可能 会刷屏好一阵子,所以如果想终止这个命令,按 <Ctrl-C>。(按住 <Ctrl> 键,同时按 <C>。)

你可能会觉得,输入不带用户名的 last 命令,通过查看别人何时登录来窥探大家,一定 很有意思。嗯,想干你就可以干,但这很快就 无聊了。如果你闲着没事干,去玩我在 第 8 章中介绍的那些程序,可能更有乐趣。

跳转到页首

用户名与用户(Userids and Users)

用户(USER)是以某种方式使用 Unix 系统的人。 然而,Unix 本身并不知道用户这回事:Unix 只 知道用户名。

这个区别很重要。例如,如果有人用你的用户名登录, Unix 无从知道那到底是不是真正的你(这就是 为什么你要保护好自己的密码)。

在 Unix 的世界里,只有用户名才拥有真正的身份。 拥有文件、运行程序、发送邮件、登录和注销的都是 用户名,而不是用户。这意味着,如果有人能够用你的 用户名登录,他就拥有和你完全相同的权利。他能改动 你的文件,冒你的名字发送邮件,如此种种。

在本章前面,我们见过一个会话示例,其中用 who 命令查看谁登录着。Figure 4-4 显示了该命令的输出。

Figure 4-4: who 命令的输出

$ who
tammy   tty1   Jun 28 21:25
tlc     pts/0  Jun 29 07:13 (static)
tammy   pts/1  Jun 29 09:31 (coco)
casey   pts/2  Jun 29 10:07 (luna)
harley  pts/3  Jun 29 10:52 (nipper.harley.com)
alex    pts/4  Jun 29 14:39 (thing.taylored-soft.com)

注意,你看到的只是用户名,而不是人名。这是因为 Unix 系统里充斥的是用户名,而不是用户。

跳转到页首

超级用户的用户名: root(The Superuser Userid: root)

在 Unix 内部,所有用户名都大体平等,只有一个 显著的例外。

时不时地,系统管理员需要拥有特殊权限。例如, 他或她可能需要给系统添加新用户、修改某人的密码、 更新某些软件,等等。

为此,Unix 支持一个特殊的用户名,称为 root,它拥有超乎寻常的权限。用 root 用户名登录的人,允许为所欲为。 (显然,root 密码是严加保守的秘密。) 当有人以 root 身份登录时,我们称他或她 为超级用户(SUPERUSER)。

起初,root 这个名字可能让人摸不着头脑。 不过,在第 23 章你会看到,整个 Unix 文件系统的基础称为"根目录"(root directory)。 因此,root 这个名字指代的是 Unix 中 极为重要的一部分。

大多数时候,系统管理员用普通用户名做普通的 工作,只在需要特殊权限时才切换为超级用户。 特殊工作一做完,系统管理员就会切回自己的普通 用户名。这就防止了超级用户的权力无意间造成 破坏。

例如,如果输入 rm(remove,删除)命令时 出了差错,就可能意外删除文件。如果你用自己的 用户名登录,最坏也不过是删掉自己的文件。如果你 以 root 身份登录,一条写错的 rm 命令就可能把整个系统各处的文件删掉,酿成大祸。

— 提示 —

当 Shell 准备好接受你的命令时,它会显示一个 提示符。提示符的最后一个字符告诉你用的是哪个 Shell。例如,Korn shell 和 bash 使用 $ 字符。C- Shell 使用 % 字符。

无论你使用哪个 Shell,当你以超级用户身份登录 时,提示符都会变成 # 字符。看到 # 提示符时,务必小心:超级用户权力很大。

跳转到页首

享受乐趣,同时注意计算安全(Having Fun While Practicing Safe Computing)

Unix 从早年设计之时起,就是为需要共享程序和 文档、又乐于互相帮助的人们打造的。系统的基本 设计假设每个人都是诚实善意的。即使是现代的 Unix,有了密码和安全措施,也做不到百分之百 刀枪不入,而且本来也没打算如此。使用 Unix 的 人理应尊重其他用户。

由于 Unix 如此复杂,总会有少数破解者以战胜 系统为乐。在某些环境里,那些想出办法闯入系统、 暗中搞鬼的年轻程序员会被容忍,甚至也许 还会因他们的机巧而受人钦佩。

但在 Unix 社区可不是这样。破解者和捣乱者会被 追查并受到惩罚。例如,我前面提到过,存在用来 猜别人密码的程序。在一些学校,仅仅被抓到运行 这样的程序,就足以被立即开除。

不过,Unix 美妙之处在于,它有那么多富有挑战、 令人愉快的消遣。你(作为我的读者之一)不大可能 无聊到去惹真正的麻烦。即便如此,如果你哪天真有 这个念头,请记住:系统管理员总是工作超负荷, 而对那些故意制造麻烦的人,他们没什么耐心。

如果你发现自己喜欢 Unix,手头又恰好有多余的 时间,你可以从教导和帮助他人中获得极大的乐趣 — 这是 Unix 最重要的两个传统。

跳转到页首



练习(Exercises)

复习题 #1:

用户和用户名有什么区别?

复习题 #2:

注销有哪四种不同的方法?

复习题 #3:

你怀疑有人未经你许可使用了你的 Unix 账户。 你如何查证确有其事?

假设你发现确实有人一直在用你的账户,但你不知道 是谁。你如何阻止他?

复习题 #4:

超级用户的用户名是什么?

实践题 #1:

能够更改密码,是开始使用 Unix 之前必须掌握的 一项基本技能。每次改完密码,都应当立即测试, 确保它能正常工作。

使用 passwd 把密码改为 dontBL8(取自 "Don't be late",意为"别迟到")。

注销后再登录进来,确保新密码有效。

然后把密码改回原来的样子。

再测试一次,确保成功。

思考题 #1:

Unix 是区分大小写的;也就是说,它区分小写 (小写字母)和大写(大写字母)。Microsoft Windows 不区分大小写。例如,在 Unix 中, harleyHarley 是两个完全不同的名字。而在 Windows 中, 它们是一样的。

你认为最初的 Unix 开发者为什么选择让 Unix 区分大小写?微软又为什么选择让 Windows 不区分大小写?

你更喜欢哪种做法?为什么?

思考题 #2:

当你使用 passwd 更改密码时,程序要求你把新密码输入两遍。 为什么?

思考题 #3:

为什么要有超级用户,这为什么重要?

跳转到页首