目录

  • Linux 终端概念和类型的理解
    • 查询正在使用的终端命令
      • 可以使用 `tty` 查看当前所在的终端
      • 查看当前连接计算机的终端设备
      • 查看当前正在连接的终端设备和正在使用的程序
    • 终端的概念
    • Linux 终端类型
      • 本地终端
      • 串口终端
      • 伪终端

Linux 终端概念和类型的理解

接触Linux有一段时间,但是对终端一直没有很好地理解,近日花费一些时间进行学习和理解,总结如下。

查询正在使用的终端命令

可以使用 tty 查看当前所在的终端

[root@CentOS8 ~]# tty
/dev/pts/0

查看当前连接计算机的终端设备

[root@CentOS8 ~]# who
root      tty1         2022-10-02 11:59
root      pts/0        2022-10-02 12:00 (10.0.0.1)
root      pts/1        2022-10-02 12:28 (10.0.0.1)
root      tty3         2022-10-02 12:54
root      tty2         2022-10-02 12:54
root      tty6         2022-10-02 13:04

查看当前正在连接的终端设备和正在使用的程序

[root@CentOS8 ~]# w13:07:47 up  1:08,  6 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                11:59   13:23   0.15s  0.03s -bash
root     pts/0    10.0.0.1         12:00    1.00s  0.03s  0.00s w
root     pts/1    10.0.0.1         12:28   38:41   0.07s  0.07s -bash
root     tty3     -                12:54   13:38   0.04s  0.02s -bash
root     tty2     -                12:54    3:37   0.06s  0.02s -bash
root     tty6     -                13:04    2:34   0.04s  0.02s -bash

终端的概念

要理解终端这个概念,最好从计算机发展历史来理解。最初的计算机是非常大的,要占据三个车间,有一个操作台进行控制,总体而言,需要有两个电缆连接计算机,一根用于向计算机发送指令,另一根用于接收计算机的输出,这个具有输入和输出的一套工具就是终端。开始时只支持单用户单任务,后来开发出多用户多任务分时系统,一台计算机可以连接多个终端,这时需要进行登录认证,一个用户绑定一个终端。因此,所谓终端就是与计算机主机连接的输入输出的一套设备。

tty 全程是 TeleTypewriter,也即是电传打字机。它通过两根电缆连接计算机,一根用于向计算机发送指令,另一根用于接收计算机的输出,输出结果是打印在纸上的。由于历史原因,Linux 保留了 tty,上述的输入和输出两个电缆,可以简单地理解为键盘输入和显卡输出。

Linux 终端类型

终端的类型是根据与计算机主机连接的方式来进行分类的。

按照是否与计算机主机进行物理连接,可以分为:物理终端和伪终端。

  • 与计算机主机进行物理连接的方式有两种:即一种是使用VGA连接显示器,使用PS/2或USB连接键盘,这样的一套显示器/键盘组合就是一个本地终端,我们家中的个人电脑就是这种类型。另一种是通过串口线把主机与另外一台有显示器和键盘的主机相连接,通过运行一个终端模拟程序,使这台有终端的主机的显示器和键盘成为远程主机的输入和输出设备。

  • 通过互联网 TCP/IP 协议连接的输入和输出设备组合就是伪终端。例如,使用SSH、Telnet连接的。

本地终端

在Linux中,通过查询 /dev 目录可以看到有多达64个本地物理终端,目前我不知道为什么有怎么多个,如何使用。

