第3章文本界面基础 本章主要学习Linux进入文本界面的方式、关闭和重启系统、目标,获取帮助,Shell、Bash、Shell提示符和命令格式、Shell常用快捷键、编辑命令行、特殊字符、通配符、命令行补全和历史记录,命令排列、替换和别名,管道和重定向,文本编辑器vi。 本章的学习目标如下。 (1) 文本界面: 掌握进入文本界面的方式,关闭和重启系统、目标。 (2) 获取帮助: 掌握获取帮助: man和help。 (3) Shell基础: 了解Shell、Bash、Shell提示符和命令格式、Shell常用快捷键、编辑命令行、特殊字符; 掌握通配符、命令行补全和历史记录。 (4) 命令排列、替换和别名: 掌握命令排列、替换和别名。 (5) 管道和重定向: 掌握管道和重定向。 (6) 文本编辑器: 了解文本编辑器vi; 掌握文本编辑器vi基本操作。 3.1文 本 界 面 Linux的文本界面又称为文本模式(text mode)、字符界面、命令行界面(command line interface,CLI)。 3.1.1进入文本界面 Linux的文本界面可以通过图形界面的终端、虚拟控制台以及文本界面等方式进入。 1. 终端 终端是Linux图形界面允许用户输入命令的工具,如图3.1所示。  启动终端: 单击Applications→System Tools→Terminal。  快速启动终端: 桌面空白处右击→E键。 图3.1终端  退出终端: 输入命令exit并按Enter键或者快捷键Ctrl+D。 2. 虚拟控制台 通过虚拟控制台,Linux允许多个用户同时登录,还允许一个用户同时多次登录。  从图形界面切换到虚拟控制台: Ctrl+Alt+F2+…+F6。  从虚拟控制台切换到图形界面: Ctrl+Alt+F1。  从文本界面切换到虚拟控制台: Alt+F1+…+F6。 3. 文本界面 安装Linux之后,启动默认进入的用户界面是图形界面。如果想要设置启动默认进入的是文本界面,则需要运行以下命令。 [root@localhost ~]#systemctl get-default graphical.target // 查看Linux启动后的默认界面,graphical.target表示图形界面 [root@localhost ~]#systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target. // 将multi-user.target设置为Linux启动后的默认界面,multi-user.target表示文本界面 重启系统后的默认界面变为文本界面,如图3.2所示。 图3.2文本界面 输入用户名和密码(不显示)后就可以登录Linux,如图3.3所示。 图3.3文本界面登录Linux 如果从文本界面进入图形界面,则输入命令startx并按Enter键。 如果想要设置启动默认进入的是图形界面,则需要运行以下命令。 [root@localhost ~]#systemctl set-default graphical.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target. 3.1.2关闭和重启系统 如果通过直接断电的方式来关闭计算机,会导致尚未保存的数据丢失,甚至损坏系统和硬件设备。 关闭和重启系统前需要完成以下工作。 (1) 通知已登录的用户关闭系统的时间。 (2) 将缓冲区内的文件写到外存。 Linux关闭和重启系统的命令有shutdown、halt、poweroff、reboot、logout/exit等。 1. shutdown shutdown可以关闭所有程序,并根据用户的需要重新开机或关机。其语法格式为 shutdown [选项] [时间] [警告信息] shutdown命令的常用选项及其含义见表3.1。 表3.1shutdown命令的常用选项及其含义 选项含义 c中断关闭系统 h关闭系统 k发送警告信息给所有用户,不关闭系统 r重启系统 [时间]设置多久时间之后关闭系统 [警告信息]发送给所有已登录用户的信息 【例3.1】立即关闭系统。 [root@localhost ~]#shutdown -h now 【例3.2】30分钟后重新启动系统,并提醒所有用户保存文件。 [root@localhost ~]#shutdown -r 30 "Please save all files." Shutdown scheduled for Sat 2020-09-12 20:13:52 CST, use 'shutdown -c' to cancel. 【例3.3】取消关闭系统。 [root@localhost ~]#shutdown -c Broadcast message from root@localhost.localdomain (Sat 2020-09-12 19:44:11 CST): The system shutdown has been cancelled at Sat 2020-09-12 19:45:11 CST! 2. halt halt用于关闭系统,相当于命令“shutdown h now”,但是默认不会关闭电源。其语法格式为 halt [选项] halt命令的常用选项及其含义见表3.2。 表3.2halt命令的常用选项及其含义 选项含义 d关闭系统,不记录到日志文件/var/log/wtmp f不调用shutdown而强制关闭系统 w不关闭系统,只记录到日志文件/var/log/wtmp p关闭系统,并运行poweroff 【例3.4】使用halt命令关闭系统。 [root@localhost ~]#halt 3. poweroff poweroff用于关闭系统,相当于命令“shutdownh now”。 【例3.5】使用poweroff命令关闭系统。 [root@localhost ~]#poweroff 4. reboot reboot用于重启系统,相当于命令“shutdownr now”。其语法格式为 reboot [选项] reboot命令的常用选项及其含义见表3.3。 表3.3reboot命令的常用选项及其含义 选项含义 d重启系统,不记录到日志文件/var/log/wtmp f不调用shutdown而强制重启系统 w不重启系统,只记录到日志文件/var/log/wtmp 【例3.6】使用reboot命令重启计算机。 [root@localhost ~]#reboot 5. logout/exit logout用于在文本界面下注销当前登录的用户并回到登录界面。 exit用于在文本界面下注销当前登录的用户并回到登录界面,在图形界面退出终端。 3.1.3目标 CentOS 7之前的版本使用运行级别(run level)代表不同的系统运行模式。运行级别有7个,用数字0~6表示。每个运行级别默认运行的服务不同。 CentOS 7使用目标(target)代替了运行级别,见表3.4。目标使用目标单元文件描述,文件扩展名是“.target”。目标单元文件是将systemd单元文件通过一连串的依赖关系组织在一起。例如,graphical.target用于启动一个图形界面会话,systemd会启动GNOME显示管理服务(gdm.service)、账号服务(axxountsdaemon)等服务,并且会启动multiuser.target单元; 而multiuser.target单元会启动网络管理服务(networkmanager.service)、进程间通信服务(dbus.service),并启动basic.target单元。 表3.4目标和运行级别对应关系 运行级别目标单元文件运行级别单元文件功能 0poweroff.targetrunleve10.target关闭系统 1rescue.targetrunleve11.target文本界面单用户模式(维护/救援),相当于Windows的安全模式 2multiuser.targetrunleve12.target文本界面多用户模式 3multiuser.targetrunleve13.target文本界面多用户模式(完整) 4multiuser.targetrunleve14.target文本界面多用户模式(自定义) 5graphical.targetrunleve15.target图形界面多用户模式 6reboot.target runleve16.target重启系统 CentOS 7之前的版本运行命令run level,查看当前运行级别; 运行命令init n,改变当前运行级别; 修改文件/etc/inittab,设置默认运行级别。 CentOS 7运行以下命令查看当前目标: [root@localhost ~]#systemctl get-default 运行以下命令改变当前目标为文本界面多用户模式: [root@localhost ~]#systemctl isolate multi-user.target 运行以下命令设置默认目标为文本界面多用户模式: [root@localhost ~]#systemctl set-default multi-user.target 3.2获 取 帮 助 使用帮助可以快速了解Linux命令的功能、选项和参数等信息。 3.2.1man man(Manual)用于查看命令、函数或文件的手册。手册文件一般存储在/usr/share/man中。其语法格式为 man [选项] [命令] 【例3.7】显示命令ls的手册,如图3.4所示。 [root@localhost ~]#man ls 图3.4显示命令ls的man手册 man手册的组成见表3.5。 表3.5man手册的组成 字段说明 Header标题 NAME命令/函数的功能概述 SYNOPSIS命令/函数用法的简单描述 AVAILABILITY命令/函数用法的可用性说明 续表 字段说明 DESCRIPTION命令/函数的详细描述 OPTIONS 命令的所有选项的详细说明 RETURN VALUE 函数返回值 ERRORS 调用函数所有出错的值和可能引起错误的原因 FILES 命令/函数所用到的相关系统文件 ENVIRONMENT 命令/函数相关的环境变量 NOTES 不常用的用法或实现的细节 BUGS 已知的错误和警告 HISTORY 命令/函数的历史发展 AUTHOR 手册作者 COPYRIGHT 版权声明 SEE ALSO 可以参照的其他的相关命令/函数 Others 其他信息 man手册命令的类型见表3.6。 表3.6man手册命令的类型 编号类型编号类型 1一般使用者的命令5配置文件的解释 2系统调用的命令6游戏程序的命令 3C语言函数库的命令7其他的软件或程序的命令 4驱动程序和系统设备的有关解释8系统维护的命令 man的功能键见表3.7。 表3.7man的功能键 按键功能 q 离开 PgUp/PgDn 翻页 → ← ↑ ↓ 光标移动 /keyword 向下搜索关键字,按n查找下一个 ?keyword 向上搜索关键字,按n查找上一个 Home 回到文首 End 回到文末 3.2.2info info(information)用于查看命令的info文档,与man类似,功能键也只有少许不同。info文档一般存储在/usr/share/info中。其语法格式为 info [选项] [命令] 显示命令ls的info文档,如图3.5所示。 [root@localhost ~]#info ls 图3.5显示命令ls的info文档 3.2.3help 1. 选项help 选项help用于显示命令的用法,但不能显示Shell内置命令的用法。其语法格式为 [命令] --help 【例3.8】查看命令ls的帮助。 [root@localhost ~]#ls --help Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. // 以下省略 2. 命令help 命令help用于显示Shell内置命令的用法。其语法格式为 help [命令] 【例3.9】查看内置命令cd的帮助。 [root@localhost ~]#help cd cd: cd [-L|[-P [-e]]] [dir] Change the shell working directory. Change the current directory to DIR. The default DIR is the value of the HOME shell variable. // 以下省略 3.3Shell Shell是Linux的用户界面,提供了用户与内核进行交互的接口。它实际上是一个命令解释器,解释由用户输入的命令并将它们送到内核去运行。 3.3.1Shell简介 Shell的本意是“壳”的意思。在内核的外面,包裹着一层外壳,用来负责接收用户输入的命令,然后将命令解译成内核能够理解的方式,传给内核去运行,再将结果传回至输出设备。Shell就是位于内核和用户之间的一层界面。 广义的Shell包括图形界面和文本界面; 狭义的Shell特指文本界面。如果无特别说明,Shell一般指的是文本界面。 目前流行的Shell有Bourne Shell(sh)、BourneAgain Shell(bash)、C Shell(csh)、TENEX C Shell(tcsh)等。 查看内核支持的Shell类型: [root@localhost ~]#cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh 3.3.2Bash简介 Bash是UNIX Shell的一种,于1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但它也能运行于大多数类UNIX系统的操作系统之上。 Bash是Bourne Shell的后继兼容版本与开放源代码版本,它的名称来自Bourne Shell(sh)的一个双关语BourneAgain Shell。 3.3.3Shell提示符和命令格式 当登录文本界面或打开一个终端窗口时,首先看到的是Shell提示符,包括用户登录名、登录的主机名、当前所在的工作目录路径和提示符号。 以用户root登录系统的Shell提示符如下: [root@localhost ~]# 以普通用户test登录系统的Shell提示符如下: [test@localhost ~]$ 如果要运行命令,只需要在Shell提示符后输入命令,然后再按Enter键。 一个Shell命令可能含有一些选项和参数,其一般格式为 [Shell命令] [选项] [参数] 注意: (1) Shell命令、选项和参数间用空格分隔,多个空格视为1个。 (2) 选项有短“x”和长“xx”两种(例如: ls l; ls help)。 (3) 选项在命令的手册中都有详细的介绍,参数由用户提供。选项决定命令如何工作,参数确定命令作用的目标。 (4) 命令太长时使用“\”转义,实现换行。 命令分为以下两大类。 (1) 内置命令,由Shell负责响应。 (2) 应用程序,由Shell找到应用程序对应的文件并交由内核运行。 3.3.4Shell常用快捷键 快捷键又称为快速键、组合键或热键,是指通过某些特定的按键、按键顺序或按键组合来完成一个操作。Shell常用快捷键见表3.8。 表3.8Shell常用快捷键 快捷键意义 Ctrl+C终止目前的命令 Ctrl+\终止目前的命令 Ctrl+Z暂停目前的命令 Ctrl+D输入结束,即EOF; 或注销Linux Ctrl+L清屏 Ctrl+M相当于按Enter键 Ctrl+O运行当前命令,并选择上一个命令 Ctrl+Q恢复屏幕输出 Ctrl+S暂停屏幕输出 Ctrl+U删除整行命令 3.3.5编辑命令行 通过左右方向键和功能键(Home、End等)可以浏览并编辑命令行,还可以用快捷键完成一般的编辑。编辑命令行的快捷键见表3.9。