ttyとptsの違い

psコマンドのTTYの行では、以下のようにttyやptsが表示される。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2542  0.0  0.0   3816   496 tty1     Ss+  10:23   0:00 /sbin/mingetty
root      3176  0.0  0.3  66120  1596 pts/1    Ss   10:24   0:00 -bash
root      3206  0.0  0.1  65648  1012 pts/1    R+   10:24   0:00 ps aux

これらは、PCと接続している入出力用の端末を指している。
ptsはsshなどの仮想端末であり、ttyは実端末を意味している。

root@pide-FRONTIERDT:/dev/cpu# ls /dev/tty*
/dev/tty    /dev/tty23  /dev/tty39  /dev/tty54   /dev/ttyS11  /dev/ttyS27
/dev/tty0   /dev/tty24  /dev/tty4   /dev/tty55   /dev/ttyS12  /dev/ttyS28
/dev/tty1   /dev/tty25  /dev/tty40  /dev/tty56   /dev/ttyS13  /dev/ttyS29
/dev/tty10  /dev/tty26  /dev/tty41  /dev/tty57   /dev/ttyS14  /dev/ttyS3
/dev/tty11  /dev/tty27  /dev/tty42  /dev/tty58   /dev/ttyS15  /dev/ttyS30
/dev/tty12  /dev/tty28  /dev/tty43  /dev/tty59   /dev/ttyS16  /dev/ttyS31
/dev/tty13  /dev/tty29  /dev/tty44  /dev/tty6    /dev/ttyS17  /dev/ttyS4
/dev/tty14  /dev/tty3   /dev/tty45  /dev/tty60   /dev/ttyS18  /dev/ttyS5
/dev/tty15  /dev/tty30  /dev/tty46  /dev/tty61   /dev/ttyS19  /dev/ttyS6
/dev/tty16  /dev/tty31  /dev/tty47  /dev/tty62   /dev/ttyS2   /dev/ttyS7
/dev/tty17  /dev/tty32  /dev/tty48  /dev/tty63   /dev/ttyS20  /dev/ttyS8
/dev/tty18  /dev/tty33  /dev/tty49  /dev/tty7    /dev/ttyS21  /dev/ttyS9
/dev/tty19  /dev/tty34  /dev/tty5   /dev/tty8    /dev/ttyS22  /dev/ttyprintk
/dev/tty2   /dev/tty35  /dev/tty50  /dev/tty9    /dev/ttyS23
/dev/tty20  /dev/tty36  /dev/tty51  /dev/ttyS0   /dev/ttyS24
/dev/tty21  /dev/tty37  /dev/tty52  /dev/ttyS1   /dev/ttyS25
/dev/tty22  /dev/tty38  /dev/tty53  /dev/ttyS10  /dev/ttyS26
root@pide-FRONTIERDT:/dev/cpu# ls /dev/pts/
0  1  2  5  6  ptmx
root@pide-FRONTIERDT:/dev/cpu#

のように/dev以下に確かにttyおよびptsに関するデバイスファイルが存在する。

tty(実端末)に関して

root      2542  0.0  0.0   3816   496 tty1     Ss+  10:23   0:00 /sbin/mingetty
root      2543  0.0  0.0   3816   500 tty2     Ss+  10:23   0:00 /sbin/mingetty
root      2544  0.0  0.0   3816   496 tty3     Ss+  10:23   0:00 /sbin/mingetty
root      2545  0.0  0.0   3816   496 tty4     Ss+  10:23   0:00 /sbin/mingetty
root      2546  0.0  0.0   3816   500 tty5     Ss+  10:23   0:00 /sbin/mingetty
root      2554  0.0  0.0   3816   496 tty6     Ss+  10:23   0:00 /sbin/mingetty
root      2594  2.8  2.1  90620 10844 tty7     Ss+  10:23   0:01 /usr/bin/Xorg :

自分の環境では、ユーザ認証用のminegettyやXwindows用のXortがttyを利用していた。
いずれも入出力用の実端末を用いるので納得。

pts(仮想端末)に関して

Teraterm越しにsshで接続した状態では、

[root@new-host ~]# tty
/dev/pts/1

のようにして、現在の端末を表示できる。確かに仮想端末のptsとして認識されたいた。
この状態で、

echo hoge >/dev/pts/2

を実行すると、/dev/pts/2の端末上に急に

[root@new-host ~]# hoge

と出力される。

VNCで接続した場合は、

root      3339  0.0  3.5  60936 18144 pts/2    S    10:46   0:00 Xvnc :1 -desktop new-host:1 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5901 -pn

のように表示された。VNC経由でのGUI画面の表示端末は実端末のttyではなく、仮想端末のptsとして認識されていた。