终端、控制台、Shell和命令行有什么区别?

什么是终端、控制台、Shell和命令行之间的区别?

1(1/2) 酷特工基本上是正确的,但他提供的控制台定义已经过时,考虑到这个话题。如果你点击链接阅读整个定义,他的链接中有正确的信息。请阅读他链接中的完整定义。控制台通常被宽泛地用来指代许多类似的东西,但最重要的是它通常指的是与本地连接的人机输入和输出设备,例如键盘、显示器,以及可能还有鼠标。 - 0xSheepdog
1这可能看起来像一个吹毛求疵的观点,但作为一名经验丰富的系统管理员,我告诉你它并不是。当一个系统出现问题,看起来完全崩溃/关闭/离线时,你应该检查系统的物理控制台,看看它是否仍在运行,只是失去了网络连接。这个小细节可能会为你节省或者损失数据、信息处理等。吹毛求疵,没错。但很重要。 - 0xSheepdog
6@0xSheepdog 你可能希望将这些评论扩展成一个完整的回答(包括其他术语的定义或解释),并以此方式发布。一个问题有多个答案并不是坏事(除非它们传达完全相同的信息并以相同的方式)。我不确定为什么在实际上检查机器时的重要实践实际上依赖于知道/称其物理人机接口为控制台,但也许有一种观点认为这对于与同事有效沟通或使用文档很重要。(你可以在你的回答中澄清这一点。) - Eliah Kagan
4由于它们之间的密切关系(请参考所有好的答案),这些术语有时被用作同义词,这可能是你提出这个问题的原因。 - Mark
1这三个词在现代计算机操作系统的背景下,基本上是同义词。它们之间的区别在于它们的历史起源。命令行通常指的是构建单个shell命令的方法,而不是shell界面本身。 - thomasrutter
1@neon,它们经常一起使用,因此人们使用其中一个术语来指称这个集合(即从上下文中通常很明显他们指的是提供与命令行shell交互的终端窗口)。控制台有时被用作终端的同义词(甚至KDE有一个名为Konsole的终端仿真器),但正如0xSheepdog所指出的,它还有另外一个意思:本地连接的人机交互硬件。 - Peter Cordes
1小的旁注:这些术语并不仅限于UNIX/Linux/Ubuntu,因此它们的含义受到自动化计算历史的影响。因此,即使上下文只是“Ubuntu”,你也可能会在不同来源中遇到不同的用法。信息源的背景可能会产生差异。 - user2338816
2在SuperuserSE上的交叉发布:https://superuser.com/questions/144666/what-is-the-difference-between-shell-console-and-terminal和https://superuser.com/questions/347430/whats-the-difference-between-a-console-terminal-and-command-line - jinawee
10个回答

简短回答:
- terminal = 文本输入/输出环境 - console = 物理终端 - shell = 命令行解释器
长答案:
控制台和终端是密切相关的。最初,它们指的是一种设备,通过它你可以与计算机进行交互:在Unix的早期,这意味着一种类似打字机的电传打印机设备,有时被称为电传打字机,或者简称为“tty”。"终端"这个名字来自于电子的角度,而"控制台"这个名字则来自于家具的角度。在Unix的早期历史中,电子键盘和显示器成为终端的常态。

终端

在UNIX术语中,终端是一种特殊类型的设备文件,它实现了许多额外的命令(ioctl),除了读和写。一些终端由内核代表硬件设备提供,例如从键盘输入并输出到文本模式屏幕,或通过串行线传输输入和输出。其他终端有时称为伪终端或伪TTY,这些终端由称为终端模拟器的程序(通过薄内核层)提供。一些类型的终端模拟器包括:
  • X Window System中运行的GUI应用程序:Xterm, Gnome Terminal, Konsole, Terminator等。
  • Screentmux,它们在程序和另一个终端之间提供了一层隔离。
  • Ssh,它将一台机器上的终端与另一台机器上的程序连接起来。
  • Expect,用于脚本化终端交互。
