# 终端

终端(terminal)主要指计算机的输入、输出设备,供用户用于与计算机交互。

  • 比如一个显示器加一个键盘就可以组成一个终端。

# 相关历史

  • 20 世纪早期,计算机通常使用电传打字机(Teletype ,tty)作为输入、输出设备。
    • 电传打字机在 19 世纪就因为发送电报而流行起来,可以通过穿孔纸带(Punched tape)记录二进制形式的数据。
    • 至今,类 Unix 系统中依然可能将终端简称为 tty 。
  • 早期的计算机只有一个控制台(console),供用户管理硬件线路。但可以连接多个终端,供多个用户与计算机交互。
  • 20 世纪中期,计算机通常使用 CRT Monitor 作为主要的输出设备,使得操作系统可以显示一个命令行界面,供用户比较直观地操作。
  • Multics 系统首次将集成在操作系统中的命令处理器改进成一个独立的模块,称为命令行解释器(Command Line Interpreter),允许用户更换解释器。
  • Unix 系统将命令行解释器进一步优化,增加了管道符、脚本等功能。

# 终端界面

计算机通常会在显示屏中显示一个终端界面,供用户操作。主要分为两类:

  • 命令行界面(Command Line Interface ,CLI)
    • :只显示字符文本,只允许用户通过键盘进行操作,例如输入一些字符串作为 shell 命令执行。
    • 例如 Linux 内核只提供了 CLI 界面,但有的 Linux 发行版也提供了 GUI 界面。
    • 例如 Xterm 是一种常见的、古老的终端,功能简单,原本是 X Window 的默认终端。
  • 用户图形界面(Graphical User Interface ,GUI)
    • :显示一些图形按钮,允许用户通过键盘、鼠标、触摸板等方式操作。

# 命令行提示符

  • 等待用户输入时,CLI 终端的左侧会显示命令行提示符。其默认格式为 [用户名@主机名 当前目录名]用户提示符 ,如下:
    [root@CentOS ~]#
    
    • root 用户、普通用户的用户提示符分别为 # 、$ 。

# 终端的快捷键

shell 终端支持以下快捷键:

关于进程:

  • Ctrl + C :终止当前终端的前台进程。这实际上是通过键盘输入 \x03 字符,导致 shell 解释器向进程发送 SIGINT 终止信号。
  • Ctrl + D :退出当前终端,相当于执行命令 exit 。这实际上是通过键盘输入 \x04 字符。
  • Ctrl + Z :暂停当前的前台进程,并将它移到后台。

关于显示:

  • Ctrl + L :清屏,使屏幕上只剩第一行。相当于执行命令 clear 。
  • Ctrl + A :将光标移动到行首。
  • Ctrl + E :将光标移动到行尾。
  • Ctrl + P :显示上一条历史命令。
  • Ctrl + N :显示下一条历史命令。
  • Ctrl + S :冻结屏幕的显示内容,不再变化。
  • Ctrl + Q :取消冻结屏幕。

关于输入:

  • Tab :自动补全输入。如果只有一个候选项,则按一下会自动补全,否则按两下显示所有候选项。

    • 如果终端不支持自动补全,则需要安装 yum install bash-completion ,然后重启 shell 。
    • /usr/share/bash-completion/completions 目录下保存了各种命令的自动补全脚本。
  • Ctrl + U :剪切光标之前的所有内容。

  • Ctrl + K :剪切光标之后的所有内容。

  • Ctrl + W :剪切光标之前的一个字段。如果连续剪切多次,则剪切的内容会拼接成一个字符串。

  • Ctrl + Y :粘贴用上述命令剪切的内容。

  • Ctrl + Shift + C :复制。

  • Ctrl + Shift + V :粘贴。

关于历史命令:

  • Ctrl + R :检索历史命令。输入关键词之后,再按下 Ctrl + R 会倒序显示每个匹配项。
  • Ctrl + P :切换到历史命令的上一条(provious),相当于按键 ↑ 。
  • Ctrl + N :切换到历史命令的下一条(next),相当于按键 ↓ 。