はじめに
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
今気になっているのはtty
とpts
なのでそれについてフォーカスすると
こちらの記事の意味がわかりやすい
→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)に対してなにか行ってみます
- こんなイメージ
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
まとめ
わかったはわかったけど、ふとしたときに改めて説明して?って言われたら忘れそうですね(><)
また、引用したり抜粋したり自分なりの言葉でも理解するようにしてみましたが
間違ってたらツッコミお願いします!