跳转至

终端

终端

终端是用户和计算机系统交互的接口, 最初指的是物理设备. 在计算机诞生之前, 人们发明了电传打字机, 通过电线点对点链接, 用于远距离传送电报信息. 后来人们将其连接到早期的大型计算机上, 作为输入和输出设备. 电传打字机(TeleTYpewriter)就是曾经计算机的终端, 缩写为TTY.

为了把不同型号的电传打字机接入计算机, 需要在操作系统内核安装驱动, 屏蔽掉所有底层的细节. 这就是TTY驱动的作用. 此外, 操作系统还有一个UART驱动程序, 管理字节的物理传输, 包括奇偶校验和流量控制.

终端模拟器

今天, 虽然电传打字机已经进了博物馆, 但是Linux/Unix还是保留了当初的TTY驱动. 终端不再只是一个需要通过UART连接到计算机上的物理设备, 它变成了一个内核模块, 可以直接向TTY驱动发送字符, 从TTY驱动读取响应然后打印到屏幕上, 也就是说, 这个模块可以模拟物理终端设备, 因此被称为终端模拟器(Terminal Emulator).

如何得到一个终端模拟器呢? 如果你有机会访问控制台(Console), 那么你默认情况下能打开6个终端模拟器. Linux上这种模拟的文本终端也被称为虚拟终端(Virtual Terminal). 每个虚拟终端都由一个特殊的设备文件/dev/tty[n]表示.

伪终端

终端模拟器是运行在内核的模块, 我们也可以让终端模拟程序运行在用户区, 运行在用户区的终端模拟程序, 被称为伪终端(Pseudo Terminal, PTY).

PTY运行在用户区, 更加的安全和灵活, 同时保留了TTY驱动, 常用的伪终端有xterm, gnome-terminal, 以及远程终端ssh. 由于伪终端和TTY驱动交互不是考察内容, 所以没有详细解释.

Shell

Shell指的是命令解释器, 它不负责处理键盘事件, 也不负责字符的现实, 这是终端要为它处理好的. Shell是用户空间的应用程序, 通常由终端fork出来, 是终端的子进程, 通常我们用的比较多的是Bash, Zsh和sh.

Bash Shell

在Linux下, 默认的shell是Bash, 也可以称为Bourne-Again Shell, 由Stephen Bourne开发. 此笔记中所有的命令都和Bash shell适配.

其他Shell

  • ksh: 原名为Korn shell, 1980年代由David Korn在贝尔实验室开发. 集成Bourne和C shell的优点.
  • tcsh: 是一个增强版的Unix C shell.
  • zsh: 和Korn shell类似, 是一个久经考验的shell, 是macOS的默认shell.

这些shell都放置在/bin下, /bin是一个指向/usr/bin的软链接. 你可以在/etc/passwd文件中为每一个用户都配置一个默认shell.


  1. 理解Linux 终端、终端模拟器和伪终端—腾讯云开发者社区-腾讯云. (n.d.). Retrieved June 9, 2024, from https://cloud.tencent.com/developer/news/841435 

评论