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系统下的 COM1COM2 等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入: echo test > /dev/ttyS1 会把单词 test 发送到连接在 ttyS1 ( COM2 )端口的设备上。可接串口来实验。

伪终端( /dev/pty/ )

伪终端(Pseudo Terminal)是成对的逻辑终端设备(即 masterslave 设备, 对 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 从远端获取了一个字符时,该字符就会通过 m2s2 传递给 getty 程序,而 getty 程序就会通过 s2m2telnet 程序往网络上返回” login: ”字符串信息。这样,登录程序与 telnet 程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。

在使用设备文件系统 (device filesystem)之前,为了得到大量的伪终端设备特殊文件,使用了比较复杂的文件名命名方式。因为只存在16个 ttyp ( ttyp0ttypf ) 的设备文件,为了得到更多的逻辑设备对,就使用了象 qrs 等字符来代替 p 。例如, ttys8ptys8 就是一个伪终端设备对。不过这种命名方式目前仍然在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模式下的伪终端.

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容