SHELL十三问之一:什么是shell?

本文介绍了Shell作为用户与操作系统之间的桥梁作用,详细解释了不同类型的Shell(如Bourne Shell和C Shell)及其特点,并讨论了如何通过Shell设置环境变量以优化用户体验。
在介绍 shell 是甚么东西之前,不妨让我们重新检视使用者与计算机系统的关系,我们知道计算机的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operating System)"的软件来控管,事实上,我们每天所谈的 freebsdnetbsdopenbsd、linux 等等 ,严格来说只是一个操作系统,我们称之为"核心(kernel)"。然而,从使用者的角度来说,使用者也没办法直接操作 kernel ,而是透过 kernel 的"外壳"程序,也就是所谓的shell ,来与 kernel 沟通。从技术角度来说,shell是一个使用者与系统的互动界面(interface),主要是让使用者透过命令行(command line)来使用系统以完成工作。因此,shell 的最简单的定义就是---命令解译器(Command Interpreter)
S/q3])b?,`U'r%X:W* 将使用者的命令翻译给核心处理,
,`"Vd YI6Z$Y n2Qk* 同时,将核心处理结果翻译给使用者。
|q#SX-/[    每次当我们完成系统登入(login),我们就取得一个互动模式的shell ,也称为 login shell 或 primary shell。若从进程(process)角度来说,我们在 shell 所下达的命令,均是 shell 所产生的子进程。这现象,我们暂可称之为fork。 如果是执行脚本(shell script)的话,脚本中的命令则是由另外一个非互动模式的子 shell (sub shell)来执行的。也就是primary shell 产生 sub shell 的进程,sub shell 再产生 script 中所有命令的进程。BSD爱好者乐园!oW E.ct9i2RE
    FreeBSD的基本系统中可以使用的shell有两个:sh和csh。这两个基本shell的风格不太相同,不同的使用者常常会根据喜好来在两者之间进 行选择。当然当前有更好的shell程序可供使用者选择,这些后续的 shell均是根据sh或csh的风格进一步发展出的,因此可以说在shell中,也有两种风格,需要使用者根据自己的使用习惯进行选择。
