4.1 Vim文本编辑器

每当在讲课时遇到需要让学生记住的知识点时,为了能让他们打起精神来,我都会突然提高嗓门,因此有句话他们记得尤其深刻:“在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数”。而且在日常工作中大家也肯定免不了要编写文档,这些工作都是通过文本编辑器来完成的。刘遄老师写作本书的目的是让读者切实掌握Linux系统的运维方法,而不是仅仅停留在“会用某个操作系统”的层面上,所以我们这里选择使用Vim文本编辑器,它默认会安装在当前所有的Linux操作系统上,是一款超棒的文本编辑器。

Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法(见图4-1)。

命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。

输入模式:正常的文本录入。

末行模式:保存或退出文档,以及设置编辑环境。

vim不同模式间的切换

图4-1 Vim编辑器模式的切换方法

在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。Vim编辑器中内置的命令有成百上千种用法,为了能够帮助读者更快地掌握Vim编辑器,表4-1总结了在命令模式中最常用的一些命令。

表4-1 Vim中常用的命令

命令作用
dd删除(剪切)光标所在整行
5dd删除(剪切)从光标处开始的5行
yy复制光标所在整行
5yy复制从光标处开始的5行
n显示搜索命令定位到的下一个字符串
N显示搜索命令定位到的上一个字符串
u撤销上一步的操作
p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

末行模式主要用于保存或退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中输入一个冒号就可以了。末行模式中可用的命令如表4-2所示。

表4-2 末行模式中可用的命令

命令作用
:w保存
:q退出
:q!强制退出(放弃对文档的修改内容)
:wq!强制保存退出
:set nu显示行号
:set nonu不显示行号
:命令执行该命令
:整数跳转到该行
:s/one/two将当前光标所在行的第一个one替换成two
:s/one/two/g将当前光标所在行的所有one替换成two
:%s/one/two/g将全文中的所有one替换成two
?字符串在文本中从下至上搜索该字符串
/字符串在文本中从上至下搜索该字符串

4.1.1 编写简单文档

目前为止,大家已经具备了在Linux系统中编写文档的理论基础了,接下来我们一起动手编写一个简单的脚本文档。刘遄老师会尽力把所有操作步骤和按键过程都标注出来,如果忘记了某些快捷键命令的作用,可以再返回前文进行复习。

编写脚本文档的第1步就是给文档取个名字,这里将其命名为practice.txt。如果存在该文档,则是打开它。如果不存在,则是创建一个临时的输入文件,如图4-2所示。

第1步:创建文档。

图4-2 尝试编写脚本文档

打开practice.txt文档后,默认进入的是Vim编辑器的命令模式。此时只能执行该模式下的命令,而不能随意输入文本内容,我们需要切换到输入模式才可以编写文档。

在图4-1中提到,可以分别使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光标的下面再创建一个空行,此时可敲击a键进入到编辑器的输入模式,如图4-3所示。

第2步:敲击字母“a”,进入输入模式。

图4-3 切换至编辑器的输入模式

进入输入模式后,可以随意输入文本内容,Vim编辑器不会把您输入的文本内容当作命令而执行,如图4-4所示。

第3步:输入一行字符。

图4-4 在编辑器中输入文本内容

在编写完之后,想要保存并退出,必须先敲击键盘Esc键从输入模式返回命令模式,如图4-5所示。然后再输入:wq!切换到末行模式才能完成保存退出操作,如图4-6所示。

第4步:敲击[ESC]返回到命令模式。

图4-5 Vim编辑器的命令模式

第5步:敲击“:wq”,保存并退出。

图4-6 Vim编辑器的末行模式

当在末行模式中输入:wq!命令时,就意味着强制保存并退出文档。然后便可以用cat命令查看保存后的文档内容了,如图4-7所示。

第6步:查看文档的内容。

图4-7 查看文档的内容

是不是很简单?!继续编辑这个文档。因为要在原有文本内容的下面追加内容,所以在命令模式中敲击o键进入输入模式更会高效,操作如图4-8、图4-9与图4-10所示。

第7步:编辑文件。

图4-8 再次通过Vim编辑器编写文档

第8步:敲击字母“o”,进入到输入模式。

图4-9 进入Vim编辑器的输入模式

第9步:输入一行字符。

图4-10 追加写入一行文本内容

因为此时已经修改了文本内容,所以Vim编辑器在我们尝试直接退出文档而不保存的时候就会拒绝我们的操作了。此时只能强制退出才可以结束本次输入操作,如图4-11、图4-12和图4-13所示。

第10步:返回命令模式后尝试“:q”退出不保存。

图4-11 尝试退出文本编辑器

第11步:提示内容已被修改,不能退出。

图4-12 因文件已被修改而拒绝退出操作

现在大家也算是具有了一些Vim编辑器的实战经验了,应该也感觉没有想象中那么难吧。现在查看文本的内容,果然发现追加输入的内容并没有被保存下来,如图4-14所示。

大家在学完了理论知识之后又自己动手编写了一个文本,现在是否感觉成就满满呢?接下来将会由浅入深为读者安排三个小任务。为了彻底掌握Vim编辑器的使用,大家一定要逐个完成不许偷懒,如果在完成这三个任务期间忘记了相关命令,可返回前文进一步复习掌握。

第12步:敲击“:q!”后强制退出不保存。

图4-13 强制退出文本编辑器

第13步:查看文档,发现第二句确实没保存。

图4-14 查看最终编写成的文本内容

4.1.2 配置主机名称

为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在Linux系统中,主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“linuxprobe.com”,步骤如下。

