文章目录(Table of Contents)
简介
本文会介绍 Shell
,Terminal
和 Console
基础的概念。包括什么是 Shell
,Shell
的类别和第一个 shell
脚本。同时我们也会简单介绍 Terminal
和 Console
的概念。他们三者的关系如下图所示:
本文的大部分内容根据实验楼课程,「楼+ 之运维进阶实战」进行改编。部分图片和内容来自知乎问答,终端、Shell、tty 和控制台(console)有什么区别?,和 What's the difference between a console, a terminal, and a shell?。
Shell 概述和分类
什么是 Shell
Shell
是系统的用户界面,提供了用户和内核进行交互操作的一种接口。Shell不是硬件,而是软件,是操作系统的操作界面。同时,Shell 也是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell
有自己的编程语言用于对命令的编辑,它允许用户编写由 shell
命令组成的程序。
通常在图形界面中对实际体验带来差异的不是不同发行版的各种终端模拟器,而是这个 Shell
(壳)。有壳就有核,这里的核就是指 UNIX/Linux
内核,Shell
是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS
下的 command
(命令行)和后来的 cmd.exe
。
UNIX/Linux
操作系统下的 Shell
既是用户交互的界面,也是控制系统的脚本语言。当然这一点有别于 Windows
下的命令行,虽然该命令行也提供很简单的控制语句。在 Windows
操作系统下,有些用户从来都不会直接使用 Shell
。然而在 UNIX
系列操作系统下,Shell
仍然是控制系统启动和其它很多实用工具的脚本解释程序。
Shell 类别
在 UNIX/Linux
中比较常见的 Shell
有以下几种:
Bourne Again Shell
(简称 bash)Bourne Shell
(简称 sh)C-Shell
(简称 csh)Korn Shell
(简称 ksh)Z shell
(简称 zsh)
Ubuntu
终端默认使用的是 bash
,默认的桌面环境是GNOME
或者 Unity
(基于 GNOME),我这里使用的是 zsh
和 bash
。
查看以及切换 Shell
查看主机上所有 Shell
:通过 cat /etc/shells
命令来查看主机上的 Shell
类型。我们会在后续中详细介绍 shell 的使用,这里先做一个简单的了解。
查看 Shell
版本:我们可以使用 echo $0
或是 echo $SHELL
来查看当前的 Shell
版本:
更改 Shell
版本:我们可以使用 chsh
命令来更换登录系统时使用的 Shell
。例如下面的例子将 Shell
切换为 zsh
:
- chsh -s /bin/zsh # 将 shell 切换为 zsh
第一个 Shell 脚本
上面我们简单介绍 shell
,下面我们创建一个 shell
脚本。新建一个文件 test.sh
,扩展名为 sh(sh 代表 shell),扩展名并不影响脚本执行。输入以下的内容:
#! /bin/zsh echo "Hello World."
在上面的脚本中,第一行#!
是一个约定的标记,告诉系统这个脚本是用指定的解释程序来执行。不指定时,默认使用 $SHELL
变量的值。 接下来我们运行文件(需要给文件执行权限):
可以看到如果我们不给「执行权限」,shell 脚本是无法正常运行的。
终端-Terminal
Terminal
是来自单词 terminate
,表示通信过程的终止端。一台大型主机往往需要支持许多用户同时使用,每个用户所使用操作的设备,就叫做 Terminal——终端,终端使用通信电缆与电脑主机连接,甚至可以通过电信网络(电话、电报线路等等)连接另一个城市的电脑。Unix 和 Linux 把这种使人和机器可以交互的接口称为终端
。
TTY(teletypewriter)是早期的一种 terminal。他没有显示器。当你输入的时候,你会看到你输入的文字出现在一张纸上,同时文字也会被输入电脑。当电脑给出响应的时候,typewriter 会自动在纸上打印输出的文字。TTY 如下所示:
终端具有两个基本功能:向主机输入信息和向外部输出信息。所以终端可以分为输入设备和输出设备。Linux
的终端类型有以下几种:
- /dev/tty,当前进程的控制终端,TTY->teletypewriter
- /dev/ttySn,串行口终端
- /dev/pty,伪终端
- /dev/ttyn tty1~tty6,是虚拟终端,tty0 当前虚拟终端的别名
- /dev/console,控制台终端
Linux 中常见的终端模拟器有以下几种(这种终端模拟器就是使用软件来模拟终端):
- gnome-terminal
- Konsole
- xterm
- rxvt
- kvt
- nxterm
- eterm
tty/pty/pts 介绍
tty
是终端设备的统称,原指电传打字机,一种阅读和发送信息的媒介,后来被键盘和显示器取代,现在称为终端。 终端是一种字符型设备,有多种类型,通常使用 tty
来统称各种类型的终端设备。
pty(虚拟终端)
,当我们需要远程 telnet 到主机或使用 xterm 时希望有一个终端来完成交互,因此就有了虚拟终端 pty(pseudo-tty)。
pts
,pts(pseudo-terminal slave) 是 pty 的实现方法,前者和 ptmx(pseudo-terminal master) 配合使用实现 pty。
在 Linux 系统的设备特殊文件目录 /dev/
中,终端特殊设备文件一般有以下几种:
- 串行端口终端(/dev/ttySn)
串行端口终端 (Serial Port Terminal) 是使用电脑串行端口连接的终端设备。电脑把每个串行端口都看作是个字符设备。 这些串行端口所对应的设备名称是 /dev/tts/0(或 /dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)
等,设备号分别是 (4,0)、(4,1)
等,分别对应于 DOS
系统下的 COM1、COM2
等。若要向一个端口发送数据,能够在命令行上把标准输出重定向到这些特别文档名上即可。
- 伪终端(
/dev/pty/
)
伪终端 (Pseudo Terminal) 是成对的逻辑终端设备(即 master
和 slave
设备, 对 master
的操作会反映到 slave 上)。
- 控制终端(
/dev/tty
)
如果当前进程有控制终端 (Controlling Terminal
) 的话,那么 /dev/tty
就是当前进程的控制终端的设备特殊文件。可以使用命令 ps –ax
来查看进程与哪个控制终端相连。对于登录的 shell
,/dev/tty
就是你使用的终端,设备号是 (5,0)
。使用命令 tty
可以查看它具体对应哪个实际终端设备。
Console-控制台
在早期的电脑上,往往具有带有大量开关和指示灯的面板,可以对电脑进行一些底层的操作,这个面板就叫做 Console(控制台)。其概念来自于管风琴的控制台。一台电脑通常只能有一个 Console,很多时候是电脑主机的一部分,和 CPU 共享一个机柜。Console 是不能远程控制的。
console
常常容易和 terminal
有所混淆。我们可以简单理解为 console 是一个设备,terminal 是控制台内的软件程序。
控制台终端文件(/dev/console)
tty0、tty1、tty2
等。当你在控制台上登录时,使用的是tty1
。
使用Alt+[F1—F6]
组合键时,就可以切换到 tty2、tty3
等上面去。tty1–tty6
等称为虚拟终端,而 tty0
则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。
你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。不过只有系统或超级用户 root
可以对 /dev/tty0
进行写操作。 虽然可以在物理机系统上通过 [Ctrl]+[Alt]+[F1]~[F6]
进行切换,但是在我们的在线实验环境中可能无法切换,因为特殊功能按键会被你的主机系统或浏览器劫持。当你切换到其中一个终端后想要切换回图形界面,可以按下 [Ctrl]+[Alt]+[F7]
来完成。
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论