“终端”一词还可以有更传统的含义,即与计算机进行交互的设备,通常带有键盘和显示器。例如,X终端是一种瘦客户端,一种专用计算机,其唯一目的是驱动键盘、显示器、鼠标以及其他人机交互外设,实际应用程序在另一台更强大的计算机上运行。
控制台
“控制台”通常是指物理意义上直接连接到机器的主要终端的某种定义。对操作系统而言,控制台是一个(内核实现的)终端。在某些系统中,如Linux和FreeBSD,控制台会出现为多个终端(ttys)(特殊按键组合在这些终端之间切换);为了使事情更加混乱,给每个特定终端赋予的名称可能是“控制台”,“虚拟控制台”,“虚拟终端”等各种变体。
另请参阅虚拟终端为何为“虚拟”,终端的真正含义是什么/为什么/在哪里?.
命令行【界面】
一个命令行是用户输入命令的界面(通常由命令名称和一些参数组成的字符序列),然后按下回车键来执行该命令。

Shell

一个shell是用户登录时看到的主要界面,其主要目的是启动其他程序。(我不知道最初的比喻是shell是用户的家庭环境,还是其他程序正在运行的地方。)
在Unix界中,“shell”一词已经专门指代命令行shell,它以输入想要启动的应用程序名称为中心,然后跟随应用程序应该操作的文件或其他对象的名称,并按下回车键。其他类型的环境(最近的一个例外是Gnome Shell)通常不使用“shell”这个词;例如,窗口系统涉及“窗口管理器”和“桌面环境”,而不是“shell”。
有许多不同的Unix shell。Ubuntu的默认shell是Bash(与大多数其他Linux发行版相同)。流行的替代品包括zsh(强调功能和可定制性)和fish(强调简洁性)。
命令行shell包括流程控制结构来组合命令。除了在交互提示符下输入命令,用户还可以编写脚本。最常见的shell都基于Bourne_shell的通用语法。当讨论“shell编程”时,几乎总是指Bourne风格的shell。一些经常用于脚本编写但缺乏高级交互功能的shell包括Korn shell (ksh)和许多ash变种。几乎任何类Unix系统都安装了一个Bourne风格的shell,通常是ash、ksh或bash。在Ubuntu上,/bin/shDash,一种ash变种(选择它是因为它比bash更快且使用内存更少)。
在Unix系统管理中,用户的“shell”是在他们登录时调用的程序。普通用户帐户具有命令行shell,但具有受限访问权限的用户可能具有受限shell或其他特定命令(例如,仅用于文件传输的帐户)。
终端和Shell之间的分工并不完全明显。以下是它们的主要任务。
输入:终端将键转换为控制序列(例如Left\e[D)。Shell将控制序列转换为命令(例如\e[Dbackward-char)。 行编辑、输入历史和自动补全由Shell提供。
  • 终端也可以提供自己的行编辑、历史记录和自动补全,并且只有在准备好执行时才将一行发送给Shell。唯一以这种方式操作的常见终端是Emacs中的M-x shell
输出:Shell发出诸如“显示foo”、“切换前景色为绿色”、“将光标移动到下一行”等指令。终端根据这些指令进行操作。 提示符纯粹是Shell的概念。 Shell从不看到其运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是终端的概念。 应用程序间的复制粘贴由终端提供(通常使用鼠标或键盘序列,如Ctrl+Shift+VShift+Insert)。Shell也可能有自己的内部复制粘贴机制(例如Meta+WCtrl+Y)。 作业控制(在后台启动程序并管理它们)主要由Shell执行。然而,处理诸如Ctrl+C以终止前台作业和Ctrl+Z以挂起它的键组合是终端的责任。

Unix & Linux回收


1我必须不同意你对终端设备文件以及内核中的终端处理代码(tty ioctls、raw/cooked、基本行编辑)称之为终端的说法。终端指的是处理转义码、将按键转换为字符并在屏幕上绘制(或打印在纸张/磁带上)的部分。请查看我的答案以获取更多详细信息。 - Peter Cordes
2@PeterCordes 在这个详细程度上,没有区别。POSIX终端定义为与终端设备同义,指的是设备文件的意义。这是Unix的含义。它确实处理转义码,将按键转换为字符,并在屏幕上绘制(或通过网络传输,或记录到文件等)。 - Gilles 'SO- stop being evil'
2嗯,是的,终端也可以用这个意思。假设在终端设备的一端,内核正在处理一个带有终端仿真器或连接到终端设备的串行端口。内核tty处理(在cooked模式下)只处理几个控制码(^c上的信号,^u / ^?(删除)上的行编辑)。我试图区分tty代码和Linux中实现类似VT100终端的部分,该部分位于图形卡和USB/ps2/AT键盘上。你可以编译没有这个功能的Linux,但不能没有tty。 - Peter Cordes
1终端仿真器(或串口上的真实终端)、内核tty语义/行为以及tty另一端的shell或其他进程之间存在一些共生关系。我想我刚刚半信半疑地否定了自己:考虑调整你的xterm大小。“我调整了我的终端”在我看来更像是在谈论stty行数N列数M,而不仅仅是改变X11窗口的大小。(尽管这样做将使xterm对tty执行适当的ioctl操作以更新终端大小参数。) - Peter Cordes
4@PeterCordes 在内核配置中,可以省略对终端的支持(这对于一些稀有的嵌入式系统非常有用,因为内存非常紧张);它由CONFIG_TTY控制。对终端仿真器(更准确地称为伪终端 - “终端仿真器”并不总是包括telnetd、screen、expect等)的支持由CONFIG_UNIX98_PTYS控制。对PC文本模式显示和键盘等的支持由CONFIG_VT控制。请参阅内核源代码中的drivers/tty/Kconfig - Gilles 'SO- stop being evil'
2哎呀,我手头没有最新的内核源代码。CONFIG_TTY只是在2012年才被添加进去的。不管怎样,希望这能帮助那些试图理清各个谜题部分以及它们如何相互配合的人。 - Peter Cordes
@Gilles 当我们在C中使用scanf函数(它封装了系统调用read)时,我们是从键盘还是设备文件“终端”读取数据?如果是前者,为什么我们输入的字符也会被写入到控制台? - forumulator
@for scanf 从标准输入读取。如果您在终端中的shell中运行程序而没有进行重定向,那么它将从终端设备读取。请阅读https://unix.stackexchange.com/questions/116629/how-do-keyboard-input-and-text-output-work - Gilles 'SO- stop being evil'
Shell不是CLI,shell可以是CLI或GUI。 - Yousha Aleayoub
很抱歉在AU这里问这个问题,但在终端cmd.exepowershell.exe中,默认的shell叫什么名字?或者它们在这里紧密耦合到没有必要区分吗? - Minh Nghĩa
@MinhNghĩa cmd.exepowershell.exe是Windows的东西,在Ubuntu上找不到它们。(我记得现在有一个适用于Linux的PowerShell实现,但安装它并不常见。)这两者都是命令行壳程序。在Windows上,默认终端被称为CSRSS on Windows XP,我不知道在较新版本的Windows上是否有所改变。对于Windows的问题,这里不是合适的地方;你可以在[su]上提问。 - Gilles 'SO- stop being evil'

一种可视化表达。

终端

你可以坐下来并像老板一样工作的东西。

Terminal

控制台

一些硬件,可以完成各种任务。

Console

另一个控制台的例子,可以是像超级任天堂这样的视频游戏主机[你可以玩《神剑奇侠》]。
Shell
基本上是一个用于运行命令的应用程序。

ShellShell

命令行【界面】
基本上就是你输入命令的地方。

CLICLI


14你抢了我的主意 - 我原本也打算给基本相同的答案。所以你可以得到一个点赞。当然,重点是,尽管这些术语在现今几乎是同义词,但像“终端”和“控制台”这样的术语起源于较早的计算概念。 - thomasrutter
3不错的努力。简单易懂。 - A Umar Mukthar
干得好,先生。您采用了现有的想法/概念/图片,重新包装,并使最终产品提升了十倍。您是史蒂夫·乔布斯转世吗? - BenKoshy
@BenKoshy 或许吧。我不吃水果,只吃生肉。也许这就是他的赎罪方式。 - Anon

Linux信息项目中:

终端:技术上讲,终端窗口,也称为终端仿真器,是图形用户界面(GUI)中的一个纯文本窗口,模拟控制台。

用我们自己的话来说,它是一个GUI应用程序,可以访问用户的控制台。

控制台:一个包含计算机控制元件的仪表板

Shell:Shell是为Linux和其他类Unix操作系统提供传统的纯文本用户界面的程序

命令行:命令行是计算机显示器(通常是CRT或LCD面板)上命令提示符右侧的空间,在其中用户输入命令和数据


7"终端"代表着一个只能显示文本的物理屏幕。你所说的实际上是"终端仿真器"。 - Registered User
2终端仿真器是一种终端。终端这个词并不仅限于物理终端(通常用于指称为控制台)。 - Gilles 'SO- stop being evil'
3这个对于“命令行”的定义是错误的。命令行并不局限于纯文本显示模式。 - Gilles 'SO- stop being evil'
1@Gilles 我已经从一个网页链接中获取了它。你提到的答案很好。 - Raja G
6@AgentCool 我并不怀疑你复制粘贴的能力。我怀疑你选择的信息来源。无论你是否亲自撰写,你所发布的内容都是你的责任。 - Gilles 'SO- stop being evil'

Shell是一个处理命令并返回输出的程序,就像Linux中的Bash一样。
终端是运行Shell的程序。在过去,它是一个物理设备(在终端成为带键盘的监视器之前,它们是电传打字机),然后将其概念转化为软件,比如GNOME终端。
所以当我打开GNOME终端时,会出现一个运行Shell的黑色窗口,这样我就可以运行我的命令。
控制台是一种特殊类型的终端。它也是一个物理设备。例如,在Linux中,我们有虚拟控制台,可以通过组合键Ctrl+Alt+F1到F7来访问。
控制台有时指的是物理连接到计算机的键盘和显示器。

这里的答案看起来很好。然而,对我来说它们过于干燥和技术性,所以我会给出我的理解。 终端是某物的结束点 - 结束的地方。例如,如果你在某个城市乘坐地铁,你下车的站台就是你的终点站。或者在机场,当人们到达目的地国家时,他们出来的地方被认为是终端。现在机场的终端既是上飞机的地方,也是下飞机的地方,这是因为明显的经济原因。
计算机的目的是获取数据,对其进行处理,并输出结果。因此,终端是任何可以获取计算结果的设备(例如屏幕)。只是碰巧在最初的计算机中,输入(键盘)和输出(屏幕)通常作为一个设备。因此,现在终端被认为是任何输入/输出设备。鼠标、键盘、屏幕、摄像头,它们都是终端。 Shell是操作系统的一部分。在计算机上,你有内核,例如Ubuntu的内核是Linux。由于内核是非常底层的,所以提供了一个shell - 一个让用户以简单方式与内核交互的程序。这就是BASH的作用。
控制台是(来自字典)一个包含机器、电气设备等的控制面板表面。
这就是为什么在音乐行业中,所有的旋钮都集中在一块的板子被称为控制台。太空船上的指令台也是如此。早期的娱乐设备如超级任天堂和PS2也被称为控制台,因为它们看起来像是有许多按钮的盒子。
命令行只是一种界面,与图形用户界面相反。计算机上有两种类型的界面:命令行界面(CLI)和图形用户界面(GUI)。主要区别在于前者通过键盘输入,而后者通过鼠标输入。

2你说的"GUI的反义词"是什么意思? - Koray Tugay
2我所说的相反是指你要么有CLI(命令行界面),要么有GUI(图形用户界面)。我在回答中进一步澄清了一些。 - Pithikos
感谢简明的类比。我可以说命令行界面(CLI)是基于非图形用户界面(GUI)的终端吗? - rahulaga-msft

这些术语经常一起使用,所以人们使用其中一个术语来指代这个集合。(即通常从上下文中很明显他们指的是提供与命令行shell交互的终端窗口)。
为了避免冗长,我只会用xterm作为XTerm / Gnome Terminal / Konsole / mrxvt等的替代词。同样适用于bash。
“控制台”有多个其他特定的含义,所以暂时不要提及它。
“终端”:通过双向的ASCII / UTF8 / 其他字符流与程序进行人机交互的设备,通常具有VT100或类似的转义码处理。(例如,退格、删除、箭头键等生成转义码。程序可以打印转义码来移动光标、切换到粗体文本和/或颜色、清除或滚动屏幕等)。在过去,这通常是一个带有屏幕、键盘和串口的专用设备。现在,通常是像xterm这样的程序。
有用于程序读取/写入终端的设备文件,虚拟终端也可以通过设备文件访问另一侧。这就是xterm将您的输入写入,以便bash可以读取的地方。
每个终端,包括虚拟终端,在处于 cooked 模式(与 raw 模式相对)时都提供基本的行编辑功能。这是由内核代码处理的。而 bash 则提供了可以使用箭头键进行的行编辑功能。(尝试运行 cat 命令并输入内容,你就可以看到基本的内核提供的行编辑功能。退格键可以正常工作,还有一些其他功能取决于你的 stty 设置。)
尽管终端设备背后有很多内核代码,但我们应该将其称为终端处理代码,而不是终端本身。
编辑:Gilles 说服了我,将 tty 称为终端是正确的用法。终端仿真器和连接到终端的交互式程序都依赖于内核实现的终端语义。(大部分行为都由 POSIX 标准化,并在 Linux/*BSD/其他 Unix 系统上保持一致。)全屏文本编辑器除了依赖于 Unix tty 功能外,还依赖于光标移动转义码处理以及终端仿真器的许多其他特性。
然而,一个带有屏幕、键盘和串口的物理VT100是终端的一个实例。它不需要在其串口的另一端运行Unix内核才能完整。完全不同的东西可以向它发送转义码和ASCII文本,并从中接收相同的内容。但它只是一个VT100,而不是Unix终端。终端仿真器加上Unix tty语义构成了Unix终端的完整套件,像bash这样的程序通常在其上运行。
命令行是一种用户界面风格,您在其中输入一些内容,然后按回车键来执行某些操作。它也被用作命令行shell(如bash或MS-DOS)的简称,但您也可以说“它是一个命令行工具”,比如fdisk之类的东西。仅考虑使用终端作为其用户界面的程序,主要有两个家族:命令行和全屏文本(例如像vi或emacs -nw这样的编辑器)。
通常在终端上运行的命令行程序几乎总是可以将其输入和输出重定向到文件,但基于终端的全屏程序(如编辑器或电子邮件客户端)仅支持交互式操作,无法通过重定向进行工作。
一个shell是用来启动其他程序的程序。在Unix环境中,通常指命令行shell(即Bourne shell或C shell等效)。Unix shell也可以从文件中读取输入,即shell脚本。它们是完整的编程语言,具有变量、循环和条件语句,并且许多程序都是用bash编写的(或者只使用/bin/sh POSIX shell功能,以提高可移植性)。在交互式shell中,也很容易编写一个快速的for i in *.something; do some_program "$i";done
把所有的东西放在一起,像bash这样的shell(或者你通过运行一个shell命令启动的任何程序)将会在xterm将你的输入写入伪终端的一侧后,从/dev/pts/N终端设备接收字符。如果你运行cat,然后按下^c,内核tty代码将对^c进行处理,并向该终端上的前台进程发送一个SIGINT信号。(请注意,在这个上下文中使用“终端”一词是指Unix tty,而不是终端仿真器或连接到串口的设备。)这是因为shell在启动任何程序之前将终端设置为“cooked”模式,这意味着内核对某些控制序列进行处理。(tty代码仍然与处理VT100转义码无关,只涉及几个低ASCII控制码。)如果你使用的是Linux控制台文本终端,那么内核正在进行VT100仿真,并处理所有相关内容。Linux可以编译时不支持虚拟控制台文本终端,但不能没有tty支持。
有时,“控制台”被用作终端的同义词(甚至KDE也有一个名为Konsole的终端仿真器)。
正如0xSheepdog所指出的,它还有另一个意思:本地连接的人机交互硬件。
在内核环境中,控制台还有另一个特定的含义:它是写入启动消息的终端。这可以是串口。通常情况下,它是内核在图形硬件和USB/ps2/AT键盘驱动程序之上实现的文本控制台。如果你在命令行中使用console=tty0 console=ttyS0,115200n8来启动Linux,你将在屏幕上和串口上同时收到内核消息。
Linux实现了虚拟控制台(/dev/tty1N)。你可以用Ctrl+Alt+FN切换物理屏幕/键盘控制的虚拟控制台。典型的Linux发行版创建了6个虚拟控制台,并在所有虚拟控制台上启动getty,因此即使您不能或不想启动X11,您仍然可以登录6次,并在命令、man页和其他内容之间切换,而无需运行类似screen的程序。Linux(内核)包含了一个VT100风格的终端仿真器,通过虚拟控制台提供终端界面,让您通过屏幕和键盘进行操作。
标准的6个虚拟终端并提供登录提示,这就是为什么按下Ctrl+Alt+F7可以返回到X11会话:X服务器会抓取下一个可用的虚拟控制台。(X服务器直接打开/dev/input/...,而不是从/dev/tty7获取您的按键信息。)
因此,“切换到文本控制台”意味着按下Ctrl+Alt+F1并使用该终端。早期计算机速度较慢且内存有限,一些人在文本控制台上花费了大量时间,因为它们操作起来很快,您可以设置漂亮的字体,甚至可以调整终端大小以使字符更小,但同时能显示更多内容。按下Alt+LeftAlt+Right可以切换到前一个/后一个控制台。(当然,X11禁用了此功能,只剩下Ctrl+Alt+FN组合键可用。)
所以“console”是这些术语中唯一一个没有单一明确定义的技术含义。它有几个不同的含义。(根据你对终端本身与终端加上tty处理的看法,你也可以说终端也有多重含义。)

3“Console”这个词并不仅仅在内核上下文中指代“主要”的物理终端。在/dev/console中,它的意思是一样的。虽然“Console”并不特别含糊,但有时也会用于更一般的“终端”概念,不过这种用法相对较少见(比起“终端”专指控制台的用法来说)。 - Gilles 'SO- stop being evil'
1对的,是的,echo foo | sudo tee /dev/console > /dev/null 如果您当前的VT处于文本模式(包括帧缓冲控制台,而不仅仅是VGA文本模式),将在屏幕上打印出来。如果您使用串口启动了控制台,我认为它会显示在那里。您可以说/dev/console是内核视为系统控制台的设备文件。系统中没有其他任何部分需要知道是否存在控制台tty(除了启动恢复程序,在系统无法引导到多用户模式时,在控制台TTY上启动shell。通常从initrd开始)。 - Peter Cordes
1xorg X服务器(字符串/usr/bin/Xorg)不使用/dev/console来获取硬件访问权限。它确实使用/dev/tty0、/dev/tty%d和/dev/vc/%d,在自己的虚拟终端上进行设置。我相当确定Xorg仍然可以在通过内核控制台引导的PC上正常运行。而且文本模式的虚拟终端仍然可以工作。我越考虑这个问题,就越倾向于将内核控制台视为一个特殊的终端,在启动时选择。(如果你要求的话,Linux实际上可以同时在多个终端上输出控制台消息。) - Peter Cordes

我认为在时间共享计算机的早期,每个用户都有一个终端(如果他们能够得到一个!),但只有系统操作员才有控制台。控制台可以用于诸如重新启动机器或获取用户终端无法实现的系统诊断等任务。控制台位于机房中,是计算机的固有部分,而终端可以是远程的。控制台还包括硬件灯和开关,不仅仅是文本输入和输出。
我会说命令行是用户可以输入命令的区域,而shell是解释/执行该命令的程序。术语“shell”非常特定于Unix衍生版本;“命令行”更符合Windows/DOS的传统。在大型机上的等效术语通常称为“作业控制语言”。
显然,随着技术的变化,这些最初的区别已经变得模糊起来。

这是一个模糊的话题,因为术语非常含糊不清。我强烈建议阅读我在回答中提供的链接,这些链接也是我回答的来源。
一个shell是位于内核之上的层:
- 它解释用户输入的命令并进行处理。与用户不同,shell可以访问内核。用户只能通过使用shell输入命令和使用进程(即运行程序)来访问内核。程序使用系统调用来访问内核功能。所有系统调用共同构成了系统API。 - 第二个终端定义中给出了shell的示例。
一个终端有很多含义:
(1)一个文本终端。这是显示器和键盘的组合。一根电缆将终端与计算机连接在一起(通常是间接连接)。它被称为终端,因为它位于该电缆的末端。这些终端通常与计算机物理上分离,因为在过去的日子里,许多终端连接到单个大型机/计算机上,所以多个用户可以同时访问计算机。
(2)终端窗口,也称为终端仿真器。在Linux中,终端窗口是控制台的仿真,包含在GUI窗口中。这是您输入文本的CLI,此输入由您使用的shell读取。有许多类型的shell(例如bash、dash、ksh88)和终端(例如konsole、gnome)。
(3)关于伪终端的解释,请查看this。它是用于进程和终端仿真器之间通信的两个“设备文件”的配对。

控制台有很多含义:

  • (1) 一个包含计算机控制的仪表板。
  • (2) 一个系统控制台,也称为计算机控制台。它由显示器和连接到计算机的键盘组成。这与我们所称的“文本终端”是同义词。有时候,其他用户输入设备(如鼠标)也是控制台的一部分。
  • (3) 一种覆盖整个屏幕的命令行界面。这与终端窗口形成对比,终端窗口是带有右上角的关闭按钮的图形用户界面。这两种显示模式是类Unix系统中命令行界面(CLI)的形式。与终端窗口类似,控制台也可以运行多个Shell。

通常,操作系统允许在物理控制台(定义2中的控制台)上运行多个控制台。这些被称为虚拟控制台,也称为虚拟终端,可以通过Ctrl+Alt+Fx的组合键访问。例如,如果要打开第三个虚拟控制台,可以使用组合键Ctrl+Alt+F3

控制台(定义3)可能对你来说是一个过时的东西,但专家应该习惯使用它们,因为有许多操作系统不支持图形用户界面。此外,如果图形用户界面停止响应,控制台仍然可以工作。

尝试以用户为中心的简短回答:
命令行 - 输入命令的行。通常用于表示需要在操作系统提供的文本模式窗口(命令行界面)中运行某些内容。
Shell - 实际上是操作系统运行的程序,用于处理您在命令行中输入的内容。因此得名 - 用户友好的外壳,用于非友好的操作系统核心。它提供命令提示符,如$或>,运行自己的命令和应用程序。您始终通过shell程序工作,而不直接操作控制台或终端。
控制台 - 是一个窗口,用于运行您的文本模式程序。该窗口处理按键,知道其宽度和高度。可以全屏显示。
终端 - 是一种带有显示屏的设备,用于接受人类的输入字符流并显示它们。对于高度或宽度没有用户反馈(只有一些技巧)或键盘按键 - 只有字符在其中传输。终端会处理此流中的特殊序列,以使事物变得彩色,清理屏幕和执行其他恶意操作。终端不稳定,因为如果您将文件导出到输出中包含这些特殊序列,很容易搞乱事情。它们在网络和设备调试界面中很受欢迎,因为您只需要一个单一的流来发送输出并控制输出设备,而且您可以随时加入对话而无需初始化或创建窗口。
串行控制台 - 是一种像终端一样处理输入流的控制台。

大多数终端现在严格来说是终端仿真器。它是UNIX-like系统中的一种角色,同时也是系统提供的基本接口。事实上,包括图形用户界面在内的所有内容都是建立在其之上。
俗称“终端”也可以指计算机网络中星型拓扑结构的终端节点。
“控制台”指的是终端的(硬件)接口。即存在串行控制台和现在主要是虚拟控制台。
俗称为“控制台窗口”的窗口是一个shell,通过虚拟控制台连接到系统的终端。
过去,当计算机昂贵时,一个设施可能只有一台实际的计算机和几个通过串行电缆连接到它的终端(“串行控制台”)。操作系统、操作等都在物理计算机上进行,输入和输出则发生在控制台上。
你可以通过按下CTRL+ALT+F1(直到F6)在虚拟终端之间切换:这是那个时代的遗留物。
如今,“瘦客户端”的概念回归到了集中大量资源并提供足够硬件以在实际工作场所提供先进界面的方向。 Shell是你在终端中看到的“引擎”。它提供与系统本身的互操作性,并添加了诸如自动完成、变量等很好的功能。
它在实际使用系统调用的操作系统/内核与你之间进行来回转换。没有Shell的系统调用有点像编写汇编语言,而至少有一个Shell可以给你提供C语言。

命令行是指通过文本窗口交换输入和输出的方法。严格来说,您键入的行是当前的命令行。一般来说,该方法更正确地称为命令行界面或CLI。

  1. 内核
  2. 提供终端
  3. 终端通过控制台连接
  4. 控制台运行Shell
  5. 通过命令行(接口)交换命令和输出

1命令行指令并非由内核理解,而是由Shell解释。内核能够理解的是系统调用,即“内核所能理解的基本指令框架”。而“基本的UNIX命令行界面”则是一个Shell,与“良好特性”之间没有分离。一个“终端仿真窗口”不等同于控制台。 - Gilles 'SO- stop being evil'
1@ Gilles 调整了。显然,我自己在那里搞混了一些事情。 - Mark