3.2 初识 shell 和 bash
Last updated
Last updated
操作系统其实就是一组软件,它控制着整个硬件、管理着整个系统,所以这组软件不能被用户随意操作,因为一旦他使用不当就会让整个系统崩溃。但我们又需要让用户使用操作系统,所以就有了在操作系统上面运行的应用程序。用户可以通过应用程序来指挥内核,以让它完成我们所需要的硬件任务。
从上图我们可以看到,应用程序是在最外层的,就如同鸡蛋的外壳一样,所以这个东西也被称为壳程序(shell)。
kernel, 内核 shell, 壳程序
试想一个场景,我们要让计算机播放音乐,此时需要计算机有以下东西:
硬件设备:即声卡
内核管理+驱动程序:操作系统的内核需要支持此硬件,还要有与该硬件配套的驱动程序
应用程序:即我们输入“发出声音”命令的地方
这其实就是一个输出声音所需要的基本步骤。我们必须要输入一个命令之后硬件才能正常工作,硬件之所以能收到我们发出的命令是因为操作系统的内核管理,而我们正是通过 shell 与内核进行沟通的。
其实 shell 的功能只是给用户提供一个可以操作系统的界面,所以 shell 是需要有能力调用其它软件的,比如 ls
, chmod
, vim
等命令,它们都是独立的应用程序,只是我们可以通过 shell(即命令行模式)来操作这些应用程序,以让它们通过内核来执行我们想要的任务。
只要是能操作应用程序的软件,都可以称为是 shell。狭义的 shell 是指命令行方面的软件(比如 bash),广义的 shell 则包括图形用户界面模式的软件。
早年的 Unix 发展者众多,所以 shell 依据发展者的不同就有许多版本,比如常听到的 Bourne shell (sh)、在 Sun 里面默认的 C shell、商业上常用的 K shell,还有 TCSH 等,每种 shell 都有其特点。Linux 使用的是 Bourne Again SHell,简称 bash,它是 Bourne shell 的增强版。
第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他就称为 Bourne shell, 简称 sh。后来另一个广为流传的 shell 是由伯克利大学的 Bill Joy 设计的依附于 BSD 版 Unix 系统中的 shell,它的语法有点类似 C 语言,所以才得名为 C shell,简称 csh。
由于 Linux 是由 C 语言编写的,所以很多程序员使用 C 来开发软件,因此 C shell 就相对热门了。
在学术界 Sun 主机势力相当庞大,而 Sun 是主要的 Unix 分支之一,所以 C shell 也是另一个重要且广为流传的 shell。
Sun 公司的创始人就是 Bill Joy,而 BSD 最早就是他发展出来的。
目前我们的 Linux 系统至少有下面几个可用的 shells:
/bin/sh
已经被 /bin/bash
所替代
/bin/bash
即 Linux 默认的 shell
/bin/csh
已经被 /bin/tcsh
所替代
/bin/tcsh
整合了 C Shell 以提供更多功能
Linux 系统合法的 shell 都会写入文件 /etc/shells
中,之所以这么做,是因为系统的某些服务在运行的过程中会去检查用户能够使用的 shells,而这些 shell 的查询就是借由这个文件来完成的。
比如,在阿里云上查看文件 /etc/shells
,会输出如下内容:
bash 是 GNU 计划中重要的工具软件之一,目前也是 Linux 发行版的标准 shell。bash 主要兼容于 sh,是依据一些用户需求而加强的 shell 版本。
在之前的文章中我们提到,当用户顺利地在终端成功登录 Linux 之后,系统会根据
/etc/passwd
文件的设置给我们分配一个 shell,默认就是 bash。
bash 的主要优点:
历史命令:家目录下的 .bash_history
文件
该文件记录的是上次登录以前所执行的命令
本次登录所执行的命令都在内存中缓存着,当我们注销系统之后它们才会被同步到该文件中
命令与文件补全功能,即 tab
键
命令别名设置功能
任务管理、前台、后台控制
程序化脚本
通配符
ctrl
+ u
ctrl
+ k
从光标处向“前”删除命令串 从光标处向“后”删除命令串
ctrl
+ a
ctrl
+ e
让光标移到整个命令串的最“前”面 让光标移到整个命令串的最“后”面
为了方便 shell 的操作,bash 也内置了很多命令,比如cd
, umask
。我们可以用 type
命令来查看某个命令是否为 bash 的内置命令,如下:
type
主要找的是执行文件,所以它也可以用来找命令,类似 which
。
本文简单介绍了下 shell 和 bash,旨在对它们有个感性的认识,培养点心理亲切感。内容包括:
shell 在操作系统层面扮演的角色
鸡蛋壳,shell
给用户提供一个可以操作系统的界面
shell 的简单历史
目前流行的两种 shell:bash 和 tcsh
查看系统支持的 shell:/etc/shells
文件
bash:Linux 的默认 shell
bash 的主要优点
查看命令是否是 bash 内置的:type
命令