shell 与 /etc/shells 功能

本文介绍了Linux系统中多种Shell的历史和用途,重点讲述了Bash(Bourne Again SHell)作为默认Shell的原因及其功能。通过查看/etc/shells文件,可以看到系统支持的Shell列表,包括bash、csh、ksh等。此外,/etc/shells文件在系统服务中起到限制用户Shell的作用,例如FTP服务会检查此文件来确定用户是否能登录。最后,用户默认的Shell信息存储在/etc/passwd文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知道什么是 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 呢?请听下回分解…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值