shell是什么

来源:互联网 发布:神经网络训练数据集 编辑:程序博客网 时间:2024/05/12 19:11
什么是shell?

    shell是一个命令行用户界面,用户可以在这个命令行界面中输入各种字符命令。所以也可以讲shell是一个命令解释器。

百度解释:自己算计科学中shell俗称壳,是指“提供使用者使用界面"的软件(命令解释器 ),它接收用户的命令,调用相应的应用程序。


以一个图加以说明:

  
             Shell与内核与用户的关系图
更简单地说,shell是一个程序,用户通过这个程序与内核进行交互。

shell有多少种?
    在unix系统的发展中,shell有好几种,以下分别介绍
1.Bourne shell(sh) 由尔实验室为AT&T的UNIX开发的。现在bsd用的是它的增强版本:POSIX shell
2.C shell (csh)    伯克利大学开发的,因为使用的句法和C语言很像,所以就取此名称。功能超越了sh。但shell编程不好用
3.Kom shell (ksh或pdksh) 是AT&T编写的,可以向后兼容sh,ksh对BSD大学csh进行有力反击。此shell非常流行,并捆绑在大多商业版unix中。pdksh 是此shell的公用版本,可以从ports collection安装。
4.Bourne Again shell(bash) 自由软件基金会开发的兼容于sh的shell,是linux默认的shell.因为它不是商业unix的标准软件,所以用bash编写shell程序不能在不同版本unix间移植。
5.Tcsh shell(tcsh) 是csh的增强版,其功能比bash强大。但面对shell编程时还是有很多问题。

既然shell的有这么多,应该选用哪个呢?这个因个人使用习惯不同而使用的shell也不同,一般来说,商业unix大多使用ksh,而freebsd使用的是tcsh,linux系统使用的是bash。可以随便选一个来长久使用。

我现在使用的是哪个shell?
    要知道现在使用哪个shell,可以用 grep [用户名] /etc/passwd 查看。

/etc/shells文件的作用!
    在一般情况下,每个用户都可以根据自己的使用喜好切换到某个shell,比如你对sh比较熟悉,可以将sh切换为默认shell。前提是你所要切换的 shell已经安装或存在,并且在/etc/shells中有记录。/etc/shells的作用是限制用户只能使用在shells文件中列出的 shell,而没有在该文件中列出的,一律视为不合法shell,禁止用户使用。
    如果安装一个新的shell,那么这个shell的运行路径一般在/usr/local/bin目录下,要想正常使用必须将shell的路径添加到 /etc/shells文件中。例如安装了bash,那么就把它的路径”/usr/local/bin/bash”添加到/etc/shells中(是不带“”号的)。
    刚才说过,root可以不受shells文件的限制而分配任意shell给任何用户使用。例如root将/usr/local/bin/bash分配给 user1,而shells文件中并不存在这个路径。那是不是代表user1可以正常使用bash呢?user1的确可以使用ssh或telnet等方式正常登陆,但一用ftp登陆时就会拒绝登陆。这是因为很多程序如ftp是通过读取shells文件来检测用户所使用的shell的合法性的缘故。
      当一个新的shell以ports或packages方式安装后,系统会自动在/etc/shells文件中添加这个shell.以其它方式安装新shell,shells文件中可能并不存在记录,那就要手动添加上去了。
      当使用adduser创建一个用户时,可以分配的shell也只限于shells中列出的shell
    
更改默认shell
    当用户帐户被创建时,系统已经为它们分配了默认shell了。/etc/passwd和/etc/master.passwd文件记录着用户帐户的相关信息的,也包括使用哪个shell的信息。切换shell的原理其实就是修改/etc/master.passwd的过程。但是 master.passwd除管理员可读写,其它人没任何权限。这时普通用户须要用到一个隔山打牛的方法,间接性地修改master.passwd文件可以用/usr/bin/chsh命令。chsh命令作用是修改账户信息,它适用于任何用户。此命令的属主是root,权限是r-sr-xr-x,这表示所任何人都有读取与运行的权限,并且存在setuid,这表示所有用户运行此程序都以root身份执行。既然如此,修改/etc /master.passwd就不成问题了!
   注:chsh,chpass,chfn其实是同一程序,他们的i节点是一样的。
    
