红联Linux门户
Linux帮助

使用shell

发布时间:2005-06-10 00:12:26来源:红联作者:cooc
超级工具
您或许听过这样的论调:命令行 (the mommand line) 早就已经过时了,那东西神秘兮兮的,等等。有些人甚至觉得操作系统中应该没有这些命令才好。
事实是上,您 可以 不懂任何 shell ,就能使用 Linux 。您启动系统后可以直接进入 X Window ,最后在 X Window 下关机。您可以用 Mandrake Control Center (控制中心) 和 Webmin 配置您系统的各个方面。

我坚信,用 Linux 而不懂 shell ,就象开车只会用头档(first gear) 一样。当然,最初看起来,直接而简单,在大多数情况下都管用。但速度慢,而且无法真正体验驾驶的乐趣。
对,命令行很 有趣 。就象用一大堆收集到的积木,竟可以完成许多意想不到的创举,一些极其复杂的工作,只需几行命令。这是因为,在 Unix 中,shell 可不是简单的命令解释器 (典型的有 Windows 中的 DOS ) ,而是一个全功能的编程环境。
这并不意味着 shell 非常容易学通,您知道,好事多磨,这还是要花点工夫的。;-) 但请相信我,这绝对值得。您在很短时间内,就能被一大帮门外汉吹捧为 Unix wizard (奇才) 。*grin*

为了说明 shell ,这里需要一些背景知识。

追溯到 Unix 诞生的那个年代,当时还没有现在流行的“个人计算机”。被称为计算机的机器,还是吞吐磁带与 magnetic memory (用术语‘core’来表示系统 memory) 的庞然大物。DEC 公司 (现在的 Compaq) 推出的 PDP-11 ,体积小 (被称为 mini) 而且价格底,在大学中引起了巨大的反响,很多学校直到那时才买得起一台计算机 (PDP-11 物美价廉,只有 10000$)

这些机器的操作系统由汇编语言、机器语言写成,所以运行起来效率很高,但都无法移植 (unportable) 。每家计算机公司都给自己的机器配上独有的操作系统,然后再销售。
这种笨拙的作法很快就被人们意识到了,于是就开始兴建一个可以在不同品牌机器上运行的操作系统。1969 年,Ken Thompson 开始写后来成为 Unix 的第一行代码。 (Thompson 曾经参加了一个项目:MULTICS,Unix 是与这有关的一个玩笑词) 其实,Dennis Ritchie 为这个新的操作系统设计了一种新的编程语言---- C 语言后,事情才真正开始。
虽然 Unix 的效率不及原来的操作系统,但有三个决定性的优点:可以任意移植到其他机器,其中的 C 语言大大简化了编程,而且这些都 free 。很快,全美国的大学都忙着开始为机器安装 Unix 。
终端(Terminals)

Unix 是可以在许多种机器上运行的操作系统,但人们又如何使用这些机器呢?他们是通过无声的terminals 来连接到这些机器,也就是用键盘、显示器及足够的 electronics (电子元件) 组成的机器与中央计算机 central computer) 相连。在这些终端上,用户可以敲字符(teletypy) ,这就是字符串‘tty’表示终端设备文件,和‘getty’命令的名称来历。
您可能会问,现在这些东西都在哪儿。 这些终端的厂家无法达成一项最终标准,这导致每种牌子的终端都有各自的键盘布局、在屏幕上显示字符的方法、发送或接收什么信号表示什么字符、控制代码等等。

为了避免这些混乱,就创建了一个含有所有不同终端特性的 (capability) 文件,这就是‘termcap’。用一个工具打开‘/etc/termcap’瞧瞧,可别吓着了 ;-) 。
Linux 终端大多数用‘vt100’或‘linux’作为终端类型。
xterms
在八十年代初期,产生了一个 Unix 的图形子系统---- the X Window System 。九十年代早期,为了更好地实现基于 Inter 的 Unix 类系统上 (如FreeBSD、NetBSD、Linux) 的应用,产生了一个系统分支---- XFree86 。
X Window 中一个很大的好处是可以运行多个虚拟 (virtual) 终端。甚至在 X Window 下就有这么个应用程序----‘xterm’。您将发现‘xterm’和‘virtual terminal’在很多情况下都是一样的。有的地方说‘打开一个 xterm’,其实您不是非要用‘xterm’程序,其他的终端模拟器 (terminal emulator) ,如 rxvt、konsole、aterm、eterm、wterm 等等,一样有效。

