作为菜鸟,最近一直对 Shell、Terminal、Console、Command-line 这三个概念很是困惑。特别是 Console 和 Terminal?
答案1
Shell 是用于与计算机交互的程序,它可以是命令行界面,也可以是点击界面。Bash 是一个 shell,Gnome2 也是,等等。
终端是现代计算中的一个含义丰富的术语。它起源于旧式大型机时代,当时您在直接连接到大型机的硬件设备上打字(瘦客户端,只有键盘和显示器)。硬件终端与大型机上运行的软件外壳交互。在 PC 和其他小型胖客户端系统出现后,我们开始使用终端仿真器软件,该软件会假装我们的胖客户端只是连接到大型机的瘦客户端终端,并允许我们远程连接。这就是 CICS 应用程序等应用的用武之地。
从现代意义上讲,Linux“终端”就像gnome-terminal
终端仿真器,在本地系统上运行 shell。关键点在于,终端始终包含一个 shell,您可以使用终端访问 shell 并与之交互,无论它是硬件终端还是软件终端。
在现代用法中,客户端(来自计算的客户端/服务器模型)是连接并使用服务的软件。您的 Web 浏览器是 HTTP 服务的客户端。要连接到 Samba 或 Windows 服务器,您需要 Samba 客户端。远程链接上的终端仿真器通常使用 telnet 或 ssh 或 hyperterm 等客户端进行远程连接。客户端通常使用网络作为媒介进行连接,并根据通信协议(如 HTTP)传递消息。
客户端这个术语也可以指硬件,但除了少数特殊领域外,不太常见。在过去,当您将独立系统连接到网络时,它就成为该网络上的客户端。这也是我们得到诸如瘦客户端(远程运行软件的无盘机器)和厚客户端(具有自己的操作系统、CPU、RAM 和辅助存储的独立 PC)等术语的地方。您通常可以从上下文中判断说话者指的是硬件设备(PC/服务器/等)还是特定的软件客户端。
希望这有助于澄清。
答案2
Terminal 是电线的末端,Shell 是乌龟的家,tty 是一个奇怪的缩写,Console 是一种柜子。
嗯,从词源学上来说,无论如何。
用 unix 术语来说,简短的回答是
- 终端 = tty = 文本输入/输出环境
- 控制台 = 物理终端
- shell = 命令行解释器
控制台、终端和 tty 密切相关。最初,它们指的是一种可以与计算机交互的设备:在 unix 的早期,这意味着电传打字机类似于打字机的设备,有时称为电传打字机,或简称为“tty”。终端这个名称来自电子观点,而控制台这个名称来自家具观点。在 unix 历史的早期,电子键盘和显示器成为终端的标准配置。
在 UNIX 术语中,终端是一种特殊的设备文件它实现了许多附加命令(读写控制)超越了阅读和写作。在最常见的意义上,终端与 tty 同义。一些 tty 由内核代表硬件设备提供,例如,输入来自键盘,输出到文本模式屏幕,或者输入和输出通过串行线路传输。其他 tty,有时称为伪终端,通过一个薄内核层由称为终端仿真器, 例如终端(在运行X 窗口系统),屏幕(在程序和另一个终端之间提供一层隔离),SSH(将一台机器上的终端与另一台机器上的程序连接起来),预计(用于编写终端交互脚本)等等。
终端这个词也可以有更传统的含义,即与计算机交互的设备,通常是键盘和显示器。例如,X 终端是一种瘦客户端,一种专用计算机,其唯一目的是驱动键盘、显示器、鼠标和偶尔其他人机交互外围设备,而实际应用程序则在另一台功能更强大的计算机上运行。
A安慰通常是物理意义上的终端,根据某种定义,它是直接连接到机器的主要终端。控制台在操作系统中显示为(内核实现的)tty。在某些系统(如 Linux 和 FreeBSD)上,控制台显示为多个 tty(特殊组合键在这些 tty 之间切换);为了混淆,每个特定 tty 的名称可以是“控制台”、“虚拟控制台”、“虚拟终端”和其他变体。
也可以看看为什么虚拟终端是“虚拟的”?“真实”终端是什么/为什么/在哪里?。
A壳是用户登录后看到的主要界面,其主要目的是启动其他程序。(我不知道原来的比喻是 shell 是用户的家庭环境,还是 shell 是其他程序运行的环境。)
在 Unix 圈子里,壳专门用于表示命令行外壳,主要包括输入要启动的应用程序的名称,然后输入应用程序应执行操作的文件或其他对象的名称,然后按 Enter 键。其他类型的环境不使用“shell”一词;例如,窗口系统涉及“窗口管理器“ 和 ”桌面环境”,而不是“壳”。
有许多不同的 unix shell。用于交互使用的流行 shell 包括猛击(大多数 Linux 安装的默认设置),嘚(强调功能和可定制性)和鱼(强调简单性)。
命令行 shell 包括用于组合命令的流控制结构。除了在交互式提示符下键入命令外,用户还可以编写脚本。最常见的 shell 具有基于Bourneshell。在讨论“shell 编程”时,shell 几乎总是暗示是 Bourne 风格的 shell。一些经常用于脚本但缺乏高级交互功能的 shell 包括Korn shell(ksh)和许多灰变体。几乎所有类 Unix 系统都安装了 Bourne 风格的 shell /bin/sh
,通常是 ash、ksh 或 bash。
在 UNIX 系统管理中,用户的壳是登录时调用的程序。普通用户帐户有一个命令行 shell,但访问权限受限的用户可能有一个受限外壳或其他特定命令(例如,仅用于文件传输的帐户)。
终端和 shell 之间的分工并不完全明显。以下是它们的主要任务。
- 输入:终端将按键转换成控制序列(例如Left→
\e[D
)。shell 将控制序列转换成命令(例如\e[D
→backward-char
)。 - 行编辑、输入历史和完成由 shell 提供。
- 终端可能会提供自己的行编辑、历史记录和完成功能,并且仅在准备好执行时才将行发送到 shell。以这种方式运行的唯一常见终端是
M-x shell
Emacs。
- 终端可能会提供自己的行编辑、历史记录和完成功能,并且仅在准备好执行时才将行发送到 shell。以这种方式运行的唯一常见终端是
- 输出:shell 发出诸如“显示
foo
”、“将前景色切换为绿色”、“将光标移动到下一行”等指令。终端根据这些指令采取行动。 - 提示纯粹是一个外壳概念。
- shell 永远不会看到它所运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是一个终端概念。
- 终端提供应用程序间的复制粘贴功能(通常使用鼠标或按键序列,例如Ctrl+ Shift+V或Shift+ Insert)。 shell 也可能有自己的内部复制粘贴机制(例如Meta+W和Ctrl+ Y)。
- 作业控制(在后台启动程序并管理它们)主要由 shell 执行。但是,终端负责处理组合键,例如Ctrl+C可终止前台作业,Ctrl+Z可暂停前台作业。
回收自Unix 和 Linux
答案3
好的,
shell:在命令行界面中运行命令。当您输入“cd”、“grep”等命令时,它知道要做什么(调用什么程序)。通常您会看到它也被称为 bash 或 zsh(最常见)。shell 还运行直接脚本(通常是 .sh 文件,但扩展名不是强制性的)
终端:通常情况下,一个图形窗口会运行实际的 shell。有额外的功能,比如标签、字体、行 X 列大小等等。可以定义一个终端来运行你喜欢的 shell
客户端:与其余部分无关。在任何具有客户端/服务器架构的应用程序中(网站,ssh 连接,数据库管理程序,多人游戏),客户端就是您与之交互的部分,它将订单发送到服务器。
例如:使用 ssh 连接。
- 你打开一个终端。
- 运行命令:ssh[电子邮件保护]
- shell 实际上是运行 ssh 命令,启动 ssh 客户端
- 该客户端将通过 intarwebs 连接到 ssh 服务器
- 当你在终端输入“whoami”时,shell 正在运行 ssh 客户端,因此它知道要将命令发送到服务器。在网络的另一端,服务器运行该命令,将结果发送回你的 shell,然后终端在桌面上以漂亮的、人性化的方式显示出来。
切换到游戏:“终端”是漂亮的界面,“外壳”是知道如何处理点击和按键的内部结构,“客户端”是游戏引擎本身,将内容来回发送到服务器,以便所有玩家都可以愉快地互相攻击而不会出现延迟:)
这是一个非常简单的观点,但如果不涉及细节,它就仅仅是如此。
答案4
- 终端 = 文本输入/输出环境
- 控制台 = 物理终端
- Shell = 命令行解释器
控制台和终端密切相关。最初,它们指的是允许您与计算机交互的设备。(…)在 unix 术语中,终端是一种特殊的设备文件,它除了读写之外还实现了许多附加命令 (ioctl)。某些终端(有时称为伪终端或伪 tty)由称为终端仿真器的程序提供(通过薄内核层)。某些类型的终端仿真器包括:
- 在 X Window 系统中运行的 GUI 应用程序:Xterm、Gnome Terminal、Konsole、Terminator 等。
- Screen 和 tmux,在一个程序和另一个终端之间提供了一层隔离。
- Ssh,将一台机器上的终端与另一台机器上的程序连接起来。
- Expect,用于编写终端交互脚本。
(…) 控制台通常是物理意义上的终端,根据某种定义,它是直接连接到机器的主要终端。控制台在操作系统中显示为(内核实现的)终端。在某些系统(如 Linux 和 FreeBSD)上,控制台显示为多个终端 (tty)(特殊组合键在这些终端之间切换);为了混淆,每个特定终端的名称可以是“控制台”、“虚拟控制台”、“虚拟终端”和其他变体。
(…)命令行是一个界面,用户在其中输入命令(以字符序列表示 - 通常是一个命令名称,后跟一些参数)并按下返回键来执行该命令。
Shell 是用户登录后看到的主要界面,其主要用途是启动其他程序。(我不知道原来的比喻是说 shell 是用户的家庭环境,还是说 shell 是其他程序运行的环境。)
在 unix 圈子中,shell 专门用于表示命令行 shell,其核心是输入要启动的应用程序的名称,然后输入应用程序应执行的文件或其他对象的名称,然后按 Enter 键。其他类型的环境(最近 Gnome Shell 是个显著的例外)通常不使用“shell”一词;例如,窗口系统涉及“窗口管理器”和“桌面环境”,而不是“shell”。
如果你用 Google 一下,你会发现很多关于这个主题的有用信息。