终端 控制台 TTY shell 虚拟终端 图形界面终端

版权声明:本文为博主原创文章,任何组织或者个人可以在任何媒介上发表或转载我的文章、图片等.且转载后必须注明出处和邮箱,博客地址(https://blog.csdn.net/u011011827),本人邮箱([email protected]) https://blog.csdn.net/u011011827/article/details/79231838
  • 综述
终端分为硬件和软件终端
	硬件终端早就不用了
		硬件终端分类为 VT100 xterm.都是硬件.
	软件终端是模拟的硬件终端,可以模拟  VT100 或者 xterm
      	后来我们就把 VT100 xterm 叫做协议了.
      	VT100 xterm  是用来 传输字符 的 较好的协议,相对于 传输 图形界面的  X ,都是翘楚


早期的 控制台和终端
    很早期,一台主机只有一个控制台.可以有多个终端.
	开机关机的日志,会输出到控制台来,不会输出到终端.
	后来,控制台和终端这种硬件由于时代原因,退伍了,就再也没有硬件的控制台和终端.
    从此以后,控制台和终端就是软件的了.
    注意,显示器不是控制台,也不是终端.目前我们用的键盘也不是控制器,也不是终端.
    硬件终端和控制台是特指的.

控制台和终端的关系
    可以这么说,控制台是一种特殊的终端
    控制台可以显示开关机消息,但是终端不会显示.
-----
下面都是软件终端
  
tty7
	开机时打印的终端也是软件模拟出来的,是模拟终端,同时也是 控制台
tty1-tty6
	开机前半部分 是没有打印信息的,因为那时候他们就不存在,后来被生成了.开始记录开机日志
shell 
	我们常说的 bash zsh fish sh dash fish 都是shell的具体实现

图形界面终端
	每种桌面基本上都会默认使用一种不同的 图形界面终端,这些图形界面终端基于 libX, 后来 fork 了 bash
	这样的软件有 gnome-terminal konsole xterm rxvt kvt nxterm eterm

远程上的终端
	开关机不会显示信息,其他和控制台没有差异

虚拟终端
	tty7 tty1-6 shell 图形界面终端 远程上的终端 都是虚拟终端
	目前的虚拟终端不包括键盘和显示器,虽然是打印到了显示器上,虽然用键盘控制.
	注意:不用显示器也能查看输出,不用键盘也能控制主机
	硬件终端也不包括我们现在常用的键盘和显示器,硬件终端是那个时代特有的东西


  • 历史回溯
很早以前, 只有一个主机,只有一个类似键盘的东西,一个类似显示器的东西,这个类似键盘的东西可以当做控制台,被系统管理员用,这套显示和输入设备被称为 控制台


然后大家都想用(并不是做系统管理员),用 ASR33电传打字机 连接到主机, 这个 ASR33电传打字机 就是 我们所谓的  实体终端,目前可以操作但不可以做一些改变设置的事情.因为不是控制台

而这些实体终端有分类 VT100 xterm 

上面讲的终端是纯硬件的

VT100 xterm  是硬件


后来 我们 想用 电脑 A 连接到 那个 主机 上, 然后就在 电脑A 上 做了个 软件B ,可以通过软件B 实现 之前的 (在实体终端实现的事情)

然后 这个软件就被称为虚拟终端

虚拟终端是软件的,且模拟了实体终端, 如果我们想让他模拟 VT100, 我们就做出来 模拟VT100 的软件
后来,我们做出来了 既能模拟 VT100 和 xterm 的软件


那现在我们有虚拟终端,我们要连上那个主机,所以我们要 选择 模拟哪一种 实体终端?这个取决于 那个主机当前设置   TERM

目前我们的主机也是支持各种 实体终端的, 所以 到底 主机 当前支持哪种终端,取决于 环境变量 TERM


控制台
	开机关机的日志和记录,重要应用程序的日志,都会输出到控制台来。
	没见过 重要应用程序的日志 的输出啊



对于linux来说,tty7 像是控制台,因为信息一开始都输出到屏幕上.

tty1-tty6 是虚拟终端
	tty1-tty6 一开始是没有的,再启动的过程中生成的,tty7是一开始就在的

可能日志文件也是一种终端?不清楚.

远程上的 终端  
	不像是  控制台终端, 因为不能捕捉开机关机的日志和记录,但是 重要应用程序的日志也不见有
  • 另外
1/
xterm 是 硬件终端的一种分类

在 linux 发行版中,有一个应用程序 也叫做 xterm,但 它是 图形界面终端 的一种

他们只是重名,但不是一个概念.不要搞混了

2/
伪终端
	有人讲伪终端是虚拟终端的一种分类,并说伪终端 是 由 ssh服务器   虚拟出来的 终端
  • 进一步深入
从进程树入手(pstree -p)
软件终端到最后都是bash 或者 dash 这样的东西

软件终端客户端 ----> 软件终端服务器
  
所以 我们要 到 linux 上获取终端,可能 客户端和服务器都在linux上,也可能服务器在linux,客户端不在linux.

虚拟终端从进程树的角度看来,分为41/
  从 lightdm 进程 继承过来的一支 (tty7下 的 图形界面中 打开的终端)

2/
  从 sshd 进程 继承过来的一支 (远程开终端)
 
3/
  从 login 进程 继承过来的一支 (从 tty1-6 login)
  		这一支又分为两种
  		1/
  			login 的儿子进程 (login 后获得的 终端)
  		2/
  			login 后 startx 后 在图形界面下开的 终端

4/
	vnc 分支
	启动vncserver ,然后用vncclient 连接,然后 vncclient 得到一个桌面,在这个桌面里面开启一个图形界面终端

	这时候会起一个进程,但是这个进程不以vncserver 为根,而是以 1 进程 为根.

	另外 除了 图形界面终端 的 其他图形界面进程都源自于 ~/.vnc/xstartup 


还可能有更多的分支,例如telnet ,虽然现在telnet 都不用了


其实不管是 lightdm 还是 sshd 还是 login ,这三个东西都不是内核的组成部分.

但是 tty的概念 是内核中的东西. 好奇怪
  • tty
我们如果想知道某个终端 为什么 是 /dev/tty1 , 或者为什么是 /dev/pts/1 ,就看tty 命令就行了.因为 结果是tty打印出来的


dpkg -L `dpkg -l |grep utils |awk '{print $2}'| head -10 | tail -5| head -1| xargs echo`  |grep tty -9
  
靠这个定位 tty 是哪个包里面的,哈哈哈,发现 是 coreutils
sudo apt-get source coreutils

编译之后,边运行tty命令边分析tty的代码:
	里面就一个 ttyname 函数值得一看,关键是 这个函数还不在 包里面
$ ldd src/tty 
        linux-vdso.so.1 =>  (0x00007ffd92baf000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feba3e43000)
        /lib64/ld-linux-x86-64.so.2 (0x000055944f887000)
$ nm src/tty |grep ttyname
                 U ttyname@@GLIBC_2.2.5

然后我要分析GLIBC吗?呵呵呵
果然我又分析了 glibc-2.2.5 ,里面的 ttyname 函数 返回值 是NULL,而且这个函数是什么鬼,怎么可以长成这样子
char *                                                                           
ttyname (fd)                                                                     
     int fd;                                                                        
{                                                                                   
  __set_errno (ENOSYS);                                                             
  return NULL;                                                                      
}

于是,我就想编译一下,./configure 的时候 出了问题
*** These critical programs are missing or too old:gcc make
*** Check the INSTALL file for required versions.
我不懂怎么换编译链,目前没有换编译链的需求,就此作罢.改天再提.
  • 参考资料

你真的知道什么是终端吗?

猜你喜欢

转载自blog.csdn.net/u011011827/article/details/79231838