我认为这些术语在松散使用时几乎指的是同一件事: >这些术语分别指的是什么?

评论

TTY神秘化

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

命令行只是用于从终端/终端仿真器向运行在shell中的命令行解释器发送命令的语言。

电传打字机(TTY)首次投入运营,并于1844年在纽约机械学院展出。en.wikipedia.org/wiki/Teleprinter

TTY和X Windows,Linux终端,tty,pty和shell。

#1 楼

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

从词源上讲,无论如何。

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


控制台=物理终端
shell =命令行解释器


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

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

终端一词还可以具有一种设备的更传统的含义,通过该设备,人们可以与计算机(通常是键盘和显示器)进行交互。例如,X终端是一种瘦客户机,是一台专用计算机,其唯一目的是驱动键盘,显示器,鼠标以及偶尔的其他人机交互外围设备,而实际应用程序则在另一台功能更强大的计算机上运行。控制台通常是物理意义上的终端,从某种意义上讲,它是直接连接到机器的主要终端。控制台在操作系统中显示为(内核实现的)tty。在某些系统上,例如Linux和FreeBSD,控制台显示为多个tty(特殊的组合键在这些tty之间切换)。只是为了混淆问题,给每个特定tty赋予的名称可以是“控制台”,“虚拟控制台”,“虚拟终端”和其他变体。

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


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

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

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

命令行外壳包含用于组合命令的流控制构造。除了在交互式提示下键入命令外,用户还可以编写脚本。最常见的外壳具有基于Bourne_shell的通用语法。在讨论“ shell编程”时,几乎总是暗示该外壳是Bourne风格的外壳。一些经常用于脚本编写但缺少高级交互功能的外壳包括Korn外壳(ksh)和许多ash变体。几乎所有类似Unix的系统都安装了Bourne样式的外壳程序,称为/bin/sh,通常是ash,ksh或bash。 。普通用户帐户具有命令行外壳程序,但具有受限访问权限的用户可能具有受限外壳程序或某些其他特定命令(例如,仅用于文件传输的帐户)。


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


