読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

ttyとptsとptmxとpty

はじめに

psコマンドなんかでも目にすることがあるttyやpts、
なんとなく知ってはいたけど説明できなかったのでメモ
ptyだけなんか違う雰囲気だけどまぁいいか的な。

目にするやつ

psコマンド
# ps axu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1691  0.0  0.0   4064   456 tty1     Ss+   2013   0:00 /sbin/mingetty /dev/tty1
root      1693  0.0  0.0   4064   456 tty2     Ss+   2013   0:00 /sbin/mingetty /dev/tty2
root      1695  0.0  0.0   4064   456 tty3     Ss+   2013   0:00 /sbin/mingetty /dev/tty3
・・・省略・・・
hoge      1818  0.0  0.0 100356  1872 ?        S    May22   0:01 sshd: hoge@pts/40
hoge      1819  0.0  0.0 134832  5236 pts/40   Ss+  May22   0:00 -zsh
wコマンド
# w
 16:45:48 up 154 days, 3 min, 20 users,  load average: 0.21, 0.20, 0.12
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
hoge     pts/1    172.21.65.97     Mon14   24:15m  0.38s  0.28s screen -r 9802.pts-14.is1
piyo     pts/2    172.21.66.125    18Apr14 21:01m  0.07s  0.00s tmux -u
hoge     pts/4    :pts/1:S.0       Wed23   24:15m  2.61s  3.91s SCREEN
hoge     pts/8    :pts/1:S.1       Wed23   29:46m  0.48s  0.48s /bin/zsh
hoge     pts/15   172.21.65.97     Mon19   24:21m  0.72s  0.64s screen
hoge     pts/16   :pts/15:S.0      Mon19   29:59m  0.75s  3.38s SCREEN
foo      pts/23   172.21.65.82     01:51    6:16m  0.07s  0.00s tmux
foo      pts/24   172.21.65.82     Thu10    2:12m  0.07s  0.00s tmux
hoge     pts/17   :pts/15:S.1      Mon19   29:44m  0.62s  0.62s /bin/zsh
hoge     pts/12   :pts/9:S.2       Wed19   29:51m  0.14s  0.14s /bin/zsh
hoge     pts/37   172.21.65.97     Thu12   24:17m  0.16s  0.21s sshd: hoge   [priv]
hoge     pts/40   172.21.65.97     Thu16   23:02m  0.72s  0.72s -zsh
hoge     pts/42   172.21.65.97     Thu17    0.00s  0.56s  0.01s w
hoge     pts/29   172.21.65.97     Thu10   35:10   1.05s  1.04s -zsh
hoge     pts/13   172.21.65.97     Mon14   24:17m  2.64s  2.64s -zsh
hoge     pts/19   :pts/15:S.2      Mon19   29:46m  2.68s  2.12s tail -f access.log
hoge     pts/9    172.21.65.97     Wed18   28:22m  0.56s  0.31s screen
hoge     pts/14   172.21.65.97     Mon16   29:20m  1.38s  0.65s sshd: hoge   [priv]
hoge     pts/10   :pts/9:S.0       Wed19   29:05m  0.29s  0.29s /bin/zsh
hoge     pts/11   :pts/9:S.1       Wed19   28:22m  0.10s  0.10s /bin/zsh

hoge(自分)つなげすぎw

引用で説明

引用でですがそれぞれ説明(というか一部抜粋)

tty

http://ja.wikipedia.org/wiki/Ttyより

ttyとは、標準入出力となっている端末デバイス(制御端末、controlling terminal)の名前を表示するUnix系のコマンドである。元来ttyとはteletypewriter(テレタイプライター)のことを指す。

http://d.hatena.ne.jp/alexei-karamazov/20130512/1368321943より

入出力用の端末で実端末

http://kazmax.zpp.jp/cmd/t/tty.4.htmlより

制御端末
tty - 制御端末
/dev/tty ファイルは、メジャー番号 5、マイナー番号 0 のキャラクター デバイスである。通常、そのモードは 0666、オーナ.グループは root.tty となっている。 プロセスの制御端末が存在する場合、このデバイスファイルはプロセスの制御端末と 同じものを表す。

pts(ptmx)

http://d.hatena.ne.jp/alexei-karamazov/20130512/1368321943より

sshなどの仮想端末

http://kazmax.zpp.jp/cmd/p/pts.4.htmlより

制御端末
ptmx and pts - 擬似端末のマスタとスレーブ
ファイル /dev/ptmx は、メジャーナンバー (major number) 5、 マイナーナンバー (minor number) 2 を持つキャラクタ・ファイルであり、 通常、モードは 0666 で、所有者.グループは root.root である。 このファイルは、擬似端末 (pseudo-terminal) のマスタとスレーブの ペアを作成するために使用される。

pty

http://kazmax.zpp.jp/cmd/p/pty.7.htmlより

pty - 擬似端末インタフェース
擬似端末 (pseudo-terminal) は、双方向通信チャンネルを提供する 仮想キャラクタデバイスのペアである。 チャンネルの一方の端点は マスタ (master) と呼ばれ、もう一方の端点は スレーブ (slave) と呼ばれる。