使用方法:
1.直接指定一个shell:  chsh –s  [shell路径]

2.以编辑的形式更改shell:  

$chsh
 #Changing user information for ufo.
Shell: /usr/local/bin/bash
Full Name: User &
Office Location:
Office Phone:
Home Phone:
Other information:

找到shell开头这行,将后面修改为shell的路径。使用chsh命令更改账户信息,在passwd与master.passwd的内也跟着发生改变,在重新启动后这种改变仍然生效。
    注:root用户可以执行chsh [用户名] 来编辑某用户的信息。

小提示:chsh其实是调用默认编辑器编辑/etc下的某个随机文件,(这个默认编辑取决于EDITOR环境变量)在保存文件后,会把修改内容写到 passwd与master.passwd中。另外,如果希望某用户不能登陆系统,可以使用/sbin/nologin作为shell,这时该用户就不能登陆系统了。或者用某个非shell的命令作为shell,用不存在的程序作为shell都可以达到禁止用户登陆的目的。例如,将某用户的shell设置为/usr/bin/mail,那么这个用户只能阅读邮件,而不能进行其它操作。


临时更改shell:
    有时只是想用一下临时调用其它shell,而不真正改变现在所用的shell,那只在登陆后,运行你想调用的shell就可以了

登陆后的提示信息:
    登陆系统后,会看到很多提示信息,这些信息就存放在/etc/motd中,可通过修改此文件更改提示信息。



设置shell的环境
    每种shell都有用于登陆或退出时执行某些任务的配置文件,这些文件分为两类,第一类是“系统级”的,第二类是“用户级”的。系统级配置文件只能由管理员设置,对所有用户都起作用。用户级配置文件可以由用户自己修改以适应自己的使用习惯,只对自己起作用。登陆后时,系统先执行系统级的配置文件,然后再执行用户级配置文件。在系统级与用户级中同一选项发生冲突时,以用户级选项为准。
    不同的shell的配置文件有所不同,以下分别介绍tcsh与bash两种shell的配置。

csh,tcsh配置文件有:
csh与tcsh其实是同一个shell,所以配置文件是相同的。它们的配置文件分别有以下几个
   /etc/csh.cshrc   系统级配置文件,主要用于设置环境变量与命令别名,对所有用户起作用
   /etc/csh.login   系统级配置文件,主要用于登陆时执行某些程序或命令,对所有用户起作用
   /etc/csh.logout  系统级配置文件,主要用于登出时执行某些程序或命令,对所有用户起作用
   ~/.cshrc     用户级配置文件,同上,只对某用户起作用
   ~/.login     用户级配置文件,同上,只对某用户起作用
   ~/.logout    用户级配置文件,同上,只对某用户起作用,此文件默认不存在,须要手动建立

bash的配置文件有:
bash的文件有以下几个:
   /etc/.pro

file    系统级配置文件,这个文件的功能相当于csh.cshrc加上csh.login文件。
   ~/.profile       用户级配置文件,功能相当于.cshrc,它会调用~/.shrc文件
   ~/.bash_logout   用户级配置文件,功能跟.logout差不多。默认没有这个文件,须手动建立


定制csh,tcsh环境变量
  1.在启动时,建立命令别名
      打开~/.cshrc文件,加入:  alias lookup grep \!:1 /etc/passwd  这行,代表在系统登陆时,设置lookup这个命令别名,它的作用是截取某用户的信息。\!:1代表命令的第一个参数,如我运行lookup root 命令,作用相等于grep root /etc/passwd 。要取消别名,可以用unalias lookup命令。

0 0