Shell、终端、zsh

Shell(中文翻译为:壳、层)在计算机科学中指“为用户提供用户界面”的软件,通常指的是命令行界面的解析器一般来说,这个词是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。因此与之相对的是内核(英语:Kernel),内核不提供和用户的交互功能
通常将shell分为两类:命令行图形界面。命令行壳层提供一个命令行界面(CLI)(例如电脑自带的Terminal);而图形壳层提供一个图形用户界面(GUI)(例如浏览器)。 ----维基百科

以上解释来自维基百科,简单总结就是,shell是一个抽象概念,没有非常明确的定义,大体分为两类,即命令行与图形界面,泛指“为用户提供用户界面”的软件,例如我们电脑上安装的各种软件,都可以称之为shell,比如各种视频音乐软件,可以访问到电脑的内核,从而调动电脑的硬件,实现播放音频、视频。不过在这里我们讨论的是命令行界面的解析器

什么是shell

它是一个命令解释器,是操作系统和用户交互的接口,负责将用户输入的命令翻译成机器语言。

我们大多数人使用的电脑系统都是图形化界面的操作系统,比如windowsMac OSUbuntu,在这些系统中我们一般可以通过安装第三方软件或者系统自带的功能完成一些系统层面的操作,例如通过office新建word类型文件;通过系统自带功能右键新建txt类型文件;右键删除、复制文件;通过浏览器下载文件。。。这些操作都通过鼠标或者触摸板进行的可视化操作。

而在一些非图形化界面系统中,比如安装在服务器上CentOS操作系统,
是没有图形化界面的,因为服务器注重的是安全、稳定、高效,都是通过命令行来对系统进行操作的。所以就提供了一些命令,可以供用户使用。这些命令需要被两个对象所认识:机器。而命令解释器(shell)就充当了人和机器的“翻译官”,将人可以理解的命令行命令“翻译”为机器可以理解的机器命令

当然,图形化界面的操作系统也可以使用命令,比如我们可以通过命令新建、打开、复制文件或向文件中写入内容,而且还可以编写各种shell脚本(.sh、.zsh文件)。现如今也有越来越多的程序员喜欢在Mac OS上使用各种命令行来完成各种操作,高效且炫酷


其实不管是图形化界面操作系统还是非图形化界面操作系统,本质上区别不大:

  • 图形化界面操作系统:用户点击鼠标–>终端(图形化软件、系统)接收到用户动作并传给shell–>shell(图形化软件、系统)翻译–>系统执行并返回结果到shell(图形化软件或系统)–>shell(图形化软件或系统)翻译–>显示或输入到用户端(显示器、打印机)
  • 非图形化界面操作系统:用户输入命令–>终端接收到命令并传给shell–>shell(例zsh)翻译–>系统执行并返回结果到shell(zsh)–>shell(zsh)翻译–>显示执行结果到终端命令行界面(例zsh)
    Shell、终端、zsh_第1张图片

sh、bash、csh、tcsh、ash、dash、zsh

上面已经说过了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和终端的关系

  • 终端负责收集用户输入的命令和数据,然后提交给shell,并且将命令执行完的结果反馈给用户。其作用就是提供一个命令的输入输出环境,
  • shell负责命令翻译,在系统执行完之后将结果返回给终端

zsh

zsh是众多shell实现的一种,全称是Z-shell,其包含了 bash,ksh,tcsh 等其他shell中许多优秀功能,也拥有诸多自身特色。

macOS Catalina 版开始,其默认shell从bash改为zsh

Zsh初版由原作者保罗·弗斯塔德(Paul Falstad)于1990年在普林斯顿大学求学时编写 。其名称zsh源于普林斯顿大学助教的邵中(Zhong Shao,现任耶鲁大学教授)——保罗将邵中的用户名"zsh"作为此Shell的名称

精辟言论

  • bash之于Shell就如同Ubuntu之于Linux。
  • Linux 内核相当于你的大脑;终端相当于你的眼睛;shell(bash、zsh)相当于可以将眼睛看到的多彩事物处理成大脑能接受的命令程序集

参考文章1—shell和终端的关系
参考文章2—【终端】终端,shell,与bash。

你可能感兴趣的:(Mac,linux,bash,macos,前端)