ttyとpts

今気になっているのはttyptsなのでそれについてフォーカスすると
こちらの記事の意味がわかりやすい
ttyとptsの違い

抜粋するとこんな感じ
項目 説明
tty 接続している実端末
pts 接続している仮想端末(sshとか)
まとめて言うと

ばくっとまとめて言うとこんな感じ?

linuxはデバイス、実端末、仮想端末なんかを全部ファイルとして抽象化して扱っていて
それをデバイススペシャルファイルと呼ぶ。

デバイススペシャルファイルの概念は知っていても
改めて言葉でまとめたり説明する機会ってないから良い勉強になりました

デバイススペシャルファイルについて参考

デバイススペシャルファイル

実際に触れてみる

ttyコマンド

puttyなんかで接続してる場合、 ttyコマンドで自分が接続している仮想端末のデバイスファイルを確認できる

# tty
/dev/pts/42
lastコマンド

とあるサーバにputtyなんかで接続してる場合、 そのサーバに最近ログインしたユーザのリストを表示できる

# last
foo      pts/23       172.21.65.82     Fri May 23 01:51   still logged in
root     pts/43       10.2.21.11       Thu May 22 22:43 - 22:45  (00:01)
hoge     pts/42       172.21.65.97     Thu May 22 17:00   still logged in
hoge     pts/40       172.21.65.97     Thu May 22 16:38   still logged in
root     pts/39       192.168.41.60    Thu May 22 15:58 - 15:58  (00:00)
hoge     pts/37       172.21.65.97     Thu May 22 12:27   still logged in
hoge     pts/29       172.21.65.97     Thu May 22 10:20   still logged in
foo      pts/24       172.21.65.82     Thu May 22 10:11   still logged in
piyo     pts/23       172.21.66.125    Thu May 22 10:08 - 01:00  (14:52)
root     pts/23       10.1.21.21       Thu May 22 10:03 - 10:03  (00:00)
hoge     pts/4        :pts/1:S.0       Wed May 21 23:07   still logged in
hoge     pts/8        :pts/1:S.1       Wed May 21 23:07   still logged in
hoge     pts/12       :pts/9:S.2       Wed May 21 19:14   still logged in
hoge     pts/11       :pts/9:S.1       Wed May 21 19:14   still logged in
hoge     pts/10       :pts/9:S.0       Wed May 21 19:14   still logged in
hoge     pts/9        172.21.65.97     Wed May 21 18:57   still logged in
・・・省略・・・
片方のターミナル(pts)から、もう一方のpts(デバイスファイル)に対して何か行うと?

デバイスファイルなので、ファイル操作をする容量で
片方のターミナルからもう片方のターミナル(pts)に対してなにか行ってみます

  • こんなイメージ

f:id:tweeeety:20141121171844p:plain

ttyコマンドからのptsに対してecho

自分がputtyなんかのターミナルを二つ開いて同じサーバにアクセスしてる場合

ターミナル1
# tty
/dev/pts/40
ターミナル2
# tty
/dev/pts/42
ターミナル1×ターミナル2

ターミナル1からechoするとターミナル2にこんな感じで表示される

  • ターミナル1
# echo woops! > /dev/pts/42
  • ターミナル2
# woops!
ttyコマンドからのptsに対してコマンド実行

echoできるのでコマンドも実行できそうってことでやってみた結果

ターミナル1
# tty
/dev/pts/40
ターミナル2
# tty
/dev/pts/42
ターミナル1×ターミナル2

ターミナル1からechoを使ってバッククォート付きコマンド送ると
ターミナル2にこんな感じで表示される

  • ターミナル1
# echo "`ls -al /home/hoge`" > /dev/pts/42
  • ターミナル2
# 合計 84
drwxr-xr-x   5 hoge  hoge    4096  2月 14 12:07 2014 .
drwxr-xr-x. 19 root   wheel  4096  2月  3 19:30 2014 ..
-rwxrwxr-x   1 hoge  hoge    6148 12月 25 20:31 2013 .DS_Store
-rwxrwxr-x   1 hoge  hoge    4096 12月 25 20:26 2013 ._.DS_Store
drwxr-xr-x   4 hoge  hoge    4096 12月 25 20:34 2013 .plenv
drwxr-xr-x   4 hoge  hoge    4096 12月 25 20:34 2013 .pyenv
drwx------   2 hoge  hoge    4096 12月 25 20:43 2013 .ssh
-rw-------   1 hoge  hoge    7238  2月 14 12:07 2014 .viminfo
-rw-r--r--   1 hoge  hoge   34274 12月 25 20:34 2013 .zcompdump
-rw-------   1 hoge  hoge    4415  1月  9 03:49 2014 .zsh_history

まとめ

わかったはわかったけど、ふとしたときに改めて説明して?って言われたら忘れそうですね(><)

また、引用したり抜粋したり自分なりの言葉でも理解するようにしてみましたが
間違ってたらツッコミお願いします!