Shell
(中文翻译为:壳、层
)在计算机科学中指“为用户提供用户界面”
的软件,通常
指的是命令行界面的解析器
。一般来说
,这个词是指操作系统中提供访问内核所提供之服务的程序
。Shell也用于泛指所有为用户提供操作界面的程序
,也就是程序和用户交互的层面。因此与之相对的是内核
(英语:Kernel),内核不提供和用户的交互功能
。
通常将shell分为两类:命令行
与图形界面
。命令行壳层提供一个命令行界面(CLI)
(例如电脑自带的Terminal);而图形壳层提供一个图形用户界面(GUI)
(例如浏览器)。 ----维基百科
以上解释来自维基百科,简单总结就是,shell
是一个抽象概念,没有非常明确的定义,大体分为两类,即命令行与图形界面,泛指“为用户提供用户界面”的软件,例如我们电脑上安装的各种软件,都可以称之为shell,比如各种视频音乐软件,可以访问到电脑的内核,从而调动电脑的硬件,实现播放音频、视频。不过在这里我们讨论的是命令行界面的解析器
它是一个
命令解释器
,是操作系统和用户交互的接口
,负责将用户输入的命令翻译
成机器语言。
我们大多数人使用的电脑系统都是图形化界面
的操作系统,比如windows
、Mac OS
、Ubuntu
,在这些系统中我们一般可以通过安装第三方软件或者系统自带的功能完成一些系统层面的操作,例如通过office
新建word类型文件;通过系统自带功能右键新建txt类型文件;右键删除、复制文件;通过浏览器下载文件。。。这些操作都通过鼠标或者触摸板进行的可视化操作。
而在一些非图形化界面
系统中,比如安装在服务器上CentOS
操作系统,
是没有图形化界面的,因为服务器注重的是安全、稳定、高效,都是通过命令行来对系统进行操作的。所以就提供了一些命令,可以供用户使用。这些命令需要被两个对象所认识:机器
和人
。而命令解释器(shell)
就充当了人和机器的“翻译官”
,将人可以理解的命令行命令
“翻译”为机器可以理解的机器命令
。
当然,图形化界面
的操作系统也可以使用命令,比如我们可以通过命令新建、打开、复制文件或向文件中写入内容,而且还可以编写各种shell脚本(.sh、.zsh文件)。现如今也有越来越多的程序员喜欢在Mac OS
上使用各种命令行来完成各种操作,高效且炫酷
其实不管是图形化界面操作系统还是非图形化界面操作系统,本质上区别不大:
上面已经说过了shell
的定义,既然是定义,那必然就有实现,所以sh、bash、csh、tcsh、ash、dash、zsh就是对于shell定义的各种实现,虽然可能使用细节上不同,但是本质是相同的,都属于命令解释器
。
终端(英语:Computer terminal),是一台电脑或者计算机系统,用来让用户输入数据,及显示其计算结果的机器,简而言之就是人类用户与计算机交互的设备。终端有些是全电子的,也有些是机电的。其又名终端机,它与一部独立的电脑不同,但也是电脑组成的部分。 ----维基百科
以个人使用的台式PC来举例,一台台式机是由主机(机箱)
和很多外围设备
组成的。主机里边包括主板、CPU、内存、硬盘、和其他芯片等等。外围设备包括显示器、鼠标、键盘、耳机、麦克风、和摄像头
等等。这些外围设备就被称为终端,负责向主机输入数据的就叫输入终端
,比如鼠标、键盘、麦克风、摄像头,负责接收主机输出数据的设备就被称作输出终端
,比如显示器、耳机。
我们这里讨论的终端指的是提供给用户输入命令
和显示执行结果
的程序,我更愿称之为终端模拟器
。比如Mac自带的Terminal
,现在好像改名字了就叫终端
,即Terminal的中文意思。
至于shell,以mac
为例,自带了多种shell,通过cat /etc/shells
命令查看本机所有shell
% cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
使用echo $SHELL
命令查看当前使用的shell
% echo $SHELL
/bin/zsh
使用chsh -s /bin/zsh
命令修改shell为zsh
chsh -s /bin/zsh
收集用户输入的命令和数据
,然后提交给shell
,并且将命令执行完的结果反馈给用户。其作用就是提供一个命令的输入输出环境,命令翻译
,在系统执行完之后将结果返回给终端
。zsh
是众多shell
实现的一种,全称是Z-shell
,其包含了 bash,ksh,tcsh 等其他shell中许多优秀功能,也拥有诸多自身特色。
从 macOS Catalina
版开始,其默认shell从bash
改为zsh
。
Zsh
初版由原作者保罗·弗斯塔德(Paul Falstad)
于1990年在普林斯顿大学求学时编写 。其名称zsh
源于普林斯顿大学助教的邵中(Zhong Shao,现任耶鲁大学教授)
——保罗将邵中的用户名"zsh"
作为此Shell的名称
参考文章1—shell和终端的关系
参考文章2—【终端】终端,shell,与bash。