这是我的 Ubuntu
$ ls /dev/*tty*
/dev/tty /dev/tty17 /dev/tty26 /dev/tty35 /dev/tty44 /dev/tty53 /dev/tty62 /dev/ttyS12 /dev/ttyS21 /dev/ttyS30
/dev/tty0 /dev/tty18 /dev/tty27 /dev/tty36 /dev/tty45 /dev/tty54 /dev/tty63 /dev/ttyS13 /dev/ttyS22 /dev/ttyS31
/dev/tty1 /dev/tty19 /dev/tty28 /dev/tty37 /dev/tty46 /dev/tty55 /dev/tty7 /dev/ttyS14 /dev/ttyS23 /dev/ttyS4
/dev/tty10 /dev/tty2 /dev/tty29 /dev/tty38 /dev/tty47 /dev/tty56 /dev/tty8 /dev/ttyS15 /dev/ttyS24 /dev/ttyS5
/dev/tty11 /dev/tty20 /dev/tty3 /dev/tty39 /dev/tty48 /dev/tty57 /dev/tty9 /dev/ttyS16 /dev/ttyS25 /dev/ttyS6
/dev/tty12 /dev/tty21 /dev/tty30 /dev/tty4 /dev/tty49 /dev/tty58 /dev/ttyprintk /dev/ttyS17 /dev/ttyS26 /dev/ttyS7
/dev/tty13 /dev/tty22 /dev/tty31 /dev/tty40 /dev/tty5 /dev/tty59 /dev/ttyS0 /dev/ttyS18 /dev/ttyS27 /dev/ttyS8
/dev/tty14 /dev/tty23 /dev/tty32 /dev/tty41 /dev/tty50 /dev/tty6 /dev/ttyS1 /dev/ttyS19 /dev/ttyS28 /dev/ttyS9
/dev/tty15 /dev/tty24 /dev/tty33 /dev/tty42 /dev/tty51 /dev/tty60 /dev/ttyS10 /dev/ttyS2 /dev/ttyS29
/dev/tty16 /dev/tty25 /dev/tty34 /dev/tty43 /dev/tty52 /dev/tty61 /dev/ttyS11 /dev/ttyS20 /dev/ttyS3
我有 7 个虚拟控制台。
我还在 gnome 终端中打开了一些选项卡,以及几个 emacs(一些正在运行的 shell,但我可能已将它们全部关闭)和屏幕会话(但现在已关闭)。
/dev/tty
、/dev/tty[[:digit:]]+
、/dev/ttyprintk
和 和有什么不一样/dev/ttyS[[:digit:]]+
?- 如何找出每个 tty 文件对应的设备?
有人说伪tty的设备文件是/dev/普蒂,但为什么这里没有 pty 文件或目录:
$ ls /dev/*pty* ls: cannot access /dev/*pty*: No such file or directory
不确定是什么
/dev/*pts*
意思:$ ls /dev/*pts* 0 1 10 11 12 13 14 15 16 17 18 2 20 21 22 23 24 26 3 4 5 6 7 8 9 ptmx
感谢致敬!
答案1
什么是终端?
终端由屏幕和键盘组成,用于与计算机(主机)进行远程通信。人们使用它几乎就像使用一台个人计算机一样,但终端远离与其通信的主机(在房间的另一侧,甚至在世界的另一侧)。
问题1
/dev/tty
代表当前进程的控制终端(如果有)。要查明哪些 tty 附加到哪些进程,请ps -a
在 shell 提示符(命令行)下使用该命令。看tty
专栏。对于您所在的 shell 进程,/dev/tty
是您现在使用的终端。- 在 Linux 中,PC 监视器称为控制台,并且有几个与其关联的设备特殊文件:
tty0
、tty1
、tty2
等。当您登录时,您将处于tty1
。要前往tty2
按 Alt- F2。tty1
、tty2
等是虚拟终端(有时称为“虚拟控制台”)。您可以登录到不同的虚拟终端,从而与计算机同时进行几个不同的会话。您可以使用“?”处的Alt-键在它们之间切换。F?是您想要的虚拟终端号码。控制台也称为/dev/tty0
,系统消息可能会发送到该设备并显示在您的控制台上。只有系统或 root 用户可以写入 有时链接到的/dev/tty0
内容/dev/console
。 ttyprintk
是一个伪 TTY 驱动程序,它允许用户 通过输出到设备来发送printk
消息。ttyprintk
/dev/tty/S[[:digit:]]
代表串行端口。每个终端都连接到主机(通常只是一台 PC)上的串行端口。端口有名称/编号。前几个是:ttyS0
、ttyS1
、等。这些由(设备)目录ttyS2
中找到的特殊文件表示。对应于 DOS 或 Windows 中的 COM1。是 COM2 等/dev
ttyS0
ttyS1
问题3和问题4有关系。吉尔斯有一个精彩的解释来自这里。他的回答的一些摘录是:
伪终端由终端仿真器提供,它是一个应用程序。一些类型的伪终端是:
- GUI 应用程序(例如 xterm、gnome-terminal、konsole 等)将键盘和鼠标事件转换为文本输入并以某种字体以图形方式显示输出。
- 多路复用器应用程序(例如 screen 和 tmux)中继来自另一个终端的输入和输出,以将文本模式应用程序与实际终端解耦。
- 远程 shell 应用程序(例如 sshd、telnetd、rlogind 等)在客户端上的远程终端和服务器上的 pty 之间中继输入和输出。
另外,从伪终端的wiki页面,我看到下面的信息。
主设备文件的名称通常为 /dev/pty[p-za-e][0-9a-f],是与终端仿真器通信的端点。使用此 [p-za-e] 命名方案,最多可以有 256 个 tty 对。此外,除非采用锁定方案,否则找到第一个空闲 pty master 可能会很危险。因此,最近的 BSD 操作系统(例如 FreeBSD)实现了 Unix98 PTY。[4]
BSD PTY 已被 Unix98 pty 淘汰,Unix98 pty 的命名系统不限制伪终端的数量,并且对伪终端的访问不会出现竞争条件的危险。 /dev/ptmx 是“伪终端主多路复用器”。打开它会返回主节点的文件描述符,并导致创建关联的从节点 /dev/pts/N
所以我怀疑/dev/pty
不可用,这就是你看到的原因/dev/pts
。
参考
http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-7.html