[root@CentOS8 ~]# ls /dev/tty*
/dev/tty    /dev/tty20  /dev/tty33  /dev/tty46  /dev/tty59
/dev/tty0   /dev/tty21  /dev/tty34  /dev/tty47  /dev/tty6
/dev/tty1   /dev/tty22  /dev/tty35  /dev/tty48  /dev/tty60
/dev/tty10  /dev/tty23  /dev/tty36  /dev/tty49  /dev/tty61
/dev/tty11  /dev/tty24  /dev/tty37  /dev/tty5   /dev/tty62
/dev/tty12  /dev/tty25  /dev/tty38  /dev/tty50  /dev/tty63
/dev/tty13  /dev/tty26  /dev/tty39  /dev/tty51  /dev/tty7
/dev/tty14  /dev/tty27  /dev/tty4   /dev/tty52  /dev/tty8
/dev/tty15  /dev/tty28  /dev/tty40  /dev/tty53  /dev/tty9
/dev/tty16  /dev/tty29  /dev/tty41  /dev/tty54  /dev/ttyS0
/dev/tty17  /dev/tty3   /dev/tty42  /dev/tty55  /dev/ttyS1
/dev/tty18  /dev/tty30  /dev/tty43  /dev/tty56  /dev/ttyS2
/dev/tty19  /dev/tty31  /dev/tty44  /dev/tty57  /dev/ttyS3
/dev/tty2   /dev/tty32  /dev/tty45  /dev/tty58# 备注以上包含了四个 ttyS# 终端

在windows10上安装 vmware 虚拟机软件,然后在虚拟机上安装 CentOS 8 为例,如果直接在虚拟机上登录,这是使用 tty 可以查询到当前正在使用的终端是什么。

[root@CentOS8 ~]# tty
/dev/tty1

通过组合键:ctrl+alt+F1 ~ ctrl+alt+F6,可以产生6个本地终端。

例如,ctrl+alt+F2,会出现登录状态,登录后

[root@CentOS8 ~]# tty
/dev/tty2

那么,如果你登录了多个本地终端,最终只能出现在一个终端中,这个正在使用的终端,就是焦点终端。这个焦点终端会被内核记录为全局变量,只要有键盘输入,就会把输入的字符交给焦点终端。/dev/console 就是那个全局变量。

[root@CentOS8 ~]# echo hello > /dev/console
hello# 这个输出信息就会出现在焦点终端上

系统中还有一个全局变量,代表所有的终端,即 /dev/tty。

[root@CentOS8 ~]# echo hello > /dev/tty
hello# 这个全局变量在伪终端还是本地终端上都能代表

串口终端

这是通过主机上的串口连接出来的终端,从前面的查询可知,表示为在CentOS6~8中 /dev/ttyS0 ~ /dev/ttyS3,在Ubuntu22.04中到/dev/ttyS0 ~ /dev/ttyS31。我这里没有这种设备,无法实现。

伪终端

如果主机是一台服务器,一般来说,不会使用物理终端来连接,特别外网服务器,可能远在天边,只能使用伪终端了。伪终端是通过网络连接的,我们知道网络连接是分层的,上层只是调用接口,而不管下层如何实现这个功能。因此可以使用程序模拟虚拟的终端设备,只需实现它的 write 和 read 等回调即可。对于物理连接的显示器而言,write 其实就是刷新显存,对于伪终端而言,write 是将数据写入到一个用户态的程序中(例如,SSH中)。

在windows 10中,安装 xshell 等软件就可以进行网络连接到Vmware中的CentOS 8 系统中了。

pty(pseudo-tty 伪终端),是 Linux 设计出一对虚拟设备: ptmx (pseudo-terminal master,主伪终端),pts (pseudo-terminal slave 从伪终端) ,即 /dev/ptmx 和 /dev/pts/#(# 代表1,2, 3,…)。简单来说,当有SSH客户端连接后,sshd 会 fork 一个进程,并在子进程中打开一个 /dev/pts/1(或 2, 3, 4, …)的设备,然后与 sshd进程的 /dev/ptmx 配对,这样在 ptmx 和pts之间构成了一条管道,数据就可以写入到sshd中,然后通过网络发送 ssh 客户端。

# 这是登录Ubuntu桌面版后右击在桌面进入终端后
xxx@Ubutu:~$ tty
/dev/pts/0# 如果是非桌面登录后
xxx@Ubutu:~$ tty
/dev/tty1

主要参考
彻底理解Linux的各种终端类型以及概念

