linux tty_linux tty

linux tty_linux ttyLinux中的tty与pts终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。 Teletype是最早出现的一种终端设备——可以称作电传打字机,由Teletype公司生产。tty在Linux系统的设备特殊文件目录/dev/下。终端特殊设备文件一般有以下几种:1、串行端口终端(/dev/ttySn)串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Linux中的tty与pts

tty是真的,pts是假的,相互对应


终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

tty是Teletype的缩写。 Teletype是最早出现的一种终端设备——可以称作电传打字机,由Teletype公司生产。tty在Linux系统的设备特殊文件目录/dev/下。

终端特殊设备文件一般有以下几种:


1、串行端口终端(/dev/ttySn)

  • 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。
  • 计算机把每个串行端口都看作是一个字符设备
  • 串行端口所对应的设备名称是/dev/tts/0, /dev/tts/1等
    (或者/dev/ttyS0,/dev/ttyS1)等
    设备号分别是(4,0), (4,1)等
    分别对应于DOS系统下的COM1、COM2等。

若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。

eg.在命令行提示符下键入# echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。(可接串口来实验)

echo命令:主要作用功能是在屏幕上显示文字,也可以直接在文件中写入要写的内容 )


2、伪终端(/dev/pty/)

伪终端(Pseudo Terminal)是成对的逻辑终端设备
(即master和slave设备, 对master的操作会反映到slave上)

eg./dev/ptyp3和/dev/ttyp3
(或者在设备文件系统中分别是/dev/pty/m3和 /dev/pty/s3)
它们与实际物理设备并不直接相关


如果一个程序把ptyp3(master设备)看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3同时又是另一个程序用于读写操作的逻辑设备。

这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用ttyp3的程序则认为自己正在与一个串行端口进行通信。这很像是逻辑设备对之间的管道操作


对于ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程序,则需要专门设计来使用ptyp3(m3)逻辑设备。


eg.如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会开始连接到设备ptyp2(m2)上(一个伪终端端口上,主设备)。此时一个getty程序就应该运行在对应的ttyp2(s2)端口上(真正的端口,从设备)

当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给 getty程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。

这样,登录程序与telnet程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。


逻辑设备对的扩展

在使用设备文件系统(device filesystem)之前,为了得到大量的伪终端设备特殊文件,使用了比较复杂的文件名命名方式。因为只存在16个ttyp(ttyp0—ttypf)的设备文件,为了得到更多的逻辑设备对,就使用了q、r、s等字符来代替p。例如,ttys8和ptys8就是一个伪终端设备对。这种命名方式目前仍然在RedHat等Linux系统中使用着。

但Linux系统上的Unix98并不使用上述方法,而使用了”pty master”方式,例如/dev/ptm3。它的对应端则会被自动地创建成/dev/pts/3。这样就可以在需要时提供一个pty伪终端。目录 /dev/pts是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。虽然“文件”/dev/pts/3看上去是设备文件系统中的一项,但其实它完全是一种不同的文件系统。
即: TELNET —> TTYP3(S3: slave) —> PTYP3(M3: master) —> GETTY


3、控制终端(/dev/tty)

如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它 具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。


4、控制台终端(/dev/ttyn, /dev/console)

在Linux系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。

当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等称为虚拟终端tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。

只有系统或超级用户root可以向/dev/tty0进行写操作 即下例:

  • 1、# tty(查看当前TTY)
    /dev/tty1
  • 2、#echo “test tty0” > /dev/tty0
    test tty0

5、其它类型

Linux系统中还针对很多不同的字符设备存在有很多其它种类的终端设备特殊文件。

例如针对ISDN设备的/dev/ttyIn终端设备等。这里不再赘述。


FAQ: 终端和控制台

Q:/dev/console 是什么?

A:/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。目前只有在单用户模式下,才允许用户登录控制台。


Q:/dev/tty是什么?

A:tty设备包括虚拟控制台,串口以及伪终端设备。/dev/tty代表当前tty设备,在当前的终端中输入 echo “hello” > /dev/tty ,都会直接显示在当前的终端中。


Q:/dev/ttyS*是什么?

A:/dev/ttyS*是串行终端设备。


Q:/dev/pty*是什么?

A:/dev/pty*即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序。例如,我们在X Window下打开的终端,以及我们在Windows使用telnet 或ssh等方式登录Linux主机,此时均在使用pty设备(准确的说应该pty从设备)。


Q:/dev/tty0与/dev/tty1 …/dev/tty63是什么?它们之间有什么区别?

A:/dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台,例如当使用ALT+F2进行切换时,系统的虚拟控制台为/dev/tty2 ,当前的控制台则指向/dev/tty2


Q:如何确定当前所在的终端(或控制台)?

A:使用tty命令可以确定当前的终端或者控制台。


整理来源?
原文链接:https://blog.csdn.net/tuyerv/article/details/103090554

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168477.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 下午7:16
下一篇 2022年8月9日 下午7:16


相关推荐

  • PL/SQL连接oracle数据库

    PL/SQL连接oracle数据库

    2021年12月3日
    57
  • 编码UI测试

    编码UI测试转自 MSDN 使用 UI 自动化验证代码 VisualStudio 其他版本 1 共 1 对本文的评价是有帮助 nbsp nbsp 评价此主题驱动器通过其用户界面 UI 的应用程序的自动化的测试称为编码的 UI 测试的 nbsp CUITs nbsp 这些测试包括用户界面控件的功能测试 nbsp 它们使您可以验证整个应用程序 包

    2026年3月17日
    2
  • Linux系统安装Cache数据库配置环境

    Linux系统安装Cache数据库配置环境1 Cach 介绍 nbsp 官网 https www intersystems com 开发者社区 https community intersystems com nbsp nbsp gt gt nbsp download nbsp Cach 安装指南 https docs intersystems com latest csp docbook DocBook UI Page cls KEY G

    2025年11月8日
    6
  • 写给夏燕第十一个男人「建议收藏」

    写给夏燕第十一个男人「建议收藏」悲哀,(李旧)是她第十一个男人。她想要什么呢???很多男人吗?很多是多少?我是她第十个男人,我原理她了:“说自己以前走的路不可能回头了,叫我不要在过问她以前的事了”。过也两个月后,可还死不改心,还有多少男人被她骗呢?   夏燕(安徽宿松人) 她电话13764996496 15300910532 13917482046   过年回家时,我和夏燕(我第一个女人)认识我不到24小时,就和她发生过关系,还

    2026年1月19日
    5
  • 为什么不建议把数据库部署在 Docker 容器内?

    原文:https://www.toutiao.com/i6805798581971190276/ 近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docke…

    2021年6月22日
    98
  • 使用c++SFML制作月圆之夜总集篇[通俗易懂]

    使用c++SFML制作月圆之夜总集篇[通俗易懂]写在开头重新以时间线的形式整理一下去年使用c++的SFML库制作月圆之夜(游戏程序设计大作业)的开发过程,括号里面是新的补充以及对一年前自己的吐槽因为是在大二转专业后做首次接触游戏开发后才做的,当时c++学习得并不好,所以代码很乱很糟糕,许多思路也不是很清晰,完全是摸爬滚打混过来的,最后也有很多bug,不过还是一次很有收获的经历当时也尝试着学习用游戏引擎做游戏,还觉得游戏引擎太难用了,现在想想游戏引擎是真的方便,真香2020年4月6日昨天做完扫雷后,思考了一下游戏程序设计的课程设计应该做什么。虽然

    2025年7月1日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号