[Tutorials] 入门教程二--终端与命令(shell)
Tofloor
poster avatar
Jack
deepin
2021-01-12 15:57
Author

序:本文可能会枯燥,但是,读懂本文对了解linux 有很大的帮助。

什么是终端?

在早期的计算机历史上,终端的概念是这样的:

是一种硬件,是一种输入输出设备,用于和计算机交换信息

图1 约1982年的ASKII视频终端(图源

终端的工作:用户通过终端输入命令,终端将命令传入计算机,执行后,并把结果输入到终端上显示。

 

但是现在计算机硬件一体化程度越来越高,硬件质量也越来越强,输入输出设备完全没必要 单独用一个硬件和计算机进行交换信息了,取而代之使用软件终端和计算机进行交互信息。这就是终端模拟器 (Terminal Emulator),也就是现在人们所了解的终端。

图2 terminator 终端终结者

 

当使用图形用户界面时,需要终端模拟器与shell进行交互。在Linux系统中,有许多终端模拟器可以使用,但是它们基本上都做同样的事情:让用户访问shell。

 

那么,

shell 是什么?

 

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”。

图3 linux架构(图源

 

如上图所示:如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

 

Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。

 

shell分为两大类:

  • 图形化 shell(图形化的桌面环境):如Windows Explorer (文件管理器)、 Linux的桌面环境有:KDE、GNOME、DDE 等。
  • 命令行 shell。如bash 、sh 、csh 、ksh

 

以上是shell作为命令解释器,同时Shell有自己的编程语言  用于对命令的编辑,它允许用户编写由shell命令组成的程序。

 

shell也是一种程序设计语言作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

 

最后,bash 与 shell

 

上文所述,shell是运行在终端中的命令语言,而bash(GNU Bourne-Again Shell)是最常用的一种shell。

 

由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在Sun 里头默认的 C SHell、 商业上常用的 K SHell、还有 TCSH,ZSH 等等,每一种 Shell 都各有其特点。

 

图4 shell家族(图源网络)

 

 

shell的简单历史:

第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。

 

现在,随着shell的发展,zsh 受到更多人的喜爱,一些发行版开始把  zsh 作为默认shell具体原因可见:为什么说 zsh 是 shell 中的极品? - 韦易笑的回答 - 知乎

 

zsh 的安装可以查看社区里的这篇帖子:今天给大家推荐一个好用的shell --fexlou创作

 

关于bash的使用请看我的下一篇帖子:Linux命令

 

 

 

参考资料:

  1. 什么是 Linux Shell?
  2. 百度百科 - Linux shell
  3. 百度百科 - shell
  4. 终端与shell的区别
  5. Bash编程入门-1:Shell与Bash
  6. 《鸟哥的Linux私房菜》 -- 10.1.3 系统的合法 sehll 与 /etc/shells 功能。

 

 

 

Reply Favorite View the author
All Replies
Jack
deepin
2021-01-12 16:13
#1

大家有没看懂的,可以在评论区直接留言哦

Reply View the author
SamLukeYes
deepin
2021-01-12 16:36
#2

对用户极其友好的 fish 也应该介绍一下吧,虽然它不符合 posix 标准

Reply View the author
Jack
deepin
2021-01-12 16:48
#3
SamLukeYes

对用户极其友好的 fish 也应该介绍一下吧,虽然它不符合 posix 标准

这个,fish我没有用过啊

如果你觉得好用的话,你开个帖子介绍一下,我在文中引用一下你的帖子。

Reply View the author
element
deepin
2021-01-12 17:11
#4

这个是原创还是课件呀

Reply View the author
Jack
deepin
2021-01-12 17:19
#5
element

这个是原创还是课件呀

肯定是原创啊

课件有那么多参考资料吗?

Reply View the author
Jack
deepin
2021-01-12 17:23
#6

第二张图片没有图片来源,是因为这是我自己截的自己的系统图

Reply View the author
Jack
deepin
2021-01-12 17:35
#7

 正文中链接挂了,原地址在这:

《今天给大家推荐一个好用的shell》https://bbs.deepin.org/post/194562

Reply View the author
sammy-621
deepin
2021-01-12 18:32
#8

非常牛B。感谢deepin出这样的系列文章!!

Reply View the author
Jack
deepin
2021-01-12 18:44
#9
sammy-621

非常牛B。感谢deepin出这样的系列文章!!

你这是把我当成官方人员了吗?

我是一个官方认证的deepin爱好者

Reply View the author
sammy-621
deepin
2021-01-12 19:37
#10
Jack

你这是把我当成官方人员了吗?

我是一个官方认证的deepin爱好者

牛B plus

Reply View the author
pzm9012
Moderator
2021-01-12 20:50
#11

写完了记得参加官方的评测活动,保准拿第一

Reply View the author
Jack
deepin
2021-01-12 20:51
#12
pzm9012

写完了记得参加官方的评测活动,保准拿第一

嗯嗯,我继续努力

Reply View the author
caoayu
deepin
2021-01-19 23:09
#13

推荐一波 zsh 的zim 框架,比oh-my-zsh快,更小更方便

Reply View the author
lcb168
deepin
2021-02-05 18:47
#14

继续努力

Reply View the author
Jack
deepin
2021-02-07 03:21
#15
lcb168

继续努力

谢谢鼓励。

Reply View the author
158******61
deepin
2022-06-09 00:46
#16

我是菜鸟,现在不都用puty或Xshell这两个工具了吗?特别是Xshell

Reply View the author
Jack
deepin
2022-06-09 17:55
#17
158******61

我是菜鸟,现在不都用puty或Xshell这两个工具了吗?特别是Xshell

你说的 putty 和 Xshell是运行在windows上连接linux的应用。

我这里说的shell,既是用户命令与Linux内核交互的接口,也是一种编程语言,可以编写脚本文件。

Reply View the author