Linux命令学习手册-tty
tty [选项]...功能
打印连接到标准输入的终端的文件名。
形容
命令项:
- -s, –silent, –quiet: 什么也不打印,只是返回退出状态码。
- –help: 打印帮助信息。
- –version: 打印版本信息并退出。
返回的状态码:
- 0 表示标准输入是一个终端。
- 1 表示标准输入不是一个终端。
- 2 表示给定的参数是不正确的参数。
- 3 表示发生了写错误。
举例
查看当前的标准终端文件形容符号
[quietheart@lv-k etc]$ tty /dev/pts/6这里,输入 tty 之后,输出 /dev/pts/6 就是当前连接的终端对应的文件形容符号,我们可以通过向这个文件,这样会看到当前终端会输出我们写入的数据,例如:
[quietheart@lv-k etc]$ echo "mytest" >/dev/pts/6 mytest可见,向 /dev/pts/6 文件写入的内容,直接显示到我们的终端上面了。假如我在机器上面开了多个终端,而后我在别的终端中输入上面的 echo 命令,那么将会看到对应 /dev/pts/6 的终端上面会显示相应的字符了。
运行 tty 什么也不输出,而后查看其退出码
[quietheart@lv-k etc]$ tty -s [quietheart@lv-k etc]$ echo $? 0这里,使用 shell 的命令 echo $? 来显示上一条命令的退出状态码。
状态码的含义如下:
- 0 表示标准输入是一个终端。
- 1 表示标准输入不是一个终端。
- 2 表示给定的参数是不正确的参数。
- 3 表示发生了写错误。
其它
基本概念
tty(终端设施的统称):tty一词源于Teletypes,或者者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设施,它有多种类型,通常使用tty来简称各种类型的终端设施。pty(虚拟终端): 假如我们远程telnet到主机或者使用xterm时,也需要一个终端交互,这就是虚拟终端pty(pseudo-tty) 。pts/ptmx(pts/ptmx结合使用,进而实现pty):pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。
Linux终端
在Linux系统的设施特殊文件目录 /dev/ 下,终端特殊设施文件一般有以下几种:
串行端口终端( /dev/ttySn )
串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设施。计算机把每个串行端口都看作是一个字符设施。有段时间这些串行端口设施通常被称为终端设施,由于那时它的最大用途就是用来连接终端。这些串行端口所对应的设施名称是 /dev/tts/0 (或者 /dev/ttyS0 ), /dev/tts/1 (或者 /dev/ttyS1 )等,设施号分别是 (4,0), (4,1) 等,分别对应于DOS系统下的 COM1 、 COM2 等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上就可。例如,在命令行提醒符下键入: echo test > /dev/ttyS1 会把单词 test 发送到连接在 ttyS1 ( COM2 )端口的设施上。可接串口来试验。
伪终端( /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 程序就通过“伪终端”进行通信。通过使用适当的软件,即可以把两个甚至多个伪终端设施连接到同一个物理串行端口上。
在使用设施文件系统 (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
终端总结
对上述提到的Linux终端、串行终端、虚拟终端、伪终端概念进行总结如下:
- 终端:输入和输出设施(键盘+显示器)
- 虚拟终端:一台PC只有一套键盘和显示器,也就只有一套终端设施,但是可以通过
Ctrl+Alt+F1~Ctrl+Alt+F6切换到字符终端,相当于有6套虚拟的终端设施,他们共用一套物理终端设施/dev/tty1~/dev/tty6 - 串行终端:与机器的串口对应,每一个串口对应的一个串行终端,串口对应的是物理终端
- 伪终端:虚拟终端和串行终端的数目是有限的,但是,网络端口和图形端窗口的数目确不受限制,这是由于它们是通过伪终端实现的。
- 控制终端:这是一个逻辑概念,即可使用户正在控制的终端,可以使串行终端,虚拟终端和伪终端
- 控制台终端:控制台终端可以认为是一个PC对应的一套键盘和显示器,所有虚拟终端是对应的都是同一控制台终端。
实践
以下过程是在ubuntu上面的实践结果。
1、虚拟终端 /dev/tty* 和伪终端 /dev/pts/*
假设5个 xterm 终端的话,会发现 /dev 下面有一个 /dev/ptmx / 和5个 /dev/pts/*
而假如用”[Ctrl][Alt]F1″进入一个终端的话,就会发现 /dev 下面多出一个 /dev/tty1
2、查看终端的方法
使用命令 tty 可以查看当前对应的终端,命令 ps -ax 可以查看所有程序以及对应的终端。通过这个命令,发现假如多开一个 screen 程序,或者者用 telnet 登陆之后,那么机器上面就会多一个 /dev/pts/* 。可知,一般伪终端客户模拟终端程序。
3、向指定终端发送信息
假如运行 echo hello >/dev/tty2 , 那么 [Ctrl][Alt]F2 打开 /dev/tty2 对应的终端,就会发现刚才发送的 hello 了。
注意,假如发送 echo -n ls >/dev/tty2 那么会显示 ls ,但是回车之后,并没有执行 ls 。可见: ttyN 是代表linux的纯命令行终端,而写到这个终端的字符串只是做为这个终端的输出,并没有当做终端的输入解决。
假如运行 echo hello >/dev/pts/2 , 那么,即可以在 xterm 的第二个窗口看到 hello 了。可知, /dev/pts/n 是Xwindows模式下的伪终端.
参考资料
- http://blog.csdn.net/freeman1975/archive/2009/10/19/4696781.aspx
- https://blog.csdn.net/LV_YONG/article/details/80632148
info ttyman tty
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Linux命令学习手册-tty