Linux 中为什么有那么多 /dev/tty?

Linux 中为什么有那么多 /dev/tty?

在 ubuntu 10.04 中,如果我在 /dev 下检查,有超过 50 个 tty。tty0、tty1、tty2……

我知道 tty 是一个用于控制台输入/输出的字符设备。

  1. 但是为什么有这么多呢?这像游泳池一样吗?

  2. /dev/pts/0, 1, 2..., /dev/tty 之间有什么区别?

  3. 如果我打开一个终端,则会在 /dev/pts 下创建新号码。但我不知道何时使用 /dev/tty?

    即使我创建了 SSH 连接,/dev/tty 的数量也是相同的。

    如果我这么做

    cat /dev/tty0
    

    并在键盘上输入一些内容,我得到了相应的输出。为什么会发生这种情况?

答案1

tty 不仅仅是输入/输出设备。它们还充当会话的控制终端,例如发送信号(Ctrl+C)。/dev/ttyNN 是虚拟控制台,在显示器上全屏显示。

终端从 /dev/tty1 开始。通常,您可以按 Ctrl+Alt+Fn 键切换到这些控制台。

例如,Ctrl+Alt+F1 会带您进入第一个虚拟终端。如今,大多数 Linux 发行版都从 tty1 运行 X 服务器。因此,按 Ctrl+Alt+F1 可能不起作用。

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl+Alt+F2 将带您进入第二个终端。通常,发行版会在虚拟终端上运行登录程序 (agetty)。

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

登录程序为您提供登录提示并允许您使用用户名/密码登录。 init 脚本决定所有登录程序的运行位置。因此,您可能会或可能不会在 tty9 上看到登录提示。要返回 GUI 界面,请按 Ctrl+Alt+F1(如上例所示)。

/dev/tty0 是一个特殊设备,指向当前终端。因此,无论您从哪里运行它(任何虚拟控制台),从 tty0 读取/写入的任何内容都会转到您当前的终端。

'ps ax' 中的第二列还给出了程序的控制终端。对于某些程序(如守护进程),您可能会看到该列为 '?',这意味着它们未绑定到终端。

/dev/pts/0 等是伪终端设备,不连接到系统显示器。例如,当您打开 gnome-terminal 或任何其他 GUI 终端时获得的终端。这些是基于客户端-服务器的方法,客户端将导出到程序,如 bash。程序发送到伪终端的数据被发送到“服务器”端(通常由另一个程序监视,如 gnome-terminal)。控制进程(服务器端)确定需要发送到终端的内容,最终由客户端看到。这些设备可帮助您在系统上打开多个“GUI 终端”,而不受任何限制,仍然提供相同的旧终端,如控件(ioctl()、颜色设置、发送信号 [Ctrl+C] 等)。

答案2

我只是想把这种事情之间的关系说清楚。

第一的,/dev/tty在流程层面,它可以響鳴(tty1、tty2、…) 终端(ttyS0,ttyS1),私人有限公司(pts/0, pts/1),以及其他内容。

/dev/tty0是当前(前台)虚拟控制台的别名,因此它可以是 tty1、tty2 等等。请注意,ttyS0 不是别名;它是第一个串行端口。

/dev/console是系统控制台,默认指向 /dev/tty0。可以是 ttyn、ttySn、ttyUSBn、lpn 等等。

大致来说,/dev/tty > /dev/cosole > /dev/tty0

相关内容