linux中的tty和terminal
概念:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通