Shell 是什么?
任何发明都具有供用户使用的界面。UNIX 供用户使用的界面就是 Shell(DOS 的
command 熟悉吧,但 UNIX 的要强大的多)。 Shell 为用户提供了输入命令和参数并可得到
命令执行结果的环境。
为了不同的需要,UNIX 提供了不同的 Shell。现在的 UNIX 大部分都支持 BourneShell,
以下教程就以 BourneShell(Bsh)为例,一步步的领略 UNIX Shell 的强大功能,占先其强大魅
力,达到更方便灵活的管理、应用 UNIX 的目的。
1.UNIX 内核和 Shell 的交互方法
启动 UNIX 时,程序 UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器
关闭。 在引导 过程中 ,程序 init 将进入 后台运 行一直 到机器 关闭。 该程序 查询文 件
/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时, init
程序调用 getty 程序在终端上显示 login 等登陆信息。(username 和 passwd),在输入密码后,
getty 调用 login 进程,该进程根据文件/etc/passwd 的内容来验证用户的身份。若用户通过身
份验证,login 进程 把用户的 home 目录设置成当前目录并把控制交给一系列 setup 程序。
setup 程序可以是指定的应用程序,通常 setup 程序 为一个 Shell 程序,如:/bin/sh 即 Bourne
Shell(command 出来了,呵呵)。
得到控制 后,Shell 程序读取并执行文件/etc/.profile 以及.profile。这两个文件分别建立
了系统范围内的和 该用户自己的工作环境。最后 Shell 显示命令提示符,如$。(这是以 bsh
为例,若是 csh,为.cshrc,ksh 为.kshrc,bash 为. bashrc 等等)
注:(不妨把/etc/.profile 和.profile 看成 DOS 的 autoexec.bat 或 config.sys 文件)
当 shell 退出时,内核把控制交给 init 程序,该程序重新启动自动登陆过程。有两种方法
使 shell 退出,一是用户执行 exit 命令,二是 内核(例如 root 用 kill 命令)发出一个 kill 命令
结束 shell 进程。shell 退出后,内核回收用户及程序使用的资源。
用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell 程序--->UNIX 内核
--->计算机硬件。当用户输入 一个命令,如$ls, Shell 将定位其可执行文件/bin/ls 并把其传递
给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消 该
子进程并把控制交给其父进程,即 Shell 程序。例如执行:
$ps
该命令将会列出用户正在执行的进程,即 Shell 程序(下来详细说说,别急现在)和 ps
程序。若执行:
$sleep 10 &
$ps
其中第一条命令将产生一个在后台执行的 sleep 子进程。ps 命令执行时会显示出该子进
程。