Shell

作者: 沉江小鱼 | 来源:发表于2021-12-07 11:04 被阅读0次

    1. Shell

    shell单词的本意是壳子,可以理解为机器外面的一层壳,用于人机交互,本质上是命令解释器。只要是人与电脑之间交互的接口,就可以成为shell。

    需要说明的是,常见的概念包括shell脚本,指的是采用shell语言编写的脚本,可以使用shell程序来执行,而本文所说的shell均指shell程序,二者的关系如下:


    image.png

    2. shell的类型

    • zsh
      很多人的 mac 中会使用 zsh 而不是 bash,一大半是因为 oh-my-zsh这个配置集,它兼容 bash,还有自动补全等好用的功能。

    • sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 shell。

    • csh
      sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

    • tcsh
      tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
      ash一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

    • bash
      bash由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

    3. shell的分类

    3.1 查看安装的shell

    在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。如果你希望查看当前 Linux或MacOS的默认shell,那么可以输出 shell 环境变量:

    # zzzz @ zzzzdeMacBook-Pro in ~ [17:27:23]
    $ echo $SHELL
    /bin/zsh
    

    想知道自己系统安装了哪些shell,使用如下命令可得到如下所示的信息:

    # zzzz @ zzzzdeMacBook-Pro in ~ [17:40:41]
    $ 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
    

    3.2 切换shell

    chsh -s [shell类型]
    

    以切换到zsh为例:

    chsh -s /bin/zsh
    

    zsh能基本完美兼容bash的命令,并且使用起来更加优雅。由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同。

    4. shell的配置

    shell在启动时会去找配置文件,然后运行。我们安装的一些脚本,如果想让它全局运行,就需要在shell对应的配置文件中设置路径。

    我们应该在配置shell之前,使用echo $SHELL命令,确认自己现在用的是哪种shell后,再去编辑对应的配置文件。

    比如:
    bash读取的配置文件:~/.bash_profile
    zsh读取的配置文件:~/.zshrc

    当我们从bash切换为zsh时,如果不想重新配置一遍.zshrc文件,可以在.zshrc文件中加上source ~/.bash_profile,从而直接从.bash_profile文件读取配置。

    相关文章

      网友评论

        本文标题:Shell

        本文链接:https://www.haomeiwen.com/subject/fmosxrtx.html