• Shell、终端、zsh


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

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

    什么是shell

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

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

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

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


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

    • 图形化界面操作系统:用户点击鼠标–>shell(图形化软件、系统)翻译–>系统执行并返回结果到shell(图形化软件或系统)–>shell(图形化软件或系统)翻译–>显示或输入到用户端(显示器、打印机)
    • 非图形化界面操作系统:用户输入命令–>shell(zsh)翻译–>系统执行并返回结果到shell(zsh)–>shell(zsh)翻译–>显示执行结果到终端命令行界面
      在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用echo $SHELL命令查看当前使用的shell

     % echo $SHELL
    /bin/zsh
    
    • 1
    • 2

    使用chsh -s /bin/zsh命令修改shell为zsh

    chsh -s /bin/zsh
    
    • 1

    shell和终端的关系

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

    精辟言论

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

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

  • 相关阅读:
    Java面试突击(一)Java基础考点--第一板块
    关于渗透实战中分析微信小程序前端代码的诸多问题
    中国计量大学2023年工商管理硕士(MBA)招生简章
    MySQL的下载、安装、配置
    小程序学习3 goods-card
    题目地址(894. 所有可能的真二叉树)
    谷粒商城 (六) --------- 逆向工程生成微服务 CRUD 代码
    Vue 组件间通信方式汇总,总有一款适合你( 附项目实战案例 )
    如何快速掌握Javascript入门小知识
    Tableau指标排行
  • 原文地址:https://blog.csdn.net/weixin_42205101/article/details/126111249