第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。

第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。

第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。

  1. [root@linuxprobe ~]# vim /etc/hostname
  2. linuxprobe.com

hostname命令用于查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看:

  1. [root@linuxprobe ~]# hostname
  2. linuxprobe.com

4.1.3 配置网卡信息

网卡IP地址配置的是否正确是两台服务器是否可以相互通信的前提。在Linux系统中,一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件,因此这个小任务不仅可以帮助您练习使用Vim编辑器,而且也为您后面学习Linux中的各种服务配置打下了坚实的基础。当您认真学习完本书后,一定会特别有成就感,因为本书前面的基础部分非常扎实,而后面内容则具有几乎一致的网卡IP地址和运行环境,从而确保您全身心地投入到各类服务程序的学习上,而不用操心系统环境的问题。

如果您具备一定的运维经验或者熟悉早期的Linux系统,则在学习本书时会遇到一些不容易接受的差异变化。在RHEL 5、RHEL 6中,网卡配置文件的前缀为eth,第1块网卡为eth0,第2块网卡为eth1;以此类推。而在RHEL 7中,网卡配置文件的前缀则以ifcfg开始,加上网卡名称共同组成了网卡配置文件的名字,例如ifcfg-eno16777736;好在除了文件名变化外也没有其他大的区别。

现在有一个名称为ifcfg-eno16777736的网卡设备,我们将其配置为开机自启动,并且IP地址、子网、网关等信息由人工指定,其步骤应该如下所示。

第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。

第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称。

设备类型:TYPE=Ethernet

地址分配模式:BOOTPROTO=static

网卡名称:NAME=eno16777736

是否启动:ONBOOT=yes

IP地址:IPADDR=192.168.10.10

子网掩码:NETMASK=255.255.255.0

网关地址:GATEWAY=192.168.10.1

DNS地址:DNS1=192.168.10.1

第3步:重启网络服务并测试网络是否联通。

进入到网卡配置文件所在的目录,然后编辑网卡配置文件,在其中填入下面的信息:

  1. [root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
  2. [root@linuxprobe network-scripts]# vim ifcfg-eno16777736
  3. TYPE=Ethernet
  4. BOOTPROTO=static
  5. NAME=eno16777736
  6. ONBOOT=yes
  7. IPADDR=192.168.10.10
  8. NETMASK=255.255.255.0
  9. GATEWAY=192.168.10.1
  10. DNS1=192.168.10.1

执行重启网卡设备的命令(在正常情况下不会有提示信息),然后通过ping命令测试网络能否联通。由于在Linux系统中ping命令不会自动终止,因此需要手动按下Ctrl-c键来强行结束进程。

  1. [root@linuxprobe network-scripts]# systemctl restart network
  2. [root@linuxprobe network-scripts]# ping 192.168.10.10
  3. PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
  4. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.081 ms
  5. 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.083 ms
  6. 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.059 ms
  7. 64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.097 ms
  8. ^C
  9. --- 192.168.10.10 ping statistics ---
  10. 4 packets transmitted, 4 received, 0% packet loss, time 2999ms
  11. rtt min/avg/max/mdev = 0.059/0.080/0.097/0.013 ms

4.1.4 配置Yum仓库

本书前面讲到,Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。可以把Yum想象成是一个硕大的软件仓库,里面保存有几乎所有常用的工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。

既然要使用Yum软件仓库,就要先把它搭建起来,然后将其配置规则确定好才行。鉴于第6章才会讲解Linux的存储结构和设备挂载操作,所以我们当前还是将重心放到Vim编辑器的学习上。如果遇到看不懂的参数也不要紧,后面章节会单独讲解。搭建并配置Yum软件仓库的大致步骤如下所示。

第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。

第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)。

[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。

name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。

baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。

enabled=1:设置此源是否可用;1为可用,0为禁用。

gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。

第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。

第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。

进入/etc/yum.repos.d目录中后创建Yum配置文件:

  1. [root@linuxprobe ~]# cd /etc/yum.repos.d/
  2. [root@linuxprobe yum.repos.d]# vim rhel7.repo
  3. [rhel7]
  4. name=rhel7
  5. baseurl=file:///media/cdrom
  6. enabled=1
  7. gpgcheck=0

创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正确:

  1. [root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
  2. [root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
  3. mount: /dev/sr0 is write-protected, mounting read-only
  4. [root@linuxprobe yum.repos.d]# vim /etc/fstab
  5. /dev/cdrom /media/cdrom iso9660 defaults 0 0
  6. [root@linuxprobe ~]# yum install httpd
  7. Loaded plugins: langpacks, product-id, subscription-manager
  8. ………………省略部分输出信息………………
  9. Dependencies Resolved
  10. ================================================================================
  11. Package Arch Version Repository Size
  12. ================================================================================
  13. Installing:
  14. httpd x86_64 2.4.6-17.el7 rhel 1.2 M
  15. Installing for dependencies:
  16. apr x86_64 1.4.8-3.el7 rhel 103 k
  17. apr-util x86_64 1.5.2-6.el7 rhel 92 k
  18. httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
  19. mailcap noarch 2.1.41-2.el7 rhel 31 k
  20. Transaction Summary
  21. ================================================================================
  22. Install 1 Package (+4 Dependent packages)
  23. Total download size: 1.5 M
  24. Installed size: 4.3 M
  25. Is this ok [y/d/N]: y
  26. Downloading packages:
  27. --------------------------------------------------------------------------------
  28. ………………省略部分输出信息………………
  29. Complete!

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。