终端模拟器 (又称为虚拟终端) 通过伪 (pseudo) tty 设备---- pty 与系统相连,并且使用自己的显示标准---- xterm 。这导致不同的终端模拟器可能在一些按键或程序上存在细小的差别,这取决于模拟器多大程度上遵守了‘xterm’的显示标准。
Shells
为了在终端中运行程序,需要 shell 。shell 是操作系统的一部分,用来与用户打交道,并且可以用来协调各个命令。
第一个真正的 Unix shell ---- ‘sh’,亦称为‘Bourne shell’,诞生于 1975 年,作者是 Steve Bourne 。 很快,出现了其他 shell ,如基于原始‘Bourne shell’的‘ksh’、‘zsh’,后者常用作专属 Unixes 系统中的标准 shell ;也有一些从 C 语言中衍生出来的 shell ,如‘csh’或‘tcsh’。

在 Linux 中,标注的 shell 是‘bash’,即 the GNU Bourne-Again Shell (有点玩笑的味道……) 。这个 shell 功能非常强大 (甚至有人觉得太庞大了) ,压缩的 man page 就有 50 KB 。
Shell 起步

首先,有一点小说明:在平常应用中,您不应该用‘root’帐号运行 shell ,如果您还是新手,这一点尤其要注意。作为普通用户,不管您有意还是无意,都无法破坏系统;但如果是‘root’,那就不同了,只要敲几个字母,就可能导致灾难性后果。

当您登入系统或打开一个 xterm 窗口,首先看到的是提示符 (prompt)。Mandrake Linux 的标准提示符包括了您的用户名、登入的主机名 (没有设置的话,是‘localhost’) 、当前所在的目录 (working directory) 、提示符号:
[tom@belbo tom]$
我以用户名‘tom’登入名为‘belbo’的主机,当前在我的 home 目录----‘/home/tom’中。‘root’的提示符:

[root@belbo root]#
除了不同的用户名外,提示符号由‘$’变成了‘#’。根据 Bourne shell 的传统,普通用户的提示符以‘$’结尾,而超级用户用‘#’。
提示符的每个部分都可以定制,您在后面将有更深的了解。
要运行命令的话,您只要在提示符后敲进命令,然后在按 键。shell 将在其路径中 (详情见后) 搜索这个命令,找到以后就运行,并在终端里输出相应的结果 (如果有的话) ,命令结束后,再给出新的提示符:

[tom@belbo tom]$ whoami
tom
[tom@belbo tom]$
顺带指出,当您敲 ENTER 时,光标(cursor) 在哪里并不要紧,因为 shell 总是会整行地读取。
基本的命令有:‘ls’ (list directory ,列出目录内容) 、‘cp’ (copy ,复制) 、‘mv’ (move / rename ,移动/重命名) ,‘cd ’ (change directory ,改变目录) ,这些命令后面都可以跟上一帮可选项,这方面 man page 有详细的介绍 ( man ls , man mv 等等) 。

在您动身前往 shell 领地前,这里有几个术语 (terminology)的简短说明。命令可能带一些可选项 (options) 、参数 (arguments) :<
mv -i file dir
其中‘-i’是命令‘mv’的一个可选项,而‘file’和‘dir’则是参数。所有可选项在该命令的 man page 都中有详细的介绍 (此例中用 man mv ) ,而参数则由您提供。可选项决定命令如何工作,而参数则用于确定命令作用的目标。

到目前为止,介绍得有点象许多人厌恶轻视的 DOS shell ,但伴随着下面的介绍,您将会有新的体验。

文章评论

共有 4 条评论

  1. 七情六欲 于 2005-10-12 00:40:50发表:

    不错

  2. jianpdl 于 2005-08-07 01:31:21发表:

    好啊

  3. root 于 2005-08-07 00:32:40发表:

    强烈支持啊

  4. wade9900 于 2005-06-11 23:07:50发表:

    好,不错啊!呵呵!