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

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

简短的回答是

  • terminal =文本输入/输出环境
  • console =物理终端
  • shell =命令行解释器

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

在unix术语中, 终端是一种特殊类型的设备文件 ,它实现了除读写之外的许多附加命令( ioctl )。 一些终端由内核代表硬件设备提供,例如,来自键盘的输入和输出到文本模式屏幕,或者输入和输出通过串行线路传输。 通过称为终端仿真器的程序(通过薄内核层)提供其他终端,有时称为伪终端或伪ttys。 某些类型的终端仿真器包括:

  • 在X Window系统中运行的GUI应用程序: Xterm ,Gnome终端,Konsole,终结者等。
  • 屏幕和tmux ,它在程序和另一个终端之间提供一层隔离
  • Ssh ,它将一台机器上的终端与另一台机器上的程序连接起来
  • 期待 ,用于脚本终端交互

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

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

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


命令行是用户键入命令的接口(表示为字符序列 – 通常是命令名后跟一些参数),然后按Return键执行该命令。

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

在unix圈子中, shell专门用于表示命令行shell ,其中心是输入要启动的应用程序的名称,后跟应用程序应该操作的文件或其他对象的名称,然后按Enter键。 其他类型的环境(最近有Gnome Shell的例外)通常不使用“shell”这个词; 例如,窗口系统涉及“ 窗口管理器 ”和“ 桌面环境 ”,而不是“shell”。

有许多不同的unix shell。 Ubuntu的默认shell是Bash (和大多数其他Linux发行版一样)。 流行的替代品包括zsh (强调力量和可定制性)和鱼 (强调简单性)。

命令行shell包括用于组合命令的流控制结构。 除了在交互式提示符下键入命令外,用户还可以编写脚本。 最常见的shell具有基于Bourne_shell的通用语法。 在讨论“ shell编程 ”时,shell几乎总是暗示是一个Bourne风格的shell。 一些经常用于编写脚本但缺乏高级交互function的shell包括Korn shell(ksh)和许多ash变体。 几乎任何类Unix系统都有一个Bourne风格的shell安装为/bin/sh ,通常是ash,ksh或bash。 在Ubuntu上, /bin/sh是Dash ,一种灰变体(选择因为它比bash更快并且使用更少的内存)。

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


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

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

从Unix和Linux中回收

视觉表现。

终奌站

在此处输入图像描述

你可以坐下来,像老板一样工作。

安慰

在此处输入图像描述

一些硬件做了很多东西。

控制台的另一个例子是video游戏控制台,如超级任天堂[你可以在哪里玩Actraiser]

贝壳

在此处输入图像描述在此处输入图像描述

基本上是运行命令的应用程序。

命令行[接口]

在此处输入图像描述在此处输入图像描述

基本上你输入命令的任何东西。

来自Linux信息项目 :

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

在我们的文字中,一个GUI应用程序,我们可以从中访问用户的控制台。

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

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

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

这里的答案看起来非常好。 然而,它们太干燥而且技术性很强,所以我会考虑一下。

终端是某种东西的终结 – 终止它。 例如,如果您在某个城市乘坐地铁,您下车的车站就是您的航站楼。 或者在机场,人们到达目的地国家时出现的地方被视为终点站。 机场航站楼现在既是你上船的地方,也是你让他们离开飞机的地方的原因是出于明显的经济原因。

计算机的目的是获取数据,对其执行某些操作并吐出结果。 因此,终端是可以从中获取计算结果的任何设备(例如屏幕)。 事实上,在第一台计算机中,您通常将输入(键盘)和输出(屏幕)作为单个设备。 因此,现在终端被认为是任何输入/输出设备。 鼠标,键盘,屏幕,相机,它们都是终端。

Shell是一个操作系统的东西。 在计算机上,您拥有内核,例如在Ubuntu上是Linux部分。 现在,因为内核实际上是低级的,所以提供了一个shell – 一个让用户以简单的方式与内核交互的程序。 这就是BASH的例子。

控制台是(来自字典)

一个平坦的表面,包含一台机器,一件电气设备等的控制器。

