跳转至

终端和 shell

用户界面

对于 Linux 用户来说,最关心的当然是用户界面。用户界面也称为 shell,有「命令行界面」(CLI) 和「图形界面」(GUI)。因为它处在操作系统的最外层,所以称之为 shell (壳)。

中文环境里面独立出现的 shell 通常特指「命令行 shell」,而不将图形界面称为 shell。Unix-like 操作系统上的「命令行 shell」 又称 "Unix shell"。为了表达简练,后文中单独出现的 shell 特指 "Unix shell"。

shell

shell 既是用户与操作系统交互的界面,也是一门脚本语言,支持交互模式和非交互模式。交互模式下,接收键盘输入的命令。非交互模式下,从文件读取一连串的命令并执行,此文件称为 shell 脚本。

shell 为 Linux 上面丰富多样的程序提供了用户界面,并且支持组合使用这些程序。使用 shell 脚本,用户可以灵活和高效地完成工作任务。

此外 shell 还提供了专门为交互使用而设计的功能,包括作业控制、命令行编辑、命令历史记录和命令别名。

图形界面

对于 Linux,图形界面是可选的,但它对于操作系统是举足轻重的。

早期的计算机只有「命令行界面」,那时候计算机是专业人员的工具。图形界面用起来比较舒适,上手容易,它能满足各类人群的需求。可以说图形界面推动了计算机 (包括移动终端) 迅速普及。

对于使用 shell 工作的人群来说,通过图形界面可以舒适地使用 shell。

*♥.•´¸.•*´✶´♡ ¸.•*´´♡🌼🍃🌼🍃*
*_🌈○💙_Good morning❤🌹*
*💚.•´¸.•*´✶´♡ ¸.•*´´♡⛅*
*° ☆ ° ˛*˛☆_Π____*。*˚☆*
*˚ ˛★˛•˚ */______/~\。˚ ˚ ˛*
*˚ ˛•˛• ˚ | 田田 |門| ˚*
*🌴╬═🌴╬╬🌴╬╬🌴═╬╬═🌴*

终端

终端 (terminal) 是用户与操作系统用户界面 (shell) 进行交互的设备。早期的计算机终端是一类硬件设备,一台计算机可以连接多个终端机供多个用户使用。

随着技术的发展,计算机逐渐淘汰了笨重的硬件终端机,取而代之的是软件终端,即虚拟终端。Linux 上与终端相关的术语如下:

  • tty - 泛指终端,可以是硬件终端也可以是软件终端。tty 代表 TeleTYpewriter,它曾是早期计算机的硬件终端,Linux 一直沿用这个名字作为终端的代名词。
  • pty - 仿真 tty,即仿真终端,也称伪终端。
  • ptmx, pts - pty 主端和从端。

tty

tty 命令可以查看当前 shell 所属的 tty 信息:

$  tty
/dev/pts/2

上面的是在图形界面使用 pty 得到的信息,接下来按 Ctrl + Alt + F5 切换 tty (此 tty 是字符终端),然后查看 tty:

$  tty
/dev/tty5

以上 /dev/pts/2/dev/tty5 分别对应不同的 tty:

  • /dev/ttyN 由操作系统核心组件管理,需要物理线缆连接才可使用,这样的 tty 也称为控制台终端。
  • /dev/pts/N 由「pty 程序」(比如 GNOME Terminal、SSH) 管理,每建立一个 pty 会话都会创建对应的 pts 文件。

who 可以查看所有登录的用户和对应的 tty:

$  who
linux-20   tty2         Feb 15 11:14 (tty2)
user01     tty5         Feb 16 15:07

上面显示 tty2 和 tty5,新打开的控制台终端对应 tty5 (因为前面使用 Ctrl + Alt + F5 切换,另外用户名和登录时间也可以作为判断依据),说明原先使用的图形界面对应 tty2,按 Ctrl + Alt + F2 可返回。当图形界面崩溃了可切换到非图形的控制台终端进行诊断。

终端和 shell

终端和 shell 需要配套使用,打开终端即运行 shell,每个终端都有与之对应的 shell 进程。

终端负责将输入信息转化为控制序列,shell 负责将控制序列转化为命令。比如我们分别输入 cd /tmp# cd /tmp,对终端来说只是输入字符多少的问题,而对 shell 来说则代表完全不同的信息。

图形界面使用 shell

上面已经说过了,在图形界面中可以通过「pty 程序」(比如 GNOME Terminal) 使用 shell,但是在陌生的图形界面上有时并不容易找到它。「pty 程序」一般包含关键字 "terminal" (终端),可以通过搜索关键字得到。