Linux中tty、pty、pts的概念区别

2023-05-16

http://blog.sina.com.cn/s/blog_638ac15c01012e0v.html

基本概念:
1> tty(终端设备的统称):
tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。
终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。
2> pty(虚拟终端):
但是假如我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)
3> pts/ptmx(pts/ptmx结合使用,进而实现pty):
pts(pseudo-terminal slave)是pty的实现方法,和ptmx(pseudo-terminal master)配合使用实现pty。

Linux终端:
在Linux系统的设备特别文档目录/dev/下,终端特别设备文档一般有以下几种:
1、串行端口终端(/dev/ttySn)
串行端口终端(Serial PortTerminal)是使用电脑串行端口连接的终端设备。电脑把每个串行端口都看作是个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为
那时他的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0),
/dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0),
(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,能够在命令行上把标准输出重定向到这些特别文档名上即可。例如,
在命令行提示符下键入:echo test >
/dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。
2、伪终端(/dev/pty/)
伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。例如/dev/ptyp3和/dev/ttyp3(或在设备文档系统中分别是/dev/pty/m3和/dev/pty/s3)。他们和实际物理设备并不直接相关。假如一个程式把ptyp3(master设备)看作是个串行端口设备,则他对该端口的读/写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3则是另一个程式用于读写操作的逻辑设备。这样,两个程式就能够通过这种逻辑设备进行互相交流,而其中一个使用ttyp3的程式则认为自己正在和一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于ttyp3(s3),任何设计成使用一个串行端口设备的程式都能够使用该逻辑设备。但对于使用ptyp3的程式,则需要专门设计来使用ptyp3(m3)逻辑设备。
例如,假如某人在网上使用telnet程式连接到您的电脑上,则telnet程式就可能会开始连接到设备ptyp2(m2)上(一个伪终端端口上)。此时一个getty程式就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给getty程式,而getty程式就会通过s2、m2和telnet程式往网络上返回”login:”字符串信息。这样,登录程式和telnet程式就通过“伪终端”进行通信。通过使用适当的软件,就能够把两个甚至多个伪终端设备连接到同一个物理串行端口上。
在使用设备文档系统(devicefilesystem)之前,为了得到大量的伪终端设备特别文档,使用了比较复杂的文档名命名方式。因为只存在16个ttyp(ttyp0―ttypf)的设备文档,为了得到更多的逻辑设备对,就使用了象q、r、s等字符来代替p。例如,ttys8和ptys8就是个伪终端设备对。但是这种命名方式现在仍然在RedHat等Linux系统中使用着。但Linux系统上的Unix98并不使用上述方法,而使用了”ptymaster”方式,例如/dev/ptm3。他的对应端则会被自动地创建成/dev/pts/3。这样就能够在需要时提供一个pty伪终端。目录/dev/pts是个类型为devpts的文档系统,并且能够在被加载文档系统列表中看到。虽然“文档”/dev/pts/3看上去是设备文档系统中的一项,但其实他完全是一种不同的文档系统。即: TELNET ---> TTYP3(S3: slave) ---> PTYP3(M3: master) ---> GETTY
=========================================================================
实验:
1、在X下打开一个或N个终端窗口
2、#ls /dev/pt*
3、关闭这个X下的终端窗口,再次运行;比较两次输出信息就明白了。
在RHEL4环境下: 输出为/dev/ptmx /dev/pts/1存在一(master)对多(slave)的情况
=========================================================================
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等上面去。tty1tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。

因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。您能够登录到不同的虚拟终端上去,因而能够让系统同时有几个不同的会话期存在。只有系统或终极用户root能够向/dev/tty0进行写操作 即下例:
1、# tty(查看当前TTY)
/dev/tty1
2、#echo "test tty0" > /dev/tty0
test tty0
5 虚拟终端(/dev/pts/n)
在Xwindows模式下的伪终端.
6 其他类型
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命令能够确定当前的终端或控制台。
Q:/dev/console是到/dev/tty0的符号链接吗?
A:
现在的大多数文本中都称/dev/console是到/dev/tty0的链接(包括《Linux内核源代码情景分析》),但是这样说是不确切的。根据内
核文档,在2.1.71之前,/dev/console根据不同系统的设定能够链接到/dev/tty0或其他tty*上,在2.1.71版本之后则完
全由内核控制。现在,只有在单用户模式下能够登录/dev/console(能够在单用户模式下输入tty命令进行确认)。
Q:/dev/tty0和/dev/fb*有什么区分?
A: 在Framebuffer设备没有启用的系统中,能够使用/dev/tty0访问显卡。
Q:关于终端和控制台的区分能够参考哪些文本
A:
能够参考内核文档中的 Documents/devices.txt 中关于”TERMINAL DEVICES”
的章节。另外,《Linux内核源代码情景分析》的8.7节 连同《Operating Systems : Design and
Implementation》中的3.9节(第3版中为3.8节)都对终端设备的概念和历史做了很好的介绍。另外在《Modern
Operating system》中也有对终端设备的介绍,由于和《Operating Systems : Design and
Implementation》的作者相同,所以文本内容也大致相同。需要注意的一点是《Operating Systems : Design
and Implementation》中将终端设备分为3类,而《Modern Operating
system》将终端硬件设备分为2类,差别在于前者将 X Terminal作为一个类别。
PS:


只有2410的2.6才叫ttySAC0,9200等的还是叫ttyS0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中tty、pty、pts的概念区别 的相关文章

  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用

随机推荐

  • Ubuntu 下 触摸板不能使用 解决方法

    之前好不容易才安装好双系统 xff0c 今天在Ubuntun下安装东西时 xff0c 电脑没电 xff0c 自己关机了 xff0c 重启后 xff0c 触摸板就不能使用了 xff0c 参看了网上 http blog sina com cn
  • 如何安装touch 1.0.1

    如何安装touch 1 0 1 如何安装touch 1 0 1 如何安装touch 1 0 1 今天需要安装 touch 1 0 1 可能是老版本了吧 xff0c 直接使用pip install touch 61 61 1 0 1不能安装成
  • 立创开源|用立创EDA自制ST-Link V2.1调试器

    分享一个2年前在立创开源硬件平台上开源的项目 xff0c 该项目目前是平台上最热门的ST LINK V2 1项目 xff0c 也是点赞数最多的一个ST LINK相关的项目 xff0c 以下是该项目的累积数据 项目作者 xff1a 攻城狮晨哲
  • 一文带你快速理解FreeRTOS代码规范

    关注 星标嵌入式客栈 xff0c 精彩及时送达 导读 遇到些朋友感觉FreeRTOS内核代码看起来很不习惯 xff0c 不习惯其编码风格 xff0c 本文就来梳理一下其代码规范 xff0c 便于提高阅读其代码的效率 代码基于FreeRTOS
  • 校园网经常掉线解决

    我们要访问一个网站 xff0c 通常是在游览器里输入这个网站的网址 xff0c 然后回车 xff0c 这个时候 xff0c DNS 服务器会自动把它解析成 IP 地址 xff0c 实际上我们是通过 IP 来访问网站的 xff0c 网址只不过
  • RHEL7.4 vnc 黑屏问题

    https access redhat com solutions 3167971 环境 Red Hat Enterprise Linux 7 4tigervnc server 1 8 0 1 el7gnome shell 3 22 3 1
  • CentOS 7 禁止 root 直接登陆 及 修改默认端口

    一 禁止 Root 直接登陆 1 新建登陆用户 useradd tom 添加用户 passwd tom 设置密码 2 修改 sshd 配置文件 vi etc ssh sshd config 修改内容 PermitRootLogin no 改
  • 子网划分总结和技巧

    VLSM可变子网掩码对应CIDR值 下面是C类地址的划分技巧 1 确定划分子网数 子网数 61 2 n xff0c n代表子网掩码往右移动的位数 例如 xff1a 要划分2个子网 xff0c 子网掩码需要往右移动1位 xff0c 2 1 6
  • ubuntu虚拟机可以ping通主机但ssh连不上

    其它配置都正确后 xff0c 命令行执行此命令 xff1a service sshd start xff1b
  • android 安卓手机如何投屏到显示器

    这几天有个需求 xff0c 可以手机投屏到显示器上 xff0c 经过一番研究 xff0c 手机连接电脑再投屏是可以的 xff0c but xff0c 要想直接手机插一根线连接显示器 xff0c 只有支持USB3 0及以上的才可以 xff0c
  • sed之两个文件共有特征行的合并输出

    cat a txt 01 12510101 4001 02 12310001 4002 03 12550101 4003 04 12610001 4004 05 12810001 4005 06 12310001 4006 07 12710
  • Mac中有g++/clang,但引用报错:xcrun: error: invalid active developer path (/Library/Developer/Command...

    问题 xff1a 在Mac上安装fasttext的时候 xff0c 发现g 43 43 或者clang都不能直接引用 于是在终端用which检查了一下 xff0c 发现都是存在于 usr bin 目录中的 which g span clas
  • 利用XRDP远程登陆linux系统

    http linux chinaunix net bbs viewthread php tid 61 1149869 一般情况下我们用ssh客户端远程登陆inux系统 xff0c 至于图形界面下的linux 远程登陆工具 xff0c 我们一
  • BOND 动态链路聚合 lacp配置及相关问题

    内容基本都是参考的 xff0c 哪里有雷同或者错的地方 xff0c 请批评指正 针对802 3ad模式的业务分析 xff1a 场景 xff1a 两个千兆网口 xff0c 聚合成bond0 动态链路聚合抓取数据包格式分析 xff1a 后台bo
  • VNC使用介绍

    VNC在内部网络中经常被大家用到 xff0c 该工具同时具备远程操作和传输文件的双重功能 xff0c 而且速度也是很快的 xff0c xff08 低版本不具备文件传输功能 xff09 深受大众喜爱 xff0c 今天就简单写下在使用VNC的过
  • 清除chrome浏览器缓存

    之前有写过设置缓存 本文解决清除html缓存 如何才能清除缓存呢 xff1f 一下是几个清除浏览器缓存的方法 xff1a 方法1 chrome浏览器地址 xff1a chrome settings clearBrowserData xff1
  • Iterator 接口

    具有原生的Iterator 接口的数据结构有 Array Map Set String TypedArray arguments对象 NodeList对象 面我们来实现将class 和 object 也变成迭代的对象 实现的关键就是 Sym
  • 容器和LXC简单命令

    容器和LXC简单命令 文章目录 容器和LXC简单命令一 CGroup xff08 控制组 xff09 的功能1 cgroup xff08 容器控制组 xff09 1 1 功能 xff1a 1 2 具体功能 xff1a 1 3 控制组可以限制
  • Podman设置容器开机自启

    Podman设置容器开机自启 1 podman管理员容器开机自启动 span class token number 1 span span class token operator span span class token operato
  • Linux中tty、pty、pts的概念区别

    http blog sina com cn s blog 638ac15c01012e0v html 基本概念 xff1a 1 gt tty 终端设备的统称 tty一词源于Teletypes xff0c 或teletypewriters x