这就是为什么在音乐行业中有所有旋钮的电路板,或者在命令台的航天飞机中,它们都被认为是游戏机。 超级任天堂和PS2在历史上也被称为游戏机,因为第一款娱乐设备看起来像带有一堆按钮的盒子。

命令行只是一个界面 – 与GUI相反。 即计算机上有两种类型的接口; CLI(命令行界面)和GUI(图形用户界面)。 主要区别在于第一个从键盘输入,而第二个从鼠标输入。

总结一下我的答案:

Shell是一个processes命令并returns输出的程序,如Linux中的bash

终端是一个run shell的程序,过去它是一个物理设备 (在终端是带键盘的监视器之前,它们是远程类型 )然后它的概念被转移到软件 ,如Gnome-Terminal

所以我打开Gnome-Terminal ,出现一个运行Shell的黑色窗口,这样我就可以运行命令了。

控制台是一种特殊的终端 ,它也是一种物理设备。 在Linux中的例子我们有virtual console ,我可以通过Ctrl + Alt + F1到F7的组合来访问它们。

控制台有时表示物理连接到此计算机的键盘和显示器。

这些术语通常在一起,因此人们使用其中一个术语来引用该集合。 (即,从上下文中通常很明显它们是指提供命令行shell接口的终端窗口)。

为了防止这种情况变得冗长,我只想说xterm作为XTerm / Gnome终端/ Konsole / mrxvt / etc /等的替身。对于bash来说也是如此。

控制台有多个其他特定含义,所以现在就把它留出来。

终端 :通过ASCII / UTF8 /其他字符的双向流提供与程序的人工交互的东西,通常使用VT100或类似的转义码处理。 (例如退格键,删除键,箭头键等生成转义码。程序可以打印转义码以在终端屏幕周围移动光标,切换到粗体文本和/或颜色,清除或滚动屏幕等。)过去,这通常是一个带屏幕和键盘以及串口的专用设备。 现在,它通常是像xterm这样的程序。

存在用于程序从/向终端读/写的设备文件,并且虚拟终端还可以将另一侧作为设备文件访问。 这是xterm写入您输入的地方,因此bash可以读取它。

每个终端(包括虚拟终端)在熟食(而不是原始)模式下提供基本的行编辑。 这由内核代码处理。 它是bash,它提供了可以使用箭头键进行的行编辑。 (尝试运行cat并键入,如果你想看看基本的内核提供的行编辑是什么样的。退格有效,还有其他一些东西,根据你的stty设置。)

即使终端设备背后有很多内核代码,它也会被称为终端处理代码,而不是终端本身。

编辑:吉尔斯已经说服我,将tty称为终端是正确的用法。 终端仿真器和连接到终端的交互式程序都依赖于内核实现的终端语义。 (大多数此行为是由POSIX标准化的,并且在Linux / * BSD /其他Unix中是相同的。)全屏文本编辑器取决于Unix tty的行为以及光标移动转义码处理,和终端仿真器的许多其他function。

但是,具有屏幕,键盘和串行端口的物理VT100是终端的实例。 它不需要在其串口的另一端完成Unix内核。 完全不同的东西可能是发送转义码和ASCII文本,并从中接收它。 它只是一个VT100,但不是Unix终端。 终端模拟器加上Unix tty语义构成了一个像bash这样的程序正常运行的Unix终端的完整包。

命令行是一种用户界面的样式,您可以在其中键入内容,然后按返回以使某些事情发生。 它也可以用作命令行shell的速记,比如bash或MS-DOS,但你也可以说“它是一个命令行工具”,关于像fdisk这样的东西。 仅考虑使用终端作为其UI的程序,两个主要系列是命令行和全屏文本(例如像vi或emacs -nw这样的编辑器)。

通常在终端上运行的命令行程序几乎总是仍然可以将其输入和输出重定向到文件,但是基于终端的全屏程序(如编辑器或电子邮件客户端)仅是交互式的,并且不起作用。

shell是用于启动其他程序的程序。 在Unix上下文中,通常表示命令行shell(即Bourne shell或C shell等效)。 Unix shell也可以从文件中读取它们的输入,即shell脚本。 它们是完整的编程语言,包含变量,循环和条件,许多程序都是用bash编写的(或者只使用/bin/sh POSIX shell函数,以提高可移植性)。 也很容易for i in *.something; do some_program "$i";done写一个快速for i in *.something; do some_program "$i";done for i in *.something; do some_program "$i";done在交互式shell中完成。

