终端
在早期的计算机历史上,终端是一种硬件,是一种输入输出设备,用于和计算机交换信息。用户通过终端输入命令,终端将命令传入计算机,执行后,并把结果输入到终端上显示。
但是现在计算机硬件一体化程度越来越高,输入输出设备完全没必要单独用一个硬件和计算机进行交换信息,取而代之使用软件终端和计算机进行交互信息。这就是终端模拟器 (Terminal Emulator),也就是现在人们说的终端。
当使用图形用户界面时,需要终端模拟器与shell进行交互。在Linux系统中,有许多终端模拟器可以使用,但是它们基本上都做同样的事情:让用户访问shell。
shell 是什么?
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”。
如上图所示:如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell
Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。
shell分类:
- 图形化 shell(图形化的桌面环境):如Windows Explorer、Linux的桌面环境有:KDE、GNOME、DDE
- 命令行 shell。如bash 、sh 、csh 、ksh、zsh
- bash(GNU Bourne-Again Shell)是最常用的一种shell。也是大部分linux系统的默认shell。
- zsh是另外一种shell,功能更为强大,但配置麻烦,不过好在有程序员弄了一个开源项目oh-my-zsh配置来配置zsh,因此zsh的配置也变得更加容易
shell作为命令解释器,同时Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
shell也是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
查看环境支持的shell命令:
cat /etc/shells
,查看当前使用的shell:echo $SHELL
第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell,或直接简称为 sh。不过随着shell的发展,zsh更受人们的喜爱。例如我使用的shell就是zsh。
总结
简单来说:
- 终端只负责提供给用户输入、获取输出功能,它并不知道如何处理用户的输入,它仅仅只是将用户的输入传递给shell,也可以将shell返回的内容输出
-
Shell负责处理终端输入的内容,将其解析并执行,之后在将执行结果返回给终端
我们可以没有终端就执行Shell,例如Shell脚本,它可以自动的执行一系列命令,而不通过终端