2.1.4 用户界面
用户界面是指操作系统为用户提供的使用接口,便于用户使用操作系统提供的服务。在UNIX 类操作系统中,用户界面一般是指Shell(外壳),即操作系统(内核)与用户之间的外部界面层。用户界面的任务是接收用户的键盘或鼠标输入,调用或“启动”另一个程序;此外,用户界面通常具有额外的功能,例如改变当前目录、查看目录内容、控制作业任务等。简单地说,用户界面是指启动其他程序的程序。
用户界面通常分为两类:CLI(Command Line Interface,命令行界面)和GUI(Graphical User Interface,图形用户界面)。CLI指文本模式下的用户界面,主要依据用户的命令行文本来进行交互,一般只使用键盘进行输入、使用文本信息作为输出,如 UNIX 类操作系统的各种 Shell程序。GUI指图形模式下的用户界面,主要依据用户的图形指令进行交互,多使用鼠标等指针设备进行输入、使用图形内容作为输出,如Windows操作系统的Explorer程序,macOS中的Finder应用,UNIX类操作系统中的GNOME、KDE、Xfce等。
Windows系统的用户界面通常以GUI为主,用户用鼠标和键盘在被称为“文件资源管理器”的Explorer程序中与系统进行交互,操作简便,对使用者非常友好。对开发者来说,GUI的交互效率太低,且难以实现自动化。虽然Windows的命令解释程序cmd.exe提供了简单的CLI,但CLI功能非常有限。2006年微软公司发布的PowerShell可视为cmd.exe的升级版,基于.NET Framework开发,同时提供了命令解释和脚本编程的交互环境,包含大量的内部命令,可通过模块扩展功能,还可自动执行任务,例如用户管理、CI/CD(Continuous Integration/ Continuous Deployment,持续集成/持续部署)、云资源管理等,功能较为强大,发布后迅速成为Windows系统的首选CLI。
UNIX类操作系统为开发者提供了非常友好的交互界面,其突出特点是学习曲线陡峭,熟练后使用极为灵活高效。UNIX类操作系统的用户界面以CLI为主,用户主要使用键盘在命令行终端中与系统交互,也可选择运行GUI。CLI具有非常友好的命令解释功能,以及脚本编程功能,可高效地进行软件开发工作,还支持批量任务的自动化。另外,虽然CLI是基于纯文本的,但人们也开发了许多高效、有趣的应用,例如基于文本的菜单系统、用字符绘图的工具软件(见图2.7)等,可在CLI下展示丰富多彩的内容。
图2.7 CLI中的ASCIIArt
CLI实际上是由一种称为“Shell”的应用程序在操作系统内核的基础上实现的。1977年,斯蒂芬·伯恩(Stephen Bourne)在贝尔实验室为V7 UNIX开发了Bourne Shell,其凭借简洁、快速的特点,一直被沿用至今,并成为UNIX类操作系统的默认Shell,简称为sh。sh在脚本语言引入了控制流、循环和变量,提供了更强大的语言与操作系统交互,还引入了一系列今天仍在使用的功能,包括管道、重定向与Here文档[6]等。sh在Shell脚本自动化的前进道路上迈出了至关重要的一步,成了其他派生Shell的基石。
[6] 一种文本流输入重定向手段,可将内容I/O重定向到交互程序或终端,在编写脚本时十分方便。
今天的Bash(Bourne Again Shell)等流行的Shell更是具备了命令行编辑特性,极大地提升了操作系统的使用效率和交互体验。openEuler等GNU/Linux系统中默认的Shell是Bash,它与sh完全向后兼容。Bash有许多特色,可提供命令补全、命令编辑和命令历史表等功能,还包含很多csh和ksh具备的优点,有灵活和强大的编程接口,极大地提高了操作系统命令交互和脚本开发的效率。
在UNIX类操作系统中,无论是CLI还是GUI,都只是一种普通的应用程序,只不过执行着与系统交互的特殊任务。这种灵活的设计,一方面使系统更简单,另一方面给予了用户更多自由。用户可选择喜爱的用户界面,还可通过窗口管理器来非常灵活地定制个性化的用户界面,并且是否运行GUI也可由用户自己根据需要来决定。例如,FVWM是一个优秀的窗口管理器,几乎可将GUI定制成任何样式,FVWM自定义桌面如图2.8所示。
图2.8 FVWM自定义桌面
实际上,UNIX类操作系统中的GUI是基于X Window的桌面应用程序。X Window在1984年由麻省理工学院研发,它的设计哲学的原则之一是提供机制,而非策略。X Window 系统将GUI的内容和图形界面的显示分离开,分别在被称为X Client和X Server的两种不同的应用程序中实现。有趣的是,X Window系统中客户端、服务器概念与Windows远程桌面的客户端、服务器刚好相反。在X Window中,产生图形输出内容的设备称为X Client,而具有显示器、键盘、鼠标等I/O设备称为X Server。X Client通过X协议与X Server进行通信,它们可分布于不同的主机。这种GUI体系极具灵活性,即使远程的UNIX主机没有连接显示器和键盘的服务器,依然可在其他计算机的X Server中与它进行GUI交互。
X11R6是曾被广泛采用的经典X协议版本,X Server在Linux上的主要实现是XFree86和Xorg。X Server也可运行在Windows系统上,因此Linux中的X Client图形界面也可显示在Windows桌面中。上述连接的设置也非常简单,通过SSH(Secure Shell,安全外壳)工具中的转发机制即可实现,在第7章中介绍了相关内容。
正因为以上特点,很多UNIX用户认为UNIX具有非常友好的交互界面,可定制程度高、使用效率高,可极好地满足个性化需要。