用户与计算机交互的方式在不断发生变化。启动后提供纯命令行界面的操作系统已逐渐演化为图形化前端。但是,脱离构成操作系统的构建块有时并非是迈向正确方向的必要步骤。IBM? AIX? 操作系统一直把握着重点:稳定性、功能和稳健性。它通过保留强大的命令行界面 (CLI) 来实现这一目标。如果您未曾学习如何使用 CLI 或需要复习 CLI 的基础知识,请继续往下阅读。
用户与计算机交互的方式在不断发生变化。启动后提供纯命令行界面的操作系统已逐渐演化为图形化前端。然而,脱离构成操作系统的构建块有时并非是迈向正确方向的必要步骤。向图形化用户界面 (GUI) 过渡往往意味着损失功能;而且,用户渐渐倾向于不愿详细了解他们所使用的计算机。幸运的是,与其他 UNIX? 和 Linux? 系统类似,AIX 操作系统一直把握着重点:计算机操作系统的稳定性、功能和稳健性。
大量 UNIX 和 Linux 供应商已充分认识到操作系统的 CLI 的重要性。但是,出于自动化、降低用户使用计算机的难度或其他原因,用户已忘记或从未了解 CLI 的细节。本文向新用户和已经遗忘细节的用户介绍 CLI,以帮助他们记住或回想起 CLI 对于管理、开发和常规 UNIX 计算之所以重要的原因。
什么是命令行?
在计算机上工作时,了解实际使用的工具非常重要。如果您曾经使用过 UNIX 或 Linux,那么您应该听说过术语 shell 或 命令行。这两个术语可以作为同义词使用,并且指的是用户正在运行的实际 UNIX shell。UNIX 中的术语 shell 指的是您在键入命令或执行功能时所使用的接口。
当用户通过控制台或网络登录 UNIX 系统时,将调用可定义 shell(位于 /etc/passwd),并通过配置文件设置用户环境(本文稍后将进行说明),于是用户准备好在 shell 中执行操作。当用户在命令行(即用户正在使用的 shell)中键入命令时,用户只能看到 stdin(即标准输入),这是用户或程序提供的输入。当用户按 Enter 或 Return 键时,通过 shell 发送 stdin 以执行命令,然后用户可能收到 stdout(即标准输出)和 stderr(即标准错误),具体取决于输出重定向的方式(例如,重定向到用户的显示器、文件或打印机)。术语 stdout 表示执行的程序所返回的输出数据,而 stderr 指的是程序遇到或返回的错误。用户不会看到处理单个或多个命令的所有底层代码的执行情况,而是看到非常简单化的输入、输出和错误。由于上述原因,用户登录时调用的程序被恰当地称为 shell,因为它隐藏了操作系统的所有底层调用。
shell 的历史
UNIX shell 至今存在的时间已超过 35 年,它现在仍然在发展壮大!它创始于 1971 年,这一年 AT&T 贝尔实验室的 Ken Thompson 创建了第一个 UNIX shell,它具有贴切的名称 Thompson shell。虽然 Thompson shell 缺少人们日常使用的 UNIX 所具备的一些重要内置功能,如管道 (|)、编写 shell 脚本的能力和 if 条件语句,但是该 shell 的基础功能(如数据重定向)仍存在于现今使用的 shell 中。
后来,在 1997 年,Thompson shell 被 Bourne shell(即 sh)所取代。Bourne shell 是由 AT&T 贝尔实验室的 Stephen Bourne 创建的,它成为 UNIX 第 7 版 (V7) 的缺省 shell。Bourne shell 使 UNIX 的发展向前迈进了一大步。到这时,用户可以编写 shell 脚本,在变量中存储信息和导出信息,控制文件描述符,控制信号处理,使用 for 循环和 case 语句,以及其他大量功能。虽然 Bourne shell 创建至今已有 30 多年时间,目前它仍在大量的 UNIX 系统中广为使用,并且是当今许多 UNIX 系统的超级用户 -root- 的缺省 shell。
在过去三十年中,UNIX shell 获得了许多改进和增强。结果,出现了多种不同的 shell。图 1 显示了少数 UNIX shell 的家族树。虽然该图并不完整,但它显示了衍生出其他较次要 shell 的那些主要 shell。
图 1. UNIX shell 家族树