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


1235

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

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

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



28
我想在其中添加“命令行” :-)
teeks99

1
命令行只是用于从终端/终端仿真器向外壳中运行的命令行解释器发送命令的语言。
马蒂·弗里德

1
电传打字机(TTY)首次投入运行,并陈列在力学研究所在纽约1844年 en.wikipedia.org/wiki/Teleprinter
塞尔Stroobandt

Answers:


1197

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

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

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

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

控制台,终端和tty密切相关。原来,他们的意思一台设备,通过它你可以与计算机交互的:在UNIX的早期,这意味着一个电传式的装置类似一台打字机,有时也被称为速记一台电传打字机,或“TTY”。从电子的角度来看,“终端”这个名字,从家具的角度来看,这个名字是“控制台”。在Unix历史的早期,电子键盘和显示器已成为终端的规范。

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

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

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

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


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

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

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

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

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


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

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

50
只是一个小问题:我会说两种tty都是由内核“提供”的。我要强调的区别是,硬件tty(例如串行线和内置的文本模式控制台)的一端连接到硬件,而一端连接到软件(例如登录程序和/或shell),而伪tty则具有两端都连接到软件(例如,一端是终端仿真器,而另一端是外壳)。
克里斯·约翰森

12
@phunehehe:是的,这是操作系统设计中常用的“外壳”的不同含义:外壳是内核的外部。这不是unix的术语:Unix内核通常没有一种可以称为shell的组件。
吉尔斯

24
是我在脑海中隐喻的形象。
ændrük

12
在Linux下,“控制台”还有另一种含义。控制台(只有一个)是printk具有足够优先级的位置(例如,内核恐慌)。它是通过console=DEVICE,...在内核命令行上传递来设置的(例如,console=ttyS0,115200对于第一个串行端口,为115,200 bps)。通常,它默认为虚拟终端,但是在编译内核时可以更改。
derobert

19
“……终端……处理组合键,如Ctrl + C杀死前台作业,并按Ctrl + Z使其暂停” 。默认情况下,tty设备将控制字符转换为发送到外壳程序(和其他进程)的信号。
克里斯·佩奇

194

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

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

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

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

终端仿真器是模拟物理终端(例如xterm中,侏儒末端,小型机)中的程序。

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


2
任何台式机都具有系统控制台(在我的2015年或海报的2010年中,都没有关系)。正确地说,这是一件硬件。但是说“现在几乎所有……控制台代表“虚拟”控制台”几乎是矛盾的,而且显然不好。
Incnis Mrsi 2015年

1
“终端或控制台是一种硬件,用户可以使用它与主机进行交互。基本上是键盘和文本屏幕的结合。” 从具体方面
来看

@andcoz-“文本窗口”是什么意思?终端仿真器不是虚拟终端吗?如果我tty在终端仿真器(例如KDE的Konsole)中的命令上运行,则输出为/ dev / pts / 0。
启发

1
@IncnisMrsi-台式机不是控制台吗?如果不是,那么它具有系统控制台是什么意思?
上进

2
@Motivated /dev/pts/0是一个tty文件,是内核公开的程序化接口的处理程序。通过该处理程序,程序(例如外壳)可以与终端(真实或虚拟)交互。终端仿真器是一种模拟终端的软件。仿真器要求内核创建一个处理程序,以使程序与其自身进行交互(请参阅参考资料man openpty)。因此,信息从终端(仿真器)流向内核tty处理程序,再流向程序(反之亦然)。程序和终端不直接对话,而只能通过tty文件(处理程序)对话。
andcoz

48

简短说明:

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

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

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

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

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


1
PTY是伪TTY。TTY可以是,但本质上不是虚拟(伪)终端。
卢西亚诺

35

一个TTY(即牛逼 ELE TY pewriter)是一个特殊的装置,可以让人们谁是耳聋,听力不好,或言语障碍的使用电话进行沟通,让他们输入文字信息。对话的两端都需要一个TTY,以便进行通信。
OR
TTY是用于键入文本消息的终端


:种子的外部保护性覆盖部分,即核仁。
OR
框架或系统外部或内部结构的核心部分。
在此处输入图片说明


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


28

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

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


14
  • Terminal =一个接口,为外壳会话提供输出显示和键盘输入。

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

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

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

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

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


什么是tty?-否则,您的答案是我唯一读的答案
loxaxs

8

您需要深入了解历史。

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

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

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

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

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

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

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

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

因此,这是现代含义:

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

7

这是简短的答案-

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

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

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

控制台 -特殊类型的终端,出于OS Administration的目的直接连接到Mainframe。

tty -TeleTypewriter,用于与大型机之间收发数据。在视频终端可用之前使用。但是按照惯例,它仍然被命名为tty。即使是普通人stty

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


谢谢,但基本上如果终端存在,为什么在个人计算机的ubuntu系统中也仍然存在tty,请通过alt + f-1 / 6访问,我无法在没有图形系统使用的情况下访问它们的实用程序如果我了解

1
@Webwoman-我的系统配置为仅允许root通过sudo或通过控制台登录名访问帐户。控制台通常具有特殊的场所特权,因为有权访问控制台的人必须对其与之通信的计算机具有物理访问权。它们也是最后的访问方法。如果操作系统处于部分损坏的状态(例如以太网驱动程序已损坏),您仍然可以访问控制台。这是一个人机接口设备应始终可用,不管是什么状态的系统是英寸
五花八门的

@Omnifarious感谢您的回答“控制台通常具有特殊的地方特权,因为可以访问它们的人必须具有与他们通信的计算机的物理访问权限”,您的意思是TTY经常具有特殊的地方特权吗?
Webwoman

@Webwoman-不,控制台。TTY通常不会直接连接到计算机。在传统意义上,控制台通常不是TTY。80年代末期,我去明尼苏达州大学时,有一个校园范围的专业网络,我没有运行用于将随机TTY连接到随机计算机的Internet协议(aka IP)。IBM大型机也在发生类似的事情,这是IBM创建SNA的主要原因之一。普通PC即使在仅显示文本的情况下,在很多方面都与TTY完全不同,因此PC控制台实际上并不是TTY。
全方位

@Webwoman-控制台的定义功能是它与运行操作系统的硬件直接连接。现代的“虚拟机”使这个想法有些模糊,但这是基本的想法。
全方位

6

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

是基于NetBSD的。

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

是基于Linux的。

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


1

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

贝壳

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

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

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

TTY

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

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

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

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

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

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

终奌站

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

安慰

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.