1.3 登录
登录名
当我们登录UNIX系统时,我们输入我们的登录名,然后是口令。系统接着就在密码文件中扫描我们的登录名,密码文件通常位于/etc/passwd。如果我们在密码文件中查看我们的登录项,将会看到它是由7个冒号分离的部分组成的:登录名,加密口令,用户的数字ID(205),组的数字ID(105),一个注释段,起始目录(/home/sar),还有shell(注:以后直接用shell代表解释器)程序(/bin/ksh)。
sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
所有新的系统已经把加密口令移到另一个文件中了。在第六章,我们将查看这些文件和一些函数来访问他们。
Shell
一旦我们登录后,一些特定的系统信息就显示出来,接着我们就可以在shell中输入命令。(一些系统在你登录后,会启动窗口管理程序,但是一般来说,你会以在其中一个窗口中运行shell来结束。)shell是一个命令行解释器,它读入用户的输入并且执行命令。用户通常从终端(一个交互式的shell),或者某些时候从一个文件(被称为shell教本)向shell输入。通常使用的shell总结在图1.2中。
名字 |
路径 |
FreeBSD 5.2.1 |
Linux 2.4.22 |
Mac OS X 10.3 |
Solaris 9 |
Bourne shell |
/bin/sh |
* |
link to bash |
Link to bash |
* |
Bourne-again shell |
/bin/bash |
Optional |
* |
* |
* |
C shell |
/bin/csh |
link to tcsh |
Link to tcsh |
link to tcsh |
* |
Korn shell |
/bin/ksh |
|
|
|
* |
TENEX C shell |
/bin |
* |
* |
* |
* |
图 1.2 UNIX系统常用shell
系统从密码文件中登录项的最后一个字段中了解到应该执行哪一个shell。
Bourne shell,由Steve Bourne在贝尔实验室开发,自Version 7以来一直在使用,并且被目前几乎所有的UNIX系统所支持。The control-flow constructs of the Bourne shell are reminiscent of Algol 68。
C shell是由Bill Joy在伯克利开发的,被所有的BSD发行版支持。另外,C shell也被AT&T的System V/386 Release 3.2和System V Release 4(SVR4)所支持。(我们将在下一章中更详细介绍这两个版本UNIX系统的不同。)C shell构建于第六版的shell,而不是Bourne shell。它的control flow更像C语言,它也支持一些其它的,Bourne shell所不支持的特性:job control, a history mechanism, and command line editing。
Korn shell被认为是对Bourne shell的成功者,它最先被SVR4所支持。Korn shell是由David Korn在贝尔实验室开发的,运行于大多数的UNIX系统上。在SVR4之前,Korn shell是一个收费组件,所以它并没有其它两个shell流行。它也和Bourne shell兼容,同时包含了使得C shell流行的那些特性:job control, command line editing, and so on。
Bourne-again shell是由所有Linux系统所支持的GNU shell。它被设计为与POSIX一致,同时仍然与Bourne shell兼容。它同时支持C shell和Korn shell的特性。
TENEX C shell是C shell的增强版本。它从TENEX操作系统(1972年开发于Bolt Beranek和Newman)借用了许多特性,比如命令补全。TENEX C shell对于C shell增加了许多特性,其通常被作为C shell的替代品。
Linux使用Bourne-again shell作为默认shell。事实上,/bin/sh就是/bin/bash的连接。FreeBSD和Mac OS X的默认shell是TENEN C shell,由于C shell的程序设计语言被广泛的认为很难使用,所有他们使用Bourne shell作为他们的系统(administrative)shell脚本。Solaris有继承于BSD和System V的,在图1.2中所列出的所有shell。大多数这些shell的免费部分能够在因特网上得到。
通过本书,我们将展示互动的shell例子来执行我们所开发的程序。这些例子使用Bourne shell,Korn shell和Bourne-again shell的共同特性。