【Shell 的概念】
操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动检测,如果这组软件能被用户随意操作,若使用不当,则会使得整个系统崩溃
但我们总是需要令用户去操作系统的,因此就有了在操作系统上面发展的应用程序,用户可以通过应用程序来指挥内核,让内核达成我们所需要的硬件任务
Shell 就是提供用户操作系统的一个接口,狭义来说,Shell 指的是命令行方面的软件,广义的 Shell 则包括图形界面的软件
【Shell 的发展历史】
第一个流行的 Shell 是由 Steven Bourne 发明的,为了纪念他就称为 Bourne Shell,简称为 sh
后来另一个广为流传的 Shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版 UNIX 系统的 Shell,这个版本的 Shell 语法类似于 C 语言,因此被称为 C Shell,简称为 csh
在 Linux 中,使用的 Shell 版本是在 Bourne Shell 的基础上发展起来的增强版本,也是基于 GNU 架构下发展出来的,被称为 Bourne Again Shell,简称为 bash
由于 bash
是 Linus 最常用的 Shell 版本,因此,一般所说的 Shell,其实就是指 bash
常见的 Shell 可见下表:
Shell | 简述 |
---|---|
sh |
Bourne Shell,第一个流行的 Shell |
bash |
sh 的增强版,是 Linux 默认的 Shell |
csh |
C Shell,目前已被 tcsh 所取代 |
tcsh |
csh 的增强版,在整合 csh 的同时,提供了更多的功能 |
ksh |
Korn Shell,由贝尔实验室开发,向后兼容 sh 、bash 、csh |
zsh |
基于 ksh 发展而来,功能更加完善 |
在 /etc/shells
文件下,可以查看当前 Linux 版本可使用的所有 Shell
如下图所示,展示了 CentOS 7 中所有可用的 Shell
【用户可用 Shell】
系统某些服务在运行时,会去检查当前用户能够使用的 Shell,而这些 Shell 的查询就是借助 /etc/shells
这个文件
用户登录时,系统会自动根据 /etc/passwd
文件的内容来为用户分配一个登录后可取得的默认 Shell
可以发现,除了 bash
外,还存在一个奇怪的 Shell,即 nologin
,这是不想让某些用户使用主机资源而给予的 Shell
举例来说,某些 FTP 网站会去检查用户的可用 Shell,如果不想让这些用户使用 FTP 外的主机资源时,可能会给予用户一些奇怪的 Shell 以令用户无法登录主机,比如 /etc/shells
中写入的 /sbin/nologin