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

dae*_*hee 34 linux 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
    
    Run Code Online (Sandbox Code Playgroud)

    并在键盘上输入一些东西,我得到相应的输出。为什么会这样?

小智 27

ttys 不仅仅是输入/输出设备。它们还充当会话的控制终端的特殊工作,例如发送信号 (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
Run Code Online (Sandbox Code Playgroud)

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

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 但这并不能回答问题。正如 daehee 所说,有 64 个 /dev/ttyN 设备。1-8是虚拟控制台。ptys 是独立的,位于 /dev/pts 下。例如,/dev/tty30 在什么系统上被使用,以及如何使用? (3认同)
  • 除了在这里问之外,如何知道这一点?一些手册页? (2认同)