美文网首页
终端的前世今生

终端的前世今生

作者: catHeart | 来源:发表于2017-06-24 20:44 被阅读191次

    Linux系统启动后,如果没有安装图形桌面系统,用户看到的是黑乎乎的屏幕; 根据提示输入用户名和密码后,用户可以通用命令行控制电脑执行任务。如果是登陆到了图形桌面系统,用户可以打开xterm、gnome-terminal或者konsole输入指令。有人说命令行是Linux系统难以使用以致无法普及的根源; 也有人说命令行是Linux系统的魅力所在。远离这些无意义的争论不谈,掌握命令行才能发挥Linux最大的威力。

    终端(Terminal)是命令行界面的硬件层面和软件层面的载体。它与计算机关系密切,其历史可以追溯到计算机诞生之初,也随着计算机的发展而发生变化。

    实体终端

    vt100_terminal_all.png

    计算机在早期不是面向个人的,而是作为服务器为某个组织、机构甚至整个国家服务的。用户需要一个终端,通用串口线或电话线与计算机相连,才能登陆进去执行自己的伟大的计算工作; 不知道那时的程序员是否已经弄出来了游戏程序,忙里偷闲的时候,在终端里玩的不亦乐乎。

    终端是一种通过字符与计算机进行信息沟通的设备,包括输入、显示、通信和处理模块等部分。终端的通信模块与计算机相连,提供终端与计算机之间的双向通信链路; 用户输入的信息通过该链路到达计算机,计算机返回的数据通过该链路到达终端,终端负责将这些显示出来。

    计算机看到的是一个通信端口,但是仅仅在软件上实现通信的驱动功能是不够的,因为终端的种类很多,它们实现换行、字符颜色等特殊功能时需要在向终端发送不同的指令;所以,计算机还需要实现终端的驱动,构建设备文件 /dev/ttyX。设备文件/dev/ttyX为用户提供了针对终端的统一端口,编程时程序员可以忽略用户所使用的终端的具体型号,执行统一的文件操作完成终端的输入读取或输出显示内容;还可以使用系统调用ioctl或C语言库termios控制终端的行为。

    Framebuffer终端

    framebuffer-console.png

    随着个人计算机的发展,每台计算机都配置着显示器和键盘,终端成为计算机的标配。把Linux系统启动或切换到命令行界面,看到的就是计算机自身的终端,这种终端是Linux系统基于FrameBuffer实现的。FrameBuffer是Linux系统图形系统的抽象层,用于控制显示器上显示的内容。/dev/fb0是FrameBuffer设备的设备文件。执行下面的指令

    cat /dev/urandom > /dev/fb0
    

    会将屏幕变成一个满是噪声的样子。

    终端模拟器

    gnome-terminal.png

    在Linux图形桌面中,打开的终端,比如xterm, gnome-terminal和konsole等,也是一种终端。但是,它们一般被成为终端模拟器(Terminal Emulator),因为它们都是使用软件模拟出的终端。终端的显示部分基于X Window系统实现的。

    这些终端模拟器对应的终端设备一般成为Pseudoterminal,其设备文件位于/dev/pts/X中。在终端中,使用tty命令,可以得到当前终端对应的终端设备文件。对终端设备文件进行操作,可以实现一些有趣的结果。

    terminal-talk.png

    打开两个终端,A对应的终端设备文件为/dev/pts/0,B对应的终端设备文件为/dev/pts/1。在终端A中,执行echo message > /dev/pts/1,会在终端B中显示出message信息。基于这个功能,可以实现不同终端的用户之间进行聊天。

    其他

    另一个与终端形影相随的东西是shell程序,比如sh,bash,zsh等;它负责进程的管理,比如后台运行、终止程序等,这个过程背后有一套复杂的结构,后面有时间可详细了解;可同时参考script程序,它与Shell有着相同的基本原理。

    参考文献

    相关文章

      网友评论

          本文标题:终端的前世今生

          本文链接:https://www.haomeiwen.com/subject/nyfkcxtx.html