it-swarm.cn

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

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

  • 终奌站
  • 贝壳
  • tty
  • 安慰

这些术语分别指的是什么?

1278
Lazer

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

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

用Unix术语来说,简短的答案是

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

控制台,终端和tty密切相关。最初,它们是指您可以用来与计算机进行交互的一种设备:在unix的早期,这意味着 teleprinter -style的设备类似于打字机,有时也称为电传打字机,或“ tty简写为“”。从电子的角度来看,“终端”这个名字,从家具的角度来看,这个名字是“控制台”。在Unix历史的早期,电子键盘和显示器已成为终端的规范。

用unix术语来说,tty设备文件 的一种特殊类型,它实现了除读和写之外的许多其他命令( ioctls )。写。在最常见的意义上,terminal与tty是同义词。某些tty由内核代表硬件设备提供,例如,输入来自键盘,输出进入文本模式屏幕,或者输入和输出通过串行线路传输。其他tty,有时也称为pseudo-ttys,由称为 terminal emulators 的程序(通过薄内核层)提供。 ,例如 Xterm (在 X Window系统 中运行), Screen (在程序和另一个终端之间提供隔离层), Ssh (将一台计算机上的终端与另一台计算机上的程序连接), Expect (用于脚本化终端交互),等等。

Word终端还可以具有一种设备的更传统的含义,通过它设备可以与计算机(通常是键盘和显示器)进行交互。例如,X终端是一种 thin client ,这是一台专用计算机,其唯一目的是驱动键盘,显示器,鼠标以及偶尔的其他人机交互外围设备,而实际应用程序则在另一端运行,功能更强大的计算机。

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

另请参见 为什么虚拟终端是“虚拟的”,什么/为什么/在哪里是“真实”终端?


Shell 是用户登录时看到的主要界面,其主要目的是启动其他程序。 (我不知道最初的隐喻是Shell是用户的家庭环境,还是Shell是其他程序在其中运行。)

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

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

命令行外壳包含用于组合命令的流控制构造。除了在交互式提示符下键入命令外,用户还可以编写脚本。最常见的shell具有基于 Bourne_Shell 的通用语法。在讨论“Shell编程”时,几乎总是暗示该Shell是Bourne风格的Shell。一些经常用于脚本编写但缺少高级交互功能的shell包括 Korn Shell(ksh) 和许多 ash 变体。几乎所有类似Unix的系统都有安装为/bin/sh,通常是ash,ksh或bash。

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


