ternimal,shell,tty 和 console 之间的确切区别是什么?

Yujiaao

名词本义

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

嗯,从词源上来讲,就这样子。

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

  • 终端= tty =文本输入/输出环境
  • 控制台=物理终端
  • shell =命令行解释器

以下链接来自维基百科,可能需要翻墙

控制台,终端和tty密切相关。早先,他们的意思是一台设备,通过这个设备你可以与计算机交互:在UNIX的早期,这意味着一个电传式的装置类似一台打字机,有时也被称为远程电传打字机teletypewriter,或缩写成“TTY”。“终端”这个名字来自电子科学的角度,从家具的角度来看,这个名字是“控制台”。在Unix历史的早期,电子键盘和显示器成为终端的规范。

Unix的哲学是一切皆文件

设备也不例外。

用unix术语来说,tty是一种特殊的设备文件,它实现了除读写之外的许多其他命令(ioctls)。在其最常见的含义中,terminal是 tty 的同义词。某些 tty 由内核代表硬件设备提供,例如,输入来自键盘,输出进入文本模式屏幕,或者输入和输出通过串行线路传输。其他 tty,有时也称为 伪tty,是由称为终端仿真器的程序(通过薄内核层)提供的,例如:

  • XtermX Window System中运行。
  • Screen:在程序和另一个终端之间提供隔离层。
  • Ssh:将一台机器上的终端与另一台机器上的程序连接起来。
  • Expect:用于脚本化终端交互。

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

控制台一般是在物理意义上的,某种意义上来说是直接连接到主机的终端。控制台在操作系统中显示为(内核实现的)tty。在某些系统上,例如 Linux 和 FreeBSD,控制台显示为多个 tty(特殊的组合键在这些 tty 之间切换)。为了把事搞混搞乱,给每个特定 tty 赋予的名称可以是“控制台”,“虚拟控制台”,“虚拟终端”和其他变体。

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

Shell


一个是主界面,用户登录时看到的,其主要目的是启动其他程序。(我不知道最初的隐喻是 shell 是用户的家庭环境(home eviroment),还是该shelln是其他程序在其中运行的保护壳。)

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

有许多不同的unix shell。交互式使用的流行shell包括:

  • Bash :大多数Linux安装中的默认设置,
  • zsh: 强调功能和可定制性,
  • fish: 强调简单性。

命令行外壳包含用于组合命令的流控制结构。除了在交互式提示下键入命令外,用户还可以编写脚本。最常见的shell具有基于Bourne_shell的通用语法。在讨论“ shell编程”时,几乎总是将shell暗示为Bourne风格的shell。一些经常用于脚本编写但缺少高级交互功能的外壳包括Korn外壳(ksh)和许多ash变体。几乎所有类似Unix的系统都有Bourne风格的shell安装为/bin/sh,通常是ash,ksh或bash。

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


Terminal 和 Shell 之间的分工并不完全明显。下面他们的主要作用:

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

    • 终端可以改为提供自己的行编辑,历史记录和完成输入功能,并且仅在准备好执行时才将行发送到shell。以这种方式运行的唯一普通终端M-x shell在Emacs中。
  • 输出:外壳程序发出诸如“显示 foo”,“将前景色切换为绿色”,“将光标移至下一行”之类的指令。终端根据这些指令进行操作。
  • 提示(prompt)纯粹是一个外壳概念。
  • Shell 永远不会看到它运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是终端概念。
  • 终端提供应用程序间的复制粘贴(通常使用鼠标或键序列,例如Ctrl+ Shift+VShift+ Insert)。外壳也可以具有自己的内部复制粘贴机制(例如Meta+WCtrl+ Y)。
  • 作业控制(在后台启动程序并进行管理)主要由外壳执行。但是,它是由终端处理诸如Ctrl+C的组合键来杀死前台作业和Ctrl+Z使其暂停。

参考

阅读 152
11.9k 声望
3.7k 粉丝
0 条评论
11.9k 声望
3.7k 粉丝
宣传栏