当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

最佳解决办法

简短的答案是

  • 终端=文本输入/输出环境

  • console =物理终端

  • shell =命令行解释器


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

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

  • X Window System中运行的GUI应用程序:Xterm,Gnome终端,Konsole,终结者等

  • Screentmux,它在程序和另一个终端之间提供一层隔离

  • Ssh,它将一台机器上的终端与另一台机器上的程序连接起来

  • Expect,用于脚本终端交互

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

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

另见Why is a Virtual Terminal “virtual”, and what/why/where is the “real” Terminal?


命令行是用户键入命令(表示为一系列字符 – 通常是命令名称后跟一些参数)并按下Return键执行该命令的界面。

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

在unix环境中,shell专门指命令行 shell,以输入要启动的应用程序的名称为中心,后跟应用程序应执行的文件或其他对象的名称,然后按Enter键。其他类型的环境(最近引人注目的例外是Gnome Shell)通常不会使用“shell”这个词;例如,窗户系统涉及“window managers”和“desktop environments”,而不是“shell”。

有许多不同的unix shell。 Ubuntu的默认shell是Bash(与大多数其他Linux发行版一样)。受欢迎的选择包括zsh(强调功能和可定制性)和fish(强调简单)。

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

在unix系统管理中,用户的shell是登录时调用的程序。普通用户帐户具有命令行 shell 程序,但具有受限访问权限的用户可能具有restricted shell或其他特定命令(例如,用于file-transfer-only帐户)。


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

  • 输入:终端将密钥转换为控制序列(例如Left\e[D)。 shell将控制序列转换为命令(例如\e[Dbackward-char)。

  • 行版本,输入历史和完成由shell提供。

    • 终端可以提供自己的线路版本,历史记录和完成代码,并且只有在准备好执行时才发送一行到shell。以这种方式运行的唯一通用终端是Emacs中的M-x shell

  • 输出:shell发出诸如“display foo”,“将前景颜色切换为绿色”,“将光标移动到下一行”等指令。终端根据这些指令进行操作。

  • 提示纯粹是一个shell的概念。

  • shell 永远不会看到它运行的命令的输出(除非重定向)。输出历史(回滚)纯粹是一个终端概念。

  • Inter-application copy-paste由终端提供(通常使用鼠标或键序列,如Ctrl + Shift + VShift + Insert)。 shell 也可以有其自己的内部copy-paste机制(例如Meta + WCtrl + Y)。

  • Job control(在后台启动程序并对其进行管理)主要由shell执行。但是,终端处理Ctrl + C这样的组合键以终止前台作业,并且Ctrl + Z将其挂起。


Unix & Linux回收

次佳解决办法

视觉表示。

终奌站

command-line,console,terminology,ubuntu

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

安慰

command-line,console,terminology,ubuntu

一些硬件,做一堆的东西。

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

Shell

command-line,console,terminology,ubuntu

command-line,console,terminology,ubuntu

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

命令行[接口]

command-line,console,terminology,ubuntu

command-line,console,terminology,ubuntu

基本上任何你输入命令。

第三种解决办法

Linux Information Project

Terminal : Technically , A terminal window, also referred to as a terminal emulator, is a text-only window in a graphical user interface (GUI) that emulates a console.

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

Console: an instrument panel containing the controls for a computer

Shell :A shell is a program that provides the traditional, text-only user interface for Linux and other Unix-like operating systems

Command-Line : A command line is the space to the right of the command prompt on an all-text display mode on a computer monitor (usually a CRT or LCD panel) in which a user enters commands and data

第四种办法

这里的答案看起来非常好。然而,他们太干燥,技术性强,所以我会给你一个…

Terminal是什么东西的终点 – 它终止。例如,如果您在某个城市乘坐地铁,您下车的地方就是您的航站楼。或者在机场,当人们到达目的地国家时出现的地方被认为是终点站。机场候机楼现在既是机上乘客的地方,也是您下机的地方,这是出于明显的经济原因。

计算机的目的是获取数据,对数据进行处理,然后吐出结果。因此,终端是可以从中获得计算结果的任何设备。例如,屏幕。刚刚发生的情况是,在第一台电脑中,您通常将输入(键盘)和输出(屏幕)作为单个设备。因为如今终端被认为是任何输入/输出设备。鼠标,键盘,屏幕,相机,它们都是终端。

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

Console是(从字典)

a flat surface that contains the controls for a machine, for a piece of electrical equipment, etc.

这就是为什么在音乐产业中,所有的旋钮或者在航天飞机的指挥台上,他们都被视为控制台。超级任天堂和PS2在历史上也被称为调音台,因为第一个这样的娱乐设备看起来像带有一堆按钮的盒子。

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

第五种办法

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

为了避免这种情况发生到long-winded,我只想把xterm称为XTerm /Gnome终端/Konsole /mrxvt /etc /的stand-in等。

控制台具有多种其他特定的含义,所以现在就离开。

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

有设备文件用于程序从终端读取/写入,而虚拟终端也可以将另一侧作为设备文件访问。这是xterm写入输入的地方,所以bash可以读取它。

每个终端(包括虚拟终端)在煮熟(而不是原始)模式时提供基本的行编辑。这由内核代码处理。它是bash,它提供了可以使用箭头键执行的行编辑。 (尝试运行cat并键入,如果您想查看基本的kernel-provided行编辑是什么样的话,Backspace可以运行,还有其他一些东西可以按照您的stty设置进行操作。)

即使终端设备后面有很多内核代码,它也会被称为terminal-handling代码,而不是终端本身。

编辑:吉尔斯说服我说,作为一个终端tty是正确的用法。终端仿真器以及连接到终端的交互式程序都依赖于内核实现的终端语义。 (这些行为大部分是由POSIX标准化的,在Linux /* BSD /其他Unix中是相同的。)full-screen文本编辑器取决于Unix tty的行为以及cursor-movement escape-code处理以及其他许多功能,终端仿真器。

但是,具有屏幕,键盘和串行端口的物理VT100是终端的一个实例。它的串行端口不需要Unix内核就可以完成。完全不同的东西可能会发送它的转义码和ASCII文本,并从中接收相同的内容。它只是一个VT100,但不是Unix终端。终端仿真器加上Unix tty语义组成了一个像bash这样的程序通常运行的Unix终端的完整软件包。

命令行是用户界面的一种风格,您可以在其中输入内容,然后按回车键即可完成某些操作。它也被用作命令行 shell的缩写,比如bash或者MS-DOS,但是你也可以说它是一个类似于fdisk的命令行工具。考虑到只有使用终端用户界面的程序,两个主要系列是命令行和full-screen文本(例如编辑器,如vi或emacs -nw)。

通常在终端上运行的命令行程序几乎总是将其输入和输出重定向到文件,但terminal-based full-screen程序(如编辑器或电子邮件客户端)是interactive-only,并且不起作用。

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也很容易。

综合起来,在xterm将输入写入pseudo-terminal的一侧之后,像bash之类的shell(或通过运行shell命令启动的任何程序)将从/dev/pts/N终端设备接收字符。如果运行cat,然后点击^c,则内核tty代码将作用于^c并将SIGINT发送到该终端上的前台进程。 (请注意,在这种情况下,终端的使用是指Unix tty,而不是终端仿真程序或连接到串行端口的东西。)发生这种情况是因为shell在启动任何程序之前将终端置于”cooked”模式,这意味着内核会执行在某些control-sequences上。 (tty代码仍然与处理VT100转义码无关,只是一些low-ASCII控制代码。)如果不是使用xterm,而是使用Linux控制台文本终端,那么内核将执行VT100仿真,并处理所有那东西。 Linux可以在没有虚拟控制台文本终端支持的情况下编译,但不是没有tty支持。

控制台有时用作终端的同义词(KDE甚至有一个称为Konsole的终端仿真器)。

正如0xSheepdog指出的那样,它还有另一个含义:本地连接的human-interaction硬件。

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

Linux实现了虚拟控制台(/dev/tty1到N)。您可以使用Ctrl + Alt + FN来交换您的物理屏幕/键盘正在控制哪一个。典型的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禁用它的控制台,当然,只留下Ctrl + Alt + FN组合。)

所以控制台是这些术语中唯一没有单一well-defined技术含义的术语。它有几个不同的。 (根据你对终端正确与终端加tty处理的感觉,你可以说终端也有多重含义。)

第六种办法

总结我的回答:

Shell是processes命令和returns输出的程序,就像Linux中的bash一样。

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

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

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

控制台有时意味着物理连接到这台计算机的键盘和显示器。

第七种办法

我想早在time-sharing电脑的早期,每个用户都有一个终端(当他们可以得到一个!)时,只有系统操作员有一个控制台。该控制台可用于重新启动机器或获取用户终端无法实现的系统诊断等任务。控制台在机房里,是电脑的固有部分,而终端可以是远程的。控制台还将包含硬件指示灯和开关,而不仅仅是文本输入和输出。

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

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

第八种办法

尝试user-centric简短的回答:

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

shell – 由操作系统运行的实际程序,用于处理您输入到command line中的内容。因此名称为non-friendly OS核心的user-friendly shell 。它提供了命令提示符,如$>,运行它自己的命令和应用程序。您始终通过shell程序工作,并且从不直接使用控制台或终端进行操作。

控制台 – 是您的文本模式程序正在运行的窗口。这个窗口处理按键,知道它是宽度和高度。可以是全屏。

终端 – 是一些人性化的显示设备,它接受输入的字符流并显示它们。没有反馈给用户关于高度或宽度(仅黑客)或键盘按键 – 只有字符正在前往它。终端在这个流中处理特殊序列,使事物变色,清理屏幕并做其他令人讨厌的事情。终端是片状的,因为如果您要管道输出的文件包含特殊序列,则很容易弄脏事情。它们在网络和设备调试接口中很受欢迎,因为您只需要一个流来发送输出并控制输出设备,而您只需将tap添加到对话中即可,无需初始化或创建窗口。

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

第九种办法

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

shell是内核之上的层:

  • 它解释用户输入的命令,并处理它们。与用户不同,shell可以访问内核。用户只能通过使用shell输入命令并使用进程(即正在运行的程序)来访问内核。程序使用system calls访问内核功能。所有系统调用一起构成系统API。

  • 第二个终端定义给出了shell的例子。

terminal有很多含义:

  • (1)文本终端。这是显示器和键盘的组合。电缆将终端连接到计算机(通常是间接连接)。它被称为终端,因为它位于该电缆的终端。这些终端通常在物理上与计算机分离,因为当时许多终端连接到单个主机/计算机,因此多个用户可以同时访问计算机。

  • (2)终端窗口a.k.a.终端仿真器。在Linux中,终端窗口是模拟包含在GUI窗口中的控制台。它是你输入你的文本的CLI,并且这个输入被你正在使用的shell读取。有很多类型的shell(例如bash,dash,ksh88)和终端(例如konsole,gnome)。

  • (3)有关伪终端的说明,请查看this。它是一对用于进程和终端仿真器之间通信的两个’device files’。

console有很多含义:

  • (1)包含计算机控制的仪表板。

  • (2)系统控制台又名计算机控制台。这是显示器和连接到计算机的键盘的组合。这与我们所说的’text terminal’同义。有时,其他user-input外设(如鼠标)也是控制台的一部分。

  • (3)覆盖整个屏幕的命令行界面。这与终端窗口形成鲜明对比,终端窗口是一个GUI,右上角有一个X来关闭它。这些是Unix-like系统中CLI(命令行接口)的两种显示模式。与终端窗口类似,控制台也可以运行多个shell。

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

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

第十种办法

现在的大多数终端都严格地说是终端仿真器。它是UNIX-like系统工作中的一种角色,同时也是系统提供的基本接口。事实上,包括GUI在内的所有东西都建立在它之上。在一个带有star-topography的计算机网络中,共点”terminal”也可以指end-points。

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

早在计算机价格昂贵的那一天,一台设备可能会有一台实际的计算机和通过串行电缆(“serial console”)连接到它的多个终端。操作系统,操作等在物理计算机上进行,输入和输出发生在控制台上。我不知道unbuntu,但在某些发行版中,您可以通过按ctrl. + alt + F1 (thorugh F6)在虚拟终端之间切换:这些时间的剩余部分。今天,”thin clients”的概念追溯到集中大量资源并提供足够硬件以在实际工作场所提供先进接口的方向。

shell是您在终端中看到的”engine”。它提供了与系统本身的互操作性,并增加了auto-complete,变量等不错的功能。它在使用系统调用的实际操作系统/内核和您之间来回转换。系统调用w /o shell 有点像编码assembler和一个 shell 至少给你C

命令行是指通过text-window交换输入和输出的方法。严格地说,你输入的行是(当前)命令行。该方法通常被更正确地称为命令行界面或CLI。

  1. 核心

  2. 提供终端

  3. 终端通过控制台连接

  4. 控制台运行shell

  5. 命令和输出通过命令行(接口)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/292.html,未经允许,请勿转载。