预计阅读本页时间:-
1.5.6 shell
操作系统是进行系统调用的代码。编辑器、编译器、汇编程序、链接程序以及命令解释器等,尽管非常重要,也非常有用,但是它们确实不是操作系统的组成部分。为了避免可能发生的混淆,本节将大致介绍一下UNIX的命令解释器,称为shell。尽管shell本身不是操作系统的一部分,但它体现了许多操作系统的特性,并很好地说明了系统调用的具体用法。shell同时也是终端用户与操作系统之间的界面,除非用户使用的是一个图形用户界面。有许多种类的shell,如sh、csh、ksh以及bash等。它们全部支持下面所介绍的功能,这些功能可追溯到早期的shell(即sh)。
用户登录时,同时启动了一个shell。它以终端作为标准输入和标准输出。首先显示提示符(prompt),它可能是一个美元符号,提示用户shell正在等待接收命令。假如用户键入
date
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
于是shell创建一个子进程,并运行date程序作为子进程。在该子进程运行期间,shell等待它结束。在子进程结束后,shell再次显示提示符,并等待下一行输入。
用户可以将标准输出重定向到一个文件,如键入:
date>file
同样地,也可以将标准输入重定向,如:
sort<file1>file2
该命令调用sort程序,从file1中取得输入,输出送到file2。
可以将一个程序的输出通过管道作为另一程序的输入,因此有
cat file1 file2 file3|sort>/dev/lp
所调用的cat程序将这三个文件合并,其结果送出到sort程序并按字典排序。sort的输出又被重定向到文件/dev/lp中,显然,这是打印机。
如果用户在命令后加上一个“&”符号,则shell将不等待其结束,而直接显示出提示符。所以
cat file1 file2 file3|sort>/dev/lp&
将启动sort程序作为后台任务执行,这样就可以允许用户继续工作,而sort命令也继续进行。shell还有许多其他有用的特性,由于篇幅有限而不能在这里讨论。有许多UNIX的书籍具体地讨论了shell(例如,Kernighan和Pike,1984;Kochan和Wood,1990;Medinets,1999;Newham和Rosenblatt,1998;Robbins,1999)。
现在,许多个人计算机使用GUI。事实上,GUI与shell类似,GUI只是一个运行在操作系统顶部的程序。在Linux系统中,这个事实更加明显,因为用户(至少)可以在两个GUI中选择一个:Gnome和KDE,或者干脆不用(使用X11上的终端视窗)。在Windows中也有可能用不同的程序代替标准的GUI桌面(Windows Explorer),这可以通过修改注册表中的某些数值实现,不过极少有人这样做。