前言
本篇文章带大家学习终端和进程的关系,终端相信大家都听过,那么真的理解终端是什么吗?应该有很多同学对于终端只是有一个模糊的概念。那么这篇文章就详细的来讲解一下终端的概念。
一、终端和控制台
在Linux系统中,终端(Terminal)和控制台(Console)是两个不同的概念。它们都提供了用户与操作系统进行交互的方式,但其底层机制和使用方式有所不同。
终端(Terminal):
终端是指通过图形用户界面(Graphical User Interface,GUI)提供的虚拟终端仿真器(Terminal Emulator),它允许用户在桌面环境中运行命令行界面(Command Line Interface,CLI)程序。在终端中,用户可以输入命令并接收命令的输出。常见的终端仿真器有 GNOME Terminal、Konsole、xterm 等。
终端提供了一个交互式的环境,用户可以执行各种命令、运行程序、编辑文件等。终端中使用的命令行解释器通常是 Bash(Bourne Again SHell),它是 Linux 中最常见的命令行解释器。用户可以通过终端执行系统命令、安装软件、管理文件和目录等。
控制台(Console):
控制台通常是指物理上连接到计算机的文本模式终端设备,例如通过键盘和显示器连接到计算机的终端。控制台提供了一种在没有图形界面的情况下与操作系统进行交互的方式。
控制台通常在启动时显示操作系统的启动信息和登录提示符,并且可以通过键入命令来与操作系统进行交互。在 Linux 中,控制台可以通过按下 Ctrl + Alt + F1 - F6 键切换。每个控制台都提供了一个独立的文本界面,用户可以登录、执行命令和查看系统状态。
控制台所使用的命令行解释器通常是 Linux 的虚拟控制台(Virtual Console)或 TTY(TeleTYpewriter),例如 TTY1、TTY2 等。用户可以在控制台中执行系统维护任务、故障排除等操作。
虽然终端和控制台在功能上有所重叠,但它们的本质和使用方式有所区别。终端是在图形界面环境下的虚拟终端仿真器,提供了命令行界面和交互式环境。而控制台是物理终端设备,可以直接与操作系统进行交互,在没有图形界面的情况下仍然可用。用户可以根据需要选择适合自己的终端或控制台进行操作。
二、TTY和PTY
1.TTY(TeleTYpewriter):
TTY 最初是指传统的电传打字机,它提供了一种通过电信系统进行远程通信的方式。在Unix-like系统中,TTY 是指表示物理或虚拟终端设备的名称。在早期的Unix系统中,终端设备被视为一种特殊的文件,称为TTY设备文件。例如,/dev/tty1 表示第一个物理终端设备。
TTY在现代操作系统中仍然用于表示终端设备或终端仿真器。它提供了用户与系统进行交互的接口,用户可以通过TTY设备文件与系统进行通信,输入命令并获取命令的输出。
2.PTY(Pseudo-Terminal):
PTY 是一种虚拟终端设备,它是在操作系统中模拟出的终端。它不是物理设备,而是一对相互连接的虚拟设备:主设备(Master)和从设备(Slave)。主设备充当终端仿真器(例如终端窗口),而从设备通常与应用程序或进程相关联。
PTY 的作用是允许应用程序通过仿真的终端接口与用户进行交互。例如,当你在终端窗口中打开一个新的终端会话时,实际上正在创建一个虚拟的PTY设备对,并将应用程序连接到该虚拟终端。应用程序可以像在物理终端上一样运行,并与用户进行交互。
PTY 的典型应用场景是远程登录和终端仿真器。它可以在计算机之间建立虚拟终端会话,使用户能够通过网络使用远程计算机的终端功能。
综上所述,TTY 是指物理或虚拟的终端设备,而 PTY 则是一对虚拟终端设备,用于模拟终端功能并允许应用程序与用户进行交互。这些概念在Linux系统中起到重要作用,为用户提供了命令行界面和终端仿真的功能。
三、终端的类型
1.虚拟终端(Virtual Terminal):
虚拟终端是计算机系统中模拟的终端设备。它通常是在图形界面环境中提供的虚拟终端窗口,以便用户可以在其上执行命令行操作。虚拟终端允许用户在同一台计算机上同时运行多个终端会话,每个会话都有自己的命令提示符,可以独立地执行命令和程序。
在Linux系统中,你可以使用快捷键(例如Ctrl + Alt + F1到F6)切换到不同的虚拟终端,其中F7一般是用于图形界面。每个虚拟终端都可以登录不同的用户,并在其上执行命令。
2.串口终端(Serial Terminal):
串口终端是通过串行通信接口连接到计算机的终端设备。串口终端通常与外部设备(如路由器、嵌入式系统等)进行通信,通过串行端口传输数据。它提供了基于字符的通信接口,允许用户通过串口与设备进行交互。
串口终端通常使用串行通信协议(如RS-232)进行通信,并使用特定的串口参数(如波特率、数据位、停止位等)进行配置。用户可以通过串口终端向设备发送命令或接收设备发送的数据。
3.终端模拟器(Terminal Emulator):
终端模拟器是在计算机上模拟终端功能的程序。它允许用户在图形界面中打开一个窗口,提供一个虚拟终端环境,用户可以通过该环境执行命令和操作。
终端模拟器在图形界面中显示由命令行程序输出的文本,并接收用户输入的命令。它模拟了终端设备的功能,通常支持ANSI转义序列和众多的命令行特性(如命令自动补全、滚动、分屏等)。一些常见的终端模拟器包括Linux下的gnome-terminal、konsole和Mac下的Terminal.app等。
4.伪终端(Pseudo-Terminal):
伪终端是一对相互连接的虚拟设备(主设备和从设备),用于模拟终端功能。它不是物理设备,而是在操作系统中虚拟出来的。
伪终端常用于通过网络远程登录计算机或将应用程序连接到模拟的终端界面。例如,当你通过SSH远程登录到一台计算机时,实际上创建了一个伪终端会话,你可以在其中执行命令并与计算机进行交互。
综上所述,虚拟终端是计算机中模拟的终端设备,串口终端是通过串口连接的外部设备,终端模拟器是程序中模拟的终端环境,而伪终端是模拟终端功能的虚拟设备。它们各自在不同的场景和应用中发挥着重要的作用。
伪终端示意图:
四、Gnome Terminal伪终端
当你在Gnome Terminal中打开一个终端窗口时,实际上你会看到一个伪终端(pseudo-terminal)。伪终端是一个软件实体,它模拟了物理终端的功能,并允许你与操作系统进行交互。
Gnome Terminal中的伪终端提供了一个可视化的用户界面,使你可以在一个图形化的窗口中执行命令行操作。这意味着你可以像在物理终端上一样输入命令、运行程序,并查看命令的输出结果。
伪终端在底层工作原理上使用了一些重要的技术,包括以下几个组成部分:
伪终端设备(Pseudo-Terminal Device):伪终端设备是伪终端的核心组成部分。它由两个虚拟的终端设备组成,一个是主设备(Master Device),用于与用户交互,另一个是从设备(Slave Device),用于与操作系统交互。Gnome Terminal通过使用伪终端设备来模拟终端行为和交互。
控制字符:伪终端通过发送控制字符来控制终端行为。例如,当你在终端中按下Enter键时,会发送一个回车字符(\r)给操作系统,以指示输入命令的结束。控制字符可以用来控制光标移动、清屏、改变文本样式等操作。
输入/输出处理:伪终端还负责处理输入和输出。当你在终端中输入命令时,伪终端将其发送给操作系统进行处理。操作系统将执行相应的命令,并将输出结果发送回伪终端,最终在终端窗口中显示出来。
通过伪终端,Gnome Terminal提供了一个方便、易于使用的界面,使你能够在图形化环境下执行命令行任务。你可以通过键盘输入命令,观察命令的执行结果,并与操作系统进行交互。伪终端的使用使得在Linux系统上进行命令行操作变得更加直观和友好。
熟悉的伪终端:
总结
本篇文章就讲解到这里,下一篇文章我们来实战编写实习伪终端的代码。