“终端”、“shell”、“tty”和“控制台”之间的确切区别是什么?

“终端”、“shell”、“tty”和“控制台”之间的确切区别是什么?

我认为这些术语在宽泛使用时几乎指的是同一件事:

  • 终端
  • 终端
  • 安慰

这些术语到底指什么?

答案1

终端是电线的末端,外壳是乌龟的家,tty是一个奇怪的缩写,控制台是一种柜子。

好吧,无论如何,从词源学上来说。

在 Unix 术语中,简短的答案是

  • Terminal = tty = 文本输入/输出环境
  • 控制台=物理终端
  • shell = 命令行解释器

控制台、终端和tty密切相关。最初,它们指的是一种可以与计算机交互的设备:在 Unix 的早期,这意味着电传打字机- 类似于打字机的设备,有时称为电传打字机,或简写为“tty”。 “终端”这个名字来自电子的角度,“控制台”这个名字来自家具的角度。在 Unix 历史的早期,电子键盘和显示器就成为终端的标准配置。

在 Unix 术语中,终端是一种特殊的设备文件它实现了许多附加命令(读写控制)超越读写。就其最常见的含义而言,终端是 tty 的同义词。某些 tty 是由内核代表硬件设备提供的,例如来自键盘的输入和到文本模式屏幕的输出,或者通过串行线路传输的输入和输出。其他 tty,有时称为伪ttys,由称为的程序提供(通过薄内核层)终端模拟器, 例如Xterm(运行在X窗口系统),屏幕(它在程序和另一个终端之间提供了一层隔离),SSH(将一台机器上的终端与另一台机器上的程序连接起来),预计(用于编写终端交互脚本)等。

终端一词也可以具有更传统的含义,即人们通过其与计算机交互的设备,通常使用键盘和显示器。例如,X 终端是一种瘦客户端,一种特殊用途的计算机,其唯一用途是驱动键盘、显示器、鼠标以及偶尔的其他人类交互外围设备,而实际应用程序在另一台更强大的计算机上运行。

A安慰通常是物理意义上的终端,根据某种定义,它是直接连接到机器的主要终端。控制台在操作系统中显示为(内核实现的)tty。在某些系统上,例如 Linux 和 FreeBSD,控制台显示为多个 tty(在这些 tty 之间切换的特殊组合键);只是为了混淆问题,给每个特定 tty 的名称可以是“控制台”、“虚拟控制台”、“虚拟终端”和其他变体。

也可以看看为什么虚拟终端是“虚拟”的,“真实”终端是什么/为什么/在哪里?


A是用户登录时看到的主要界面,其主要目的是启动其他程序。 (我不知道原来的比喻是shell是用户的家环境,还是shell是其他程序运行的地方。)

在 Unix 圈子里,专门指的是命令行外壳,以输入要启动的应用程序的名称为中心,然后输入应用程序应操作的文件或其他对象的名称,然后按 键Enter。其他类型的环境不使用“shell”一词;例如,窗口系统涉及“窗口管理器“ 和 ”桌面环境”,而不是“壳”。

有许多不同的 Unix shell。用于交互式使用的流行 shell 包括重击(大多数 Linux 安装的默认设置),兹什(强调功能和可定制性)和(强调简单性)。

命令行 shell 包括用于组合命令的流控制结构。除了在交互式提示符下键入命令之外,用户还可以编写脚本。最常见的 shell 具有基于以下内容的通用语法:伯恩外壳。当讨论“外壳编程”,shell 几乎总是暗示是 Bourne 风格的 shell。一些经常用于编写脚本但缺乏高级交互功能的 shell 包括康壳 (ksh)还有很多变种。几乎所有类 Unix 系统都安装了 Bourne 风格的 shell /bin/sh,通常是 ash、ksh 或 Bash。

在 Unix 系统管理中,用户的是登录时调用的程序。普通用户帐户有一个命令行 shell,但访问受限的用户可能有一个受限外壳或一些其他特定命令(例如,仅用于文件传输帐户)。


