Linux基础——目录和文件管理
- 1 Linux 目录结构
- 2 查看及检索文件
- 2.1 查看文件内容
- 2.1.1 cat 命令——显示并连接(Concatenate)文件的内容
- 2.1.2 more 和 less 命令——分页查看文件内容
- 2.1.3 head 和 tail 命令——查看文件开头或末尾的部分内容
- 2.2 统计和检索文件内容
- 2.2.1 wc 命令——统计文件内容中的单词数量(Word Count)、行数等信息
- 2.2.2 grep 命令——检索、过滤文件内容
- 3. 备份与恢复文档
- 3.1 使用压缩和解压缩工具
- 3.1.1 gzip 和 gunzip 命令
- 3.1.2 bzip2 和 bunzip2 命令
- 3.2 使用tar 归档和释放工具
- 3.2.1 制作归档备份文件
- 3.2.2 从归档文件中恢复数据
- 4. 使用 vi 文本编辑器
- 4.1 vi 编辑器的工作模式
- 4.2 命令模式中的基本操作
- 4.2.1 模式切换
- 4.2.2 移动光标
- 4.2.3 复制、粘贴和删除
- 4.2.4 查找文件内容
- 4.2.5 撤销编辑及保存和退出
- 4.3 末行模式中的基本操作
- 4.3.1 保存文件及退出 vi 编辑器
- 4.3.2 打开新文件或读入其他文件内容
- 4.3.3 替换文件内容
1 Linux 目录结构
Linux 操作系统中的目录和文件数据被组织为一个树形目录结构,所有的分区、目录、文件等都具有一个相同的位置起点——根目录,如图 2.1 所示。Linux 操作系统中只有一个根目录,而 Windows 操作系统中每个分区都有一个根目录,这点需要加以区别。
Linux 操作系统在定位文件或目录位置时,使用斜杠“/”进行分隔(区别于 Windows 操作系统中的反斜杠“\”)。整个树形目录结构中,使用独立的一个“/”表示根目录,根目录是Linux 操作文件系统的起点,其所在的分区称为根分区。在根目录下,Linux 操作系统将默认建立一些特殊的子目录,分别具有不同的用途。下面简单介绍一下其中常见的子目录及其作用。
- /boot:此目录是系统内核存放的目录,同时也是系统启动时所需文件的存放目录, 如 vmlinuz 和 initrd.img。在安装 Linux 操作系统时,为 boot 目录创建一个分区, 有利于对系统进行备份。
- /bin:bin 是 binary 的缩写。这一目录存放了所有用户都可执行的且经常使用的命令,如 cp、ls 等。
- /dev:此目录保存了接口设备文件,如/dev/hda1、/dev/cdrom 等。
- /etc:系统主要的配置文件几乎都放置到这个目录内,例如人员的账号密码文件、各 种服务的起始文件等。
- /home:存放所有普通系统用户的默认工作文件夹(即宿主目录、家目录),如用户账号“teacher”对应的宿主目录位于“/home/teacher/”。如果服务器需要提供给大量的普通用户使用,建议将“/home”目录也划分为独立的分区,以方便用户数据的备份。
- /root:该目录是 Linux 操作系统管理员(超级用户)root 的宿主目录,默认情况下只有 root 用户的宿主目录在根目录下而不是在“/home”目录下。
- /sbin:存放 Linux 操作系统中最基本的管理命令,一般管理员用户才有权限执行。
- /usr:存放其他的用户应用程序,通常还被划分成很多子目录,用于存放不同类型 的应用程序。
- /var:存放系统中经常需要变化的一些文件,如系统日志文件、用户邮箱目录等, 在实际应用系统中,“/var”目录通常也被划分为独立的分区。
以上列举的只是 Linux 操作系统中用户经常用到的子目录,还有其他一些子目录需要用户在使用 Linux 操作系统的过程中逐渐去熟悉。
2 查看及检索文件
在 Linux 操作系统中,绝大多数的配置文件是以普通文本格式保存的,这些配置文件决定着系统及相关服务、程序的运行特性。本节将学习如何查看及检索文本文件的内容,快速 了解相关配置信息,以便为管理、维护操作系统提供有效的参考。
2.1 查看文件内容
对于一个文本格式的配置文件,可以利用不同的查看方式来获知文件内容,如直接显示 整个文件内容、分页查看文件内容,或者只查看文件开头或末尾的部分内容。在 Linux 操作系统中,分别由不同的命令来实现这些操作。
2.1.1 cat 命令——显示并连接(Concatenate)文件的内容
cat 命令本来用于连接(Concatenate)多个文件的内容,但在实际使用中更多地用于查看文件内容。cat 命令是应用最为广泛的文件内容查看命令。使用该命令时,只需要把 要 查 看 的 文 件 路 径 作 为 参 数 即 可 。 例 如 , 以 下 操 作 就 可 以 查 看/etc/sysconfig/network-scripts/ifcfg-ens33 配置文件中的内容,并了解第一块以太网卡的配置信息。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=918487c2-e150-422b-acdd-8b7b61d0239b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.4.11
NETMASK=255.255.255.0
GATEWAY=192.168.4.254
如果需要同时查看多个文件的内容,可以添加多个文件路径作为查看对象。例如,以下操作将依次显示/etc/redhat-release、/proc/version 文件的内容,前者记录了 CentOS 系统的发行版本信息,后者记录了系统内核及开发环境、时间等信息。
[root@localhost ~]# cat /etc/redhat-release /proc/version
CentOS Linux release 7.3.1611 (Core)Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5
20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016
2.1.2 more 和 less 命令——分页查看文件内容
使用 cat 命令可以非常简单地直接显示整个文件的内容,但是当文件中的内容较多时, 很可能只能看到最后一部分信息,文件前面的大部分内容都来不及看到。而 more 和 less 命令通过采用全屏的方式分页显示文件,便于我们从头到尾仔细地阅读文件内容。
more 命令是较早出现的分页显示命令,表示文件内容还有更多(more)的意思,less 命令是较晚出现的分页显示命令,提供了比早期 more 命令更多的一些扩展功能。两个命令的用法基本相同。
使用 more 命令查看超过一屏的文件内容时,将进行分屏显示,并在左下角显示当前内容在整个文件中的百分比。在阅读界面中,可以按 Enter 键向下逐行滚动查看,按 Space 键可以向下翻一屏,按 b 键向上翻一屏,按 q 键退出并返回原来的命令环境。例如,以下操作将可以分屏查看/etc/httpd/conf/httpd.conf(网站配置文件)文件的内容。
[root@localhost ~]# more /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html> # for a discussion of each configuration directive.--more--(1%)
more 命令除了可以分屏查看文件内容以外,还可以结合管道符号“|”分屏查看执行命令时的输出信息,这在命令输出内容较多的情况下特别有用。例如,以下操作可以分页查看/etc/ 目录下扩展名为“.conf”的配置文件。
[root@localhost ~]# ls -lh /etc/*.conf | more-rw-r--r--. 1 root ro
ot 55 11 月 5 00:29 /etc/asound.conf
-rw-r--r--. 1 root root 14K 11 月 6 02:19 /etc/autofs.conf
-rw-------. 1 root root 232 11 月 6 02:19 /etc/autofs_ldap_auth.conf
-rw-r--r--. 1 root root 22K 11 月 6 01:31 /etc/brltty.conf
…… //省略部分内容
--more--
less 命令使用方法与 more 命令基本类似,但是比 more 更好的是,less 命令结合管道符号“|”分屏查看执行命令时输出的信息时,既可以向下翻页,也可以向上翻页。而 more 命令只能向下翻页,不能向上翻页。
2.1.3 head 和 tail 命令——查看文件开头或末尾的部分内容
head 和 tail 是一对作用相反的命令,前者用于显示文件开头的一部分内容,后者用于显示文件末尾的一部分内容。可以使用“-n”选项(n 为具体的行数)指定需要显示多少行的内容,若不指定行数,默认只显示十行。
执行“head -4 /etc/passwd”命令,可以查看用户账号文件/etc/passwd 开头第一行至第四行的内容。
[root@localhost ~]# head -4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
tail 命令则正好相反,用于查看文件末尾的内容。tail 命令通常用于查看系统日志(因为较新的日志记录总是添加到文件最后),以便观察网络访问、服务调试等相关信息。配合“-f”选项使用时,还可以跟踪文件尾部内容的动态更新,便于实时监控文件内容的变化。例如,以下操作可以查看系统公共日志文件/var/log/messages 的最后十行内容,并在末尾跟踪显示该文件中新记录的内容(按 Ctrl+C 组合键终止)。
[root@localhost ~]# tail -f /var/log/messages
…… //省略显示内容
May 3 22:17:22 localhost PackageKit: uid 0 is trying to obtain org.freedesktop. packagekit.system-sources-refresh auth (only_trusted:0)
May 3 22:17:22 localhost
PackageKit: uid 0 obtained auth for org.freedesktop.
packagekit.system-sources-refresh
May 3 22:17:23 localhost kernel: TCP: lp registered
2.2 统计和检索文件内容
在维护 Linux 操作系统的过程中,除了查看文件内容以外,有时还需要对文件内容进行统计,或者查找符合条件的文本内容。下面将学习统计和检索文件内容的两个命令工具。
2.2.1 wc 命令——统计文件内容中的单词数量(Word Count)、行数等信息
wc 命令用于统计文件内容中包含的行数、单词数、字节数等信息,使用文件名作为参数,可以同时统计多个文件。较常用的选项如下所述。
- -l:统计文件内容中的行数。
- -w:统计文件内容中的单词个数(以空格或制表位作为分隔)。
- -c:统计文件内容中的字节数。
当文件的行数、单词数或字节数具有特定的意义时,使用 wc 命令可以巧妙地获得一些特殊信息。例如,Linux 操作系统中的用户账号数据保存在/etc/passwd 文件中,其中每一行记录对应一个用户,则以下操作可以统计出当前Linux 操作系统中拥有的用户账号数量,具体操作如下:
[root@localhost ~]# wc -l /etc/passwd
46 /etc/passwd
若将 wc 命令与管道符号一起使用,还可以对命令输出结果进行统计。例如,若要统计/etc/目录下共包含多少个扩展名为“.conf”的文件,可以先通过“find /etc -name “*.conf””命令找出符合条件的文件位置,由于 find 命令的输出结果也是每行一个文件记录,因此只需结合管道符号执行“wc -l”操作即可得出符合条件的文件数量,具体操作如下:
[root@localhost ~]# find /etc -name "*.conf" | wc -l
432
使用不带任何选项的 wc 命令时,默认将统计指定文件的行数、单词数、字节数(相当于同时使用“-l”“-w”“-c”三个选项)。例如,以下操作统计出/etc/hosts 文件中共包含 2 行、10 个单词、158 字节的内容,然后通过“cat /etc/hosts”命令列出文件内容,可核对统计结果是否正确。
[root@localhost ~]# wc /etc/hosts
2 10 158 /etc/hosts
2.2.2 grep 命令——检索、过滤文件内容
grep 命令用于在文件中查找并显示包含指定字符串的行,可以直接指定关键字符串作为查找条件,也可以使用复杂的条件表达式(例如,“^word”表示以 word 开头,“wordKaTeX parse error: Expected group after '^' at position 15: ”表示以 word 结尾,“^̲”表示空行)。使用 grep 命令的基本格式如下:
grep [选项]… 查找条件 目标文件
grep 命令的常用选项如下所示。
- -i:查找内容时忽略大小写(Ignore Case)。
- -v:反转查找(Invert),即输出与查找条件不相符的行。
例如,执行“grep “ftp” /etc/passwd”命令,可以在账号文件/etc/passwd 中查找包含“ftp” 字符串的行,实际上输出了名为 ftp 的用户账号的信息,具体操作如下:
[root@localhost ~]# grep "ftp" /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
在维护 Linux 操作系统的过程中,经常会遇到包含大量内容的配置文件,而其中往往包含了许多空行和以“#”开头的注释文字,当只需要分析其中的有效配置信息时,这些空行和注释文字的存在不利于快速浏览。使用 grep 命令可以过滤掉这些无关信息。例如,以下操作可以显示/etc/yum.conf 文件中以“#”开头的行和空行以外的内容。
[root@localhost ~]# grep -v "^#" /etc/yum.conf | grep -v "^$"
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
…… //省略部分内容
3. 备份与恢复文档
在 Linux 操作系统中,最简单的文件和目录备份工具就是 cp(复制)命令。但是当需要备份的文件、目录数量较多时,仅仅使用 cp 命令就显得“力不从心”,并且备份的文件数量及其所占用的磁盘空间都可能会对服务器产生不小的压力。因此,有必要对需要备份的数 据进行归档和压缩。
这里所说的归档操作实际上相当于“打包”,即将许多个文件和目录合并保存为一个整体 的包文件,以方便传递或携带。而压缩操作可以进一步降低打包后的归档文件所占用的磁盘 空间,充分提高备份介质的利用率。
Linux 操作系统中较常用的压缩命令工具包括 gzip、bzip2,最常用的归档命令工具为tar。使用 tar 命令可以通过特定选项自动调用 gzip 或 bzip2 程序,以完成归档、压缩的整套流程,当然也可以完成解压、释放已归档文件的整套流程。
下面分别介绍压缩和归档命令的使用方法。
3.1 使用压缩和解压缩工具
gzip 和 bzip2 是 Linux 操作系统中使用最多的两个压缩工具,这两个命令都可以压缩指定的文件,或者将已经压缩过的文件进行解压。两者使用的压缩算法各不相同,但命令使用格式基本类似,一般来说 bzip2 的压缩效率要好一些。
3.1.1 gzip 和 gunzip 命令
使用 gzip 制作的压缩文件默认的扩展名为“.gz”。制作压缩文件时,使用“-9”选项可以提高压缩的比率,但文件较大时会需要更多的时间。例如,以下操作将对/root/public_html 目录下的 mkfile 文件进行压缩,生成压缩文件 mkfile.gz(原始文件 mkfile 不再保留),压缩后的文件大小变为 30KB(未压缩时为 62KB)。
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 62K 9 月 23 15:14 /root/public_html/mkfile [root@localhost ~]# gzip /root/public_html/mkfile
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 30K 9 月 23 15:14 /root/public_html/mkfile.gz
当需要解压缩经gzip 压缩的文件时,只需使用带“-d”选项的gzip 命令即可,或者直接使用gunzip 命令。例如,若将压缩文件 mkfile.gz 进行解压缩,可执行以下操作。
[root@localhost ~]# gzip -d /root/public_html/mkfile.gz
或者
[root@localhost ~]# gunzip /root/public_html/mkfile.gz
3.1.2 bzip2 和 bunzip2 命令
bzip2 和 bunzip2 命令的用法与 gzip、gunzip 命令基本相同,使用 bzip2 制作的压缩文件默认的扩展名为“.bz2”。例如,以下操作将对当前目录下的 mkfile 文件以较高压缩比进行压缩,生成压缩文件 mkfile.bz2(原始文件 mkfile 不再保留),压缩后的文件大小变为 30KB(未压缩时为 62KB)。
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 62K May 4 01:32 /root/public_html/mkfile
[root@localhost ~]# bzip2 -9 /root/public_html/mkfile
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 30K May 4 01:32 mkfile.bz2
与 gzip、gunzip 命令相同,当需要解压缩经bzip2 压缩的文件时,只需使用带“-d”选项的bzip2 命令即可,或者直接使用 bunzip2 命令。例如,若要将压缩文件 mkfile.gz 进行解压缩, 可执行以下操作。
[root@localhost ~]# bzip2 -d /root/public_html/mkfile.bz2
或者
[root@localhost ~]# bunzip2 /root/public_html/mkfile.bz2
3.2 使用tar 归档和释放工具
tar 命令主要用于对目录和文件进行归档。在实际的备份工作中,通常在归档的同时也会将包文件进行压缩(需要调用前面的 gzip 或 bzip2 命令),以节省磁盘空间。使用 tar 命令时,选项前的“-”号可以省略。常用的几个选项如下所述。
- -c:创建(Create).tar 格式的包文件。
- -C:解压时指定释放的目标文件夹。
- -f:表示使用归档文件。
- -j:调用 bzip2 程序进行压缩或解压。
- -p:打包时保留文件及目录的权限。
- -P:打包时保留文件及目录的绝对路径。
- -t:列表查看包内的文件。
- -v:输出详细信息(Verbose)。
- -x:解开.tar 格式的包文件。
- -z:调用 gzip 程序进行压缩或解压。
3.2.1 制作归档备份文件
制作归档及压缩包(备份)文件时,tar 命令的基本格式如下:
tar [选项] … 归档及压缩文件名 需要归档的源文件或目录…
如果需要对制作的归档文件进行压缩,可以通过“-z”或“-j”选项自动调用压缩工具(分别对应 gzip、bzip2 命令程序)进行压缩。例如,以下操作将会对/etc 和/boot 目录进行备份, 在当前目录下生成名为 sysfile.tar.gz 的归档压缩包,执行过程中可以看到被归档的文件列表信息。需要注意的是,在备份恢复目录或文件时,最好先将工作路径切换至目标目录或文件的所在路径,然后在执行备份命令时使用相对路径,以防输入命令时因手误而导致根目录“/” 下重要文件损坏。
[root@localhost ~]# cd /
[root@localhost /]# tar zcvf sysfile.tar.gz etc boot
etc/
etc/login.defs
etc/cron.hourly/
etc/fstab
…… //省略部分内容
[root@localhost /]# ls -lh sysfile.tar.gz
-rw-r--r-- 1 root root 142M 9 月 16 17:03 sysfile.tar.gz
若需要制作“.tar.bz2”格式的归档压缩包,则将“-z”选项改为“-j”选项使用即可。例如,以 下操作将会对/etc/passwd 、/etc/shadow 文件进行备份, 在/tmp 目录下生成名为usershome.tar.bz2 的归档压缩包。
[root@localhost ~]# cd /etc
[root@localhost etc]# tar jcvf /tmp/usershome.tar.bz2 passwd shadow
etc/passwd
etc/shadow
[root@localhost etc]# ls -lh /tmp/usershome.tar.bz2
-rw-r--r-- 1 root root 1.5K 9 月 16 17:04 /tmp/usershome.tar.bz2
3.2.2 从归档文件中恢复数据
解压并释放(恢复)归档压缩包文件时,tar 命令的基本格式如下:
tar [选项] … 归档及压缩文件名 [-C 目标目录]
类似地,当从“.tar.gz”格式的归档压缩包恢复数据时,需要结合“-z”选项来自动调用压缩 工具,而对于“.tar.bz2”格式的归档压缩包,对应的是“-j”选项。默认情况下,恢复的数据将释放到当前目录中,如果需要恢复到指定文件夹,还需要结合“-C”选项来指定目标目录。例如,以下操作将从备份文件 usershome.tar.bz2 中恢复数据,释放到/etc 目录下(将覆盖现有文件)。
[root@localhost ~]# tar jxf /tmp/usershome.tar.bz2 -C /etc
在大部分的备份及恢复工作中,只使用 tar 命令就可以很好地结合 gzip、bzip2 工具协同工作,无须再执行 gzip 或 bzip2 命令。但是要注意这两个压缩工具的命令程序必须存在。
4. 使用 vi 文本编辑器
配置文件是 Linux 操作系统的显著特征之一,其作用有点类似于 Windows 操作系统中的注册表,只不过注册表是集中管理,而配置文件采用了分散的自由管理方式。本节将学习如何使用 Linux 字符操作界面中的文本编辑器——vi,以便更好地管理和维护系统中的各种配置文件。
vi 是一个功能强大的全屏幕文本编辑工具,一直以来都作为类 UNIX 操作系统的默认文本编辑器。vim 是 vi 文本编辑器(简称 vi 编辑器)的增强版本,在 vi 编辑器的基础上扩展了很多实用的功能,但是习惯上也将 vim 称为 vi。为了使用方便,可以设置一个命令别名,将 vi 指向 vim 程序(本书中以 vim 程序为例),具体操作如下:
[root@localhost ~]# alias vi='/usr/bin/vim'
[root@localhost ~]# which -a vi vim
alias vi='/usr/bin/vim'
/usr/bin/vim
/usr/bin/vi
/usr/bin/vim
4.1 vi 编辑器的工作模式
vi 编辑器是工作在字符终端环境下的全屏幕编辑器,因此编辑界面相对比较简单,没有为用户提供鼠标操作和菜单系统,而是通过按键命令实现相应的编辑和操作功能。在 vi 编辑界面中可以使用三种不同的工作模式,即命令模式、输入模式和末行模式,在不同的模式 中能够对文件进行的操作也不相同。
- 命令模式:启动 vi 编辑器后默认进入命令模式。该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。
- Ø 输入模式:该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修 改或添加新的内容。处于输入模式时,vi 编辑器的最后一行会出现“-- INSERT --” 的状态提示信息。
- Ø 末行模式:该模式中可以设置 vi 编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。处于末行模式时, vi 编辑器的最后一行会出现冒号“:”提示符。
命令模式、输入模式和末行模式是 vi 编辑环境的三种状态,通过不同的按键操作可以在不同的模式间进行切换。例如,从命令模式按:(冒号)键可以进入末行模式,按 a、i、o 等键可以进入输入模式;在输入模式、末行模式均可按 Esc 键返回命令模式,如图 2.2 所示。
认识了 vi 编辑器的不同编辑模式(状态)以后,下面分别介绍在命令模式、末行模式中的常见操作方法(输入模式用于录入文本内容,不做特别介绍)。
4.2 命令模式中的基本操作
执行单独的“vi”命令即可进入 vi 编辑器的命令模式,还会显示相关版本信息,如图 2.3 所示。但更常见的使用方法是指定要编辑的文件名作为参数,若该文件不存在,则 vi 根据该文件名称打开一个新的空文件。
在学习 vi 编辑器的基本操作时,建议学员复制一个内容较多的系统配置文件进行练习, 而不要直接去修改系统文件,以免发生失误造成系统故障。例如,以下操作把系统配置文件/etc/yum.conf 复制为当前目录下的 vitest.file 文件,然后用 vi 编辑器打开 vitest.file 文件进行编辑。
[root@localhost ~]# cp /etc/yum.conf ./vitest.file
[root@localhost ~]# vi vitest.file
在 vi 编辑器的命令模式中,可以输入特定的按键(称为 vi 操作命令,注意区别于 Linux 操作系统命令)进行操作,主要包括模式切换、光标移动、复制、删除、粘贴、文件内容查找及保存和退出等操作,这里只介绍一些最基本且常用的按键命令。
4.2.1 模式切换
在命令模式中,按 a、i、o 等键可以快速切换至输入模式,同时确定插入点的方式和位置,以便录入文件内容。需要返回命令模式时,按 Esc 键即可。常见的几个模式切换键及其作用如下。
- a:在当前光标位置之后插入内容。
- A:在光标所在行的末尾(行尾)插入内容。
- i:在当前光标位置之前插入内容。
- I:在光标所在行的开头(行首)插入内容。
- o:在光标所在行的后面插入一个新行。
- O:在光标所在行的前面插入一个新行。
4.2.2 移动光标
- 光标方向的移动。直接按↑、↓、←、→四个方向键完成相应的光标移动。
- 翻页移动。
- 按 Page Down 键或 Ctrl+F 组合键向下翻动一整页内容。
- u 按 Page Up 键或 Ctrl+B 组合键向上翻动一整页内容。
- 行内快速跳转。
- 按 Home 键或^键、数字 0 键将光标快速跳转到本行的行首。
- u 按 End 键或$键将光标快速跳转到本行的行尾。
在上述按键操作中,Page Down、Page Up、Home、End 键及方向键同样也可在 vi的输入模式中使用。
- 行间快速跳转。
- 使用按键命令 1G 或者 gg 可跳转到文件内容的第 1 行。
- 使用按键命令 G 可跳转到文件的最后一行。
- 使用按键命令#G 可跳转到文件中的第#行(其中“#”号用具体数字替换)。为了便于查看行间跳转效果,这里先学习如何在 vi 编辑器中显示行号。只要切换到末行模式并执行如下的“:set nu”命令即可显示行号,执行“:set nonu”命令可以取消显示行号。
:set nu
显示行号后的 vi 编辑器界面显示格式如下(每行开头的数字即行号):
1 [main]
2 cachedir=/var/cache/yum/$basearch/$releasever
3 keepcache=0
…… //省略部分内容
4.2.3 复制、粘贴和删除
- 删除操作。
- 按 x 键或 Delete 键删除光标处的单个字符。
- 使用按键命令 dd 删除当前光标所在行,使用#dd 的形式还可以删除从光标处开始的#行内容(其中“#”号用具体数字替换)。
- 使用按键命令 d^删除当前光标之前到行首的所有字符。
- 使用按键命令 d$删除当前光标处到行尾的所有字符。
- 复制操作。使用按键命令 yy 复制当前行整行的内容到剪贴板,使用#yy 的形式还可以复制从光标处开始的#行内容(其中“#”号用具体数字替换)。复制的内容需 要粘贴后才能使用。
- 粘贴操作。在 vi 编辑器中,前一次被删除或复制的内容将会保存到剪切板缓冲区中,按 p 键即可将缓冲区中的内容粘贴到光标位置处之后,按 P 键则会粘贴到光标位置处之前。
4.2.4 查找文件内容
在命令模式中,按/键后可以输入指定的字符串,从当前光标处开始向后进行查找(按? 键则向前查找)。完成查找后可以按 n、N 键在不同的查找结果中进行选择。例如,输入“/yum”,按 Enter 键后将查找出文件中的“yum”字符串并高亮显示,光标自动移动至第一个查找结果处,按 n 键可以移动到下一个查找结果,如图 2.4 所示。
4.2.5 撤销编辑及保存和退出
在对文件内容进行编辑时,有时候需要对一些失误的编辑操作进行撤销,这时可以使用 按键命令 u、U 键。其中,u 键命令用于取消最近一次的操作,并恢复操作结果,可以多次重复按 u 键恢复已进行的多步操作;U 键命令用于取消对当前行所做的所有编辑。
当需要保存当前的文件内容并退出 vi 编辑器时,可以使用按键命令 ZZ。
4.3 末行模式中的基本操作
在命令模式中按:键可以切换到末行模式,vi 编辑器的最后一行中将显示“:”提示符,用户可以在该提示符后输入特定的末行命令,完成如保存文件、退出编辑器、打开新文件、读 取其他文件内容及字符串替换等丰富的功能操作。
4.3.1 保存文件及退出 vi 编辑器
- Ø 保存文件。对文件内容进行修改并确认以后,需要执行如下的“:w”命令进行保存。
:w
若需要另存为其他文件,则需要指定新的文件名,必要时还可以指定文件路径。例如, 执行如下的“:w /root/newfile” 操作将把当前编辑的文件另存到/root 目录下, 文件名为newfile。
:w /root/newfile
- Ø 退出编辑器。需要退出 vi 编辑器时,可以执行“:q”命令。若文件内容已经修改却没有保存,则仅使用“:q”命令将无法成功退出,这时需要使用如下的“:q!”命令强行退出(不保存即退出)。
:q!
- Ø 保存并退出。既要保存文件又要退出 vi 编辑器可以使用一条末行命令“:wq”或“:x” 实现,其效果与命令模式中的 ZZ 命令相同,具体操作如下:
:wq
或者
:x
4.3.2 打开新文件或读入其他文件内容
- Ø 打开新的文件进行编辑。在当前 vi 编辑器中,执行“:e 新的文件”形式的末行命令可以编辑(Edit)新文件。例如,执行如下的“:e~/initial-setup-ks.cfg”操作将直接打开当前用户宿主目录中的 initial-setup-ks.cfg 文件进行编辑。
:e ~/initial-setup-ks.cfg
- Ø 在当前文件中读入其他文件内容。执行“:r 其他文件”形式的末行命令可以读入(Read)其他文件中的内容,并将其复制到当前光标所在位置。例如,执行如下的“:r/etc/filesystems”操作将把系统文件/etc/filesystems 中的内容复制到当前文件中。
:r /etc/filesystems
4.3.3 替换文件内容
在 vi 编辑器的末行模式中,能够将文件中特定的字符串替换成新的内容,当需要大批量修改同一内容时,使用替换功能将大大提高编辑效率。使用替换功能时的末行命令格式如 下:
: [替换范围] sub /旧的内容/新的内容[/g]
在上述替换格式中,主要关键字为 sub(Substitute,替换),也可以简写为 s。替换范围是可选部分,默认时只对当前行内的内容进行替换,一般可以表示为以下两种形式。
- Ø %:在整个文件内容中进行查找并替换。
- n,m:在指定行数范围内的文件内容中进行查找并替换。
替换格式中最末尾的“/g”部分也是可选内容,表示对替换范围内每一行的所有匹配结果都进行替换,省略“/g”时将只替换每行中的第一个匹配结果。例如,若要将文档中第 5 行~第 15 行中的“initdefault”字符串替换为“DEFAULT”,可以执行以下操作:
:5,15 s /initdefault/DEFAULT/g
当需要对整个文档范围进行查找替换操作时,需要使用“%”符号表示全部。例如,以下操作将会把当前文件中所有的“initdefault”字符串替换为“bootdefault”。
:% s /initdefault/bootdefault/g