输入:终端将键转换为控制序列(例如Left→\e[D)。 Shell将控制序列转换为命令(例如\e[Dbackward-char)。
命令行提供了行编辑,输入历史记录和完成功能。


终端可以提供自己的行而是编辑,历史记录和完成,并且仅在准备好执行时向外壳发送一行。唯一以这种方式运行的常见终端是Emacs中的M-x shell


输出:外壳发出诸如“ display foo”,“将前景色切换为绿色”,“移动”之类的指令。光标将移动到下一行”,等等。终端将按照这些指令进行操作。
提示纯粹是一个shell概念。
shell永远不会看到它运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是终端概念。
终端提供应用程序间的复制粘贴(通常使用鼠标或按键序列,例如Ctrl + Shift + V或Shift + Insert)。该Shell也可能具有其自己的内部复制粘贴机制(例如Meta + W和Ctrl + Y)。

作业控制(在后台启动程序并对其进行管理)主要由Shell执行。但是,它是由终端来处理诸如Ctrl + C杀死前台作业和Ctrl + Z使其暂停的组合键。


评论


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

–克里斯·约翰森(Chris Johnsen)
2010年11月17日4:04

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

–吉尔斯'所以-不再是邪恶的'
10 Nov 17 '19:27



这是我脑海中关于贝壳的隐喻。

–ændrük
2010年12月7日19:00

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

–德罗伯特
11年8月29日在21:12



“……终端……处理诸如Ctrl + C的组合键以杀死前台作业,而Ctrl + Z的组合键则将其挂起。”并非如此:终端仍仅发送控制字符,由tty设备决定如何处理它们,并且它是可配置的。缺省情况下,tty设备将控制字符转换为发送到外壳程序(和其他进程)的信号。

–克里斯·佩奇(Chris Page)
2012年3月10日20:34

#2 楼

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

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

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

最后但并非最不重要的是,shell是一种特殊程序,可通过控制tty与用户进行交互并提供给终端。用户,启动其他程序(例如bash,csh,tcsh)的方式。

终端仿真器是模拟物理终端(例如xterm,gnome-terminal,minicom)的程序。 >
因此,当您查看linux系统(在X11下)上的“文本窗口”时,您将寻找:终端仿真器,连接到由tty文件标识的虚拟终端,在其中运行外壳程序。

评论


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

– Incnis Mrsi
2015年9月6日在7:20



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

– Webwoman
18-09-9在11:45



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

–有动力
19年1月16日在6:43

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

–有动力
19年1月16日在6:45

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

– andcoz
19年1月16日在13:45

#3 楼

简短说明:

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

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

TTY本质上是一个伪设备,称其为内核资源,进程使用它来访问特定的终端。 TTY可以绑定到诸如串行端口之类的硬件,也可以是虚拟的,例如当用户通过网络登录时创建的TTY。shell是用于控制和运行程序的程序。它通常通过终端以交互方式使用。存在几种Shell程序,可以说Bash是当今最常用的Shell。其他shell(无特殊顺序)包括Bourne Shell,C-shell,Dash,Tsch,Ksh和日益流行的zsh。还有更多。

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

评论


PTY是伪TTY。 TTY可以是,但本质上不是虚拟的(伪)终端。

–卢西亚诺
2015年6月18日在21:23



#4 楼

TTY(即Teletypewriter)是一种特殊的设备,它允许聋哑人,听力障碍者或语音障碍者通过键入文本消息来使用电话进行通信。对话的两端都需要一个TTY才能进行通信。
ORTTY是用于键入文本消息的终端。


外壳:外壳的外部保护罩部分种子,即内核。

框架或系统外部或外部结构的核心部分。


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

#5 楼

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

Linux的vt(文本模式系统控制台的驱动程序)是其内核的第一部分。它最初用于连接大型机,从这个意义上说,它是“虚拟终端”,因此得名。控制虚拟控制台的代码也位于vt.c中。 Linux内核工程师始终使用“控制台”一词来表示tty1,tty2…,并使用“ vc_”作为前缀。例如,有一个vc_allocate函数。另一方面,诸如kbdconsole-tools这样的用户空间工具的开发人员可以互换使用“虚拟控制台”(VC)和“虚拟终端”(VT)。 ed与AndriesE。Brouwer联系,请他澄清早期开发人员使用的术语(1994-95年)。安德烈斯提供了一些答案。他指出VT和VC是同义词,是“不可分割的”缩写。

->
通常,虚拟控制台是一个虚拟终端,但事实并非如此。那些不是虚拟控制台的“虚拟终端”确实是伪终端(如Andries所说,它们不是VT)。与虚拟控制台不同,在虚拟控制台中,内核为控制台应用程序提供了终端功能,伪终端使用PTY“设备”来安排控制台应用程序与在用户空间中运行的终端制作程序之间的通信。示例是基于X的终端仿真器和sshd,它们为每个登录会话分配一个伪代码。伪娘可能不会被称为“控制台”,这是一个错误。

#6 楼


Terminal =提供用于显示输出的界面和用于输入Shell会话的键盘。
Shell =执行命令类型为字符串的解释器

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


物理控制台=用于与系统交互的硬件显示屏和键盘
虚拟控制台=多个逻辑控制台之一,每个逻辑控制台可以支持独立的登录会话。


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


#7 楼

您需要深入了解历史。

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

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

UNIX是一个交互式系统:多个用户可以连接到该系统并启动应用程序。第一台计算机为此使用电传打字机(tty):每个用户都通过串行线连接将电传打字机连接到机器。这样的电传打字机称为终端。
UNIX也有专门的子系统来处理“坐在终端后面的用户”,也称为tty,因为第一个终端是电传打字机。
每个进程都可以连接到Unix中的tty。这意味着在终端附近某处有用户。有关更多信息,请参见http://www.linusakesson.net/programming/tty/。用户需要某种方法来告诉内核运行应用程序。 shell(sh,bash,csh,ksh等)用于此目的。 shell在tty上运行,接受来自用户的命令,并要求内核运行某些应用程序。

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

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


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

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

所以,这是现代含义:


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


#8 楼

这是一个简短的答案-

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

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

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

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

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

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

评论


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

– Webwoman
18-09-9在11:59



@Webwoman-我的系统配置为仅允许通过sudo或通过控制台登录访问根帐户。控制台通常具有特殊的位置特权,因为有权访问控制台的人必须对其与之通信的计算机具有物理访问权。它们也是最后的访问方法。如果操作系统处于部分损坏的状态(例如以太网驱动程序已损坏),您仍然可以访问控制台。无论系统处于什么状态,它都是应始终可用的一种人机界面设备。

–恶毒
19年7月12日在21:35



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

– Webwoman
19年7月13日在1:41

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

–恶毒
19年7月13日在3:21

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

–恶毒
19年7月13日在3:23

#9 楼

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

Shell

列表中唯一不涉及其他概念的离散概念就是“ shell”。 Shell是一个程序,其目的是与用户通信并代表他们执行操作系统操作。

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

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

TTY

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

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

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

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

有些“玻璃ttys”不遵循该模型,因此在Unix世界中处理起来很差。 IBM 3270系列视频终端属于此类别。

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

终端

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

控制台

控制台是一种特殊的终端,通常应以某种直接安全的方式连接到终端。

在Linux中,控制台以较小的方式进行了虚拟化,使您可以使用特殊的击键在虚拟控制台之间进行切换。但是,这种虚拟化是通过内核中的软件通过真正的硬件完成的。串行端口,例如USB端口(或者在某些非常小和/或非常旧的计算机上,是某种RS-232端口),并且以相当严格的方式遵循旧的电传打字机模型。

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

#10 楼

除了公认的答案和TTY神秘的文章之外,我真的很喜欢阅读这些文章:

这是基于NetBSD的。


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


这是基于Linux的。


终端是提供增强的输入/输出功能的设备,而仅使用常规文件,管道和
插座无法实现。这些功能旨在使人们更容易
与计算机交互,而对于试图互相交谈的程序则没有用。


通常基于Linux。


一般来说,终端是一种相对笨拙的机电设备,具有输入接口(如键盘)和输出接口(如显示器或纸)。 。


YouTube上Brian和Will的终端和外壳上都有一个介绍性播放列表。