总而言之,像bash(或通过运行shell命令启动的任何程序)之类的shell将在xterm将输入写入伪终端的一侧后从/dev/pts/N终端设备接收字符。 如果你运行cat ,然后点击^c ,内核tty代码将作用于^c并将SIGINT发送到该终端上的前台进程。 (注意在这个上下文中终端的用法是指Unix tty,而不是终端模拟器或连接到串口的东西。)这是因为shell在启动任何程序之前将终端置于“熟”模式,这意味着内核作用于某些控制序列。 (tty代码仍然与处理VT100转义代码无关,只是一些低ASCII控制代码。)如果不是xterm,而是使用Linux控制台文本终端,那么内核IS正在进行VT100仿真,并且处理所有的东西。 Linux可以在没有虚拟控制台文本终端支持的情况下进行编译,但并非没有tty支持。

控制台有时用作终端的同义词(KDE甚至还有一个名为Konsole的终端模拟器)。

正如0xSheepdog指出的那样,它还有另一个含义:本地连接的人机交互硬件。

在内核上下文中,控制台具有另一个特定含义:它是写入引导消息的终端。 这可以是串行端口。 当然,通常情况下,它是由内核在图形硬件和USB / ps2 / AT键盘驱动程序之上实现的文本控制台。 如果在命令行上使用console=tty0 console=ttyS0,115200n8启动Linux, console=tty0 console=ttyS0,115200n8在屏幕上和串行端口上获取内核消息。

Linux实现了虚拟控制台( /dev/tty1N )。 您可以使用Ctrl + Alt + F N交换物理屏幕/键盘控制的是哪一个。 典型的Linux发行版创建6,并在所有这些上启动getty ,因此即使您不能或不想启动X11,您也可以登录6次并在命令,手册页和其他任何内容之间切换,没有运行像屏幕这样的程序。 Linux(内核)包括一个VT100风格的终端仿真器,通过虚拟控制台上的屏幕和键盘提供终端接口。

带有登录提示的标准6个虚拟终端是Ctrl + Alt + F7让您回到X11会话的原因:X服务器抓取下一个可用的虚拟控制台。 (X服务器直接打开/dev/input/... ,而不是从/dev/tty7获取你的按键。)

所以“交换到文本控制台”意味着按Ctrl + Alt + F1并使用该终端。 当计算机速度很慢且没有太多内存时,有些人花了很多时间在文本控制台上,因为它们很快,你可以设置一个漂亮的字体,甚至可以改变终端大小以使字符更小,但是一次在屏幕上更多。 Alt + LeftAlt + Right交换到prev / next控制台。 (当然,X11会为其控制台禁用此function,只保留Ctrl + Alt + F N组合。)

因此, 控制台是这些术语中唯一没有明确定义的技术含义的术语。 它有几个不同的。 (根据您对终端正确与终端以及tty处理的感觉,您可以说终端也有多种含义。)

我认为早在分时计算机的早期,每个用户都有一个终端(当他们可以得到一个!),但只有系统操作员有一个控制台。 控制台可用于重启机器或获取用户终端无法进行的系统诊断等任务。 控制台在机房中,是计算机的固有部分,而终端可能是远程的。 控制台还包括硬件灯和开关,而不仅仅是文本输入和输出。

我会说命令行是用户可以键入命令的区域,而shell是解释/服从该命令的程序。 术语“shell”对Unix衍生词非常特殊; “命令行”更多地出现在Windows / DOS传统中。 大型机上的等价物通常称为“作业控制语言”。

显然,随着技术的变化,这些原始的区别随着时间的推移变得模糊。

尝试以用户为中心的简答:

命令行 – 输入命令的行。 通常它用于告诉您需要在操作系统提供的文本模式窗口(命令行界面)中运行某些东西。