终端和外壳之间的分工并不完全明显。这是他们的主要任务。

  • 输入:终端将按键转换为控制序列(例如 Left →\e[D)。 Shell将控制序列转换为命令(例如\e[Dbackward-char)。
  • 命令行管理程序提供行编辑,输入历史记录和补全。
    • 终端可以改为提供自己的行编辑,历史记录和完成,并且仅在准备执行时将行发送到Shell。以此方式运行的唯一公共端子是M-x Shell在Emacs中。
  • 输出:Shell发出诸如“ display foo”,“将前景色切换为绿色”,“将光标移动到下一行”之类的指令。终端根据这些指令进行操作。
  • 提示纯粹是一个Shell概念。
  • 命令行管理程序永远不会看到它运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是终端概念。
  • 终端提供应用程序间的复制粘贴(通常使用鼠标或按键序列,例如 Ctrl+Shift+V 要么 Shift+Insert)。命令行管理程序也可能具有自己的内部复制粘贴机制(例如, Meta+W 和 Ctrl+Y)。
  • 作业控制 (在后台启动程序并对其进行管理)主要由Shell执行。但是,由终端来处理诸如 Ctrl+C 杀死前台工作, Ctrl+Z 暂停它。
1253

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

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

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

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

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

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

199
andcoz

简短说明:

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

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

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

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

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

51
Johan

A[〜#〜] tty [〜#〜](即[〜#〜] t [〜# 〜]ele[〜#〜] ty [〜#〜]作家)是一种特殊的装置,可以让人们失聪,听力不佳或语音障碍的人通过允许他们键入文本消息来使用电话进行通信。对话的两端都需要一个TTY,以便进行通信。
要么
[〜#〜] tty [〜#〜]终端,用于键入短信。


Shell:种子的外部保护覆盖部分,即内核。
要么
系统中央或重要部分的框架或外部结构。
enter image description here


控制台表示键盘和显示器与计算机的物理连接。

36
Premraj

已经有两个很好的答案,但是Ī̲想添加有关短语“虚拟终端”的信息。通常,它表示提供终端外观/功能的东西,即e。 终端仿真器 广义上。但是在Linux的早期(1994-95年),某些开发人员将其与 “虚拟控制台”(几个不相关的用户界面) 同义词使用。这种用法在文档中仍然存在。有两个不同的术语用于表示tty1,tty2…thingies。如今(自≈1996年以来),“虚拟终端”也可以指基于 pty 的终端仿真器。

Linux的vt(文本模式系统控制台的驱动程序)是其内核的第一部分。它最初用于连接大型机,从这个意义上说,它是“虚拟终端”,因此得名。控制虚拟控制台的代码 位于vt.c 也是如此。 Linux内核工程师始终使用单词“控制台”来表示tty1,tty2…,并使用“ vc_”前缀。例如,有一个vc_allocate函数。另一方面,诸如kbdconsole-tools交替使用“虚拟控制台”(VC)和“虚拟终端”(VT)。 ed联系了 Andries E. Brouwer ,请他澄清早期开发人员(1994-95)所用的术语。安德烈斯提供了一些答案。他指出VT和VC是同义词和“不可分割”的缩写。->通常,虚拟控制台是虚拟终端,但相反是不正确的。那些“虚拟终端”不是虚拟控制台的确是pseudoterminals(正如Andries所说的,这些不是VT)。与虚拟控制台不同,在虚拟控制台中,内核为控制台应用程序提供了终端功能,伪终端- 使用PTY“设备”安排控制台应用程序和在用户空间中运行的终端制作程序之间的通信 。示例是基于X的终端仿真器和sshd,它们为每个登录会话分配一个伪代码假冒伪娘可能不会被称为“控制台” –这是一个错误。

30
Incnis Mrsi
  • Terminal =一个界面,为Shell会话提供输出显示和键盘输入。

  • Shell =执行输入为字符串的命令的解释器

  • 控制台:实际上我们使用两种类型的控制台

    • 物理控制台=用于与系统交互的硬件显示屏和键盘

    • 虚拟控制台=可以分别支持独立登录会话的多个逻辑控制台之一。

  • tty(teletype,即终端)。 =终端基本上只是一个使用文本进行输入和输出的用户界面设备。

16
Rakib

您需要深入了解历史。

有类似打字机的设备,带有纸和键盘。它们被称为电传打字机(意为“远程打字”,因为“电话”意为“远程”)或ttys的简称。在20世纪70年代,他们被称为CRT显示器的设备玻璃(ttys)淘汰。

任何计算机都需要某种方式来报告其状态和错误(并可能接受命令)。它是通过console完成的,它几乎总是直接连接到计算机。因此,console有2个含义:用于报告状态的东西和直接连接的东西。

UNIX是一个交互式系统:多个用户可以连接到它并启动应用程序。第一台计算机为此使用电传打字机(tty):每个用户都已通过串行线路连接将电传打字机连接到计算机。这种电传打字机称为terminal。 UNIX还获得了专门的子系统来处理“坐在终端后面的用户”,这也称为tty,因为第一个终端是电传打字机。每个进程都可以连接到Unix中的tty。这意味着在终端附近某处有用户。有关更多信息,请参见 http://www.linusakesson.net/programming/tty/

用户需要某种方式来告诉内核运行应用程序。 Shell(sh,bash,csh,ksh等)用于此目的。 Shelltty上运行,接受用户的命令并要求内核运行某些应用程序。

但是终端并不总是物理连接到机器。可能有一些应用程序“模拟”终端,接受用户的击键并将其发送到某处(xterm和ssh是很好的示例)。为此,内核中有一个称为pseudo terminal的API。因此,您的tty可能实际上已连接到某个应用程序,而不是实际的终端。 Xterm使用X11显示文本,而ssh使用网络连接。

IBM PC具有键盘和视频卡(有时也称为console)。 Linux可以用它做不同的事情:

  • 将其用作“报告错误和状态的引擎”:Linux控制台。如果将console =/dev/ttyS0传递给内核,它将使用连接到COM1的东西作为控制台,如果不这样做,它将使用PC控制台。
  • 用它来模拟终端,即虚拟终端(vty)。

它还可能会停止在控制台上模拟终端并将其提供给某些应用。应用可能会切换其视频模式并专门使用它(X11或svgalib可能会这样做)。

因此,这是现代含义:

  • 终端:背后有真实用户的东西。可以是物理终端(稀有)或伪终端(xterm,ssh)或虚拟终端(在Linux中为vty)
  • Shell:帮助用户与系统交互的应用程序(bash,tcsh等)。
  • tty:支持终端的终端或内核子系统。
  • 控制台:报告状态和错误的地方(/dev/console)或物理键盘和视频显示器连接到计算机。
12
user996142

这是简短的答案-

内核-任何直接与实际硬件对话的现代操作系统的最内层部分。

Shell-围绕实际内核的包装器。每当我们运行命令时,我们实际上都会与Shell对话,Shell进而调用适当的内核指令。除此之外,命令行管理程序还可以执行其他一些工作,例如在拥有命令的同时查找适当的程序,一些文件名的缩写,管道命令等。

Terminal-在较早的计算时代,计算机(称为Mainframe)是巨大的。因此,只有一个处理单元并从许多地方连接起来很容易。终端是将键盘和输出设备连接到大型机的实际硬件。

控制台-特殊类型的终端,直接连接到Mainframe以进行OS管理。

tty-TeleTypewriter用于向主机发送数据和从主机接收数据。在视频终端可用之前使用。但是按照惯例,它仍然被命名为tty。甚至是普通人stty

详细的详细答案在这里- 终端,控制台,Shell,内核,命令-计算机的不同部分

9
Palash Kanti Kundu

除了接受的答案和 TTY揭秘 文章外,我真的很喜欢阅读这两篇文章:

这个 是基于NetBSD的。

早在Unix的石器时代,计算机系统就由一个大型机,一个闪烁的大盒子组成,它们具有内存,大容量存储和计算单元,并运行由用户或操作员启动的进程。由于硬件非常昂贵,因此系统被用作真正的多用户系统,许多人同时与该系统进行交互。与当今的Unix工作站不同,它通常没有的是固定的显示器和键盘。取而代之的是,先通过电传打字机,再通过CRT(阴极射线管)终端通过串行线路向机器发出命令并检索输出。电传打字机(这是Unix中的“ ttys”的来源)是电子打字机,它们将通过串行线路按下的键发送到主机,然后通过内置打印机通过串行方式通过char将回复发送回电传打字机char。将答复写在纸上,就像打字机一样。

这个 基于Linux。

终端是提供增强的输入/输出功能的设备,而仅使用常规文件,管道和套接字无法实现。这些功能旨在使人们更轻松地与计算机进行交互,而对于试图互相交谈的程序则毫无用处。

7
Nishant

让我对此进行解释...在此我将或多或少地使用Unix和Linux。如果我指的是Linux之前的历史,我通常会写“ Unix”,如果我谈论的是较新的东西或特定于Linux风格的Unix,我通常会写“ Linux”。 ”。

贝壳

列表中唯一一个与其他概念没有重叠的离散概念是“ Shell”。 Shell是一个程序,旨在与用户通信并代表他们执行操作系统操作。

最常见的shell使用一种称为“命令行”的技术,该技术包括向用户发送某种提示,等待用户键入文本命令,然后执行该命令。但是有基于菜单的外壳,甚至还有图形外壳(例如Windows File Explorer),尽管没有一个自重的Unix人士会把这种东西称为“外壳”。

在Unix中,如果有人称某个东西为“ Shell”,则几乎可以肯定是指我刚才所描述的某种形式的命令行界面。如果在不使用我进一步描述的tty模型与用户进行通信的情况下,将任何东西都称为“ Shell”在Unix世界中是很奇怪的。

TTY

这是一个令人困惑的事情,因为它可以指代几种不同的事物。

在Linux中,有一种称为“ tty”的设备。它是一种抽象设备,有望用于与某个用户或正在以某种方式从用户那里获取输入的东西进行双向通信。有时,该抽象设备可能直接对应于某些物理设备。有时,它可能是一个程序,向某人显示一个窗口,在该窗口中显示通讯内容,用户可以在其中键入内容。

但是,这种抽象设备存在的原因以及它被称为“ tty”的原因是“ tty”是“ teletype”的缩写,“ teletype”是一种实际的物理设备,具有将打印机打印在纸上并结合键盘的物理设备。抽象的“ tty”设备提供给正在使用的程序的模型基本上是在另一端有一个电传打字机。您发送字符,这些字符将出现在电传打字机中。当您从中读取字符时,这些字符表示在键盘上键入的键。

基于旧纸打印机的tty很快就被视频tty所取代。当然,这些纸上没有纸卷。而且,实际上,有可能覆盖屏幕上的任何字符。但是,与其期望为程序提供某种抽象的“屏幕”界面,不如期望它们发送特殊的字符流,即逃逸序列,以完成各种任务。通常,有一个抽象的东西叫做“光标”,它可以在屏幕上移动,发送的任何字符都将替换光标处的所有字符,并且光标将继续移动一个字符。通常,您还可以更改将要使用转义序列打印的字符的颜色。

有些“玻璃tty”不遵循这种模型,因此在Unix世界中处理不善。 IBM 3270系列视频终端属于此类。

Linux/Unix人们通常称其为“ Shell窗口”,是使用图形用户界面对glass tty的仿真。在内部,在Shell窗口内运行的程序正在与虚拟tty设备通信,该设备有时称为伪tty或伪终端(也称为pty)。

终奌站

终端只是计算机和人机交互的地方。终端可能是完全图形化的,并且不会以任何方式遵循tty模型,即使程序可能会使用其功能来模拟这一点。所有实际的物理tty(玻璃或其他)都是终端。

安慰

控制台是一种特殊的终端,通常应以某种直接安全的方式将其连接到运行操作系统的硬件。

在Linux中,控制台以较小的方式进行了虚拟化,这使您可以使用特殊的击键在虚拟控制台之间进行切换。但是,这种虚拟化是通过内核中的软件使用真正的硬件完成的。

有几种方法可以通过所谓的“串行控制台”来使用Linux,该控制台是通过串行端口(如USB端口)(或在某些非常小和/或非常旧的计算机上为RS-232端口)连接到计算机的控制台。 ),并以相当严格的方式遵循旧的电传打字机模型。

同样,此控制台的想法是,该控制台以直接物理方式连接到计算机,而不是通过可能允许任何人连接的某种网络连接。

5
Omnifarious