Linux - Shell、Console和Terminal的区别

* terminal = text input/output environment

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

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.

* console = physical terminal

一个用来控制计算机的面板设备。

An instrument panel containing the controls for a computer。

* shell = command line interpreter

是一个用来运行命令的应用。

控制台Console和终端terminal 是密切相关的。最初,它们指的是一块设备,你可以通过它与计算机进行交互:在unix的早期,这意味着一个类似于打字机的电传打字机式( teleprinter-style)的设备,有时被称为电传打字机(teletypewriter),或简称 "tty"。终端(terminal)这个名字是从电子角度来的,而 "控制台 "(console)这个名字是从设备角度来说的。在unix历史的早期,电子键盘和显示器成为终端(terminals)的标准。

Terminal

在unix术语中,终端是一种特殊的设备文件,除了读写之外,还实现了一些额外的命令(ioctls)。有些终端是由内核提供的,用来代表一个硬件设备,例如,从键盘的输入,输出到文本模式的屏幕,或者通过串行线进行输入和输出。其他终端,有时被称为伪终端或伪ttys,由称为终端仿真器的程序提供(通过一个轻量级的内核层)。一些类型的终端仿真器包括:

- 在X Window System中运行的GUI(Graphical user interface)应用程序:Xterm、Gnome Terminal、Konsole、Terminator等。

- Screen和tmux,它在一个程序和另一个终端之间提供了一个隔离层。

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

- Expect,用于编写终端交互的脚本

终端这个词也可以有更传统的含义,即人们通过它与计算机进行交互的设备,通常有一个键盘和显示器。例如,X terminal是一种瘦客户端,是一种特殊用途的计算机,其唯一目的是驱动键盘、显示器、鼠标和偶尔的其他人机交互外围设备,而实际的应用程序则在另一台更强大的计算机上运行。

Console

控制台一般是指物理意义上的终端,根据某种定义,它是直接连接到机器上的主要终端。控制台在操作系统中显示为一个(由内核实现的)终端。在一些系统中,如Linux和FreeBSD,控制台以几个终端(ttys)的形式出现(使用特殊的组合键在这些终端之间切换);为了混淆视听,给每个特定终端的名称可以是 "控制台"、"虚拟控制台"、"虚拟终端",以及其他变种。

比如游戏手柄一类的设备,也可以看作console。

Command line [interface]

命令行是一个界面,用户在这里输入一个命令(表现为一连串的字符--通常是一个命令名称,后面有一些参数),然后按回车键来执行该命令。

Shell

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

在unix圈子里,shell已经专门指的是命令行shell,其核心是输入想要启动的应用程序的名称,然后是该应用程序应该执行的文件或其他对象的名称,最后按回车键。其他类型的环境(最近Gnome Shell明显例外)通常不使用 "shell "这个词;例如,窗口操作系统涉及 "窗口管理器 (windows managers)"和 "桌面环境(desktop environments)",而不是 "shell"。

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

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

在unix系统管理中,用户的shell是他们登录时被调用的程序。正常的用户账户有一个命令行shell,但有限制权限的用户可能有一个受限的shell或只能执行其他一些特定的命令(例如,只用于文件传输的账户)。

Terminal vs Shell

Terminal和shell之间的分工并不完全明显。下面是它们的主要任务。

- 输入:终端将按键转换为控制序列(例如:Left → \e[D)。shell将控制序列转换为命令(例如: \e[D → backward-char)。

- 行的编辑、输入历史和自动补全是由shell提供的。

- 终端可以提供自己的行编辑、历史记录和自动补全功能,只在准备好要执行的时候将一行内容发送给shell。唯一以这种方式操作的普通终端是Emacs的M-x shell。

- 输出:shell发出指令,如 "显示foo","将前景颜色切换为绿色","将光标移到下一行",等等。终端对这些指令采取行动。

- 提示符是纯粹的shell概念。

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

- 应用间的复制粘贴是由终端提供的(通常用鼠标或按键序列,如Ctrl+Shift+V或Shift+Insert)。外壳可能也有自己的内部复制粘贴机制(例如Meta+W和Ctrl+Y)。

- 工作控制(job control)(在后台启动程序并管理它们)主要由shell执行。然而,是终端处理组合键,如Ctrl+C杀死前台进程,Ctrl+Z暂停工作。

参考:

What is the difference between Terminal, Console, Shell, and Command Line? - Ask Ubuntu

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值