Skip to content

Shell

字数: 1790 字 时长: 7 分钟

Shell 是 Linux 操作系统的用户接口,它充当命令语言、命令解释器和程序设计语言的角色。

可以将 Linux 内核想象成一个球体的中心,而 Shell 则是围绕这个中心的外层。Shell 作为用户与内核之间的桥梁,负责接收命令并将其传递给内核以执行。

Shell 不仅是一个命令解释器,它还拥有自己的内建命令集,并且可以调用系统中的其他应用程序。当用户在提示符下输入命令时,Shell 会首先解释这些命令,然后将其传递给 Linux 内核。

有些命令,比如 cd(改变工作目录),是 Shell 内置的。而另一些命令,如 cp(拷贝文件)和 rm(删除文件),则是作为独立的程序存在于文件系统中的某个目录下。对于用户来说,他们不需要关心一个命令是内置于 Shell 内部还是作为一个单独的程序存在。

当用户输入一个命令时,Shell 会首先检查这个命令是否是其内置的内部命令。如果不是,Shell 会接着检查文件系统中的搜索路径,以查找这个命令是否作为一个应用程序存在。如果输入的命令既不是内部命令,也不在搜索路径中找到对应的可执行文件,Shell 会显示一条错误信息。如果找到了命令,无论是内部命令还是应用程序,Shell 都会将其分解为系统调用,然后传递给 Linux 内核。

Shell 的另一个重要特性是它本身是一种解释型的程序设计语言。这种语言支持大多数高级编程语言中的常见元素,如函数、变量、数组以及程序控制结构。

Shell 解释器

Shell 解释器,通常简称为 Shell,是一个充当用户与操作系统之间的桥梁的程序。它负责读取用户输入的命令,并将这些命令解释成操作系统能够执行的指令。

主要功能包括:

  • 命令解释:Shell 将用户输入的命令转换成操作系统可以理解和执行的指令。
  • 脚本执行:Shell 能够运行包含一系列命令的脚本文件,从而实现任务自动化。
  • 环境管理:Shell 负责设置和管理用户的工作环境,包括定义和修改环境变量、设定文件路径等。

常见的 shell 解释器有 Bash、Zsh 和 Fish 等:

Shell 解释器描述
BashBash 是目前最流行的 shell 解释器,默认在许多 Linux 发行版中。它兼容 Bourne Shell (sh),并增加了许多新功能。例如命令补全、命令历史、脚本编程等功能。
ZshZsh 是一个功能强大的 shell 解释器,提供了许多高级功能和插件,适合高级用户。它具有强大的命令补全、更好的脚本编写支持和丰富的插件系统。
FishFish 以用户友好和易用性著称,默认提供许多现代化的功能,如语法高亮、自动建议和简单的脚本编写。
KshKsh 是由 David Korn 开发的,结合了 Bourne Shell 和 C Shell 的优点。它具有强大的脚本编写能力、命令历史记录和命令补全功能。

要查看当前使用的 Shell 解释器,可以在终端中使用以下命令:

shell
[root@localhost ~]# echo $SHELL
/bin/bash

这将显示当前 shell 解释器的路径,可以看到当前系统默认使用是 Bsah。如果想要更换 Shell 解释器,可以使用 chsh 命令。

首先,需要知道想切换到哪个 Shell。例如,如果想切换到 sh,需要知道 sh 的路径,通常这可以通过查找 /etc/shells 文件来确定:

shell
[root@localhost ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

/etc/shells 这个文件包含了系统上所有有效 Shell 的列表。然后,使用 chsh 命令进行切换。例如,要切换到 sh,可以使用:

shell
chsh -s /bin/sh

NOTE

默认系统中可能提示找不到 chsh 这个命令,需要安装 util-linux-user 软件包。

Shell 与终端

Shell 和终端是 Linux 和类 Unix 操作系统中两个基本而重要的概念,它们虽然紧密相关,但各自扮演着不同的角色。

终端是一个软件程序,它模拟了物理终端的行为,提供了一个用户与操作系统交互的文本界面。在现代的图形用户界面(GUI)中,终端通常是一个可以在屏幕上打开和关闭的窗口。终端的主要功能包括:

  • 显示输出:显示由 Shell 或程序产生的输出。
  • 输入命令:允许用户输入命令或文本。
  • 会话管理:每个终端窗口或会话可以独立运行不同的程序或 Shell。

终端本身不解释命令,它只是作为一个输入和输出的通道。在没有图形界面的系统中,终端可能是物理设备,而在现代系统中,终端通常是软件模拟的。


Shell 是一个程序,它运行在用户的计算机上,解释用户输入的命令并将其传递给操作系统内核执行。Shell 的主要功能包括:

  • 命令解释:将用户输入的命令转换成操作系统可以理解和执行的指令。
  • 脚本执行:运行包含一系列命令的脚本文件,从而实现任务自动化。
  • 环境管理:设置和管理用户的工作环境,包括定义和修改环境变量、设定文件路径等。

Shell 提供了一个命令行界面(CLI),用户可以通过这个界面输入命令。Shell 的种类有很多,如 Bash、Zsh、Fish 等,它们各有特色和不同的功能。

终端提供了一个交互的平台,而 Shell 在这个平台上执行实际的命令处理和执行。它们共同构成了 Linux 和类 Unix 操作系统中命令行交互的基础。两者的区别:

  • 功能:终端负责显示输出和接收输入,而 Shell 负责解释这些输入的命令并执行。
  • 本质:终端是一个用户界面,而 Shell 是一个命令解释器和脚本语言。
  • 独立性:可以在同一个终端窗口中切换不同的 Shell,但每个 Shell 都有自己的会话和环境。 关联。
  • 协同工作:在日常工作流程中,终端和 Shell 协同工作。用户在终端窗口中输入命令,Shell 解释并执行这些命令,然后将结果返回到终端显示。
  • 用户体验:对于用户来说,使用 Shell 就是通过终端窗口与操作系统交互的过程。
  • 可替换性:虽然终端是运行 Shell 的界面,但用户可以在同一个终端窗口中切换不同的 Shell 环境。