shell – 操作系统运行的实际程序,用于处理您输入command line 。 因此名称 – 非友好的OS核心的用户友好的shell。 它提供命令提示符,例如$> ,运行自己的命令和应用程序。 您始终使用shell程序,而不是直接使用控制台或终端。

console – 是一个运行文本模式程序的窗口。 此窗口处理按键,知道它是宽度和高度。 可以全屏。

终端 – 是一些显示人类的设备,它接受输入的字符流并显示它们。 用户没有关于高度或宽度(仅限黑客)或键盘按键的反馈 – 只有chars正在前往它。 终端处理此流中的特殊序列,以使事物着色,清理屏幕并执行其他令人讨厌的事情。 终端是不稳定的,因为如果您输出到输出的文件包含特殊序列,则很容易弄乱。 它们在网络和设备调试接口中很流行,因为您只需要一个流来发送输出并控制输出设备,您只需tap对话而无需初始化或创建窗口。

串行控制台 – 是一个像终端一样处理输入流的控制台。

这是一个模糊的话题,因为这些术语含糊不清。 我强烈建议您阅读我在此答案中提供的链接,这也是我的答案来源。

shell是内核上面的层:

  • 它解释用户输入的命令并处理它们。 与用户不同,shell可以访问内核。 用户只能通过使用shell输入命令以及使用进程(即运行程序)来访问内核。 程序使用系统调用来访问内核function。 所有系统调用一起构成系统API。
  • 壳的示例在第二终端定义中给出。

终端有很多含义:

  • (1) 文本终端 。 这是显示器和键盘的组合。 电缆将终端连接到计算机(通常是间接的)。 它被称为终端,因为它位于该电缆的终端。 这些终端通常在物理上与计算机分离,因为在许多终端连接到单个主机/计算机的日子里,因此多个用户可以同时访问计算机。
  • (2) 终端窗口,终端仿真器 。 在Linux中,终端窗口是控制台的模拟,包含在GUI窗口中。 它是您键入文本的CLI,此输入由您正在使用的shell读取。 有许多类型的贝壳(例如bash,dash,ksh88)和终端(例如konsole,gnome)。
  • (3)有关伪终端的说明,请查看此内容 。 它是一对用于进程和终端仿真器之间通信的两个“设备文件”。

控制台有很多含义:

  • (1)包含计算机控件的仪表板。
  • (2) 系统控制台又称计算机控制台 。 这是显示器和连接到计算机的键盘的组合。 这与我们称之为“文本终端”的内容同义。 有时,其他用户输入的外围设备(如鼠标)也是控制台的一部分。
  • (3)覆盖全屏的命令行界面。 这与终端窗口形成对比,终端窗口是一个GUI,右上角有一个X来关闭它。 这些是类Unix系统中CLI(命令行界面)的两种显示模式。 与终端窗口类似,控制台也可以运行多个shell。

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

控制台(定义3)可能在您看来是不合时宜的,但专家应该习惯使用它们,因为有许多操作系统不支持GUI。 此外,如果GUI停止响应,控制台可能仍然有效。

如今大多数终端严格来说都是终端模拟器 。 它是类UNIX系统工作中的一种角色 ,同时也是系统提供的基本接口。 事实上,包括GUI在内的一切都建立在它之上。
通俗地说,“终端”也可以指具有星形地形的计算机网络中的端点。

控制台是指终端的(硬件)接口。 即有串行控制台,现在大多是虚拟控制台。
通俗地称为“控制台”窗口的窗口是通过虚拟控制台连接到系统终端的shell。

在计算机价格昂贵的那一天,设施可能有一台实际的计算机和多个终端通过串行电缆(“串行控制台”)连接到它。 操作系统,操作等在物理计算机上执行,输入和输出发生在控制台上。
您可以通过按CTRL + ALT + F1 (直到F6 )在虚拟终端之间切换:这些时间的剩余部分。
今天,“瘦客户端”的概念又回到了集中大量资源的方向,并提供了足够的硬件来在实际工作场所提供最先进的界面。

shell是您在终端中看到的“引擎”。 它提供了系统本身的互操作,并添加了自动完成,变量等很好的function。
它在使用系统调用的实际OS /内核和您之间来回转换。 没有shell的系统调用有点像assembler ,shell至少给你C

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

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