终端和shell之间的分工并不完全明显。以下是他们的主要任务:

  • 输入:终端将按键转换为控制序列(例如Left\e[D)。 shell 将控制序列转换为命令(例如\e[Dbackward-char)。
  • 行编辑、输入历史记录和补全由 shell 提供。
    • 终端可以提供自己的行编辑、历史记录和完成,并且仅在准备好执行时才将行发送到 shell。以这种方式操作的唯一常见终端是M-x shellEmacs。
  • 输出:shell发出诸如“显示foo”、“将前景色切换为绿色”、“将光标移动到下一行”等指令。终端根据这些指令进行操作。
  • 提示符纯粹是一个 shell 概念。
  • shell 永远看不到它运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是一个终端概念。
  • 应用程序间复制粘贴由终端提供(通常使用鼠标或按键序列,例如Ctrl+ Shift+VShift+ Insert)。 shell 也可能有其自己的内部复制粘贴机制(例如Meta+WCtrl+ Y)。
  • 作业控制(在后台启动程序并管理它们)主要由 shell 执行。但是,终端负责处理组合键,例如使用Ctrl+C来终止前台作业,使用Ctrl+Z来暂停前台作业。

答案2

A终端或一个安慰是一个硬件,用户可以使用它与主机交互。基本上是一个键盘和一个文本屏幕。
如今,几乎所有终端和控制台都代表“虚拟”终端和控制台。

代表终端的文件传统上称为终端文件。如果你查看UNIX系统的“/dev”目录,你会发现很多终端连接到虚拟控制台(例如linux上的tty1)、虚拟终端(例如pts/0)或物理连接的硬件(例如ttyS0是物理串行终端(如果有的话)连接到主机的第一个串行端口)的文件。

A安慰必须是物理连接到主机(或主机的一部分)的硬件。它在系统中具有特殊的作用:它是访问系统进行维护的主要点,并且某些特殊操作只能从控制台完成(例如参见single user mode)。 A终端可以并且通常是远程硬件。

最后但并非最不重要的一点是,是一个特殊的程序,通过控制终端并向用户提供启动其他程序(例如bash、csh、tcsh)的方式。

A终端仿真器是一个模拟物理终端的程序(例如xterm、gnome-terminal、minicom)。

因此,当您查看 Linux 系统(X11 下)上的“文本窗口”时,您正在寻找:终端仿真器,连接到一个虚拟终端,由一个识别终端文件,其中运行

答案3

简短说明:

控制台是一个终端。一个系统有一个控制台和可能的多个终端。控制台通常是管理计算机的主要界面,例如在计算机仍在启动时。

终端是可以接收和发送命令行程序的输入和输出的会话。控制台是终端的一个特例。

TTY本质上是一个伪设备,称之为内核资源,进程使用它来访问特定的终端。 TTY 可以绑定到硬件(例如串行端口),也可以是虚拟的,例如,当用户通过网络登录时创建

shell是一个用于控制和运行程序的程序。它通常通过终端以交互方式使用。存在多种 Shell 程序,Bash 可以说是当今最常用的 shell。其他 shell(排名不分先后)包括 Bourne Shell、C-shell、Dash、Tsch、Ksh 以及日益流行的 zsh。还有更多。

当您拥有 GUI 时,您可以使用终端程序为终端会话绘制漂亮的可调整大小的边框、添加滚动条以及设置文本格式等。这些通常称为终端仿真器,有时它们可​​以通过 TAB 概念处理多个会话。终端仿真器通常会启动 Shell 以允许您在命令行上交互工作。

答案4

已经有两个很好的答案,但我想添加有关该短语的信息“虚拟终端”。一般来说,它意味着提供终端外观/功能的东西,即。 e. A广义上。但在 Linux 的早期(1994-95),它被用作同义词“虚拟控制台”(几个不相关的用户界面),由一些开发商。这种用法在文档中仍然存在;两个不同的术语过去(现在)用来指代 tty1、tty2……事物。如今(自 ≈ 1996 年)“虚拟终端”也可以指基于终端模拟器。

Linux vt(文本模式系统控制台的驱动程序)是其内核的第一部分。它最初用于连接到大型机,从这个意义上说,它是一个“虚拟终端”,因此得名。控制虚拟控制台的代码驻留在vt.c以及。 Linux 内核工程师一致使用“控制台”一词来表示 tty1、tty2…,并使用“vc_”前缀来表示它们。例如,有一个vc_allocate函数。另一方面,诸如kbd和等用户空间工具的开发人员console-tools可以互换地使用“虚拟控制台”(VC)和“虚拟终端”(VT)。我已经联系过安德里斯·E·布劳威尔并要求他澄清早期开发人员使用的术语(1994-95)。安德里斯友善地提供了一些答案。他指出 VT 和 VC 是同义且“不可分割”的缩写。

一般来说,虚拟控制台是虚拟终端,但反之则不然。那些不是虚拟控制台的“虚拟终端”确实是伪终端(正如安德里斯所说,这些不是 VT)。与虚拟控制台不同,虚拟控制台的内核为控制台应用程序提供终端功能,伪终端使用 PTY“设备”来安排控制台应用程序和在用户空间中运行的终端制作程序之间的通信。示例是基于 X 的终端仿真器 和sshd,它为每个登录会话分配一个伪设备。伪设备可能不被称为“控制台”——这是一个错误。

相关内容