前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux20-各种shell的区别

linux20-各种shell的区别

作者头像
北野茶缸子
发布2022-05-19 11:51:13
1.3K0
发布2022-05-19 11:51:13
举报
文章被收录于专栏:北野茶缸子的专栏
  • 参考:
    • What is the difference between shell, console, and terminal? - Super User[1]
    • Unix / Linux - What is Shells?[2]
    • shell有哪些?Zsh和Bash的区别是什么?- 简书[3]

前言

一直以来,我都有一个概念上的疑惑,当我们在说terminal, console,再或者是bash, zsh,甚至是linux 的时候,我们到底在说什么。

好像有时候,都在说这个交互窗口:

但事情,似乎并没有这么简单。

shell

shell 提供了一个与系统进行交互的环境,它可以运行各种命令,并返回对应的输出。基本的shell 的功能还包括管理前后端的进程,以及查看命令历史,命令行内容编辑的功能。顾名思义,其就相当于机器的一层壳,只要是人与电脑进行交互的接口,都可以称为shell。比如命令行的交互,叫 command-line interface (CLI);mac 或windows 这种图形交互,叫graphical user interface (GUI)。

比较有名的shell 包括bash、zsh、sh 等。其中bash 之前是mac 的默认终端,现在也是zsh了。而zsh,则因其鼎鼎有名的项目 oh my zsh 而广为流行。ps:最近我也在折腾zsh,确实是好玩,而且有很多颜值很高的主题。

terminal

在mac 中,有个软件就叫做terminal,翻译为终端。它就是用来运行shell 的软件。曾经终端是一个物理设备(this was a physical device consisting of little more than a monitor and keyboard)。但到现在,终端已经抽象为了一个软件。

准确来说,console 就是控制机器的控制面板,个人理解,有点像玩街机的时候,底下操纵的那些摇杆。而terminal,则是遥控设备的远程器械。比如我们通过terminal 连接服务器进行操作。

但console,感觉各种定义也并不完全一致,比如R studio 或vs code 中,直接和python 或R 交互的窗口就是console。而mac 中的console,则是用来查看系统日志的应用。

知乎也有讨论:(10 封私信 / 67 条消息) Terminal 和 Console 的区别是什么?- 知乎[4]

常见的shell

参考:几种常见的Shell:sh、bash、csh、tcsh、ash_C语言中文网[5]

  • sh

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

  • csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

  • tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

  • ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

  • bash

bash shell 是 Linux 的默认 shell。

  • zsh

zsh能基本完美兼容bash的命令,并且使用起来更加优雅。

查看使用的shell

通过 cat 命令来查看当前 Linux 或mac系统的可用 Shell:

代码语言:javascript
复制
❯ 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

并且可以查看当前的shell:

代码语言:javascript
复制
❯ echo $SHELL
/bin/zsh

在配置文件方面:

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

切换shell:

代码语言:javascript
复制
chsh -s /bin/bash # 切换bash 
chsh -s /bin/zsh # 切换zsh 
代码语言:javascript
复制
  chsh

  Change the user's login shell.
  More information: https://manned.org/chsh.

  - Change the current user's login shell interactively:
    chsh

  - Change the login shell of the current user:
    chsh -s path/to/shell

  - Change the login shell for a given user:
    chsh -s path/to/shell username

  - List available shells:
    chsh --list-shells

当我们切换了shell 时,比如bash 到zsh,可以直接在.zshrc文件中加上source ~/.bash_profile,从而更快的完成如conda 在内的环境的配置。

总结一下

个人感觉,terminal,就是和计算机交互的一个软件,只不过我们一般使用的并非是图像化的;而 shell 则是与系统真正交互的环境,比如我们可以在一个terminal 下,先操作自己的计算机,再用ssh 等工具连接到其他计算机或服务器。我们的实际操作,则是在对应系统下的shell 中进行的。

当然,我个人来说对这些抽象的概念还是比较模糊的。但至少,当你说shell 和 terminal 的时候,我至少知道,你说的是我本地操作的终端软件,还是终端中运行的和机器进行交互的shell 软件了。

ps:为什么不可以统一terminal 跟shell呢?比如mac 直接打开一个shell,进去不也是shell吗?

参考资料

[1]

What is the difference between shell, console, and terminal? - Super User: https://superuser.com/questions/144666/what-is-the-difference-between-shell-console-and-terminal

[2]

Unix / Linux - What is Shells?: https://www.tutorialspoint.com/unix/unix-what-is-shell.htm#:~:text=Shell%20is%20an%20environment%20in%20which%20we%20can,its%20own%20set%20of%20recognized%20commands%20and%20functions.

[3]

shell有哪些?Zsh和Bash的区别是什么?- 简书: https://www.jianshu.com/p/a891af6f87e0

[4]

(10 封私信 / 67 条消息) Terminal 和 Console 的区别是什么?- 知乎: https://www.zhihu.com/question/20388511

[5]

几种常见的Shell:sh、bash、csh、tcsh、ash_C语言中文网: http://c.biancheng.net/cpp/view/6995.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • shell
  • terminal
  • 常见的shell
  • 查看使用的shell
  • 总结一下
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档