1.3 登录
1. 登录名
用户在登录UNIX系统时,先键入登录名,然后键入口令。系统在其口令文件(通常是/etc/passwd文件)中查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成,它们是:登录名、加密口令、数值用户ID(205)、数值组ID(105)、注释字段、起始目录(/home/sar)以及shell程序(/bin/ksh)。
![]()
目前所有的系统已将加密口令移到另一个文件中。第6章将说明这种文件以及访问它们的函数。
2. shell
用户登录后,系统通常先显示一些系统信息,然后用户就可以向shell程序键入命令。(当用户登录时,某些系统会启动一个视窗管理程序,但最终总会有一个shell程序运行在一个视窗中。)shell是一个命令行解释器,它读取用户输入,然后执行命令。用户通常用终端(交互式shell),有时则通过文件(称为shell脚本,shell script)向shell进行输入。表1-1中总结了常见的shell。

系统从口令文件中相应用户登录项的最后一个字段中了解到应该为该登录用户执行哪一个shell。
自V7以来,由Steve Bourne在贝尔实验室开发的Bourne shell得到了广泛应用;几乎每一个现有的UNIX系统都提供Bourne shell,其控制流结构类似于Algol 68。
C shell是由Bill Joy在伯克利开发的,所有BSD版本都提供这种shell。另外,AT&T 的系统V/386 R3.2和SVR4也提供C shell(下一章将对这些不同的UNIX版本作更多说明)。C shell是在第六版shell而非Bourne shell的基础上构造的。其控制流类似于C语言,它支持Bourne shell没有的某些特色功能,例如作业控制、历史记忆机制以及命令行编辑等。
Korn shell是Bourne shell的后继者,它首先在SVR4中提供。Korn shell是由David Korn在贝尔实验室研发的,并在大多数UNIX系统上运行,但在SVR4之前通常它需要另行购买,所以没有其他两种shell流行。它与Bourne shell向上兼容,并具有使C shell广泛得到应用的一些特色功能,包括作业控制以及命令行编辑等。
Bourne-again shell是GNU shell,所有Linux系统都提供这种shell。它被设计成遵循POSIX的,同时也保留了与Bourne shell的兼容性。它支持C shell 和Korn shell两者的特色功能。
TENEX C shell是C shell的加强版本。它从TENEX 操作系统借鉴了很多特色,例如命令完
备。(TENEX操作系统是1972年BBN公司开发的。)TENEX C shell在C shell的基础上增加了很多特征,常被用来替换C shell。
Linux的默认shell是Bourne-again shell。事实上,/bin/sh将链接到/bin/bash。FreeBSD和Mac OS X的默认用户shell是TENEX C shell,但是因为使用C shell编程语言极其困难,所以它们使用Bourne shell编写用于管理方面的shell脚本。Solaris继承了BSD和系统V两者,它提供了表1-1中所示的所有shell。在因特网上可以找到大多数shell的自由软件移植版。
本书将使用加灰底形式的注释来描述历史,并对不同的UNIX实现进行比较。当我们了解到历史缘由后,会更好地理解采用某种特定实现技术的原因。
本书将使用很多交互shell实例来执行所开发的程序,其中将应用Bourne shell、Korn shell和Bourne-again shell三者都具有的功能。







