概念:
Terminal終端
輸入命令和顯示系統響應結果的設備,比如vt100, xterm。終端模擬器支持光標移動、字符顯示、複製粘貼等功能。
終端模擬器
模擬終端設備的軟件,常見的有 putty, Gnome Terminal, Konsole, iTerm2
SHELL
是內核的一個殼子,把內核包起來供外部調用,也就是內核提供的功能可以通過shell調用,常見的shell有 bash, zsh, dash
tty(telettype)
電傳打字機,是和內核通信的方式。終端把設備的輸入傳遞給tty,tty 再送給shell,shell給內核執行,結果通過tty返回顯示到屏幕上。
pty(pseudo telettype)
虛擬電傳打字機。由pts和ptm組成。
pts(pty slave)
pty的實現。
ptm(pty master)
pty中的虛擬人,把消息傳給pts。
在Linux中的實現:
查看當前pty:
❯ tty
/dev/pts/3
查看哪些進程打開了這個文件:
❯ lsof /dev/pts/3
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
konsole 1112 user 25u CHR 136,3 0t0 6 /dev/pts/3
zsh 1232 user 0u CHR 136,3 0t0 6 /dev/pts/3
zsh 1232 user 1u CHR 136,3 0t0 6 /dev/pts/3
zsh 1232 user 2u CHR 136,3 0t0 6 /dev/pts/3
zsh 1232 user 10u CHR 136,3 0t0 6 /dev/pts/3
zsh 1264 user 14u CHR 136,3 0t0 6 /dev/pts/3
zsh 1264 user 15u CHR 136,3 0t0 6 /dev/pts/3
zsh 1264 user 16u CHR 136,3 0t0 6 /dev/pts/3
zsh 1527 user 14u CHR 136,3 0t0 6 /dev/pts/3
zsh 1527 user 15u CHR 136,3 0t0 6 /dev/pts/3
zsh 1527 user 16u CHR 136,3 0t0 6 /dev/pts/3
zsh 1529 user 14u CHR 136,3 0t0 6 /dev/pts/3
zsh 1529 user 15u CHR 136,3 0t0 6 /dev/pts/3
zsh 1529 user 16u CHR 136,3 0t0 6 /dev/pts/3
gitstatus 1530 user 14u CHR 136,3 0t0 6 /dev/pts/3
gitstatus 1530 user 15u CHR 136,3 0t0 6 /dev/pts/3
gitstatus 1530 user 16u CHR 136,3 0t0 6 /dev/pts/3
lsof 155259 user 0u CHR 136,3 0t0 6 /dev/pts/3
lsof 155259 user 1u CHR 136,3 0t0 6 /dev/pts/3
lsof 155259 user 2u CHR 136,3 0t0 6 /dev/pts/3
zsh的輸入(0u)輸出(1u)和錯誤(2u)都綁定到tty了,tty的數據數據可以發送到 zsh。
除了zsh之外還有gitstatus和lsof也綁定到tty。
tty會與一個前端進程組(foreground group)綁定,tty中的命令不一定會送到shell中:
❯ echo "ls -l " >/dev/pts/3 # 並沒有執行命令而是直接被tty輸出
ls -l