PK?"z,R在默认安装下,FreeBSD支持sh、csh、tsch,从/etc/shells中可以看出。BSD爱好者乐园|;I$Q0@cB'A
命令提示符补充一下:BSD爱好者乐园k(UhRWww|#E
如果shell是sh,则提示符为“$”,如果shell是csh,则为“%”,需要注意的是如果是root用户,则提示符为“#”。BSD爱好者乐园)RlSD*[ tp
BSD爱好者乐园E.L#x(q4Yf"FS
sh和csh又有以下不同的分支:
']@U#]d+PX;H-^Bourne shell :BSD爱好者乐园2xZ!x{8N1[{,YU
burne shell (sh)BSD爱好者乐园4dl0o0zJg
burne again shell (bash)
svUC8`)nkorn shell (ksh)BSD爱好者乐园F?2r8E9H Q [/(l
POSIX shell ( sh) C shell :
(nU$^o9Atgc shell (csh)
tI4m'U ua4B-WTD6NTENEX/TOPS C shell ( tcsh)
R_S"a!/Bg
4MzwPw(BZA
QUOTE:
Bourne Shell 最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的AT&T贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环 境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。
0Jp%Vg!G
O*z m9aR6tl/Jk4bBC Shell Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。 BSD爱好者乐园}8rF3N{pL6n
BSD爱好者乐园 B$],rfe:vdl/D
有 很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性 的标准——在源程序一级跨越多种平台。bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
Y7G-/;Ny(l:s
#@A0e Uz?LPOSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh. BSD爱好者乐园F/G*?6krFD)l2U1zE
BSD爱好者乐园hss,Qon ax2Y7_ q;I
各主要操作系统下缺省的shell: AIX 下是Korn Shell. Solaris和FreeBSD缺省的是Bourne shell. HP-UX缺省的是POSIX shell. Linux是Bourne Again shell输入命令echo $SHELL可查看你用的是什么shell,也可以根据提示符来看,如果shell是sh,则提示符为“$”,如果shell是csh,则为“%”,需要注意的是如果是root用户,则提示符为“#”。
?8[4U/z8Z}/g对于管理员来将,要为使用不同shell的用户都设置好基本的环境,就必须了解这两种风格的shell设置方式。
W&q eI;m7ir系统登录时,sh将首先执行 /etc/profile文件,为每个用户设置最基本的环境,而csh将使用 /etc/csh.cshrc,csh.login和csh.logout作为系统csh资源文件。
;GC F6U[O u)h[执行了系统级别的登录文件之后,每个用户的shell就在该用户的主目录下寻找该用户个人的资源文件:sh使用 .profile文件,csh使用 .login和.cshrc文件。这些资源文件均使用相应的shell语言,/etc/profile和个人目录下的.profile使用sh风格的控制语言,/etc/cshrc和个人目录下的.login、.cshrc使用csh 风格的控制语言。
5trk"_p*A}3Yy'@系 统管理员可以改动这些资源文件,为用户提供一个最方便的使用环境。当然,系统管理员没有必要直接去修改个人主目录下的资源文件,这些文件应该由用户自己管 理,但是系统管理员可以在生成帐号时为用户产生缺省的资源文件,以减轻用户设置资源文件的麻烦。adduser命令缺省使用 /usr/share/skel下 的文件为用户提供各种资源文件的缺省设置,这个目录下除了可以放入shell的资源文件之外,还可以放入其他应用程序的资源文件。由于这些资源文件都是以 点开头的隐藏文件,为了表示清楚,在skel目录下使用了一种转换方式,如使用dot.profile 作为.profile的模板。 BSD爱好者乐园VB)} }{
BSD爱好者乐园#W[,x[6tU.V1^I+b
CODE:
# ls /usr/share/skel
z"EX4hbOw1qUdot.cshrc               dot.login_conf          dot.mailrc              dot.rhosts
%W4H6W'x0Ed5] n$t n-Bdot.login               dot.mail_aliases        dot.profile             dot.shrc
在/usr/share/skel中为用户设置的缺省配置文件,在用户生成之后,就不会对用户产生影响了。因此对系统登录文件进行修改更有效和直接。对于sh风格的用户,可以更改 /etc/profile文件,对csh应更改 /etc/csh.cshrc文件。在这些文件中可以改动shell使用的环境变量,这样来改变shell的行为方式,或者执行一系列自动操作,完成一些用户登录时需要自动执行的任务。 BSD爱好者乐园zjv8mhE])H.K+`"?.n
常用的环境变量: BSD爱好者乐园A5U hxpY/uf~l
EDITOR        设置用户常用的编辑器,很多程序查看这个变量来启动具体的编辑器,可以 根据系统的情况更改
.A!VW({A QHOME        用户的主目录的名字,这个变量由login程序设置,一般不需要更改
:pf0P8`9@fz'CDISPLAYX        使用这个环境变量来标识具体的显示位置,格式为“计算机名字:X服务 器序号.显示屏序号” ,例如:xt1:0.0,它不需要在资源文件中进行定义
d~(/ []4W&l^`LANG        系统使用的语言,用于系统的本地化,缺省为 “C” ,具体的设置可以查看 /usr/share/locale 目录,那里定义了不同的语言,可以将其设置为zh_CN.EUC来使得一些软件使用 中文字符。 BSD爱好者乐园i LH@1Ox]^ sR
MAIL        用户mail文件的位置,也不需要改动 BSD爱好者乐园Z k*r-@2MW
PATH        使用冒号分隔的一系列路径,系统用它来查找具体可执行程序,因此这个变量非常重要,可以根据具体的情况改动其值。为了 安全的原因,不要将当前目录作为执行程序的搜寻路径,尤其对于root用户。这样在当前目录下启动程序,需要加上路径,例如启动当前目录下的a.out 程序,输入 “./a.out” 。 BSD爱好者乐园3D"gw A [P*W#@R
MANPATH         使用冒号分隔的一系列路径,系统用它来查找具体命令的在线手册,设置方法与PATH相同。
1iPM0/3g(m$aPS1sh        风格的shell使用这个变量的值作为提示符,缺省值为 “$”(root为 “#” )。更现代的sh就增强了提示符的灵活性,可以在提示符中加入当前目录、用户名、机器名,命令的序号等。
PS2sh        风格的shell使用这个变量的值作为后续提示符,提示命令还没有完全输入,缺省为 “>;“ BSD爱好者乐园1^g6w6Ho
TERM        终端的类型,对于需要全屏操作的程序,非常重要。有时要根据情况对设置进行调整。 BSD爱好者乐园%Y'R"a6a"k'h7YZ
TZ        时区设置,具体的时区信息位于/usr/share/zoneinfo目录下,需要设置为适合本地时区的标准值 BSD爱好者乐园0sGF"t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值