Alex_McAvoy

想要成为渔夫的猎手

Shell 基本介绍

【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,由贝尔实验室开发,向后兼容 shbashcsh
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

感谢您对我的支持,让我继续努力分享有用的技术与知识点!