shell 与 /etc/shells 功能

来源:互联网 发布:教训印度知乎 编辑:程序博客网 时间:2024/05/16 08:58

知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?什么!哪一个?难道说shell 不就是『一个 shell 吗?』哈哈!那可不!由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于GNU 的架构下发展出来的呦! 
在介绍 shell 的优点之前,还是先来说一说 shell 的简单历史吧:第一个流行的 shell 是由 Steven Bourne发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似C 语言,所以才得名为 C shell,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而Sun 主要是BSD 的分支之一,所以C shell 也是另一个很重要而且流传很广的 shell 之一 ( 因为太多的程序设计师使用的就是 C 语言啦!)。(还记得我们在 Linux 是什么那一章提到的吧? Sun 公司的创始人就是Bill Joy,而BSD 最早就是 Bill Joy 发展出来的啊)。
 
那么目前我们的 Linux 有多少我们可以使用的 shells 呢? 你可以检查一下
/etc/shells 这个档案,至少就有底下这几个可以用的 shells:  
/bin/sh (已经被 /bin/bash 所取代)  
/bin/bash (就是 Linux 预设的 shell) 
/bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash) 
/bin/tcsh (整合 C Shell ,提供更多的功能) 
/bin/csh (已经被 /bin/tcsh 所取代) 
/bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

/sbin/nologin
由上面的说明中,我们大概可以发现,其实各主要 shell 的功能都差不多, 有的只是语法上面的不同而已。目前一般的使用者使用习惯上,似乎是以 bash 及 csh 为主要的两个 shell 。这么多的 shell 我要使用哪一个啊?呵呵!使用 Linux 支持最广泛的 bash 就好了! 不要想太多!另外,为什么我们系统上的 shell 要写入 /etc/shells 这个档案啊? 这是因为系统某些服务在运行过程中, 会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个档案啰!
 
举例来说,某些 FTP 网站会去检查使用者的可用 shell ,而如果你不想要让这些使用者使用 FTP 以外的主机资源时,可能会给予该使用者一些怪怪的 shell,让使用者无法以其它服务登入主机。 这个时候,你就得将那些怪怪的 shell 写到 /etc/shells 当中了。就举例来说, /etc/shells 里头就有个 /sbin/nologin 档案的存在,这个就是我们说的怪怪的 shell 啰~
 
那么,再想一想,我这个使用者什么时候可以取得 shell 来工作呢?还有, 我这个使用者预设会取得哪一个 shell 啊?!还记得我们在首次进入 Linux -- 以文字方式登入 那个章节当中提到的登入动作吧?
当我登入的时候,系统就会给我一个 shell 让我来工作了。 而这个登入取得的 shell 就记录在/etc/passwd 这个档案内!这个档案的内容是啥?
[root@linux ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(中间省略).....
如上所示,在每一行的最后一个数据,就是您登入后,可以取得的预设的 shell 啦! 那你也会看到, root 是 /bin/bash ,不过,系统账号 bin 与 daemon 等等,就使用那个怪怪的 /sbin/nologin 啰~ 
 Bash shell 的功能
既然 /bin/bash 是 Linux 预设的 shell ,那么总是得了解一下这个玩意儿吧! BASH 是怎么一回事呢?这个 shell 是 GNU 计划中重要的工具软件之一,目前也是 GNU 操作系统中标准的 shell ,他主要兼容于 sh ,并且依据一些使用者需求,而加强的 shell 版本,可以说目前几乎所有的 Linux distribution 都是使用 bash 作为管理核心的主要 shell !因此,不论您使用的是那个 distribution ,你都难逃需要学习 bash 的宿命啦!那么这个 shell 有什么好处,干嘛 Linux 要使用他作为预设的 shell 呢?请听下回分解…………

原创粉丝点击