Linux 终端概念和类型的理解相关推荐

  1. linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国

    众所周知,在 Linux 中一切皆为文件,包括硬盘和显卡等.在 Linux 中导航时,大部分的文件都是普通文件和目录文件.但是也有其他的类型,对应于 5 类不同的作用.因此,理解 Linux 中的文件 ...

  2. 深入理解Linux进程概念

    Linux进程概念 冯·诺依曼体系结构: 冯诺依曼体系结构作为现代计算机硬件体系结构,规定了现代计算机应该具有哪些硬件单元 输入设备  :键盘,鼠标,图像采集设备  ,声音采集设备 输出设备:显示器 ...

  3. linux下进程的模式和类型如何,Linux——基础概念和命令

    Linux文件存储结构: /  :(根目录)根目录下的存储结构 /bin :命令对应的可执行文件 /home:(普通用户的家目录)-> username(多个用户) /boot: 系统开机使用的 ...

  4. linux 终端 tty 简介

    TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代.不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TT ...

  5. Linux 终端(TTY)

    TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代.不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TT ...

  6. Linux终端和Line discipline图解

    昨晚的圣诞晚会嗨爆全场,灯光音响很棒,然而最终还是没有中奖-回到家已经午夜,喝了一瓶真露想再写篇关于终端的随笔以解惑,但不知不觉就困了,于是就睡了,早上本来想早起,自然醒来已经七点半了,醒来并没有意识 ...

  7. Linux终端一直输出login,Linux tty pty console区别

    基本概念: 1. tty(终端设备的统称): tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被 ...

  8. 【Linux】四、Linux 进程概念(上篇)

    目录 前言 一.冯诺依曼体系结构 1.1 冯诺依曼体系结构是什么 1.2 冯诺依曼体系结构为什么这么设计 1.2.1 思考 1.2.2 了解一下计算机的存储分级 1.2.3 解释 1.3 往下要明确几 ...

  9. 嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

    嵌入式 Linux入 门第二课, linux 文件系统.文件类型及权限管理. ...... 矜辰所致 目录 前言 一.Linux 文件属性 1.1 Linux 文件类型 1.2 Linux 文件权限及 ...

最新文章

  1. 将整数拆分为2的幂次方
  2. 开源监控系统 Prometheus 入门
  3. 趣谈网络协议笔记-二(第十二讲)
  4. mysql删除重复文章标题_MySQL中查询、删除重复记录的方法大全
  5. Php和Mysql乱码问题
  6. [USACO1.2]回文平方数 Palindromic Squares
  7. NC88-寻找第K大的数
  8. 东南大学数字信号处理实验_数字与信号处理实验1 离散时间信号分析
  9. Django 项目一补充
  10. html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
  11. 学python lesson3
  12. ok6410开发板移植DirectFB手记
  13. kettle 教程(一):简介及入门
  14. 「堡垒之夜」母公司Epic元宇宙蓝图:颠覆Facebook的社交媒体,拆除苹果的高墙花园...
  15. 【Linux-网桥原理分析】
  16. C++多线程匿名聊天室(控制台)
  17. obsolete or deprecated parameter(s) specified for RDBMS instanc
  18. 真香!有了这个搜索大法,GitHub玩到飞起来!
  19. python分行输入_python换行输入
  20. ARM开发板哪家的好,怎么选择开发板

热门文章

  1. BuildMSI.vbs 生成MSI中间件 并通过连接生成MSI包
  2. 志宇-Spring源码分析
  3. 西门子S7-200SMART控制步进电机(四)
  4. 正弦波发生器(4-99Hz,AD转换)
  5. Xposed Java反射大法
  6. 企业如何通过会员积分营销留住客户?
  7. [Android手机]教程:修改安卓手机…
  8. 叛乱沙漠风暴不显示服务器,叛乱沙漠风暴进服务器闪退怎么回事_叛乱沙漠风暴闪退解决方法...
  9. 微软服务器开启锐速,[Windows] 锐速 serverSpeeder 开心版
  10. 乐蛙Lewa OS5卡刷后卡在开机动画进不了桌面的原因