终端与终端模拟器

Ron*_*nce 12 terminal-emulator terminal

我试图在这里澄清我对终端的理解。

终端实际上​​是一个设备(键盘+显示器)。在 CLI 模式下,来自键盘的输入直接进入 shell 并显示在监视器上。

同时,在使用 GUI 模式时,您必须打开终端仿真程序才能与 shell 进行交互。来自键盘的输入进入终端仿真器程序,并显示在显示器上的终端仿真器窗口中。输入不会直接进入 shell。终端模拟器程序会将输入从您的键盘中继到 shell。终端模拟器程序使用伪终端与外壳通信。

从引导直接进入 CLI 时,不涉及终端仿真程序。

如果我的理解有任何错误,请发表评论并纠正我。

更新:我读回TTY 揭开神秘面纱。我想我应该问的是文本终端(直接启动到文本模式)和 GUI 终端之间的区别,因为我认为终端=文本终端,终端模拟器=GUI 终端,例如 Gnome 终端,这是错误的。从这次更新之前的答案来看,用户实际上也在使用终端模拟器程序(用户空间),就像在 GUI 模式下一样。我可以知道它是不是 TTY 程序,因为我在运行命令 'ps aux' 时发现了 TTY 进程。我从来不知道在文本模式下也有终端模拟器程序(不是指内核空间中的终端模拟器)。

更新 2:我阅读了Linux 控制台。根据它,文本模式是控制台,而GUI模式的终端软件是终端模拟器。嗯,有道理,和我之前的理解是一样的。但是,根据TTY demystified 的图表,终端模拟器位于内核空间而不是用户空间。有趣的是,该图指的是文本模式。

Bra*_*n D 12

这里有几个单独的术语需要独立定义:

终端:真正的键盘/显示器界面,如 VT100:https : //en.wikipedia.org/wiki/VT100

终端模拟器(TTY):模拟终端,提供输入和输出。在大多数 Linux 发行版中按 ctrl+alt+F2,你就会进入其中。在终端中键入“w”,您将看到由“tty”运行的 w 命令。

伪终端(PTY):一个主/从对(ptmx),其中一些其他软件(如 ssh 或 GUI 终端)通过从(pts)提供类似终端的界面。http://linux.die.net/man/4/ptmx 在 GUI 终端中键入“w”,您将看到 w 命令被列为来自 pts。

Shell:在登录时运行的命令行解释器,并解释您的输入。这方面的例子是 bash/zsh。

但是,请记住,这些术语在对话中都可以互换。当有人提到“终端”、“终端模拟器”、“控制台”、“命令行”或“外壳”时,除非上下文另有说明,否则他们可能更普遍地指的是:

“我用来控制某些计算机的基于文本的东西。”

编辑问题更新

有关匹配 pts 或 pty 的所有进程,请参见下文:

root@localhost tests]# ps fauxww | grep -P [pt]t[ys] 
root      2604  2.3  0.8  50728 34576 tty1     Ss+  07:09   1:15      \_ /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-VRHaoJ/database -nolisten tcp vt1
root      2569  0.0  0.0   2008   500 tty2     Ss+  07:09   0:00 /sbin/mingetty /dev/tty2
root      2571  0.0  0.0   2008   500 tty3     Ss+  07:09   0:00 /sbin/mingetty /dev/tty3
root      2573  0.0  0.0   2008   504 tty4     Ss+  07:09   0:00 /sbin/mingetty /dev/tty4
root      2575  0.0  0.0   2008   500 tty5     Ss+  07:09   0:00 /sbin/mingetty /dev/tty5
root      2577  0.0  0.0   2008   504 tty6     Ss+  07:09   0:00 /sbin/mingetty /dev/tty6
sin       3374  0.2  0.7  90668 28564 ?        Sl   07:13   0:09 /usr/bin/python /usr/bin/terminator   <<< Added this parent of 3377 manually to see the pts source
sin       3377  0.0  0.0   2076   620 ?        S    07:13   0:00  \_ gnome-pty-helper
sin       3378  0.0  0.0   5236  1712 pts/0    Ss   07:13   0:00  \_ /bin/bash
root      4054  0.0  0.0   5124  1676 pts/0    S    07:23   0:00  |       \_ bash
root      5034  0.0  0.0   5056  1092 pts/0    R+   08:03   0:00  |           \_ ps fauxww
root      5035  0.0  0.0   4416   740 pts/0    S+   08:03   0:00  |           \_ grep -P [pt]t[ys]
sin       4154  0.0  0.0   5236  1708 pts/1    Ss   07:23   0:00  \_ /bin/bash
sin       4485  0.0  0.0   7252  3500 pts/1    S+   07:41   0:00      \_ python
Run Code Online (Sandbox Code Playgroud)

您将看到与 pts 和 tty 相关的进程。您假设因为您在 ps 中看到 tty,这是您的 GUI 终端正在使用的东西,但事实并非如此。在这种情况下,mingetty TTY 进程是我可以通过 ctrl+shift+F2-6 使用的所有进程,而 pty 是与我的 GUI 终端进程相关的从属进程。要确定,请检查 GUI 终端进程的 lsof:

[root@localhost tests]# ps fauxww | grep terminator
sin       3374  0.2  0.7  90668 28564 ?        Sl   07:13   0:08 /usr/bin/python /usr/bin/terminator
[root@localhost tests]# lsof -p 3374 | grep '[pt]t[ys]'
/usr/bin/ 3374  sin   17u   CHR      136,0      0t0      3 /dev/pts/0
/usr/bin/ 3374  sin   25u   CHR      136,1      0t0      4 /dev/pts/1
Run Code Online (Sandbox Code Playgroud)

当您启动到文本模式时,您将进入 TTY,就像您在桌面上按 ctrl+alt+f2 一样。当您使用 SSH/GUI 终端时,您使用的是伪终端。


Kaz*_*Kaz 5

(显示)终端是具有键盘和显示器并与主机通信的硬件。终端本身就是一台小型计算机;嵌入式系统。

终端仿真器是在通用机器上运行的软件,它实现某些终端的行为。

终端模拟器并不都是图形化的。它们可以基于文本显示模式。Linux 内核中的控制台就是一个例子。

终端仿真器也可以使用终端仿真本身。GNU Screen 程序就是一个例子。它需要一个终端,但为在其下运行的程序提供终端仿真。

终端仿真器可以在主机中运行,以便提供虚拟终端来访问该主机本身。在主机上运行的软件将同一台主机视为附加的远程终端。但终端模拟器也可以用来简单地使用计算机作为终端来访问某些远程主机。例如,使用 PC 上 Windows 下运行的 IBM 3270 模拟器来访问大型机。它是一个模拟器,因为您使用的是 Windows 下的一个软件,而不是桌面上实际的 3270。但您并没有使用它来访问 Windows 命令行。这种终端仿真器的另一个例子是串行通信包,如 Minicom、超级终端等。此外,还有流行的 PuTTY SSH 客户端。