从它的 tty 文件中查找设备?

Tim*_*Tim 9 tty devices

这是来自我的 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
Run Code Online (Sandbox Code Playgroud)

我有 7 个虚拟控制台。

我还在 gnome 终端中打开了一些选项卡和几个 emacs(一些正在运行的 shell,但我可能已经将它们全部关闭)和屏幕会话(但现在已关闭)。

  1. 之间有什么区别/dev/tty/dev/tty[[:digit:]]+/dev/ttyprintk,和/dev/ttyS[[:digit:]]+
  2. 如何找出每个 tty 文件对应的设备?
  3. 有人说伪 tty 的设备文件是 /dev/ pty,但为什么这里没有 pty 文件或目录:

    $ ls /dev/*pty*
    ls: cannot access /dev/*pty*: No such file or directory
    
    Run Code Online (Sandbox Code Playgroud)
  4. 不知道什么/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
    
    Run Code Online (Sandbox Code Playgroud)

感谢致敬!

Ram*_*esh 4

什么是终端?

\n\n

终端由屏幕和键盘组成,用于与计算机(主机)进行远程通信。人们使用它几乎就像使用一台个人计算机一样,但终端远离与其通信的主机(在房间的另一侧,甚至在世界的另一侧)。

\n\n

问题1

\n\n
    \n
  1. /dev/tty代表当前进程的控制终端(如果有)。要查明哪些 tty\n 附加到哪些\n进程,请ps -a在 shell 提示符下使用命令(命令\n行)。看tty专栏。对于您所在的 shell 进程,\n/dev/tty是您现在使用的终端。
  2. \n
  3. 在 Linux 中,PC 监视器称为控制台,并且有几个与其关联的设备\n特殊文件:tty0tty1tty2等。\n当您登录时,您将处于tty1。要转到tty2按\n Alt- F2tty1tty2等是虚拟终端(有时称为“虚拟控制台”)。您可以登录到不同的虚拟终端,从而与计算机同时进行几个不同的会话。您可以使用“?”处的Alt-键在它们之间进行切换\n F?是\n您想要的虚拟终端号。控制台也称为\n /dev/tty0,系统消息可能会发送到该设备并显示在\n您的控制台上。只有系统或 root 用户可以写入有时链接到的\ /dev/tty0n /dev/console
  4. \n
  5. ttyprintk是一个伪 TTY 驱动程序,它允许用户printk通过输出到ttyprintk设备来发出\n 消息。
  6. \n
  7. /dev/tty/S[[:digit:]]代表串行端口。每个终端都连接到主机(通常只是一台 PC)上的串行端口。端口有名称/编号。前几个是:ttyS0、\n ttyS1ttyS2等。这些由在(设备)目录中找到的特殊文件表示/devttyS0对应于 DOS\或 Windows 中的 COM1。ttyS1是 COM2 等。
  8. \n
\n\n

问题3问题4是相关的。吉尔斯在这里有一个精彩的解释。他的回答的一些摘录是:

\n\n
\n

伪终端由终端仿真器提供,该仿真器是一个应用程序。一些类型的伪终端是:

\n\n
    \n
  • GUI 应用程序(例如 xterm、gnome-terminal、konsole、\xe2\x80\xa6)将键盘和鼠标事件转换为文本输入并以某种字体以图形方式显示输出。
  • \n
  • 多路复用器应用程序(例如 screen 和 tmux)中继来自另一个终端的输入和输出,以将文本模式应用程序与实际终端解耦。
  • \n
  • 远程 shell 应用程序(例如 sshd、telnetd、rlogind、\xe2\x80\xa6)在客户端上的远程终端和服务器上的 pty 之间中继输入和输出。
  • \n
\n
\n\n

另外,从伪终端的维基页面,我看到以下信息。

\n\n
\n

主设备文件的名称通常为 /dev/pty[p-za-e][0-9a-f],是与终端仿真器通信的端点。使用此 [p-za-e] 命名方案,最多可以有 256 个 tty 对。此外,除非采用锁定方案,否则查找第一个空闲 pty master 可能会很快速。因此,最近的 BSD\n 操作系统(例如 FreeBSD)实现了 Unix98 PTY。[4]

\n\n

BSD PTY 已被 Unix98 pty 淘汰,Unix98 pty 的命名系统不限制伪终端的数量和访问,而不会出现竞争条件的危险。/dev/ptmx 是“伪终端主多路复用器”。打开它会返回主节点的文件描述符,并导致创建关联的从节点 /dev/pts/N

\n
\n\n

所以我怀疑/dev/pty不可用,这就是你看到的原因/dev/pts

\n\n

参考

\n\n

http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-7.html

\n\n

Linux:/dev/console、/dev/tty 和 /dev/tty0 之间的区别

\n\n

http://lkml.iu.edu/hypermail/linux/kernel/1009.0/00333.html

\n